{{_ "You_are_not_authorized_to_view_this_page"}}
- {{else}} - {{#if isPreparing}} - {{> loading}} - {{else}} - - - - {{#if canShowCurrentOperation}} -diff --git a/.meteor/packages b/.meteor/packages
index 32a7650706e9..84ee48c2bc9e 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -66,7 +66,6 @@ nooitaf:colors
ostrio:cookies
pauli:accounts-linkedin
raix:handlebar-helpers
-rocketchat:push
raix:ui-dropped-event
rocketchat:tap-i18n
@@ -87,7 +86,6 @@ matb33:collection-hooks
meteorhacks:inject-initial
oauth@1.2.8
oauth2@1.2.1
-raix:eventemitter
routepolicy@1.1.0
sha@1.0.9
templating
diff --git a/.meteor/versions b/.meteor/versions
index edfb768fcbb4..02e97dbc384a 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -114,7 +114,6 @@ pauli:accounts-linkedin@5.0.0
pauli:linkedin-oauth@5.0.0
promise@0.11.2
raix:eventemitter@0.1.3
-raix:eventstate@0.0.4
raix:handlebar-helpers@0.2.5
raix:ui-dropped-event@0.0.7
random@1.1.0
@@ -127,7 +126,6 @@ rocketchat:i18n@0.0.1
rocketchat:livechat@0.0.1
rocketchat:mongo-config@0.0.1
rocketchat:oauth2-server@2.1.0
-rocketchat:push@3.3.1
rocketchat:streamer@1.1.0
rocketchat:tap-i18n@1.9.1
rocketchat:version@1.0.0
diff --git a/.storybook/.babelrc b/.storybook/.babelrc
index 826e22a858c5..97ab12b7f950 100644
--- a/.storybook/.babelrc
+++ b/.storybook/.babelrc
@@ -13,6 +13,7 @@
"@babel/preset-flow"
],
"plugins": [
- "@babel/plugin-proposal-class-properties"
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-proposal-optional-chaining"
]
}
diff --git a/.storybook/config.js b/.storybook/config.js
index 420f7df4a6dc..c7fb95b21240 100644
--- a/.storybook/config.js
+++ b/.storybook/config.js
@@ -1,16 +1,12 @@
import { withKnobs } from '@storybook/addon-knobs';
-import { MINIMAL_VIEWPORTS, INITIAL_VIEWPORTS } from '@storybook/addon-viewport/dist/defaults';
+import { MINIMAL_VIEWPORTS } from '@storybook/addon-viewport/dist/defaults';
import { addDecorator, addParameters, configure } from '@storybook/react';
import { rocketChatDecorator } from './mocks/decorators';
addParameters({
viewport: {
- viewports: {
- ...MINIMAL_VIEWPORTS,
- ...INITIAL_VIEWPORTS,
- },
- defaultViewport: 'responsive',
+ viewports: MINIMAL_VIEWPORTS,
},
});
diff --git a/app/api/server/v1/push.js b/app/api/server/v1/push.js
index 6c1c9959011a..9e3c8d59b325 100644
--- a/app/api/server/v1/push.js
+++ b/app/api/server/v1/push.js
@@ -1,7 +1,7 @@
import { Meteor } from 'meteor/meteor';
import { Random } from 'meteor/random';
-import { Push } from 'meteor/rocketchat:push';
+import { appTokensCollection } from '../../../push/server';
import { API } from '../api';
API.v1.addRoute('push.token', { authRequired: true }, {
@@ -47,7 +47,7 @@ API.v1.addRoute('push.token', { authRequired: true }, {
throw new Meteor.Error('error-token-param-not-valid', 'The required "token" body param is missing or invalid.');
}
- const affectedRecords = Push.appCollection.remove({
+ const affectedRecords = appTokensCollection.remove({
$or: [{
'token.apn': token,
}, {
diff --git a/app/apps/server/bridges/rooms.js b/app/apps/server/bridges/rooms.js
index d8bc4e76d4ac..a91d8b2105ad 100644
--- a/app/apps/server/bridges/rooms.js
+++ b/app/apps/server/bridges/rooms.js
@@ -1,8 +1,8 @@
-import { Meteor } from 'meteor/meteor';
import { RoomType } from '@rocket.chat/apps-engine/definition/rooms';
+import { Meteor } from 'meteor/meteor';
-import { Rooms, Subscriptions, Users } from '../../../models/server';
import { addUserToRoom } from '../../../lib/server/functions/addUserToRoom';
+import { Rooms, Subscriptions, Users } from '../../../models/server';
export class AppRoomBridge {
constructor(orch) {
@@ -120,4 +120,35 @@ export class AppRoomBridge {
addUserToRoom(rm._id, member);
}
}
+
+ async createDiscussion(room, parentMessage = null, reply = '', members = [], appId) {
+ this.orch.debugLog(`The App ${ appId } is creating a new discussion.`, room);
+
+ const rcRoom = this.orch.getConverters().get('rooms').convertAppRoom(room);
+
+ let rcMessage;
+ if (parentMessage) {
+ rcMessage = this.orch.getConverters().get('messages').convertAppMessage(parentMessage);
+ }
+
+ if (!rcRoom.prid || !Rooms.findOneById(rcRoom.prid)) {
+ throw new Error('There must be a parent room to create a discussion.');
+ }
+
+ const discussion = {
+ prid: rcRoom.prid,
+ t_name: rcRoom.fname,
+ pmid: rcMessage ? rcMessage._id : undefined,
+ reply: reply && reply.trim() !== '' ? reply : undefined,
+ users: members.length > 0 ? members : [],
+ };
+
+ let rid;
+ Meteor.runAsUser(room.creator.id, () => {
+ const info = Meteor.call('createDiscussion', discussion);
+ rid = info.rid;
+ });
+
+ return rid;
+ }
}
diff --git a/app/apps/server/converters/rooms.js b/app/apps/server/converters/rooms.js
index a511f471d256..8c8aedbe1448 100644
--- a/app/apps/server/converters/rooms.js
+++ b/app/apps/server/converters/rooms.js
@@ -91,6 +91,7 @@ export class AppRoomsConverter {
closedAt: room.closedAt,
lm: room.lastModifiedAt,
customFields: room.customFields,
+ prid: typeof room.parentRoom === 'undefined' ? undefined : room.parentRoom.id,
};
return Object.assign(newRoom, room._unmappedProperties_);
@@ -195,7 +196,17 @@ export class AppRoomsConverter {
return this.orch.getConverters().get('users').convertById(responseBy._id);
},
+ parentRoom: (room) => {
+ const { prid } = room;
+ if (!prid) {
+ return undefined;
+ }
+
+ delete room.prid;
+
+ return this.orch.getConverters().get('rooms').convertById(prid);
+ },
};
return transformMappedData(room, map);
diff --git a/app/authorization/server/functions/hasPermission.js b/app/authorization/server/functions/hasPermission.js
index 7077e0220c9e..141b16008b99 100644
--- a/app/authorization/server/functions/hasPermission.js
+++ b/app/authorization/server/functions/hasPermission.js
@@ -5,7 +5,7 @@ import { Permissions, Users, Subscriptions } from '../../../models/server/raw';
const rolesHasPermission = mem(async (permission, roles) => {
const result = await Permissions.findOne({ _id: permission, roles: { $in: roles } });
return !!result;
-});
+}, process.env.TEST_MODE === 'true' ? { maxAge: 0 } : undefined);
const getRoles = mem(async (uid, scope) => {
const { roles: userRoles = [] } = await Users.findOne({ _id: uid });
diff --git a/app/emoji-emojione/lib/rocketchat.js b/app/emoji-emojione/lib/rocketchat.js
index b9e9aafb33b3..8632dcdd4fd3 100644
--- a/app/emoji-emojione/lib/rocketchat.js
+++ b/app/emoji-emojione/lib/rocketchat.js
@@ -167,8 +167,9 @@ emojione.emojioneList[':asterisk_symbol:'] = {
// fix for :+1: - had to replace all function that does its conversion: https://github.com/joypixels/emojione/blob/4.5.0/lib/js/emojione.js#L249
(function(ns) {
- ns.shortnameConversionMap = mem(ns.shortnameConversionMap);
- ns.unicodeCharRegex = mem(ns.unicodeCharRegex);
+ ns.shortnameConversionMap = mem(ns.shortnameConversionMap, { maxAge: 1000 });
+
+ ns.unicodeCharRegex = mem(ns.unicodeCharRegex, { maxAge: 1000 });
const convertShortName = mem(function(shortname) {
// the fix is basically adding this .replace(/[+]/g, '\\$&')
@@ -202,7 +203,7 @@ emojione.emojioneList[':asterisk_symbol:'] = {
return `${ alt }`;
}
return ` {{_ "You_are_not_authorized_to_view_this_page"}} {{_ "You_are_not_authorized_to_view_this_page"}} {{_ "You_are_not_authorized_to_view_this_page"}} {{step}} {{completed}} / {{total}} {{progressRate}} {{_ "You_can_close_this_window_now"}}`;
- });
+ }, { maxAge: 1000 });
const convertUnicode = mem(function(entire, m1, m2, m3) {
const mappedUnicode = ns.mapUnicodeToShort();
@@ -228,7 +229,7 @@ emojione.emojioneList[':asterisk_symbol:'] = {
return `${ m2 }${ alt }`;
}
return `${ m2 }
`;
- });
+ }, { maxAge: 1000 });
ns.shortnameToImage = function(str) {
// replace regular shortnames first
diff --git a/app/importer/client/admin/adminImport.html b/app/importer/client/admin/adminImport.html
deleted file mode 100644
index 87fc49ab06d6..000000000000
--- a/app/importer/client/admin/adminImport.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
{{_ "Current_Import_Operation"}}
- {{_ "Recent_Import_History"}}
-
-
- {{#unless hasPermission 'run-import'}}
-
-
- {{_ "Actions"}}
- {{_ "Messages"}}: {{message_count}}
- {{_ "Users"}}
-
- {{#each users}}
- {{#unless is_bot}}
-
- {{_ "Channels"}}
-
- {{#each channels}}
-
-
+
+