[BREAK] Remove deprecated endpoints (#23162)

pull/22542/head
Diego Sampaio 4 years ago committed by GitHub
parent 485d403dbf
commit d2f70b9e41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      app/api/server/v1/emoji-custom.js
  2. 34
      app/api/server/v1/misc.js
  3. 34
      app/api/server/v1/permissions.js
  4. 41
      app/lib/server/functions/getFullUserData.js
  5. 1
      app/lib/server/functions/index.js
  6. 2
      app/lib/server/index.js
  7. 17
      app/lib/server/methods/getFullUserData.js
  8. 14
      app/lib/server/methods/getServerInfo.js
  9. 1
      app/livechat/server/index.js
  10. 21
      app/livechat/server/methods/saveOfficeHours.js
  11. 26
      app/models/server/models/Avatars.js
  12. 15
      app/models/server/raw/LivechatBusinessHours.ts
  13. 41
      tests/end-to-end/api/11-permissions.js
  14. 22
      tests/end-to-end/api/12-emoji-custom.js

@ -6,25 +6,6 @@ import { getUploadFormData } from '../lib/getUploadFormData';
import { findEmojisCustom } from '../lib/emoji-custom';
import { Media } from '../../../../server/sdk';
// DEPRECATED
// Will be removed after v3.0.0
API.v1.addRoute('emoji-custom', { authRequired: true }, {
get() {
const warningMessage = 'The endpoint "emoji-custom" is deprecated and will be removed after version v3.0.0';
console.warn(warningMessage);
const { query } = this.parseJsonQuery();
const emojis = Meteor.call('listEmojiCustom', query);
return API.v1.success(this.deprecationWarning({
endpoint: 'emoji-custom',
versionWillBeRemoved: '3.0.0',
response: {
emojis,
},
}));
},
});
API.v1.addRoute('emoji-custom.list', { authRequired: true }, {
get() {
const { query } = this.parseJsonQuery();

@ -7,8 +7,7 @@ import { EJSON } from 'meteor/ejson';
import { DDPRateLimiter } from 'meteor/ddp-rate-limiter';
import { escapeHTML } from '@rocket.chat/string-helpers';
import { hasRole, hasPermission } from '../../../authorization/server';
import { Info } from '../../../utils/server';
import { hasPermission } from '../../../authorization/server';
import { Users } from '../../../models/server';
import { settings } from '../../../settings/server';
import { API } from '../api';
@ -17,37 +16,6 @@ import { getURL } from '../../../utils/lib/getURL';
import { StdOut } from '../../../logger/server/streamer';
import { SystemLogger } from '../../../../server/lib/logger/system';
// DEPRECATED
// Will be removed after v3.0.0
API.v1.addRoute('info', { authRequired: false }, {
get() {
const warningMessage = 'The endpoint "/v1/info" is deprecated and will be removed after version v3.0.0';
console.warn(warningMessage);
const user = this.getLoggedInUser();
if (user && hasRole(user._id, 'admin')) {
return API.v1.success(this.deprecationWarning({
endpoint: 'info',
versionWillBeRemoved: '3.0.0',
response: {
info: Info,
},
}));
}
return API.v1.success(this.deprecationWarning({
endpoint: 'info',
versionWillBeRemoved: '3.0.0',
response: {
info: {
version: Info.version,
},
},
}));
},
});
API.v1.addRoute('me', { authRequired: true }, {
get() {
const fields = getDefaultUserFields();

@ -5,40 +5,6 @@ import { hasPermission } from '../../../authorization';
import { Permissions, Roles } from '../../../models/server';
import { API } from '../api';
/**
This API returns all permissions that exists
on the server, with respective roles.
Method: GET
Route: api/v1/permissions
*/
API.v1.addRoute('permissions', { authRequired: true }, {
get() {
const warningMessage = 'The endpoint "permissions" is deprecated and will be removed after version v0.69';
console.warn(warningMessage);
const result = Meteor.runAsUser(this.userId, () => Meteor.call('permissions/get'));
return API.v1.success(result);
},
});
// DEPRECATED
// TODO: Remove this after three versions have been released. That means at 0.85 this should be gone.
API.v1.addRoute('permissions.list', { authRequired: true }, {
get() {
const result = Meteor.runAsUser(this.userId, () => Meteor.call('permissions/get'));
return API.v1.success(this.deprecationWarning({
endpoint: 'permissions.list',
versionWillBeRemoved: '0.85',
response: {
permissions: result,
},
}));
},
});
API.v1.addRoute('permissions.listAll', { authRequired: true }, {
get() {
const { updatedSince } = this.queryParams;

@ -1,6 +1,3 @@
import s from 'underscore.string';
import { escapeRegExp } from '@rocket.chat/string-helpers';
import { Logger } from '../../../logger';
import { settings } from '../../../settings';
import { Users } from '../../../models/server';
@ -96,41 +93,3 @@ export function getFullUserDataByIdOrUsername({ userId, filterId, filterUsername
return myself ? user : removePasswordInfo(user);
}
export const getFullUserData = function({ userId, filter, limit: l }) {
const username = s.trim(filter);
const userToRetrieveFullUserData = username && Users.findOneByUsername(username, { fields: { username: 1 } });
if (!userToRetrieveFullUserData) {
return;
}
const isMyOwnInfo = userToRetrieveFullUserData && userToRetrieveFullUserData._id === userId;
const viewFullOtherUserInfo = hasPermission(userId, 'view-full-other-user-info');
const canViewAllInfo = isMyOwnInfo || viewFullOtherUserInfo;
const limit = !viewFullOtherUserInfo ? 1 : l;
if (!username && limit <= 1) {
return undefined;
}
const fields = getFields(canViewAllInfo);
const options = {
fields,
limit,
sort: { username: 1 },
};
if (!username) {
return Users.find({}, options);
}
if (limit === 1) {
return Users.findByUsername(userToRetrieveFullUserData.username, options);
}
const usernameReg = new RegExp(escapeRegExp(username), 'i');
return Users.findByUsernameNameOrEmailAddress(usernameReg, options);
};

@ -10,7 +10,6 @@ export { createDirectRoom } from './createDirectRoom';
export { deleteMessage } from './deleteMessage';
export { deleteRoom } from './deleteRoom';
export { deleteUser } from './deleteUser';
export { getFullUserData } from './getFullUserData';
export { getRoomByNameOrIdWithOptionToJoin } from './getRoomByNameOrIdWithOptionToJoin';
export { getUserSingleOwnedRooms } from './getUserSingleOwnedRooms';
export { generateUsernameSuggestion } from './getUsernameSuggestion';

@ -35,10 +35,8 @@ import './methods/filterATAllTag';
import './methods/filterATHereTag';
import './methods/filterBadWords';
import './methods/getChannelHistory';
import './methods/getFullUserData';
import './methods/getRoomJoinCode';
import './methods/getRoomRoles';
import './methods/getServerInfo';
import './methods/getSingleMessage';
import './methods/getMessages';
import './methods/getSlashCommandPreviews';

@ -1,17 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { getFullUserData } from '../functions';
Meteor.methods({
getFullUserData({ filter = '', username = '', limit = 1 }) {
console.warn('Method "getFullUserData" is deprecated and will be removed after v4.0.0');
if (!Meteor.userId()) {
throw new Meteor.Error('not-authorized');
}
const result = getFullUserData({ userId: Meteor.userId(), filter: filter || username, limit });
return result && result.fetch();
},
});

@ -1,14 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { Info } from '../../../utils';
Meteor.methods({
getServerInfo() {
if (!Meteor.userId()) {
console.warning('Method "getServerInfo" is deprecated and will be removed after v4.0.0');
throw new Meteor.Error('not-authorized');
}
return Info;
},
});

@ -69,7 +69,6 @@ import './methods/setUpConnection';
import './methods/takeInquiry';
import './methods/requestTranscript';
import './methods/returnAsInquiry';
import './methods/saveOfficeHours';
import './methods/sendTranscript';
import './methods/getFirstRoomMessage';
import './methods/getTagsList';

@ -1,21 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { hasPermission } from '../../../authorization';
import { LivechatBusinessHours } from '../../../models/server/raw';
Meteor.methods({
'livechat:saveOfficeHours'(day, start, finish, open) {
console.warn('Method "livechat:saveOfficeHour" is deprecated and will be removed after v4.0.0');
if (!Meteor.userId() || !hasPermission(Meteor.userId(), 'view-livechat-business-hours')) {
throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:saveOfficeHours' });
}
LivechatBusinessHours.updateDayOfGlobalBusinessHour({
day,
start,
finish,
open,
});
},
});

@ -81,32 +81,6 @@ export class Avatars extends Base {
return this.update(filter, update);
}
// @TODO deprecated
updateFileCompleteByNameAndUserId(name, userId, url) {
if (!name) {
return;
}
const filter = {
name,
userId,
};
const update = {
$set: {
complete: true,
uploading: false,
progress: 1,
url,
},
};
if (this.model.direct && this.model.direct.update) {
return this.model.direct.update(filter, update);
}
return this.update(filter, update);
}
deleteFile(fileId) {
if (this.model.direct && this.model.direct.remove) {
return this.model.direct.remove({ _id: fileId });

@ -2,7 +2,6 @@ import { Collection, FindOneOptions, ObjectId, WithoutProjection } from 'mongodb
import { BaseRaw } from './BaseRaw';
import {
IBusinessHourWorkHour,
ILivechatBusinessHour,
LivechatBusinessHourTypes,
} from '../../../../definition/ILivechatBusinessHour';
@ -63,20 +62,6 @@ export class LivechatBusinessHoursRaw extends BaseRaw<ILivechatBusinessHour> {
});
}
// TODO: Remove this function after remove the deprecated method livechat:saveOfficeHours
async updateDayOfGlobalBusinessHour(day: Omit<IBusinessHourWorkHour, 'code'>): Promise<any> {
return this.col.updateOne({
type: LivechatBusinessHourTypes.DEFAULT,
'workHours.day': day.day,
}, {
$set: {
'workHours.$.start': day.start,
'workHours.$.finish': day.finish,
'workHours.$.open': day.open,
},
});
}
findHoursToScheduleJobs(): Promise<IWorkHoursCronJobsWrapper[]> {
return this.col.aggregate([
{

@ -7,47 +7,6 @@ describe('[Permissions]', function() {
before((done) => getCredentials(done));
// DEPRECATED
// TODO: Remove this after three versions have been released. That means at 0.69 this should be gone.
describe('[/permissions]', () => {
it('should return all permissions that exists on the server, with respective roles', (done) => {
request.get(api('permissions'))
.set(credentials)
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.be.a('array');
const firstElement = res.body[0];
expect(firstElement).to.have.property('_id');
expect(firstElement).to.have.property('roles').and.to.be.a('array');
expect(firstElement).to.have.property('_updatedAt');
})
.end(done);
});
});
// DEPRECATED
// TODO: Remove this after three versions have been released. That means at 0.85 this should be gone.
describe('[/permissions.list]', () => {
it('should return all permissions that exists on the server, with respective roles', (done) => {
request.get(api('permissions.list'))
.set(credentials)
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('success', true);
expect(res.body).to.have.property('permissions');
const firstElement = res.body.permissions[0];
expect(firstElement).to.have.property('_id');
expect(firstElement).to.have.property('roles').and.to.be.a('array');
expect(firstElement).to.have.property('_updatedAt');
})
.end(done);
});
});
describe('[/permissions.listAll]', () => {
it('should return an array with update and remove properties', (done) => {
request.get(api('permissions.listAll'))

@ -10,28 +10,6 @@ describe('[EmojiCustom]', function() {
this.retries(0);
before((done) => getCredentials(done));
// DEPRECATED
// Will be removed after v3.0.0
describe('[/emoji-custom]', () => {
it('should return emojis', (done) => {
request.get(api('emoji-custom'))
.set(credentials)
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('emojis').and.to.be.a('array');
})
.end(done);
});
it('should return emojis when use "query" query parameter', (done) => {
request.get(api('emoji-custom?query={"_updatedAt": {"$gt": { "$date": "2018-11-27T13:52:01Z" } }}'))
.set(credentials)
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('emojis').and.to.be.a('array');
})
.end(done);
});
});
describe('[/emoji-custom.create]', () => {
it('should create new custom emoji', (done) => {

Loading…
Cancel
Save