From 1aad2d72443a1d8cd5d2e4a27bc5c4190d770bc8 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 31 Oct 2018 10:20:37 -0300 Subject: [PATCH 01/79] [FIX] Email sending with GDPR user data (#12487) Related to #11914 --- .../server/cronProcessDownloads.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-user-data-download/server/cronProcessDownloads.js b/packages/rocketchat-user-data-download/server/cronProcessDownloads.js index 59af82a29b82..c275d807f1ae 100644 --- a/packages/rocketchat-user-data-download/server/cronProcessDownloads.js +++ b/packages/rocketchat-user-data-download/server/cronProcessDownloads.js @@ -291,7 +291,7 @@ const sendEmail = function(userId) { } const userData = RocketChat.models.Users.findOneById(userId); - if (!userData || userData.emails || userData.emails[0] || userData.emails[0].address) { + if (!userData || !userData.emails || !userData.emails[0] || !userData.emails[0].address) { return; } const emailAddress = `${ userData.name } <${ userData.emails[0].address }>`; From 4c87d58ad18254d5385aa9d44a6ee62889ef99ad Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 31 Oct 2018 10:36:06 -0300 Subject: [PATCH 02/79] Bump version to 0.71.1 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 14 ++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 4 ++-- .travis/snap.sh | 2 +- HISTORY.md | 15 +++++++++++++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 7 files changed, 35 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index c6b44eca8e78..3b8967f78965 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.71.0 +ENV RC_VERSION 0.71.1 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 516833eb61c0..6e93977d8328 100644 --- a/.github/history.json +++ b/.github/history.json @@ -20365,6 +20365,20 @@ ] } ] + }, + "0.71.1": { + "node_version": "8.11.3", + "npm_version": "5.6.0", + "pull_requests": [ + { + "pr": "12487", + "title": "[FIX] Email sending with GDPR user data", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + } + ] } } } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index ca9153130785..83bb35b7294a 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -19,9 +19,9 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Rocket.Chat"), - appVersion = 111, # Increment this for every release. + appVersion = 112, # Increment this for every release. - appMarketingVersion = (defaultText = "0.71.0"), + appMarketingVersion = (defaultText = "0.71.1"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index 906ef49f5558..2005bc709434 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.71.0 + RC_VERSION=0.71.1 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index dc82ffc88323..d99a6496e9a4 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,19 @@ +# 0.71.1 +`2018-10-31 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `8.11.3` +- NPM: `5.6.0` + +### 🐛 Bug fixes + +- Email sending with GDPR user data ([#12487](https://github.com/RocketChat/Rocket.Chat/pull/12487)) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@sampaiodiego](https://github.com/sampaiodiego) + # 0.71.0 `2018-10-27 · 2 ️️️⚠️ · 5 🎉 · 5 🚀 · 21 🐛 · 8 🔍 · 20 👩‍💻👨‍💻` diff --git a/package.json b/package.json index a5c190e9b53e..a94927fe149a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.71.0", + "version": "0.71.1", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 1f44098747f0..9951fabf5876 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.71.0" + "version": "0.71.1" } From fa79a2b3231f283f0b76b5752f11d904ab9656c0 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 16 Nov 2018 13:56:49 -0200 Subject: [PATCH 03/79] Fix crowd error with import of SyncedCron (#12641) --- packages/rocketchat-crowd/package.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rocketchat-crowd/package.js b/packages/rocketchat-crowd/package.js index 09e462205350..83c5bcd53537 100644 --- a/packages/rocketchat-crowd/package.js +++ b/packages/rocketchat-crowd/package.js @@ -14,6 +14,7 @@ Package.onUse(function(api) { 'templating', 'accounts-base', 'accounts-password', + 'littledata:synced-cron', ]); api.mainModule('client/index.js', 'client'); From 0b443b96c52a91cd1cdce27d9abeffc649f25379 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 14:00:16 -0200 Subject: [PATCH 04/79] Convert rocketchat-custom-sounds to main module structure (#12599) * Exposing SideNav variable from rocketchat-ui * Convert rocketchat-custom-sounds to main module structure * Fix RocketChatFileCustomSoundsInstance export * Revert wrong settings in custom-sounds --- .../client/admin/adminSounds.js | 2 + .../client/admin/soundEdit.js | 2 + .../client/admin/soundInfo.js | 2 + .../client/admin/startup.js | 2 + .../rocketchat-custom-sounds/client/index.js | 15 ++++++++ .../client/lib/CustomSounds.js | 1 + .../client/models/CustomSounds.js | 2 + .../client/notifications/deleteCustomSound.js | 1 + .../client/notifications/updateCustomSound.js | 1 + packages/rocketchat-custom-sounds/package.js | 38 ++----------------- .../rocketchat-custom-sounds/server/index.js | 9 +++++ .../server/methods/deleteCustomSound.js | 3 +- .../server/methods/insertOrUpdateSound.js | 3 +- .../server/methods/listCustomSounds.js | 1 + .../server/methods/uploadCustomSound.js | 4 +- .../server/models/CustomSounds.js | 2 + .../server/publications/customSounds.js | 1 + .../server/startup/custom-sounds.js | 9 +++-- .../server/startup/permissions.js | 1 + .../server/startup/settings.js | 2 + 20 files changed, 60 insertions(+), 41 deletions(-) create mode 100644 packages/rocketchat-custom-sounds/client/index.js create mode 100644 packages/rocketchat-custom-sounds/server/index.js diff --git a/packages/rocketchat-custom-sounds/client/admin/adminSounds.js b/packages/rocketchat-custom-sounds/client/admin/adminSounds.js index 8a6669d75a42..aeacec75b331 100644 --- a/packages/rocketchat-custom-sounds/client/admin/adminSounds.js +++ b/packages/rocketchat-custom-sounds/client/admin/adminSounds.js @@ -3,6 +3,8 @@ import { RocketChatTabBar } from 'meteor/rocketchat:lib'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { SideNav } from 'meteor/rocketchat:ui'; import s from 'underscore.string'; Template.adminSounds.helpers({ diff --git a/packages/rocketchat-custom-sounds/client/admin/soundEdit.js b/packages/rocketchat-custom-sounds/client/admin/soundEdit.js index 818548631a45..65594d0d0a2b 100644 --- a/packages/rocketchat-custom-sounds/client/admin/soundEdit.js +++ b/packages/rocketchat-custom-sounds/client/admin/soundEdit.js @@ -1,6 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import { t } from 'meteor/rocketchat:ui'; +import { handleError } from 'meteor/rocketchat:lib'; import toastr from 'toastr'; import s from 'underscore.string'; diff --git a/packages/rocketchat-custom-sounds/client/admin/soundInfo.js b/packages/rocketchat-custom-sounds/client/admin/soundInfo.js index 20ace93335fc..db3853e0b74e 100644 --- a/packages/rocketchat-custom-sounds/client/admin/soundInfo.js +++ b/packages/rocketchat-custom-sounds/client/admin/soundInfo.js @@ -1,6 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; +import { t, modal } from 'meteor/rocketchat:ui'; +import { handleError } from 'meteor/rocketchat:lib'; Template.soundInfo.helpers({ name() { diff --git a/packages/rocketchat-custom-sounds/client/admin/startup.js b/packages/rocketchat-custom-sounds/client/admin/startup.js index e17d7389925b..c9e888e96850 100644 --- a/packages/rocketchat-custom-sounds/client/admin/startup.js +++ b/packages/rocketchat-custom-sounds/client/admin/startup.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.AdminBox.addOption({ href: 'custom-sounds', i18nLabel: 'Custom_Sounds', diff --git a/packages/rocketchat-custom-sounds/client/index.js b/packages/rocketchat-custom-sounds/client/index.js new file mode 100644 index 000000000000..204f894d7b3a --- /dev/null +++ b/packages/rocketchat-custom-sounds/client/index.js @@ -0,0 +1,15 @@ +import '../assets/stylesheets/customSoundsAdmin.css'; +import './lib/CustomSounds'; +import './models/CustomSounds'; +import './notifications/deleteCustomSound'; +import './notifications/updateCustomSound'; +import './admin/adminSoundEdit.html'; +import './admin/adminSoundInfo.html'; +import './admin/adminSounds.html'; +import './admin/adminSounds'; +import './admin/soundEdit.html'; +import './admin/soundEdit'; +import './admin/soundInfo.html'; +import './admin/soundInfo'; +import './admin/route'; +import './admin/startup'; diff --git a/packages/rocketchat-custom-sounds/client/lib/CustomSounds.js b/packages/rocketchat-custom-sounds/client/lib/CustomSounds.js index 5f3775b10256..69bf7c7c6acb 100644 --- a/packages/rocketchat-custom-sounds/client/lib/CustomSounds.js +++ b/packages/rocketchat-custom-sounds/client/lib/CustomSounds.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; +import { RocketChat } from 'meteor/rocketchat:lib'; import _ from 'underscore'; class CustomSounds { diff --git a/packages/rocketchat-custom-sounds/client/models/CustomSounds.js b/packages/rocketchat-custom-sounds/client/models/CustomSounds.js index 59c847dd1b79..b43ee109d9f7 100644 --- a/packages/rocketchat-custom-sounds/client/models/CustomSounds.js +++ b/packages/rocketchat-custom-sounds/client/models/CustomSounds.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + class CustomSounds extends RocketChat.models._Base { constructor() { super(); diff --git a/packages/rocketchat-custom-sounds/client/notifications/deleteCustomSound.js b/packages/rocketchat-custom-sounds/client/notifications/deleteCustomSound.js index 7ddde5d45c1b..91560d7d28df 100644 --- a/packages/rocketchat-custom-sounds/client/notifications/deleteCustomSound.js +++ b/packages/rocketchat-custom-sounds/client/notifications/deleteCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.startup(() => RocketChat.CachedCollectionManager.onLogin(() => diff --git a/packages/rocketchat-custom-sounds/client/notifications/updateCustomSound.js b/packages/rocketchat-custom-sounds/client/notifications/updateCustomSound.js index 75a65b6cbdeb..75903369bd06 100644 --- a/packages/rocketchat-custom-sounds/client/notifications/updateCustomSound.js +++ b/packages/rocketchat-custom-sounds/client/notifications/updateCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.startup(() => RocketChat.CachedCollectionManager.onLogin(() => diff --git a/packages/rocketchat-custom-sounds/package.js b/packages/rocketchat-custom-sounds/package.js index ff5f1505b424..afd358d9bf4e 100644 --- a/packages/rocketchat-custom-sounds/package.js +++ b/packages/rocketchat-custom-sounds/package.js @@ -13,40 +13,10 @@ Package.onUse(function(api) { 'templating', 'reactive-var', 'webapp', + 'kadira:flow-router', + 'kadira:blaze-layout', ]); - api.use('kadira:flow-router', 'client'); - api.use('kadira:blaze-layout', 'client'); - - api.addFiles('server/startup/custom-sounds.js', 'server'); - api.addFiles('server/startup/permissions.js', 'server'); - api.addFiles('server/startup/settings.js', 'server'); - - api.addFiles('server/models/CustomSounds.js', 'server'); - api.addFiles('server/publications/customSounds.js', 'server'); - - api.addFiles([ - 'server/methods/deleteCustomSound.js', - 'server/methods/insertOrUpdateSound.js', - 'server/methods/listCustomSounds.js', - 'server/methods/uploadCustomSound.js', - ], 'server'); - - api.addFiles('assets/stylesheets/customSoundsAdmin.css', 'client'); - - api.addFiles('client/admin/startup.js', 'client'); - api.addFiles('client/admin/adminSounds.html', 'client'); - api.addFiles('client/admin/adminSounds.js', 'client'); - api.addFiles('client/admin/adminSoundEdit.html', 'client'); - api.addFiles('client/admin/adminSoundInfo.html', 'client'); - api.addFiles('client/admin/soundEdit.html', 'client'); - api.addFiles('client/admin/soundEdit.js', 'client'); - api.addFiles('client/admin/soundInfo.html', 'client'); - api.addFiles('client/admin/soundInfo.js', 'client'); - api.addFiles('client/admin/route.js', 'client'); - - api.addFiles('client/lib/CustomSounds.js', 'client'); - api.addFiles('client/models/CustomSounds.js', 'client'); - api.addFiles('client/notifications/updateCustomSound.js', 'client'); - api.addFiles('client/notifications/deleteCustomSound.js', 'client'); + api.mainModule('client/index.js', 'client'); + api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-custom-sounds/server/index.js b/packages/rocketchat-custom-sounds/server/index.js new file mode 100644 index 000000000000..9caeb06c2abe --- /dev/null +++ b/packages/rocketchat-custom-sounds/server/index.js @@ -0,0 +1,9 @@ +import './startup/custom-sounds'; +import './startup/permissions'; +import './startup/settings'; +import './models/CustomSounds'; +import './methods/deleteCustomSound'; +import './methods/insertOrUpdateSound'; +import './methods/listCustomSounds'; +import './methods/uploadCustomSound'; +import './publications/customSounds'; diff --git a/packages/rocketchat-custom-sounds/server/methods/deleteCustomSound.js b/packages/rocketchat-custom-sounds/server/methods/deleteCustomSound.js index b6aba7a7b17f..d74871c90ca9 100644 --- a/packages/rocketchat-custom-sounds/server/methods/deleteCustomSound.js +++ b/packages/rocketchat-custom-sounds/server/methods/deleteCustomSound.js @@ -1,5 +1,6 @@ -/* globals RocketChatFileCustomSoundsInstance */ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; Meteor.methods({ deleteCustomSound(_id) { diff --git a/packages/rocketchat-custom-sounds/server/methods/insertOrUpdateSound.js b/packages/rocketchat-custom-sounds/server/methods/insertOrUpdateSound.js index e5b91e95d6e2..cad6c03d1e85 100644 --- a/packages/rocketchat-custom-sounds/server/methods/insertOrUpdateSound.js +++ b/packages/rocketchat-custom-sounds/server/methods/insertOrUpdateSound.js @@ -1,5 +1,6 @@ -/* globals RocketChatFileCustomSoundsInstance */ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; import s from 'underscore.string'; Meteor.methods({ diff --git a/packages/rocketchat-custom-sounds/server/methods/listCustomSounds.js b/packages/rocketchat-custom-sounds/server/methods/listCustomSounds.js index 9aeb28d8b45f..9b38e382fbd1 100644 --- a/packages/rocketchat-custom-sounds/server/methods/listCustomSounds.js +++ b/packages/rocketchat-custom-sounds/server/methods/listCustomSounds.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.methods({ listCustomSounds() { diff --git a/packages/rocketchat-custom-sounds/server/methods/uploadCustomSound.js b/packages/rocketchat-custom-sounds/server/methods/uploadCustomSound.js index 2c530c383f8c..2cc8bf2404a9 100644 --- a/packages/rocketchat-custom-sounds/server/methods/uploadCustomSound.js +++ b/packages/rocketchat-custom-sounds/server/methods/uploadCustomSound.js @@ -1,5 +1,7 @@ -/* globals RocketChatFileCustomSoundsInstance */ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { RocketChatFile } from 'meteor/rocketchat:file'; +import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; Meteor.methods({ uploadCustomSound(binaryContent, contentType, soundData) { diff --git a/packages/rocketchat-custom-sounds/server/models/CustomSounds.js b/packages/rocketchat-custom-sounds/server/models/CustomSounds.js index 8447d7d5e750..9c05dab8a6fa 100644 --- a/packages/rocketchat-custom-sounds/server/models/CustomSounds.js +++ b/packages/rocketchat-custom-sounds/server/models/CustomSounds.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + class CustomSounds extends RocketChat.models._Base { constructor() { super('custom_sounds'); diff --git a/packages/rocketchat-custom-sounds/server/publications/customSounds.js b/packages/rocketchat-custom-sounds/server/publications/customSounds.js index b474e416ebb9..2da7176ef499 100644 --- a/packages/rocketchat-custom-sounds/server/publications/customSounds.js +++ b/packages/rocketchat-custom-sounds/server/publications/customSounds.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; import s from 'underscore.string'; Meteor.publish('customSounds', function(filter, limit) { diff --git a/packages/rocketchat-custom-sounds/server/startup/custom-sounds.js b/packages/rocketchat-custom-sounds/server/startup/custom-sounds.js index 226ed972cbfe..1d6fb8a79ba5 100644 --- a/packages/rocketchat-custom-sounds/server/startup/custom-sounds.js +++ b/packages/rocketchat-custom-sounds/server/startup/custom-sounds.js @@ -1,8 +1,11 @@ -/* globals RocketChatFileCustomSoundsInstance */ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; +import { RocketChatFile } from 'meteor/rocketchat:file'; +import { RocketChat } from 'meteor/rocketchat:lib'; import _ from 'underscore'; +export let RocketChatFileCustomSoundsInstance; + Meteor.startup(function() { let storeType = 'GridFS'; @@ -25,13 +28,11 @@ Meteor.startup(function() { } } - this.RocketChatFileCustomSoundsInstance = new RocketChatStore({ + RocketChatFileCustomSoundsInstance = new RocketChatStore({ name: 'custom_sounds', absolutePath: path, }); - self = this; - return WebApp.connectHandlers.use('/custom-sounds/', Meteor.bindEnvironment(function(req, res/* , next*/) { const params = { sound: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) }; diff --git a/packages/rocketchat-custom-sounds/server/startup/permissions.js b/packages/rocketchat-custom-sounds/server/startup/permissions.js index 0b947797c09c..90c5ca5dffdb 100644 --- a/packages/rocketchat-custom-sounds/server/startup/permissions.js +++ b/packages/rocketchat-custom-sounds/server/startup/permissions.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.startup(() => { if (RocketChat.models && RocketChat.models.Permissions) { diff --git a/packages/rocketchat-custom-sounds/server/startup/settings.js b/packages/rocketchat-custom-sounds/server/startup/settings.js index 4d04f2d8b2a3..67c1fbeb769e 100644 --- a/packages/rocketchat-custom-sounds/server/startup/settings.js +++ b/packages/rocketchat-custom-sounds/server/startup/settings.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.settings.addGroup('CustomSoundsFilesystem', function() { this.add('CustomSounds_Storage_Type', 'GridFS', { type: 'select', From 01f919ad90d40e7c277a9499935285cde468fb90 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Fri, 16 Nov 2018 14:04:42 -0200 Subject: [PATCH 05/79] Add new acceptable header on `Access-Control-Allow-Headers` to allow livechat rest api requests when CORS is enabled. (#12561) --- packages/rocketchat-api/server/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/api.js b/packages/rocketchat-api/server/api.js index 98719acbfecd..d28a95d95f49 100644 --- a/packages/rocketchat-api/server/api.js +++ b/packages/rocketchat-api/server/api.js @@ -386,7 +386,7 @@ const defaultOptionsEndpoint = function _defaultOptionsEndpoint() { if (RocketChat.settings.get('API_Enable_CORS') === true) { this.response.writeHead(200, { 'Access-Control-Allow-Origin': RocketChat.settings.get('API_CORS_Origin'), - 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token, x-visitor-token', }); } else { this.response.writeHead(405); From 639dc059573d83324a8b210b51696d24875d785a Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 17:07:29 -0200 Subject: [PATCH 06/79] Add email dependency in package.js. (#12645) --- packages/rocketchat-mailer/package.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rocketchat-mailer/package.js b/packages/rocketchat-mailer/package.js index 0d3d26d051ac..f2b41e9ceed7 100644 --- a/packages/rocketchat-mailer/package.js +++ b/packages/rocketchat-mailer/package.js @@ -7,6 +7,7 @@ Package.describe({ Package.onUse(function(api) { api.use([ 'ecmascript', + 'email', 'ddp-rate-limiter', 'rocketchat:i18n', ]); From bda3f7a859844084504e7519ba11ce2e48e0021c Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 17:09:03 -0200 Subject: [PATCH 07/79] Convert rocketchat-github-enterprise to main module structure (#12642) * Convert rocketchat-github-enterprise to main module structure * Removing forgot console.log --- .../github-enterprise-login-button.css | 0 .../client/index.js | 2 ++ .../{ => lib}/common.js | 3 ++- .../rocketchat-github-enterprise/package.js | 17 ++++++++--------- .../server/index.js | 2 ++ .../{ => server}/startup.js | 2 ++ 6 files changed, 16 insertions(+), 10 deletions(-) rename packages/rocketchat-github-enterprise/{ => client}/github-enterprise-login-button.css (100%) create mode 100644 packages/rocketchat-github-enterprise/client/index.js rename packages/rocketchat-github-enterprise/{ => lib}/common.js (90%) create mode 100644 packages/rocketchat-github-enterprise/server/index.js rename packages/rocketchat-github-enterprise/{ => server}/startup.js (93%) diff --git a/packages/rocketchat-github-enterprise/github-enterprise-login-button.css b/packages/rocketchat-github-enterprise/client/github-enterprise-login-button.css similarity index 100% rename from packages/rocketchat-github-enterprise/github-enterprise-login-button.css rename to packages/rocketchat-github-enterprise/client/github-enterprise-login-button.css diff --git a/packages/rocketchat-github-enterprise/client/index.js b/packages/rocketchat-github-enterprise/client/index.js new file mode 100644 index 000000000000..7f2b10ba6e3d --- /dev/null +++ b/packages/rocketchat-github-enterprise/client/index.js @@ -0,0 +1,2 @@ +import './github-enterprise-login-button.css'; +import '../lib/common'; diff --git a/packages/rocketchat-github-enterprise/common.js b/packages/rocketchat-github-enterprise/lib/common.js similarity index 90% rename from packages/rocketchat-github-enterprise/common.js rename to packages/rocketchat-github-enterprise/lib/common.js index 39dfc05b140a..86060ab94265 100644 --- a/packages/rocketchat-github-enterprise/common.js +++ b/packages/rocketchat-github-enterprise/lib/common.js @@ -1,6 +1,7 @@ -/* global CustomOAuth */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import { CustomOAuth } from 'meteor/rocketchat:custom-oauth'; +import { RocketChat } from 'meteor/rocketchat:lib'; // GitHub Enterprise Server CallBack URL needs to be http(s)://{rocketchat.server}[:port]/_oauth/github_enterprise // In RocketChat -> Administration the URL needs to be http(s)://{github.enterprise.server}/ diff --git a/packages/rocketchat-github-enterprise/package.js b/packages/rocketchat-github-enterprise/package.js index a9f23a72f193..1d6fab4926de 100644 --- a/packages/rocketchat-github-enterprise/package.js +++ b/packages/rocketchat-github-enterprise/package.js @@ -5,13 +5,12 @@ Package.describe({ }); Package.onUse(function(api) { - api.use('ecmascript'); - api.use('rocketchat:lib'); - api.use('rocketchat:custom-oauth'); - - api.use('templating', 'client'); - - api.addFiles('common.js'); - api.addFiles('github-enterprise-login-button.css', 'client'); - api.addFiles('startup.js', 'server'); + api.use([ + 'ecmascript', + 'rocketchat:lib', + 'rocketchat:custom-oauth', + 'templating', + ]); + api.mainModule('client/index.js', 'client'); + api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-github-enterprise/server/index.js b/packages/rocketchat-github-enterprise/server/index.js new file mode 100644 index 000000000000..d4fffe60273a --- /dev/null +++ b/packages/rocketchat-github-enterprise/server/index.js @@ -0,0 +1,2 @@ +import './startup'; +import '../lib/common'; diff --git a/packages/rocketchat-github-enterprise/startup.js b/packages/rocketchat-github-enterprise/server/startup.js similarity index 93% rename from packages/rocketchat-github-enterprise/startup.js rename to packages/rocketchat-github-enterprise/server/startup.js index 59cdb3d0b13f..9f20e8ab0fb3 100644 --- a/packages/rocketchat-github-enterprise/startup.js +++ b/packages/rocketchat-github-enterprise/server/startup.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.settings.addGroup('OAuth', function() { this.section('GitHub Enterprise', function() { const enableQuery = { From 515a372edbea1a357e4fc8922ca9e899bd686b54 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 17:12:57 -0200 Subject: [PATCH 08/79] Convert rocketchat-file to main module structure (#12644) * Convert rocketchat-file to main module structure * Import RocketChatFile in packages that use it --- packages/rocketchat-file/package.js | 11 ++++------- packages/rocketchat-file/{ => server}/file.server.js | 6 ++++-- packages/rocketchat-file/server/index.js | 3 +++ packages/rocketchat-importer-csv/server/importer.js | 1 + .../rocketchat-importer-hipchat/server/importer.js | 2 +- .../server/importer.js | 1 + packages/rocketchat-importer-slack/server/importer.js | 1 + packages/rocketchat-ldap/server/sync.js | 1 + packages/rocketchat-lib/package.js | 1 + .../rocketchat-lib/server/functions/setUserAvatar.js | 2 +- server/startup/initialData.js | 1 + server/startup/migrations/v002.js | 2 +- server/startup/migrations/v099.js | 1 + 13 files changed, 21 insertions(+), 12 deletions(-) rename packages/rocketchat-file/{ => server}/file.server.js (98%) create mode 100644 packages/rocketchat-file/server/index.js diff --git a/packages/rocketchat-file/package.js b/packages/rocketchat-file/package.js index 313442d2e5e1..6ca7b8df2426 100644 --- a/packages/rocketchat-file/package.js +++ b/packages/rocketchat-file/package.js @@ -6,11 +6,8 @@ Package.describe({ }); Package.onUse(function(api) { - api.use('rocketchat:lib'); - api.use('rocketchat:version'); - api.use('ecmascript'); - - api.addFiles('file.server.js', 'server'); - - api.export('RocketChatFile', 'server'); + api.use([ + 'ecmascript', + ]); + api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-file/file.server.js b/packages/rocketchat-file/server/file.server.js similarity index 98% rename from packages/rocketchat-file/file.server.js rename to packages/rocketchat-file/server/file.server.js index 223b086e6828..a2548ad63d20 100644 --- a/packages/rocketchat-file/file.server.js +++ b/packages/rocketchat-file/server/file.server.js @@ -9,8 +9,8 @@ import mkdirp from 'mkdirp'; Grid.prototype.tryParseObjectId = function() { return false; }; -// TODO: REMOVE RocketChatFile from globals -RocketChatFile = {}; + +const RocketChatFile = {}; RocketChatFile.bufferToStream = function(buffer) { const bufferStream = new stream.PassThrough(); @@ -229,3 +229,5 @@ RocketChatFile.FileSystem = class { } } }; + +export { RocketChatFile }; diff --git a/packages/rocketchat-file/server/index.js b/packages/rocketchat-file/server/index.js new file mode 100644 index 000000000000..dee3df2abb29 --- /dev/null +++ b/packages/rocketchat-file/server/index.js @@ -0,0 +1,3 @@ +import { RocketChatFile } from './file.server'; + +export { RocketChatFile }; diff --git a/packages/rocketchat-importer-csv/server/importer.js b/packages/rocketchat-importer-csv/server/importer.js index eeb5c854fccd..c2a75c074fcf 100644 --- a/packages/rocketchat-importer-csv/server/importer.js +++ b/packages/rocketchat-importer-csv/server/importer.js @@ -7,6 +7,7 @@ import { SelectionChannel, SelectionUser, } from 'meteor/rocketchat:importer'; +import { RocketChatFile } from 'meteor/rocketchat:file'; export class CsvImporter extends Base { constructor(info) { diff --git a/packages/rocketchat-importer-hipchat/server/importer.js b/packages/rocketchat-importer-hipchat/server/importer.js index a00526a61b60..a0956d637182 100644 --- a/packages/rocketchat-importer-hipchat/server/importer.js +++ b/packages/rocketchat-importer-hipchat/server/importer.js @@ -7,7 +7,7 @@ import { SelectionChannel, SelectionUser, } from 'meteor/rocketchat:importer'; - +import { RocketChatFile } from 'meteor/rocketchat:file'; import _ from 'underscore'; import s from 'underscore.string'; import moment from 'moment'; diff --git a/packages/rocketchat-importer-slack-users/server/importer.js b/packages/rocketchat-importer-slack-users/server/importer.js index a557cbe717ce..d261868e04ba 100644 --- a/packages/rocketchat-importer-slack-users/server/importer.js +++ b/packages/rocketchat-importer-slack-users/server/importer.js @@ -7,6 +7,7 @@ import { Selection, SelectionUser, } from 'meteor/rocketchat:importer'; +import { RocketChatFile } from 'meteor/rocketchat:file'; export class SlackUsersImporter extends Base { constructor(info) { diff --git a/packages/rocketchat-importer-slack/server/importer.js b/packages/rocketchat-importer-slack/server/importer.js index dc267381485c..27dda3250b8e 100644 --- a/packages/rocketchat-importer-slack/server/importer.js +++ b/packages/rocketchat-importer-slack/server/importer.js @@ -7,6 +7,7 @@ import { SelectionChannel, SelectionUser, } from 'meteor/rocketchat:importer'; +import { RocketChatFile } from 'meteor/rocketchat:file'; import _ from 'underscore'; diff --git a/packages/rocketchat-ldap/server/sync.js b/packages/rocketchat-ldap/server/sync.js index 75e3abd719f8..13a8c39f42e2 100644 --- a/packages/rocketchat-ldap/server/sync.js +++ b/packages/rocketchat-ldap/server/sync.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import { RocketChatFile } from 'meteor/rocketchat:file'; import _ from 'underscore'; import LDAP from './ldap'; diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index 73afb03ef995..f1236baa505d 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -31,6 +31,7 @@ Package.onUse(function(api) { api.use('rocketchat:mailer'); api.use('mizzao:timesync'); api.use('rocketchat:custom-oauth'); + api.use('rocketchat:file'); api.use('rocketchat:authorization', { unordered: true }); api.use('rocketchat:push-notifications', { unordered: true }); diff --git a/packages/rocketchat-lib/server/functions/setUserAvatar.js b/packages/rocketchat-lib/server/functions/setUserAvatar.js index dc4319aff6fb..5f72d100d4e0 100644 --- a/packages/rocketchat-lib/server/functions/setUserAvatar.js +++ b/packages/rocketchat-lib/server/functions/setUserAvatar.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; - +import { RocketChatFile } from 'meteor/rocketchat:file'; RocketChat.setUserAvatar = function(user, dataURI, contentType, service) { let encoding; let image; diff --git a/server/startup/initialData.js b/server/startup/initialData.js index 9d3415bc4ec6..4a11d4b114bd 100644 --- a/server/startup/initialData.js +++ b/server/startup/initialData.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import { RocketChatFile } from 'meteor/rocketchat:file'; import _ from 'underscore'; Meteor.startup(function() { diff --git a/server/startup/migrations/v002.js b/server/startup/migrations/v002.js index f0fcee93ca94..1da3b03d453c 100644 --- a/server/startup/migrations/v002.js +++ b/server/startup/migrations/v002.js @@ -1,5 +1,5 @@ /* globals getAvatarSuggestionForUser */ - +import { RocketChatFile } from 'meteor/rocketchat:file'; RocketChat.Migrations.add({ version: 2, up() { diff --git a/server/startup/migrations/v099.js b/server/startup/migrations/v099.js index 4c736a786daa..c1e121154cbc 100644 --- a/server/startup/migrations/v099.js +++ b/server/startup/migrations/v099.js @@ -3,6 +3,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Mongo } from 'meteor/mongo'; +import { RocketChatFile } from 'meteor/rocketchat:file'; import fs from 'fs'; import path from 'path'; From db6cb9dc3eaa6ffd7cf09da2a97eb1856ea36040 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 17:14:01 -0200 Subject: [PATCH 09/79] Convert rocketchat-gitlab to main module structure (#12646) --- .../{ => client}/gitlab-login-button.css | 0 packages/rocketchat-gitlab/client/index.js | 2 ++ packages/rocketchat-gitlab/{ => lib}/common.js | 3 ++- packages/rocketchat-gitlab/package.js | 17 ++++++++--------- packages/rocketchat-gitlab/server/index.js | 2 ++ .../rocketchat-gitlab/{ => server}/startup.js | 2 ++ 6 files changed, 16 insertions(+), 10 deletions(-) rename packages/rocketchat-gitlab/{ => client}/gitlab-login-button.css (100%) create mode 100644 packages/rocketchat-gitlab/client/index.js rename packages/rocketchat-gitlab/{ => lib}/common.js (87%) create mode 100644 packages/rocketchat-gitlab/server/index.js rename packages/rocketchat-gitlab/{ => server}/startup.js (92%) diff --git a/packages/rocketchat-gitlab/gitlab-login-button.css b/packages/rocketchat-gitlab/client/gitlab-login-button.css similarity index 100% rename from packages/rocketchat-gitlab/gitlab-login-button.css rename to packages/rocketchat-gitlab/client/gitlab-login-button.css diff --git a/packages/rocketchat-gitlab/client/index.js b/packages/rocketchat-gitlab/client/index.js new file mode 100644 index 000000000000..1550e37081b5 --- /dev/null +++ b/packages/rocketchat-gitlab/client/index.js @@ -0,0 +1,2 @@ +import './gitlab-login-button.css'; +import '../lib/common'; diff --git a/packages/rocketchat-gitlab/common.js b/packages/rocketchat-gitlab/lib/common.js similarity index 87% rename from packages/rocketchat-gitlab/common.js rename to packages/rocketchat-gitlab/lib/common.js index 56fd0f24ea1a..e187ef50e7b8 100644 --- a/packages/rocketchat-gitlab/common.js +++ b/packages/rocketchat-gitlab/lib/common.js @@ -1,6 +1,7 @@ -/* global CustomOAuth */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { CustomOAuth } from 'meteor/rocketchat:custom-oauth'; const config = { serverURL: 'https://gitlab.com', diff --git a/packages/rocketchat-gitlab/package.js b/packages/rocketchat-gitlab/package.js index 35af8d43ee8c..627a7068a8b7 100644 --- a/packages/rocketchat-gitlab/package.js +++ b/packages/rocketchat-gitlab/package.js @@ -5,13 +5,12 @@ Package.describe({ }); Package.onUse(function(api) { - api.use('ecmascript'); - api.use('rocketchat:lib'); - api.use('rocketchat:custom-oauth'); - - api.use('templating', 'client'); - - api.addFiles('common.js'); - api.addFiles('gitlab-login-button.css', 'client'); - api.addFiles('startup.js', 'server'); + api.use([ + 'ecmascript', + 'rocketchat:lib', + 'rocketchat:custom-oauth', + 'templating', + ]); + api.mainModule('client/index.js', 'client'); + api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-gitlab/server/index.js b/packages/rocketchat-gitlab/server/index.js new file mode 100644 index 000000000000..d4fffe60273a --- /dev/null +++ b/packages/rocketchat-gitlab/server/index.js @@ -0,0 +1,2 @@ +import './startup'; +import '../lib/common'; diff --git a/packages/rocketchat-gitlab/startup.js b/packages/rocketchat-gitlab/server/startup.js similarity index 92% rename from packages/rocketchat-gitlab/startup.js rename to packages/rocketchat-gitlab/server/startup.js index 4e4f57109d10..843b10015b9e 100644 --- a/packages/rocketchat-gitlab/startup.js +++ b/packages/rocketchat-gitlab/server/startup.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.settings.addGroup('OAuth', function() { this.section('GitLab', function() { const enableQuery = { From 2c143eaa36c0c2ce9664ae529fd8548343992c1d Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 17:43:25 -0200 Subject: [PATCH 10/79] Added imports for global variables in rocketchat-google-natural-language package (#12647) * Added imports for global variables in rocketchat-google-natural-language package * fix lint --- .../client/index.js | 2 ++ .../package.js | 16 +++++++++------- .../server/index.js | 1 + .../server/models/Rooms.js | 2 ++ .../server/settings.js | 1 + 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/rocketchat-google-natural-language/client/index.js b/packages/rocketchat-google-natural-language/client/index.js index 87e98186e36d..b2be0f808eec 100644 --- a/packages/rocketchat-google-natural-language/client/index.js +++ b/packages/rocketchat-google-natural-language/client/index.js @@ -1,4 +1,6 @@ import { Template } from 'meteor/templating'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { ChatRoom } from 'meteor/rocketchat:ui'; Template.room.helpers({ sentimentSmile() { diff --git a/packages/rocketchat-google-natural-language/package.js b/packages/rocketchat-google-natural-language/package.js index 76a52cb6f8b7..fb548c473646 100644 --- a/packages/rocketchat-google-natural-language/package.js +++ b/packages/rocketchat-google-natural-language/package.js @@ -6,13 +6,15 @@ Package.describe({ }); Package.onUse(function(api) { - api.use('ecmascript'); - api.use('http'); - api.use('templating', 'client'); - - api.use('rocketchat:lib'); - api.use('rocketchat:ui', 'client'); - + api.use([ + 'ecmascript', + 'http', + 'rocketchat:lib', + ]); + api.use([ + 'templating', + 'rocketchat:ui', + ], 'client'); api.mainModule('client/index.js', 'client'); api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-google-natural-language/server/index.js b/packages/rocketchat-google-natural-language/server/index.js index 0a0d87275954..8172b58ea06d 100644 --- a/packages/rocketchat-google-natural-language/server/index.js +++ b/packages/rocketchat-google-natural-language/server/index.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; import './settings.js'; import './models/Rooms.js'; import googleLanguage from '@google-cloud/language'; diff --git a/packages/rocketchat-google-natural-language/server/models/Rooms.js b/packages/rocketchat-google-natural-language/server/models/Rooms.js index d08a7df7db40..bf97b3d7feb1 100644 --- a/packages/rocketchat-google-natural-language/server/models/Rooms.js +++ b/packages/rocketchat-google-natural-language/server/models/Rooms.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.models.Rooms.setSentiment = function(roomId, sentiment) { return this.update({ _id: roomId }, { $set: { sentiment } }); }; diff --git a/packages/rocketchat-google-natural-language/server/settings.js b/packages/rocketchat-google-natural-language/server/settings.js index 4412807890ad..7d8784c783ad 100644 --- a/packages/rocketchat-google-natural-language/server/settings.js +++ b/packages/rocketchat-google-natural-language/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.startup(function() { RocketChat.settings.add('GoogleNaturalLanguage_Enabled', false, { From d91667b83d59504f102c0673d594dd1c219f157d Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 19:10:57 -0200 Subject: [PATCH 11/79] [NEW] New API Endpoints for the new version of JS SDK (#12623) * Added rooms.info endpoint * Added rooms.leave endpoint and tests * Add support to fields in room.info endpoint * fix broken tests, removed "lm" property from expected keys --- packages/rocketchat-api/server/v1/rooms.js | 21 ++ tests/data/permissions.helper.js | 10 + tests/data/rooms.helper.js | 44 +++ tests/end-to-end/api/09-rooms.js | 327 ++++++++++++++++++--- 4 files changed, 367 insertions(+), 35 deletions(-) create mode 100644 tests/data/permissions.helper.js create mode 100644 tests/data/rooms.helper.js diff --git a/packages/rocketchat-api/server/v1/rooms.js b/packages/rocketchat-api/server/v1/rooms.js index 23a82d47a53a..b913fe18ea0e 100644 --- a/packages/rocketchat-api/server/v1/rooms.js +++ b/packages/rocketchat-api/server/v1/rooms.js @@ -196,3 +196,24 @@ RocketChat.API.v1.addRoute('rooms.cleanHistory', { authRequired: true }, { }, }); +RocketChat.API.v1.addRoute('rooms.info', { authRequired: true }, { + get() { + const room = findRoomByIdOrName({ params: this.requestParams() }); + const { fields } = this.parseJsonQuery(); + if (!Meteor.call('canAccessRoom', room._id, this.userId, {})) { + return RocketChat.API.v1.failure('not-allowed', 'Not Allowed'); + } + return RocketChat.API.v1.success({ room: RocketChat.models.Rooms.findOneByIdOrName(room._id, { fields }) }); + }, +}); + +RocketChat.API.v1.addRoute('rooms.leave', { authRequired: true }, { + post() { + const room = findRoomByIdOrName({ params: this.bodyParams }); + Meteor.runAsUser(this.userId, () => { + Meteor.call('leaveRoom', room._id); + }); + + return RocketChat.API.v1.success(); + }, +}); diff --git a/tests/data/permissions.helper.js b/tests/data/permissions.helper.js new file mode 100644 index 000000000000..5a7d3218da4c --- /dev/null +++ b/tests/data/permissions.helper.js @@ -0,0 +1,10 @@ +import { api, credentials, request } from './api-data'; + +export const updatePermission = (permission, roles) => new Promise((resolve) => { + request.post(api('permissions.update')) + .set(credentials) + .send({ permissions: [{ _id: permission, roles }] }) + .expect('Content-Type', 'application/json') + .expect(200) + .end(resolve); +}); diff --git a/tests/data/rooms.helper.js b/tests/data/rooms.helper.js new file mode 100644 index 000000000000..f3213591d6e3 --- /dev/null +++ b/tests/data/rooms.helper.js @@ -0,0 +1,44 @@ +import { api, credentials, request } from './api-data'; + +export const createRoom = ({ name, type, username }) => { + if (!type) { + throw new Error('"type" is required in "createRoom" test helper'); + } + if (type === 'd' && !username) { + throw new Error('To be able to create DM Room, you must provide the username'); + } + const endpoints = { + c: 'channels.create', + p: 'groups.create', + d: 'im.create', + }; + const params = type === 'd' + ? ({ username }) + : ({ name }); + + return request.post(api(endpoints[type])) + .set(credentials) + .send(params); +}; + +export const closeRoom = ({ type, roomId }) => { + if (!type) { + throw new Error('"type" is required in "closeRoom" test helper'); + } + if (!roomId) { + throw new Error('"roomId" is required in "closeRoom" test helper'); + } + const endpoints = { + c: 'channels.close', + p: 'groups.close', + d: 'im.close', + }; + return new Promise((resolve) => { + request.post(api(endpoints[type])) + .set(credentials) + .send({ + roomId, + }) + .end(resolve); + }); +}; diff --git a/tests/end-to-end/api/09-rooms.js b/tests/end-to-end/api/09-rooms.js index fa3e3efc228b..92aee889dcf3 100644 --- a/tests/end-to-end/api/09-rooms.js +++ b/tests/end-to-end/api/09-rooms.js @@ -3,6 +3,8 @@ import { getCredentials, api, request, credentials } from '../../data/api-data.js'; import { password } from '../../data/user'; +import { closeRoom, createRoom } from '../../data/rooms.helper'; +import { updatePermission } from '../../data/permissions.helper'; describe('[Rooms]', function() { this.retries(0); @@ -39,11 +41,7 @@ describe('[Rooms]', function() { describe('/rooms.saveNotification:', () => { let testChannel; it('create an channel', (done) => { - request.post(api('channels.create')) - .set(credentials) - .send({ - name: `channel.test.${ Date.now() }`, - }) + createRoom({ type: 'c', name: `channel.test.${ Date.now() }` }) .end((err, res) => { testChannel = res.body.channel; done(); @@ -77,11 +75,7 @@ describe('[Rooms]', function() { let testChannel; const testChannelName = `channel.test.${ Date.now() }`; it('create an channel', (done) => { - request.post(api('channels.create')) - .set(credentials) - .send({ - name: testChannelName, - }) + createRoom({ type: 'c', name: testChannelName }) .end((err, res) => { testChannel = res.body.channel; done(); @@ -197,41 +191,25 @@ describe('[Rooms]', function() { user = undefined; }); it('create a public channel', (done) => { - request.post(api('channels.create')) - .set(credentials) - .send({ - name: `testeChannel${ +new Date() }`, - }) + createRoom({ type: 'c', name: `testeChannel${ +new Date() }` }) .end((err, res) => { publicChannel = res.body.channel; done(); }); }); it('create a private channel', (done) => { - request.post(api('groups.create')) - .set(credentials) - .send({ - name: `testPrivateChannel${ +new Date() }`, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { + createRoom({ type: 'p', name: `testPrivateChannel${ +new Date() }` }) + .end((err, res) => { privateChannel = res.body.group; - }) - .end(done); + done(); + }); }); it('create a direct message', (done) => { - request.post(api('im.create')) - .set(credentials) - .send({ - username: 'rocket.cat', - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { + createRoom({ type: 'd', username: 'rocket.cat' }) + .end((err, res) => { directMessageChannel = res.body.room; - }) - .end(done); + done(); + }); }); it('should return success when send a valid public channel', (done) => { request.post(api('rooms.cleanHistory')) @@ -295,4 +273,283 @@ describe('[Rooms]', function() { .end(done); }); }); + + describe('[/rooms.info]', () => { + let testChannel; + let testGroup; + let testDM; + const expectedKeys = ['_id', 'name', 'fname', 't', 'msgs', 'usersCount', 'u', 'customFields', 'ts', 'ro', 'sysMes', 'default', '_updatedAt']; + const testChannelName = `channel.test.${ Date.now() }-${ Math.random() }`; + const testGroupName = `group.test.${ Date.now() }-${ Math.random() }`; + after((done) => { + closeRoom({ type: 'd', roomId: testDM._id }) + .then(done); + }); + it('create an channel', (done) => { + createRoom({ type: 'c', name: testChannelName }) + .end((err, res) => { + testChannel = res.body.channel; + done(); + }); + }); + it('create a group', (done) => { + createRoom(({ type: 'p', name: testGroupName })) + .end((err, res) => { + testGroup = res.body.group; + done(); + }); + }); + it('create a Direct message room with rocket.cat', (done) => { + createRoom(({ type: 'd', username: 'rocket.cat' })) + .end((err, res) => { + testDM = res.body.room; + done(); + }); + }); + it('should return the info about the created channel correctly searching by roomId', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomId: testChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + expect(res.body.room).to.have.keys(expectedKeys); + }) + .end(done); + }); + it('should return the info about the created channel correctly searching by roomName', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomName: testChannel.name, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + expect(res.body.room).to.have.all.keys(expectedKeys); + }) + .end(done); + }); + it('should return the info about the created group correctly searching by roomId', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomId: testGroup._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + expect(res.body.room).to.have.all.keys(expectedKeys); + }) + .end(done); + }); + it('should return the info about the created group correctly searching by roomName', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomName: testGroup.name, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + expect(res.body.room).to.have.all.keys(expectedKeys); + }) + .end(done); + }); + it('should return the info about the created DM correctly searching by roomId', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomId: testDM._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + }) + .end(done); + }); + it('should return name and _id of public channel when it has the "fields" query parameter limiting by name', (done) => { + request.get(api('rooms.info')) + .set(credentials) + .query({ + roomId: testChannel._id, + fields: JSON.stringify({ name: 1 }), + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('room').and.to.be.an('object'); + expect(res.body.room).to.have.property('name').and.to.be.equal(testChannelName); + expect(res.body.room).to.have.all.keys(['_id', 'name']); + }) + .end(done); + }); + }); + + describe('[/rooms.leave]', () => { + let testChannel; + let testGroup; + let testDM; + const testChannelName = `channel.test.${ Date.now() }-${ Math.random() }`; + const testGroupName = `group.test.${ Date.now() }-${ Math.random() }`; + after((done) => { + closeRoom({ type: 'd', roomId: testDM._id }) + .then(done); + }); + it('create an channel', (done) => { + createRoom({ type: 'c', name: testChannelName }) + .end((err, res) => { + testChannel = res.body.channel; + done(); + }); + }); + it('create a group', (done) => { + createRoom(({ type: 'p', name: testGroupName })) + .end((err, res) => { + testGroup = res.body.group; + done(); + }); + }); + it('create a Direct message room with rocket.cat', (done) => { + createRoom(({ type: 'd', username: 'rocket.cat' })) + .end((err, res) => { + testDM = res.body.room; + done(); + }); + }); + it('should return an Error when trying leave a DM room', (done) => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testDM._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-not-allowed'); + }) + .end(done); + }); + it('should return an Error when trying to leave a public channel and you are the last owner', (done) => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testChannel._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-you-are-last-owner'); + }) + .end(done); + }); + it('should return an Error when trying to leave a private group and you are the last owner', (done) => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testGroup._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-you-are-last-owner'); + }) + .end(done); + }); + it('should return an Error when trying to leave a public channel and not have the necessary permission(leave-c)', (done) => { + updatePermission('leave-c', []).then(() => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testChannel._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-not-allowed'); + }) + .end(done); + }); + }); + it('should return an Error when trying to leave a private group and not have the necessary permission(leave-p)', (done) => { + updatePermission('leave-p', []).then(() => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testGroup._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-not-allowed'); + }) + .end(done); + }); + }); + it('should leave the public channel when the room has at least another owner and the user has the necessary permission(leave-c)', (done) => { + updatePermission('leave-c', ['admin']).then(() => { + request.post(api('channels.addAll')) + .set(credentials) + .send({ + roomId: testChannel._id, + }) + .end(() => { + request.post(api('channels.addOwner')) + .set(credentials) + .send({ + roomId: testChannel._id, + userId: 'rocket.cat', + }) + .end(() => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + }); + }); + }); + it('should leave the private group when the room has at least another owner and the user has the necessary permission(leave-p)', (done) => { + updatePermission('leave-p', ['admin']).then(() => { + request.post(api('groups.addAll')) + .set(credentials) + .send({ + roomId: testGroup._id, + }) + .end(() => { + request.post(api('groups.addOwner')) + .set(credentials) + .send({ + roomId: testGroup._id, + userId: 'rocket.cat', + }) + .end(() => { + request.post(api('rooms.leave')) + .set(credentials) + .send({ + roomId: testGroup._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + }); + }); + }); + }); }); From 5c9a37548ac0d7c52297baa1660f7e0817352af4 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 19:11:28 -0200 Subject: [PATCH 12/79] Removed RocketChatFile from globals (#12650) --- .eslintrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index 5198a4f18be1..427e6d39adff 100644 --- a/.eslintrc +++ b/.eslintrc @@ -30,7 +30,6 @@ "Package" : false, "parentCall" : false, "RocketChat" : true, - "RocketChatFile" : false, "RoomHistoryManager" : false, "RoomManager" : false, "ServiceConfiguration" : false, From 42a3a481e5ca7a17134025258053095ce861288b Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 19:12:12 -0200 Subject: [PATCH 13/79] Convert rocketchat-google-vision to main module structure (#12649) --- packages/rocketchat-google-vision/client/googlevision.js | 1 + packages/rocketchat-google-vision/client/index.js | 1 + packages/rocketchat-google-vision/package.js | 5 ++--- packages/rocketchat-google-vision/server/googlevision.js | 2 ++ packages/rocketchat-google-vision/server/index.js | 3 +++ packages/rocketchat-google-vision/server/models/Messages.js | 2 ++ packages/rocketchat-google-vision/server/settings.js | 1 + 7 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 packages/rocketchat-google-vision/client/index.js create mode 100644 packages/rocketchat-google-vision/server/index.js diff --git a/packages/rocketchat-google-vision/client/googlevision.js b/packages/rocketchat-google-vision/client/googlevision.js index a8a21b3b8d0d..bcd115b781a4 100644 --- a/packages/rocketchat-google-vision/client/googlevision.js +++ b/packages/rocketchat-google-vision/client/googlevision.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import { RocketChat } from 'meteor/rocketchat:lib'; RocketChat.GoogleVision = { getVisionAttributes(attachment) { diff --git a/packages/rocketchat-google-vision/client/index.js b/packages/rocketchat-google-vision/client/index.js new file mode 100644 index 000000000000..b27b67994b22 --- /dev/null +++ b/packages/rocketchat-google-vision/client/index.js @@ -0,0 +1 @@ +import './googlevision'; diff --git a/packages/rocketchat-google-vision/package.js b/packages/rocketchat-google-vision/package.js index f97242a07266..210bb8a760b4 100644 --- a/packages/rocketchat-google-vision/package.js +++ b/packages/rocketchat-google-vision/package.js @@ -10,7 +10,6 @@ Package.onUse(function(api) { 'ecmascript', 'rocketchat:lib', ]); - - api.addFiles('client/googlevision.js', 'client'); - api.addFiles(['server/settings.js', 'server/googlevision.js', 'server/models/Messages.js'], 'server'); + api.mainModule('client/index.js', 'client'); + api.mainModule('server/index.js', 'server'); }); diff --git a/packages/rocketchat-google-vision/server/googlevision.js b/packages/rocketchat-google-vision/server/googlevision.js index ae675d924bdf..4b7b047b0d48 100644 --- a/packages/rocketchat-google-vision/server/googlevision.js +++ b/packages/rocketchat-google-vision/server/googlevision.js @@ -1,6 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; +import { RocketChat } from 'meteor/rocketchat:lib'; +import { FileUpload } from 'meteor/rocketchat:file-upload'; class GoogleVision { constructor() { diff --git a/packages/rocketchat-google-vision/server/index.js b/packages/rocketchat-google-vision/server/index.js new file mode 100644 index 000000000000..df4e64972a9d --- /dev/null +++ b/packages/rocketchat-google-vision/server/index.js @@ -0,0 +1,3 @@ +import './settings'; +import './googlevision'; +import './models/Messages'; diff --git a/packages/rocketchat-google-vision/server/models/Messages.js b/packages/rocketchat-google-vision/server/models/Messages.js index 47776984618d..257949dd213b 100644 --- a/packages/rocketchat-google-vision/server/models/Messages.js +++ b/packages/rocketchat-google-vision/server/models/Messages.js @@ -1,3 +1,5 @@ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.models.Messages.setGoogleVisionData = function(messageId, visionData) { const updateObj = {}; for (const index in visionData) { diff --git a/packages/rocketchat-google-vision/server/settings.js b/packages/rocketchat-google-vision/server/settings.js index 242ed9037773..e3934ed9a60d 100644 --- a/packages/rocketchat-google-vision/server/settings.js +++ b/packages/rocketchat-google-vision/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; Meteor.startup(function() { RocketChat.settings.add('GoogleVision_Enable', false, { From 3a154eb938b230cb68437d293b4586c6c9bed74a Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Fri, 16 Nov 2018 19:14:13 -0200 Subject: [PATCH 14/79] [FIX] Fix favico error (#12643) * Fix favico error * Fix favico export, remove iife --- client/startup/unread.js | 3 ++- packages/rocketchat-favico/client/favico.js | 20 +------------------- packages/rocketchat-favico/client/index.js | 5 ++++- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/client/startup/unread.js b/client/startup/unread.js index 555a060a6834..5580c0635bf7 100644 --- a/client/startup/unread.js +++ b/client/startup/unread.js @@ -1,8 +1,9 @@ -/* globals fireGlobalEvent, readMessage, Favico, favico, menu */ +/* globals fireGlobalEvent, readMessage, favico, menu */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; +import { Favico } from 'meteor/rocketchat:favico'; Meteor.startup(function() { Tracker.autorun(function() { diff --git a/packages/rocketchat-favico/client/favico.js b/packages/rocketchat-favico/client/favico.js index 00f6f5e60fa3..b85f9b4a4ee1 100644 --- a/packages/rocketchat-favico/client/favico.js +++ b/packages/rocketchat-favico/client/favico.js @@ -23,9 +23,8 @@ * }); */ /* eslint-disable */ -(function() { - var Favico = (function(opt) { + export const Favico = (function(opt) { 'use strict'; opt = (opt) ? opt : {}; var _def = { @@ -843,20 +842,3 @@ } }; }); - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function() { - return Favico; - }); - } - // CommonJS - else if (typeof module !== 'undefined' && module.exports) { - module.exports = Favico; - } - // included directly via