From c3eb335daab29813f3212b6c826521dc3cbd3832 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Wed, 19 Dec 2018 14:24:42 -0200 Subject: [PATCH 01/11] Fix readable validation on the apps engine environment bridge (#12994) --- .../rocketchat-apps/server/bridges/environmental.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/rocketchat-apps/server/bridges/environmental.js b/packages/rocketchat-apps/server/bridges/environmental.js index 2cf4a47715be..57b28437c532 100644 --- a/packages/rocketchat-apps/server/bridges/environmental.js +++ b/packages/rocketchat-apps/server/bridges/environmental.js @@ -7,11 +7,11 @@ export class AppEnvironmentalVariableBridge { async getValueByName(envVarName, appId) { console.log(`The App ${ appId } is getting the environmental variable value ${ envVarName }.`); - if (this.isReadable(envVarName, appId)) { - return process.env[envVarName]; + if (!(await this.isReadable(envVarName, appId))) { + throw new Error(`The environmental variable "${ envVarName }" is not readable.`); } - throw new Error(`The environmental variable "${ envVarName }" is not readable.`); + return process.env[envVarName]; } async isReadable(envVarName, appId) { @@ -23,10 +23,10 @@ export class AppEnvironmentalVariableBridge { async isSet(envVarName, appId) { console.log(`The App ${ appId } is checking if the environmental variable is set ${ envVarName }.`); - if (this.isReadable(envVarName, appId)) { - return typeof process.env[envVarName] !== 'undefined'; + if (!(await this.isReadable(envVarName, appId))) { + throw new Error(`The environmental variable "${ envVarName }" is not readable.`); } - throw new Error(`The environmental variable "${ envVarName }" is not readable.`); + return typeof process.env[envVarName] !== 'undefined'; } } From e71a51750e6a9a67f21873aa2461dca0d3416c48 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Wed, 19 Dec 2018 14:27:29 -0200 Subject: [PATCH 02/11] [FIX] multiple rooms-changed (#12940) * streamer was sending multiple times the streamer was using a method to emit the data, which emit to the user for all connections, result: we are emitting for each client n(connection number) times. --- .../server/functions/Notifications.js | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-lib/server/functions/Notifications.js b/packages/rocketchat-lib/server/functions/Notifications.js index 53ddd1ca6546..221c47fb1156 100644 --- a/packages/rocketchat-lib/server/functions/Notifications.js +++ b/packages/rocketchat-lib/server/functions/Notifications.js @@ -1,14 +1,30 @@ import { Meteor } from 'meteor/meteor'; - +import { DDPCommon } from 'meteor/ddp-common'; + +const changedPayload = function(collection, id, fields) { + return DDPCommon.stringifyDDP({ + msg: 'changed', + collection, + id, + fields, + }); +}; +const send = function(self, msg) { + if (!self.socket) { + return; + } + self.socket.send(msg); +}; class RoomStreamer extends Meteor.Streamer { _publish(publication, eventName, options) { super._publish(publication, eventName, options); const uid = Meteor.userId(); if (/rooms-changed/.test(eventName)) { - const roomEvent = (...args) => { - RocketChat.Notifications.notifyUserInThisInstance(uid, 'rooms-changed', ...args); - }; + const roomEvent = (...args) => send(publication._session, changedPayload(this.subscriptionName, 'id', { + eventName: `${ uid }/rooms-changed`, + args, + })); const rooms = RocketChat.models.Subscriptions.find({ 'u._id': uid }, { fields: { rid: 1 } }).fetch(); rooms.forEach(({ rid }) => { this.on(rid, roomEvent); From 3d70f4754cd8ab1c5b5835b1a5a01ae96d54279f Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Wed, 19 Dec 2018 14:37:15 -0200 Subject: [PATCH 03/11] Remove /* globals */ from files wave-1 (#12984) * Remove /* globals */ from files wave 1 * Fix lint --- .eslintrc | 10 ++++++++++ client/notifications/notification.js | 2 +- client/notifications/updateAvatar.js | 2 +- client/notifications/updateUserState.js | 2 +- client/routes/router.js | 2 +- client/startup/i18n.js | 2 +- client/startup/startup.js | 3 ++- client/startup/unread.js | 6 +++--- packages/meteor-accounts-saml/client/saml_client.js | 1 - .../server/functions/canAccessRoom.js | 3 ++- .../client/views/channelSettings.js | 2 +- packages/rocketchat-channel-settings/package.js | 1 + .../client/custom_oauth_client.js | 2 +- .../server/custom_oauth_server.js | 2 +- packages/rocketchat-e2e/.eslintrc | 4 ---- packages/rocketchat-e2e/client/accountEncryption.js | 4 +++- packages/rocketchat-e2e/client/rocketchat.e2e.js | 1 - packages/rocketchat-e2e/package.js | 2 -- packages/rocketchat-emoji/client/keyboardFix.js | 1 - .../client/lib/fileUploadHandler.js | 4 ++-- .../rocketchat-file-upload/globalFileRestrictions.js | 2 +- packages/rocketchat-file-upload/lib/FileUpload.js | 2 -- packages/rocketchat-file-upload/lib/FileUploadBase.js | 7 +++---- packages/rocketchat-file-upload/package.js | 1 - .../rocketchat-file-upload/server/config/AmazonS3.js | 2 -- .../rocketchat-file-upload/server/config/FileSystem.js | 3 +-- .../server/config/GoogleStorage.js | 2 -- .../rocketchat-file-upload/server/config/GridFS.js | 2 +- .../server/config/Slingshot_DEPRECATED.js | 2 +- .../rocketchat-file-upload/server/config/Webdav.js | 2 -- .../server/config/_configUploadStorage.js | 3 +-- .../rocketchat-file-upload/server/lib/FileUpload.js | 3 +-- packages/rocketchat-file-upload/server/lib/proxy.js | 4 ++-- packages/rocketchat-file-upload/server/lib/requests.js | 3 +-- .../server/methods/getS3FileUrl.js | 2 +- .../rocketchat-iframe-login/client/iframe_client.js | 1 - packages/rocketchat-internal-hubot/server/hubot.js | 1 - packages/rocketchat-lib/client/lib/openRoom.js | 2 +- packages/rocketchat-ui/client/lib/avatar.js | 2 +- packages/rocketchat-ui/client/lib/collections.js | 6 +++--- packages/rocketchat-ui/client/lib/fileUpload.js | 3 ++- packages/rocketchat-ui/client/lib/readMessages.js | 4 +--- packages/rocketchat-ui/package.js | 4 ++++ 43 files changed, 56 insertions(+), 63 deletions(-) delete mode 100644 packages/rocketchat-e2e/.eslintrc diff --git a/.eslintrc b/.eslintrc index 5e8d3610d37c..ea923ee84d23 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,27 +2,37 @@ "extends": ["@rocket.chat/eslint-config"], "parser": "babel-eslint", "globals": { + "__meteor_bootstrap__" : false, "__meteor_runtime_config__" : false, "AccountBox" : false, + "alerts" : false, "Apps" : false, "Assets" : false, "ChatMessage" : false, "ChatMessages" : false, "ChatRoom" : false, "ChatSubscription" : false, + "cordova" : false, + "device" : false, + "facebookConnectPlugin" : false, "FileUpload" : false, + "fileUploadHandler" : false, "handleError" : false, "getAvatarUrlFromUsername" : false, "Logger" : false, "modal" : false, + "menu" : false, "Npm" : false, "Package" : false, + "readMessage" : false, "RocketChat" : true, "RoomHistoryManager" : false, "RoomManager" : false, "Settings" : false, "SideNav" : false, "t" : false, + "toastr" : false, + "TwitterConnect" : false, "VideoRecorder" : false, "VRecDialog" : false } diff --git a/client/notifications/notification.js b/client/notifications/notification.js index 52d7083b2350..bb406e8ab86a 100644 --- a/client/notifications/notification.js +++ b/client/notifications/notification.js @@ -1,8 +1,8 @@ -/* globals KonchatNotification, fireGlobalEvent, readMessage, CachedChatSubscription */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; +import { KonchatNotification, fireGlobalEvent, readMessage, CachedChatSubscription } from 'meteor/rocketchat:ui'; // Show notifications and play a sound for new messages. // We trust the server to only send notifications for interesting messages, e.g. direct messages or diff --git a/client/notifications/updateAvatar.js b/client/notifications/updateAvatar.js index 28d7cb3dba74..b03d115ffddb 100644 --- a/client/notifications/updateAvatar.js +++ b/client/notifications/updateAvatar.js @@ -1,5 +1,5 @@ -/* globals updateAvatarOfUsername */ import { Meteor } from 'meteor/meteor'; +import { updateAvatarOfUsername } from 'meteor/rocketchat:ui'; Meteor.startup(function() { RocketChat.Notifications.onLogged('updateAvatar', function(data) { diff --git a/client/notifications/updateUserState.js b/client/notifications/updateUserState.js index 9144bce0fdc7..84cbaf9af6a6 100644 --- a/client/notifications/updateUserState.js +++ b/client/notifications/updateUserState.js @@ -1,5 +1,5 @@ -/* globals fireGlobalEvent */ import { Meteor } from 'meteor/meteor'; +import { fireGlobalEvent } from 'meteor/rocketchat:ui'; /* fire user state change globally, to listen on desktop electron client */ Meteor.startup(function() { diff --git a/client/routes/router.js b/client/routes/router.js index 9d80c73ee9fd..8f1dfd711038 100644 --- a/client/routes/router.js +++ b/client/routes/router.js @@ -1,4 +1,3 @@ -/* globals KonchatNotification */ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Tracker } from 'meteor/tracker'; @@ -6,6 +5,7 @@ import { Blaze } from 'meteor/blaze'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; +import { KonchatNotification } from 'meteor/rocketchat:ui'; import s from 'underscore.string'; Blaze.registerHelper('pathFor', function(path, kw) { diff --git a/client/startup/i18n.js b/client/startup/i18n.js index 61ca1031914e..242e06f6b0c1 100644 --- a/client/startup/i18n.js +++ b/client/startup/i18n.js @@ -1,8 +1,8 @@ -/* globals isRtl */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { TAPi18n } from 'meteor/tap:i18n'; +import { isRtl } from 'meteor/rocketchat:ui'; import moment from 'moment'; const currentLanguage = new ReactiveVar(); diff --git a/client/startup/startup.js b/client/startup/startup.js index cf2c1eea246b..e5602cd19313 100644 --- a/client/startup/startup.js +++ b/client/startup/startup.js @@ -1,8 +1,9 @@ -/* globals UserPresence, fireGlobalEvent */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import { TimeSync } from 'meteor/mizzao:timesync'; +import { UserPresence } from 'meteor/konecty:user-presence'; +import { fireGlobalEvent } from 'meteor/rocketchat:ui'; import toastr from 'toastr'; import hljs from 'highlight.js'; import 'highlight.js/styles/github.css'; diff --git a/client/startup/unread.js b/client/startup/unread.js index 5580c0635bf7..03bae2b49253 100644 --- a/client/startup/unread.js +++ b/client/startup/unread.js @@ -1,9 +1,9 @@ -/* 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'; +import { fireGlobalEvent, readMessage } from 'meteor/rocketchat:ui'; Meteor.startup(function() { Tracker.autorun(function() { @@ -77,8 +77,8 @@ Meteor.startup(function() { const unread = Session.get('unread'); fireGlobalEvent('unread-changed', unread); - if (favico) { - favico.badge(unread, { + if (window.favico) { + window.favico.badge(unread, { bgColor: typeof unread !== 'number' ? '#3d8a3a' : '#ac1b1b', }); } diff --git a/packages/meteor-accounts-saml/client/saml_client.js b/packages/meteor-accounts-saml/client/saml_client.js index a30ad29dca19..c89f8ca6632f 100644 --- a/packages/meteor-accounts-saml/client/saml_client.js +++ b/packages/meteor-accounts-saml/client/saml_client.js @@ -1,4 +1,3 @@ -/* globals cordova */ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; diff --git a/packages/rocketchat-authorization/server/functions/canAccessRoom.js b/packages/rocketchat-authorization/server/functions/canAccessRoom.js index eb67c5078b87..dc83d5652648 100644 --- a/packages/rocketchat-authorization/server/functions/canAccessRoom.js +++ b/packages/rocketchat-authorization/server/functions/canAccessRoom.js @@ -1,4 +1,5 @@ -/* globals RocketChat */ +import { RocketChat } from 'meteor/rocketchat:lib'; + RocketChat.authz.roomAccessValidators = [ function(room, user = {}) { if (room && room.t === 'c') { diff --git a/packages/rocketchat-channel-settings/client/views/channelSettings.js b/packages/rocketchat-channel-settings/client/views/channelSettings.js index d207a2d7fb1f..09c868db0ccd 100644 --- a/packages/rocketchat-channel-settings/client/views/channelSettings.js +++ b/packages/rocketchat-channel-settings/client/views/channelSettings.js @@ -1,8 +1,8 @@ -/* globals popover */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import { popover } from 'meteor/rocketchat:ui'; import toastr from 'toastr'; import moment from 'moment'; import s from 'underscore.string'; diff --git a/packages/rocketchat-channel-settings/package.js b/packages/rocketchat-channel-settings/package.js index 24d436c97e47..3ce10ab02904 100644 --- a/packages/rocketchat-channel-settings/package.js +++ b/packages/rocketchat-channel-settings/package.js @@ -12,6 +12,7 @@ Package.onUse(function(api) { 'tracker', 'templating', 'rocketchat:lib', + 'rocketchat:ui', ]); api.addFiles('client/stylesheets/channel-settings.css', 'client'); api.mainModule('client/index.js', 'client'); diff --git a/packages/rocketchat-custom-oauth/client/custom_oauth_client.js b/packages/rocketchat-custom-oauth/client/custom_oauth_client.js index 56440dc16c4f..91405d86b5d3 100644 --- a/packages/rocketchat-custom-oauth/client/custom_oauth_client.js +++ b/packages/rocketchat-custom-oauth/client/custom_oauth_client.js @@ -1,9 +1,9 @@ -/* globals OAuth*/ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import { OAuth } from 'meteor/oauth'; import s from 'underscore.string'; // Request custom OAuth credentials for the user diff --git a/packages/rocketchat-custom-oauth/server/custom_oauth_server.js b/packages/rocketchat-custom-oauth/server/custom_oauth_server.js index 2e24142156ac..02b8214ece0c 100644 --- a/packages/rocketchat-custom-oauth/server/custom_oauth_server.js +++ b/packages/rocketchat-custom-oauth/server/custom_oauth_server.js @@ -1,7 +1,7 @@ -/* globals OAuth*/ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; +import { OAuth } from 'meteor/oauth'; import { HTTP } from 'meteor/http'; import { ServiceConfiguration } from 'meteor/service-configuration'; import _ from 'underscore'; diff --git a/packages/rocketchat-e2e/.eslintrc b/packages/rocketchat-e2e/.eslintrc deleted file mode 100644 index 625a0007ef14..000000000000 --- a/packages/rocketchat-e2e/.eslintrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": ["@rocket.chat/eslint-config"], - "root": true -} diff --git a/packages/rocketchat-e2e/client/accountEncryption.js b/packages/rocketchat-e2e/client/accountEncryption.js index 9b09ebbf6d41..4b25397a90af 100644 --- a/packages/rocketchat-e2e/client/accountEncryption.js +++ b/packages/rocketchat-e2e/client/accountEncryption.js @@ -1,4 +1,6 @@ -/* globals Template, t, ReactiveVar */ + +import { Template } from 'meteor/templating'; +import { ReactiveVar } from 'meteor/reactive-var'; import toastr from 'toastr'; import s from 'underscore.string'; import { RocketChat } from 'meteor/rocketchat:lib'; diff --git a/packages/rocketchat-e2e/client/rocketchat.e2e.js b/packages/rocketchat-e2e/client/rocketchat.e2e.js index ae8059af9401..2ef8992bd0ab 100644 --- a/packages/rocketchat-e2e/client/rocketchat.e2e.js +++ b/packages/rocketchat-e2e/client/rocketchat.e2e.js @@ -1,4 +1,3 @@ -/* globals alerts, modal */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { ReactiveVar } from 'meteor/reactive-var'; diff --git a/packages/rocketchat-e2e/package.js b/packages/rocketchat-e2e/package.js index f3f89020c5be..2626854b6ddd 100644 --- a/packages/rocketchat-e2e/package.js +++ b/packages/rocketchat-e2e/package.js @@ -1,5 +1,3 @@ -/* globals Package: false */ - Package.describe({ name: 'rocketchat:e2e', version: '0.0.1', diff --git a/packages/rocketchat-emoji/client/keyboardFix.js b/packages/rocketchat-emoji/client/keyboardFix.js index c50f6bc2485b..7f65426c2d33 100644 --- a/packages/rocketchat-emoji/client/keyboardFix.js +++ b/packages/rocketchat-emoji/client/keyboardFix.js @@ -1,4 +1,3 @@ -/* global device */ import { Meteor } from 'meteor/meteor'; import { RocketChat } from 'meteor/rocketchat:lib'; diff --git a/packages/rocketchat-file-upload/client/lib/fileUploadHandler.js b/packages/rocketchat-file-upload/client/lib/fileUploadHandler.js index 0ad23ff54dbd..534ebeef82bb 100644 --- a/packages/rocketchat-file-upload/client/lib/fileUploadHandler.js +++ b/packages/rocketchat-file-upload/client/lib/fileUploadHandler.js @@ -1,8 +1,8 @@ -/* globals FileUploadBase, UploadFS, fileUploadHandler:true */ -/* exported fileUploadHandler */ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Tracker } from 'meteor/tracker'; +import { UploadFS } from 'meteor/jalik:ufs'; +import { FileUploadBase } from '../../lib/FileUploadBase'; new UploadFS.Store({ collection: RocketChat.models.Uploads.model, diff --git a/packages/rocketchat-file-upload/globalFileRestrictions.js b/packages/rocketchat-file-upload/globalFileRestrictions.js index 677202d1dba5..0cda9fb97626 100644 --- a/packages/rocketchat-file-upload/globalFileRestrictions.js +++ b/packages/rocketchat-file-upload/globalFileRestrictions.js @@ -1,6 +1,6 @@ -/* globals Slingshot */ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import { Slingshot } from 'meteor/edgee:slingshot'; import filesize from 'filesize'; diff --git a/packages/rocketchat-file-upload/lib/FileUpload.js b/packages/rocketchat-file-upload/lib/FileUpload.js index 86508e369e52..50974ed99be8 100644 --- a/packages/rocketchat-file-upload/lib/FileUpload.js +++ b/packages/rocketchat-file-upload/lib/FileUpload.js @@ -1,5 +1,3 @@ -/* globals FileUpload:true */ -/* exported FileUpload */ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; diff --git a/packages/rocketchat-file-upload/lib/FileUploadBase.js b/packages/rocketchat-file-upload/lib/FileUploadBase.js index 0327222401b6..28e2d3cc5302 100644 --- a/packages/rocketchat-file-upload/lib/FileUploadBase.js +++ b/packages/rocketchat-file-upload/lib/FileUploadBase.js @@ -1,7 +1,6 @@ -/* globals FileUploadBase:true, UploadFS */ -/* exported FileUploadBase */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; +import { UploadFS } from 'meteor/jalik:ufs'; import _ from 'underscore'; UploadFS.config.defaultStorePermissions = new UploadFS.StorePermissions({ @@ -35,7 +34,7 @@ UploadFS.config.defaultStorePermissions = new UploadFS.StorePermissions({ }); -FileUploadBase = class FileUploadBase { +export class FileUploadBase { constructor(store, meta, file) { this.id = Random.id(); this.meta = meta; @@ -77,4 +76,4 @@ FileUploadBase = class FileUploadBase { stop() { return this.handler.stop(); } -}; +} diff --git a/packages/rocketchat-file-upload/package.js b/packages/rocketchat-file-upload/package.js index 26bec0342c39..a027ba7285ee 100644 --- a/packages/rocketchat-file-upload/package.js +++ b/packages/rocketchat-file-upload/package.js @@ -1,4 +1,3 @@ -/* globals Package */ Package.describe({ name: 'rocketchat:file-upload', version: '0.0.1', diff --git a/packages/rocketchat-file-upload/server/config/AmazonS3.js b/packages/rocketchat-file-upload/server/config/AmazonS3.js index ec8b5d220036..1b03831f2384 100644 --- a/packages/rocketchat-file-upload/server/config/AmazonS3.js +++ b/packages/rocketchat-file-upload/server/config/AmazonS3.js @@ -1,5 +1,3 @@ -/* globals FileUpload */ - import _ from 'underscore'; import { FileUploadClass } from '../lib/FileUpload'; import '../../ufs/AmazonS3/server.js'; diff --git a/packages/rocketchat-file-upload/server/config/FileSystem.js b/packages/rocketchat-file-upload/server/config/FileSystem.js index d0e74e5f29d1..36933d93ade3 100644 --- a/packages/rocketchat-file-upload/server/config/FileSystem.js +++ b/packages/rocketchat-file-upload/server/config/FileSystem.js @@ -1,6 +1,5 @@ -/* globals FileUpload, UploadFS */ - import { Meteor } from 'meteor/meteor'; +import { UploadFS } from 'meteor/jalik:ufs'; import _ from 'underscore'; import fs from 'fs'; import { FileUploadClass } from '../lib/FileUpload'; diff --git a/packages/rocketchat-file-upload/server/config/GoogleStorage.js b/packages/rocketchat-file-upload/server/config/GoogleStorage.js index 1491b335c324..f0a20fc7db36 100644 --- a/packages/rocketchat-file-upload/server/config/GoogleStorage.js +++ b/packages/rocketchat-file-upload/server/config/GoogleStorage.js @@ -1,5 +1,3 @@ -/* globals FileUpload */ - import _ from 'underscore'; import { FileUploadClass } from '../lib/FileUpload'; import '../../ufs/GoogleStorage/server.js'; diff --git a/packages/rocketchat-file-upload/server/config/GridFS.js b/packages/rocketchat-file-upload/server/config/GridFS.js index cb001e0737af..4a6adfe55ea2 100644 --- a/packages/rocketchat-file-upload/server/config/GridFS.js +++ b/packages/rocketchat-file-upload/server/config/GridFS.js @@ -1,4 +1,4 @@ -/* globals FileUpload, UploadFS */ +import { UploadFS } from 'meteor/jalik:ufs'; import stream from 'stream'; import zlib from 'zlib'; import util from 'util'; diff --git a/packages/rocketchat-file-upload/server/config/Slingshot_DEPRECATED.js b/packages/rocketchat-file-upload/server/config/Slingshot_DEPRECATED.js index 2a7539bb17c8..bcb130c8fa67 100644 --- a/packages/rocketchat-file-upload/server/config/Slingshot_DEPRECATED.js +++ b/packages/rocketchat-file-upload/server/config/Slingshot_DEPRECATED.js @@ -1,6 +1,6 @@ -/* globals Slingshot, FileUpload */ import _ from 'underscore'; import { Random } from 'meteor/random'; +import { Slingshot } from 'meteor/edgee:slingshot'; const configureSlingshot = _.debounce(() => { const type = RocketChat.settings.get('FileUpload_Storage_Type'); diff --git a/packages/rocketchat-file-upload/server/config/Webdav.js b/packages/rocketchat-file-upload/server/config/Webdav.js index 9fda1473702f..bc29c284f360 100644 --- a/packages/rocketchat-file-upload/server/config/Webdav.js +++ b/packages/rocketchat-file-upload/server/config/Webdav.js @@ -1,5 +1,3 @@ -/* globals FileUpload */ - import _ from 'underscore'; import { FileUploadClass } from '../lib/FileUpload'; import '../../ufs/Webdav/server.js'; diff --git a/packages/rocketchat-file-upload/server/config/_configUploadStorage.js b/packages/rocketchat-file-upload/server/config/_configUploadStorage.js index 44b0587a0740..b85f2c91a689 100644 --- a/packages/rocketchat-file-upload/server/config/_configUploadStorage.js +++ b/packages/rocketchat-file-upload/server/config/_configUploadStorage.js @@ -1,5 +1,4 @@ -/* globals UploadFS */ - +import { UploadFS } from 'meteor/jalik:ufs'; import _ from 'underscore'; import './AmazonS3.js'; import './FileSystem.js'; diff --git a/packages/rocketchat-file-upload/server/lib/FileUpload.js b/packages/rocketchat-file-upload/server/lib/FileUpload.js index 064970ab1666..88fa990759eb 100644 --- a/packages/rocketchat-file-upload/server/lib/FileUpload.js +++ b/packages/rocketchat-file-upload/server/lib/FileUpload.js @@ -1,5 +1,3 @@ -/* globals UploadFS */ - import { Meteor } from 'meteor/meteor'; import fs from 'fs'; import stream from 'stream'; @@ -7,6 +5,7 @@ import mime from 'mime-type/with-db'; import Future from 'fibers/future'; import sharp from 'sharp'; import { Cookies } from 'meteor/ostrio:cookies'; +import { UploadFS } from 'meteor/jalik:ufs'; const cookie = new Cookies(); diff --git a/packages/rocketchat-file-upload/server/lib/proxy.js b/packages/rocketchat-file-upload/server/lib/proxy.js index 83653bd43a24..da8637cdfb99 100644 --- a/packages/rocketchat-file-upload/server/lib/proxy.js +++ b/packages/rocketchat-file-upload/server/lib/proxy.js @@ -1,7 +1,7 @@ -/* globals UploadFS, InstanceStatus */ - import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; +import { UploadFS } from 'meteor/jalik:ufs'; +import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; import http from 'http'; import URL from 'url'; diff --git a/packages/rocketchat-file-upload/server/lib/requests.js b/packages/rocketchat-file-upload/server/lib/requests.js index 1324891569b6..cac712ca25a1 100644 --- a/packages/rocketchat-file-upload/server/lib/requests.js +++ b/packages/rocketchat-file-upload/server/lib/requests.js @@ -1,6 +1,5 @@ -/* globals FileUpload, WebApp */ - import { Meteor } from 'meteor/meteor'; +import { WebApp } from 'meteor/webapp'; WebApp.connectHandlers.use('/file-upload/', function(req, res, next) { diff --git a/packages/rocketchat-file-upload/server/methods/getS3FileUrl.js b/packages/rocketchat-file-upload/server/methods/getS3FileUrl.js index 86bd8b7fbc1f..d104a60eca5c 100644 --- a/packages/rocketchat-file-upload/server/methods/getS3FileUrl.js +++ b/packages/rocketchat-file-upload/server/methods/getS3FileUrl.js @@ -1,5 +1,5 @@ -/* globals UploadFS */ import { Meteor } from 'meteor/meteor'; +import { UploadFS } from 'meteor/jalik:ufs'; let protectedFiles; diff --git a/packages/rocketchat-iframe-login/client/iframe_client.js b/packages/rocketchat-iframe-login/client/iframe_client.js index ae80309896ce..19825a9ba837 100644 --- a/packages/rocketchat-iframe-login/client/iframe_client.js +++ b/packages/rocketchat-iframe-login/client/iframe_client.js @@ -1,4 +1,3 @@ -/* globals facebookConnectPlugin, TwitterConnect */ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { RocketChat } from 'meteor/rocketchat:lib'; diff --git a/packages/rocketchat-internal-hubot/server/hubot.js b/packages/rocketchat-internal-hubot/server/hubot.js index 5fa518092f7c..3c6fd1499ae9 100644 --- a/packages/rocketchat-internal-hubot/server/hubot.js +++ b/packages/rocketchat-internal-hubot/server/hubot.js @@ -1,4 +1,3 @@ -/* globals __meteor_bootstrap__ */ import { Meteor } from 'meteor/meteor'; import { RocketChat } from 'meteor/rocketchat:lib'; import _ from 'underscore'; diff --git a/packages/rocketchat-lib/client/lib/openRoom.js b/packages/rocketchat-lib/client/lib/openRoom.js index b7550a9ab1f4..c12383cd87c0 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.js +++ b/packages/rocketchat-lib/client/lib/openRoom.js @@ -1,4 +1,4 @@ -/* globals fireGlobalEvent readMessage currentTracker*/ +/* globals fireGlobalEvent currentTracker*/ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; diff --git a/packages/rocketchat-ui/client/lib/avatar.js b/packages/rocketchat-ui/client/lib/avatar.js index 5c7f6378bca8..6ff52065450a 100644 --- a/packages/rocketchat-ui/client/lib/avatar.js +++ b/packages/rocketchat-ui/client/lib/avatar.js @@ -24,7 +24,7 @@ this.getAvatarAsPng = function(username, cb) { }; }; -this.updateAvatarOfUsername = function(username) { +updateAvatarOfUsername = function(username) { //eslint-disable-line const key = `avatar_random_${ username }`; Session.set(key, Math.round(Math.random() * 1000)); diff --git a/packages/rocketchat-ui/client/lib/collections.js b/packages/rocketchat-ui/client/lib/collections.js index 51f9638a2d51..bcf54ee71119 100644 --- a/packages/rocketchat-ui/client/lib/collections.js +++ b/packages/rocketchat-ui/client/lib/collections.js @@ -7,8 +7,8 @@ ChatMessage = new Mongo.Collection(null); //eslint-disable-line this.CachedChatRoom = new RocketChat.CachedCollection({ name: 'rooms' }); ChatRoom = this.CachedChatRoom.collection; -this.CachedChatSubscription = new RocketChat.CachedCollection({ name: 'subscriptions' }); -ChatSubscription = this.CachedChatSubscription.collection; //eslint-disable-line +CachedChatSubscription = new RocketChat.CachedCollection({ name: 'subscriptions' }); //eslint-disable-line +ChatSubscription = CachedChatSubscription.collection; //eslint-disable-line UserRoles = new Mongo.Collection(null); //eslint-disable-line RoomRoles = new Mongo.Collection(null); //eslint-disable-line this.UserAndRoom = new Mongo.Collection(null); @@ -24,7 +24,7 @@ Meteor.startup(() => { Tracker.autorun(() => { if (!Meteor.userId() && RocketChat.settings.get('Accounts_AllowAnonymousRead') === true) { this.CachedChatRoom.init(); - this.CachedChatSubscription.ready.set(true); + CachedChatSubscription.ready.set(true); //eslint-disable-line } }); }); diff --git a/packages/rocketchat-ui/client/lib/fileUpload.js b/packages/rocketchat-ui/client/lib/fileUpload.js index bf9dc1669254..d4adfd3327d3 100644 --- a/packages/rocketchat-ui/client/lib/fileUpload.js +++ b/packages/rocketchat-ui/client/lib/fileUpload.js @@ -1,9 +1,10 @@ -/* globals fileUploadHandler, Handlebars, fileUpload, modal, t */ +/* globals Handlebars, fileUpload, modal, t */ /* exported fileUpload */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import s from 'underscore.string'; +import { fileUploadHandler } from 'meteor/rocketchat:file-upload'; const readAsDataURL = (file, callback) => { const reader = new FileReader(); diff --git a/packages/rocketchat-ui/client/lib/readMessages.js b/packages/rocketchat-ui/client/lib/readMessages.js index b35db6edb2d2..c002f3754809 100644 --- a/packages/rocketchat-ui/client/lib/readMessages.js +++ b/packages/rocketchat-ui/client/lib/readMessages.js @@ -15,7 +15,7 @@ import _ from 'underscore'; // window.addEventListener 'focus', -> // readMessage.refreshUnreadMark(undefined, true) -const readMessage = new class { +readMessage = new class { constructor() { this.debug = false; this.callbacks = []; @@ -211,5 +211,3 @@ Meteor.startup(function() { } }); }); -export { readMessage }; -this.readMessage = readMessage; diff --git a/packages/rocketchat-ui/package.js b/packages/rocketchat-ui/package.js index f36d5d225924..ac46fd441ea6 100644 --- a/packages/rocketchat-ui/package.js +++ b/packages/rocketchat-ui/package.js @@ -27,6 +27,7 @@ Package.onUse(function(api) { 'rocketchat:lazy-load', 'rocketchat:e2e', 'mizzao:autocomplete', + 'rocketchat:file-upload', ]); api.use('kadira:flow-router', 'client'); @@ -168,4 +169,7 @@ Package.onUse(function(api) { api.export('alerts', 'client'); api.export('AccountBox', 'client'); api.export('chatMessages', 'client'); + api.export('CachedChatSubscription', 'client'); + api.export('readMessage', 'client'); + api.export('updateAvatarOfUsername', 'client'); }); From 124312506249999e0fd5a43a918d999ec431dc9f Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Wed, 19 Dec 2018 16:12:55 -0200 Subject: [PATCH 04/11] Remove /* globals */ wave 2 (#12988) * Remove /* globals */ from files wave 1 * Fix lint * Remove /* globals */ wave 2 --- .eslintrc | 19 +++++++++++++------ packages/rocketchat-file-upload/package.js | 1 + .../rocketchat-lib/client/MessageAction.js | 1 - packages/rocketchat-lib/client/OAuthProxy.js | 2 +- .../rocketchat-lib/client/lib/openRoom.js | 3 +-- .../rocketchat-lib/client/lib/roomExit.js | 2 +- .../rocketchat-lib/client/lib/roomTypes.js | 1 - .../rocketchat-lib/client/lib/settings.js | 3 +-- .../rocketchat-lib/client/lib/userRoles.js | 1 - .../rocketchat-lib/lib/RoomTypesCommon.js | 1 - .../rocketchat-lib/lib/roomTypes/direct.js | 1 - .../rocketchat-lib/lib/roomTypes/private.js | 1 - .../rocketchat-lib/lib/roomTypes/public.js | 1 - .../lib/startup/settingsOnLoadSiteUrl.js | 2 +- packages/rocketchat-lib/package.js | 4 ++++ .../server/functions/createRoom.js | 1 - .../server/functions/deleteMessage.js | 1 - .../server/functions/getFullUserData.js | 1 - .../getRoomByNameOrIdWithOptionToJoin.js | 1 - .../server/functions/saveUser.js | 3 ++- .../server/functions/setUsername.js | 1 - .../server/lib/PushNotification.js | 3 ++- .../rocketchat-lib/server/lib/RateLimiter.js | 2 +- .../rocketchat-lib/server/lib/configLogger.js | 2 +- packages/rocketchat-lib/server/lib/debug.js | 2 +- .../server/methods/cleanRoomHistory.js | 1 - .../rocketchat-lib/server/models/Avatars.js | 2 +- .../rocketchat-lib/server/models/Uploads.js | 2 +- .../rocketchat-lib/server/models/_BaseDb.js | 3 +-- .../rocketchat-lib/server/oauth/google.js | 2 +- packages/rocketchat-lib/server/oauth/proxy.js | 2 +- .../server/startup/oAuthServicesUpdate.js | 2 +- .../server/startup/settingsOnLoadCdnPrefix.js | 2 +- 33 files changed, 37 insertions(+), 39 deletions(-) diff --git a/.eslintrc b/.eslintrc index ea923ee84d23..3990ce906197 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,29 +10,36 @@ "Assets" : false, "ChatMessage" : false, "ChatMessages" : false, + "chatMessages" : false, "ChatRoom" : false, "ChatSubscription" : false, - "cordova" : false, - "device" : false, - "facebookConnectPlugin" : false, + "cordova" : false, + "device" : false, + "facebookConnectPlugin" : false, "FileUpload" : false, "fileUploadHandler" : false, + "fireGlobalEvent" : false, "handleError" : false, "getAvatarUrlFromUsername" : false, + "getAvatarSuggestionForUser" : false, "Logger" : false, "modal" : false, - "menu" : false, + "menu" : false, "Npm" : false, + "openRoom" : false, "Package" : false, - "readMessage" : false, + "readMessage" : false, "RocketChat" : true, + "roomExit" : true, "RoomHistoryManager" : false, "RoomManager" : false, + "RoomRoles" : false, "Settings" : false, "SideNav" : false, "t" : false, "toastr" : false, - "TwitterConnect" : false, + "TwitterConnect" : false, + "UserRoles" : false, "VideoRecorder" : false, "VRecDialog" : false } diff --git a/packages/rocketchat-file-upload/package.js b/packages/rocketchat-file-upload/package.js index a027ba7285ee..2a0ed2811e6d 100644 --- a/packages/rocketchat-file-upload/package.js +++ b/packages/rocketchat-file-upload/package.js @@ -19,6 +19,7 @@ Package.onUse(function(api) { api.use('accounts-base'); api.use('tracker'); api.use('webapp'); + api.use('konecty:multiple-instances-status'); api.use('rocketchat:e2e'); api.addFiles('globalFileRestrictions.js'); diff --git a/packages/rocketchat-lib/client/MessageAction.js b/packages/rocketchat-lib/client/MessageAction.js index 0548b33e7ce5..92257e842cce 100644 --- a/packages/rocketchat-lib/client/MessageAction.js +++ b/packages/rocketchat-lib/client/MessageAction.js @@ -1,4 +1,3 @@ -/* globals chatMessages cordova */ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; import { ReactiveVar } from 'meteor/reactive-var'; diff --git a/packages/rocketchat-lib/client/OAuthProxy.js b/packages/rocketchat-lib/client/OAuthProxy.js index b5c36676b0bb..a923d3dded88 100644 --- a/packages/rocketchat-lib/client/OAuthProxy.js +++ b/packages/rocketchat-lib/client/OAuthProxy.js @@ -1,5 +1,5 @@ -/* globals OAuth */ import _ from 'underscore'; +import { OAuth } from 'meteor/oauth'; OAuth.launchLogin = _.wrap(OAuth.launchLogin, function(func, options) { const proxy = RocketChat.settings.get('Accounts_OAuth_Proxy_services').replace(/\s/g, '').split(','); diff --git a/packages/rocketchat-lib/client/lib/openRoom.js b/packages/rocketchat-lib/client/lib/openRoom.js index c12383cd87c0..56e766bb1506 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.js +++ b/packages/rocketchat-lib/client/lib/openRoom.js @@ -1,4 +1,3 @@ -/* globals fireGlobalEvent currentTracker*/ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; @@ -6,7 +5,7 @@ import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; import _ from 'underscore'; -currentTracker = undefined; +export let currentTracker = undefined; openRoom = function(type, name) { // eslint-disable-line Session.set('openedRoom', null); diff --git a/packages/rocketchat-lib/client/lib/roomExit.js b/packages/rocketchat-lib/client/lib/roomExit.js index c6daea088cd4..fabf375a6769 100644 --- a/packages/rocketchat-lib/client/lib/roomExit.js +++ b/packages/rocketchat-lib/client/lib/roomExit.js @@ -1,6 +1,6 @@ -/* globals currentTracker */ import { Blaze } from 'meteor/blaze'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; +import { currentTracker } from './openRoom'; this.roomExit = function() { // 7370 - Close flex-tab when opening a room on mobile UI diff --git a/packages/rocketchat-lib/client/lib/roomTypes.js b/packages/rocketchat-lib/client/lib/roomTypes.js index e2a39a360484..9201d9bba291 100644 --- a/packages/rocketchat-lib/client/lib/roomTypes.js +++ b/packages/rocketchat-lib/client/lib/roomTypes.js @@ -49,7 +49,6 @@ RocketChat.roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { if (!user) { return room && room.ro; } - /* globals RoomRoles */ const userOwner = RoomRoles.findOne({ rid: roomId, 'u._id': user._id, diff --git a/packages/rocketchat-lib/client/lib/settings.js b/packages/rocketchat-lib/client/lib/settings.js index 7516f5aef277..07697e94bb10 100644 --- a/packages/rocketchat-lib/client/lib/settings.js +++ b/packages/rocketchat-lib/client/lib/settings.js @@ -1,13 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import { ReactiveDict } from 'meteor/reactive-dict'; /* * RocketChat.settings holds all packages settings * @namespace RocketChat.settings */ -/* globals ReactiveDict*/ - RocketChat.settings.cachedCollection = new RocketChat.CachedCollection({ name: 'public-settings', eventType: 'onAll', diff --git a/packages/rocketchat-lib/client/lib/userRoles.js b/packages/rocketchat-lib/client/lib/userRoles.js index 11a1380aeb63..e9af46a219d2 100644 --- a/packages/rocketchat-lib/client/lib/userRoles.js +++ b/packages/rocketchat-lib/client/lib/userRoles.js @@ -1,4 +1,3 @@ -/* globals UserRoles, RoomRoles */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; diff --git a/packages/rocketchat-lib/lib/RoomTypesCommon.js b/packages/rocketchat-lib/lib/RoomTypesCommon.js index e80c0f90464a..ee17d5bbb858 100644 --- a/packages/rocketchat-lib/lib/RoomTypesCommon.js +++ b/packages/rocketchat-lib/lib/RoomTypesCommon.js @@ -1,4 +1,3 @@ -/* globals roomExit */ import { Meteor } from 'meteor/meteor'; import { RoomTypeConfig } from './RoomTypeConfig'; import { FlowRouter } from 'meteor/kadira:flow-router'; diff --git a/packages/rocketchat-lib/lib/roomTypes/direct.js b/packages/rocketchat-lib/lib/roomTypes/direct.js index b3d201578181..be171722811c 100644 --- a/packages/rocketchat-lib/lib/roomTypes/direct.js +++ b/packages/rocketchat-lib/lib/roomTypes/direct.js @@ -1,4 +1,3 @@ -/* globals openRoom */ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext } from '../RoomTypeConfig'; diff --git a/packages/rocketchat-lib/lib/roomTypes/private.js b/packages/rocketchat-lib/lib/roomTypes/private.js index 9b86b2d17abc..c41443215004 100644 --- a/packages/rocketchat-lib/lib/roomTypes/private.js +++ b/packages/rocketchat-lib/lib/roomTypes/private.js @@ -1,4 +1,3 @@ -/* globals openRoom */ import { Meteor } from 'meteor/meteor'; import { RoomSettingsEnum, RoomTypeConfig, RoomTypeRouteConfig, UiTextContext } from '../RoomTypeConfig'; diff --git a/packages/rocketchat-lib/lib/roomTypes/public.js b/packages/rocketchat-lib/lib/roomTypes/public.js index 5168415c1b39..493496dfd7ee 100644 --- a/packages/rocketchat-lib/lib/roomTypes/public.js +++ b/packages/rocketchat-lib/lib/roomTypes/public.js @@ -1,4 +1,3 @@ -/* globals openRoom */ import { Meteor } from 'meteor/meteor'; import { RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext } from '../RoomTypeConfig'; diff --git a/packages/rocketchat-lib/lib/startup/settingsOnLoadSiteUrl.js b/packages/rocketchat-lib/lib/startup/settingsOnLoadSiteUrl.js index 70c6d78cb6f0..7d6aa29034a5 100644 --- a/packages/rocketchat-lib/lib/startup/settingsOnLoadSiteUrl.js +++ b/packages/rocketchat-lib/lib/startup/settingsOnLoadSiteUrl.js @@ -1,5 +1,5 @@ -/* globals WebAppInternals */ import { Meteor } from 'meteor/meteor'; +import { WebAppInternals } from 'meteor/webapp'; RocketChat.settings.get('Site_Url', function(key, value) { if (value == null || value.trim() === '') { diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index 782066489ad9..ec59039597b8 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -14,8 +14,10 @@ Package.onUse(function(api) { api.use('accounts-base'); api.use('ecmascript'); api.use('random'); + api.use('google-oauth'); api.use('check'); api.use('tracker'); + api.use('jparker:gravatar'); api.use('ddp-rate-limiter'); api.use('mongo'); api.use('oauth'); @@ -31,7 +33,9 @@ Package.onUse(function(api) { api.use('rocketchat:mailer'); api.use('mizzao:timesync'); api.use('rocketchat:custom-oauth'); + api.use('konecty:multiple-instances-status'); api.use('rocketchat:file'); + api.use('rocketchat:push'); api.use('rocketchat:authorization', { unordered: true }); api.use('rocketchat:push-notifications', { unordered: true }); diff --git a/packages/rocketchat-lib/server/functions/createRoom.js b/packages/rocketchat-lib/server/functions/createRoom.js index 532b2e8c0ea7..f901eb3e1b24 100644 --- a/packages/rocketchat-lib/server/functions/createRoom.js +++ b/packages/rocketchat-lib/server/functions/createRoom.js @@ -1,4 +1,3 @@ -/* globals RocketChat */ import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; import s from 'underscore.string'; diff --git a/packages/rocketchat-lib/server/functions/deleteMessage.js b/packages/rocketchat-lib/server/functions/deleteMessage.js index 27a576d4141b..0f04f99cc519 100644 --- a/packages/rocketchat-lib/server/functions/deleteMessage.js +++ b/packages/rocketchat-lib/server/functions/deleteMessage.js @@ -1,4 +1,3 @@ -/* globals FileUpload */ import { Meteor } from 'meteor/meteor'; RocketChat.deleteMessage = function(message, user) { diff --git a/packages/rocketchat-lib/server/functions/getFullUserData.js b/packages/rocketchat-lib/server/functions/getFullUserData.js index 352ca6e24e7f..a9ba2d99ffec 100644 --- a/packages/rocketchat-lib/server/functions/getFullUserData.js +++ b/packages/rocketchat-lib/server/functions/getFullUserData.js @@ -1,4 +1,3 @@ -/* globals RocketChat */ import s from 'underscore.string'; const logger = new Logger('getFullUserData'); diff --git a/packages/rocketchat-lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js b/packages/rocketchat-lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js index 4ccf99191686..89a88f11ad53 100644 --- a/packages/rocketchat-lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js +++ b/packages/rocketchat-lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js @@ -1,4 +1,3 @@ -/* globals RocketChat */ import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; diff --git a/packages/rocketchat-lib/server/functions/saveUser.js b/packages/rocketchat-lib/server/functions/saveUser.js index 7d6fbf9f5f64..b997f0f512d9 100644 --- a/packages/rocketchat-lib/server/functions/saveUser.js +++ b/packages/rocketchat-lib/server/functions/saveUser.js @@ -1,9 +1,10 @@ -/* globals Gravatar */ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import _ from 'underscore'; import s from 'underscore.string'; import * as Mailer from 'meteor/rocketchat:mailer'; +import { Gravatar } from 'meteor/jparker:gravatar'; + let html = ''; Meteor.startup(() => { Mailer.getTemplate('Accounts_UserAddedEmail_Email', (template) => { diff --git a/packages/rocketchat-lib/server/functions/setUsername.js b/packages/rocketchat-lib/server/functions/setUsername.js index 109a7f4e6ecd..bada501f6649 100644 --- a/packages/rocketchat-lib/server/functions/setUsername.js +++ b/packages/rocketchat-lib/server/functions/setUsername.js @@ -37,7 +37,6 @@ RocketChat._setUsername = function(userId, u) { } // Set new username* RocketChat.models.Users.setUsername(user._id, username); - /* globals getAvatarSuggestionForUser */ user.username = username; if (!previousUsername && RocketChat.settings.get('Accounts_SetDefaultAvatar') === true) { const avatarSuggestions = getAvatarSuggestionForUser(user); diff --git a/packages/rocketchat-lib/server/lib/PushNotification.js b/packages/rocketchat-lib/server/lib/PushNotification.js index 24255e03b26f..fea610a53521 100644 --- a/packages/rocketchat-lib/server/lib/PushNotification.js +++ b/packages/rocketchat-lib/server/lib/PushNotification.js @@ -1,4 +1,5 @@ -/* globals Push */ +import { Push } from 'meteor/rocketchat:push'; + class PushNotification { getNotificationId(roomId) { const serverId = RocketChat.settings.get('uniqueID'); diff --git a/packages/rocketchat-lib/server/lib/RateLimiter.js b/packages/rocketchat-lib/server/lib/RateLimiter.js index 001ad9d57eef..dcbb7ce5a0c1 100644 --- a/packages/rocketchat-lib/server/lib/RateLimiter.js +++ b/packages/rocketchat-lib/server/lib/RateLimiter.js @@ -1,6 +1,6 @@ -/* globals RateLimiter */ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; +import { RateLimiter } from 'meteor/rate-limit'; import _ from 'underscore'; RocketChat.RateLimiter = new class { diff --git a/packages/rocketchat-lib/server/lib/configLogger.js b/packages/rocketchat-lib/server/lib/configLogger.js index b0d2fef6170c..e8d79ffe7b25 100644 --- a/packages/rocketchat-lib/server/lib/configLogger.js +++ b/packages/rocketchat-lib/server/lib/configLogger.js @@ -1,5 +1,5 @@ -/* globals LoggerManager */ import { Meteor } from 'meteor/meteor'; +import { LoggerManager } from 'meteor/rocketchat:logger'; RocketChat.settings.get('Log_Package', function(key, value) { return LoggerManager.showPackage = value; diff --git a/packages/rocketchat-lib/server/lib/debug.js b/packages/rocketchat-lib/server/lib/debug.js index 35e8a92989d3..712a34d25608 100644 --- a/packages/rocketchat-lib/server/lib/debug.js +++ b/packages/rocketchat-lib/server/lib/debug.js @@ -1,6 +1,6 @@ -/* global InstanceStatus */ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; +import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; import _ from 'underscore'; const logger = new Logger('Meteor', { diff --git a/packages/rocketchat-lib/server/methods/cleanRoomHistory.js b/packages/rocketchat-lib/server/methods/cleanRoomHistory.js index 506091149fc6..b93cf480fa48 100644 --- a/packages/rocketchat-lib/server/methods/cleanRoomHistory.js +++ b/packages/rocketchat-lib/server/methods/cleanRoomHistory.js @@ -1,4 +1,3 @@ -/* globals FileUpload */ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; diff --git a/packages/rocketchat-lib/server/models/Avatars.js b/packages/rocketchat-lib/server/models/Avatars.js index 732c7c352320..b056909215cb 100644 --- a/packages/rocketchat-lib/server/models/Avatars.js +++ b/packages/rocketchat-lib/server/models/Avatars.js @@ -1,6 +1,6 @@ -/* globals InstanceStatus */ import _ from 'underscore'; import s from 'underscore.string'; +import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; RocketChat.models.Avatars = new class extends RocketChat.models._Base { constructor() { diff --git a/packages/rocketchat-lib/server/models/Uploads.js b/packages/rocketchat-lib/server/models/Uploads.js index 3030d4283d31..e25823640caf 100644 --- a/packages/rocketchat-lib/server/models/Uploads.js +++ b/packages/rocketchat-lib/server/models/Uploads.js @@ -1,6 +1,6 @@ -/* globals InstanceStatus */ import _ from 'underscore'; import s from 'underscore.string'; +import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; RocketChat.models.Uploads = new class extends RocketChat.models._Base { constructor() { diff --git a/packages/rocketchat-lib/server/models/_BaseDb.js b/packages/rocketchat-lib/server/models/_BaseDb.js index ede844222268..4b739f8a1bf1 100644 --- a/packages/rocketchat-lib/server/models/_BaseDb.js +++ b/packages/rocketchat-lib/server/models/_BaseDb.js @@ -1,6 +1,5 @@ -/* globals MongoInternals */ import { Match } from 'meteor/check'; -import { Mongo } from 'meteor/mongo'; +import { Mongo, MongoInternals } from 'meteor/mongo'; import _ from 'underscore'; const baseName = 'rocketchat_'; diff --git a/packages/rocketchat-lib/server/oauth/google.js b/packages/rocketchat-lib/server/oauth/google.js index 7da5f80d4f59..cdb50a05daed 100644 --- a/packages/rocketchat-lib/server/oauth/google.js +++ b/packages/rocketchat-lib/server/oauth/google.js @@ -1,7 +1,7 @@ -/* globals Google */ import { Match, check } from 'meteor/check'; import _ from 'underscore'; import { HTTP } from 'meteor/http'; +import { Google } from 'meteor/google-oauth'; function getIdentity(accessToken) { try { diff --git a/packages/rocketchat-lib/server/oauth/proxy.js b/packages/rocketchat-lib/server/oauth/proxy.js index 8886aabba8a0..7770f8fbc13e 100644 --- a/packages/rocketchat-lib/server/oauth/proxy.js +++ b/packages/rocketchat-lib/server/oauth/proxy.js @@ -1,5 +1,5 @@ -/* globals OAuth */ import _ from 'underscore'; +import { OAuth } from 'meteor/oauth'; OAuth._redirectUri = _.wrap(OAuth._redirectUri, function(func, serviceName, ...args) { const proxy = RocketChat.settings.get('Accounts_OAuth_Proxy_services').replace(/\s/g, '').split(','); diff --git a/packages/rocketchat-lib/server/startup/oAuthServicesUpdate.js b/packages/rocketchat-lib/server/startup/oAuthServicesUpdate.js index cc375ffffee0..7bff4f149603 100644 --- a/packages/rocketchat-lib/server/startup/oAuthServicesUpdate.js +++ b/packages/rocketchat-lib/server/startup/oAuthServicesUpdate.js @@ -1,6 +1,6 @@ -/* globals CustomOAuth */ import { Meteor } from 'meteor/meteor'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import { CustomOAuth } from 'meteor/rocketchat:custom-oauth'; import _ from 'underscore'; const logger = new Logger('rocketchat:lib', { diff --git a/packages/rocketchat-lib/server/startup/settingsOnLoadCdnPrefix.js b/packages/rocketchat-lib/server/startup/settingsOnLoadCdnPrefix.js index 8e3ada873bb7..bf8c2bbc9a52 100644 --- a/packages/rocketchat-lib/server/startup/settingsOnLoadCdnPrefix.js +++ b/packages/rocketchat-lib/server/startup/settingsOnLoadCdnPrefix.js @@ -1,5 +1,5 @@ -/* globals WebAppInternals*/ import { Meteor } from 'meteor/meteor'; +import { WebAppInternals } from 'meteor/webapp'; import _ from 'underscore'; function testWebAppInternals(fn) { From 52e9bb7f1e24a61600d98ba8d24ada9ee40cda86 Mon Sep 17 00:00:00 2001 From: Tsuki <39634109+tsukiRep@users.noreply.github.com> Date: Wed, 19 Dec 2018 19:25:03 +0100 Subject: [PATCH 05/11] [FIX] Exception in getSingleMessage (#12970) * fixed the fuckfuck ok * do the doing --- packages/rocketchat-lib/server/methods/getSingleMessage.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/rocketchat-lib/server/methods/getSingleMessage.js b/packages/rocketchat-lib/server/methods/getSingleMessage.js index 3317f03d3154..294cf1002ffa 100644 --- a/packages/rocketchat-lib/server/methods/getSingleMessage.js +++ b/packages/rocketchat-lib/server/methods/getSingleMessage.js @@ -11,11 +11,13 @@ Meteor.methods({ const msg = RocketChat.models.Messages.findOneById(msgId); - if (!msg && !msg.rid) { + if (!msg || !msg.rid) { return undefined; } - Meteor.call('canAccessRoom', msg.rid, Meteor.userId()); + if (!Meteor.call('canAccessRoom', msg.rid, Meteor.userId())) { + throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'getSingleMessage' }); + } return msg; }, From a2abfba4f83ce92440e222f4e96739df5adbc679 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 19 Dec 2018 16:25:28 -0200 Subject: [PATCH 06/11] [FIX] Revert Jitsi external API to an asset (#12954) * Remove Jitsi script load * Revert external_api.js to an asset --- packages/rocketchat-videobridge/client/index.js | 5 ----- .../rocketchat-videobridge/client/public/external_api.js | 5 ----- packages/rocketchat-videobridge/client/views/videoFlexTab.js | 2 +- packages/rocketchat-videobridge/package.js | 2 ++ 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/rocketchat-videobridge/client/index.js b/packages/rocketchat-videobridge/client/index.js index 047bf59e9015..f67988982782 100644 --- a/packages/rocketchat-videobridge/client/index.js +++ b/packages/rocketchat-videobridge/client/index.js @@ -1,4 +1,3 @@ -import { JitsiMeetExternalAPI } from './public/external_api'; import './views/videoFlexTab.html'; import './views/bbbLiveView.html'; import './views/videoFlexTabBbb.html'; @@ -7,7 +6,3 @@ import './views/videoFlexTabBbb'; import './tabBar'; import './actionLink'; import '../lib/messageType'; - -export { - JitsiMeetExternalAPI, -}; diff --git a/packages/rocketchat-videobridge/client/public/external_api.js b/packages/rocketchat-videobridge/client/public/external_api.js index d03fb049fe22..50825e32b2cc 100644 --- a/packages/rocketchat-videobridge/client/public/external_api.js +++ b/packages/rocketchat-videobridge/client/public/external_api.js @@ -457,8 +457,3 @@ function Postis(options) { return postis; } - -export { - JitsiMeetExternalAPI, -}; - diff --git a/packages/rocketchat-videobridge/client/views/videoFlexTab.js b/packages/rocketchat-videobridge/client/views/videoFlexTab.js index 5c3ffa16b929..4be20574d3e2 100644 --- a/packages/rocketchat-videobridge/client/views/videoFlexTab.js +++ b/packages/rocketchat-videobridge/client/views/videoFlexTab.js @@ -1,10 +1,10 @@ /* eslint new-cap: [2, {"capIsNewExceptions": ["MD5"]}] */ +/* globals JitsiMeetExternalAPI */ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { RocketChat } from 'meteor/rocketchat:lib'; import { t, modal } from 'meteor/rocketchat:ui'; -import { JitsiMeetExternalAPI } from '../public/external_api'; Template.videoFlexTab.helpers({ openInNewWindow() { diff --git a/packages/rocketchat-videobridge/package.js b/packages/rocketchat-videobridge/package.js index d4690268194c..add3418a53cc 100644 --- a/packages/rocketchat-videobridge/package.js +++ b/packages/rocketchat-videobridge/package.js @@ -13,7 +13,9 @@ Package.onUse(function(api) { 'rocketchat:bigbluebutton', 'templating', ]); + api.addAssets('client/public/external_api.js', 'client'); api.addFiles('client/stylesheets/video.less', 'client'); + api.mainModule('client/index.js', 'client'); api.mainModule('server/index.js', 'server'); }); From f98945ee83b21b174acf294aca7c79c40fef2b29 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Wed, 19 Dec 2018 16:26:33 -0200 Subject: [PATCH 07/11] Use web.browser.legacy bundle for Livechat script (#12975) --- packages/rocketchat-livechat/plugin/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-livechat/plugin/build.sh b/packages/rocketchat-livechat/plugin/build.sh index f44175f215b0..eb5fa860c959 100644 --- a/packages/rocketchat-livechat/plugin/build.sh +++ b/packages/rocketchat-livechat/plugin/build.sh @@ -1,7 +1,7 @@ export NODE_ENV="production" export LIVECHAT_DIR="../../../public/livechat" export BUILD_DIR="../build" -export BUNDLE_DIR="../build/bundle/programs/web.browser" +export BUNDLE_DIR="../build/bundle/programs/web.browser.legacy" cd packages/rocketchat-livechat/.app meteor npm install --production From 46dfdfd4412c2dd718308f8a8c6ab54b5f5af7d8 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Wed, 19 Dec 2018 16:27:44 -0200 Subject: [PATCH 08/11] Use sharp new API for resize image previews (#12980) --- packages/rocketchat-file-upload/server/lib/FileUpload.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/rocketchat-file-upload/server/lib/FileUpload.js b/packages/rocketchat-file-upload/server/lib/FileUpload.js index 88fa990759eb..4c4f3f0e318d 100644 --- a/packages/rocketchat-file-upload/server/lib/FileUpload.js +++ b/packages/rocketchat-file-upload/server/lib/FileUpload.js @@ -128,8 +128,7 @@ Object.assign(FileUpload, { const image = FileUpload.getStore('Uploads')._store.getReadStream(file._id, file); const transformer = sharp() - .resize(32, 32) - .max() + .resize({ width: 32, height: 32, fit: 'inside' }) .jpeg() .blur(); const result = transformer.toBuffer().then((out) => out.toString('base64')); From 11ae404a9a399488fc45a83c87bbbd9785e926ac Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Wed, 19 Dec 2018 16:28:28 -0200 Subject: [PATCH 09/11] Change field checks in RocketChat.saveStreamingOptions (#12973) --- .../server/functions/saveStreamingOptions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-livestream/server/functions/saveStreamingOptions.js b/packages/rocketchat-livestream/server/functions/saveStreamingOptions.js index f0a2d013a4d4..dd99a85d16e2 100644 --- a/packages/rocketchat-livestream/server/functions/saveStreamingOptions.js +++ b/packages/rocketchat-livestream/server/functions/saveStreamingOptions.js @@ -10,10 +10,11 @@ RocketChat.saveStreamingOptions = function(rid, options) { } check(options, { + id: Match.Optional(String), type: Match.Optional(String), url: Match.Optional(String), thumbnail: Match.Optional(String), - isAudioOnly: Match.Optional(String), + isAudioOnly: Match.Optional(Boolean), message: Match.Optional(String), }); From 6fddd025a9955068d2e06ccca1ff21c36146ca4e Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Wed, 19 Dec 2018 16:54:43 -0200 Subject: [PATCH 10/11] Stop click event propagation on mention link or user card (#12983) --- packages/rocketchat-ui/client/views/app/room.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index 7de760355d81..d56353a7732d 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -59,6 +59,7 @@ const openProfileTabOrOpenDM = (e, instance, username) => { } else { openProfileTab(e, instance, username); } + e.stopPropagation(); }; const mountPopover = (e, i, outerContext) => { From b18206383263fa958d0564c853cb60be6d8212c2 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Wed, 19 Dec 2018 16:55:07 -0200 Subject: [PATCH 11/11] [FIX] Some deprecation issues for media recording (#12948) * Fix some deprecation issues for media recording * Update condition for video message recording * Update condition for audio message recording --- .eslintrc | 1 + .../client/messageBox.js | 2 +- .../client/startup/messageBoxActions.js | 12 +- .../client/lib/recorderjs/audioRecorder.js | 50 ++++---- .../client/lib/recorderjs/recorder.js | 10 -- .../client/lib/recorderjs/videoRecorder.js | 108 ++++++++++-------- 6 files changed, 99 insertions(+), 84 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3990ce906197..9f774f708d97 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,6 +8,7 @@ "alerts" : false, "Apps" : false, "Assets" : false, + "AudioRecorder" : false, "ChatMessage" : false, "ChatMessages" : false, "chatMessages" : false, diff --git a/packages/rocketchat-ui-message/client/messageBox.js b/packages/rocketchat-ui-message/client/messageBox.js index 9f5b68d6926c..9f2d58919cc4 100644 --- a/packages/rocketchat-ui-message/client/messageBox.js +++ b/packages/rocketchat-ui-message/client/messageBox.js @@ -282,7 +282,7 @@ Template.messageBox.helpers({ return Template.instance().dataReply.get(); }, isAudioMessageAllowed() { - return (navigator.getUserMedia || navigator.webkitGetUserMedia || + return (navigator.mediaDevices || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia) && RocketChat.settings.get('FileUpload_Enabled') && RocketChat.settings.get('Message_AudioRecorderEnabled') && diff --git a/packages/rocketchat-ui-message/client/startup/messageBoxActions.js b/packages/rocketchat-ui-message/client/startup/messageBoxActions.js index d99a94614863..015236ed767f 100644 --- a/packages/rocketchat-ui-message/client/startup/messageBoxActions.js +++ b/packages/rocketchat-ui-message/client/startup/messageBoxActions.js @@ -9,10 +9,14 @@ import { t, modal, fileUpload } from 'meteor/rocketchat:ui'; RocketChat.messageBox.actions.add('Create_new', 'Video_message', { id: 'video-message', icon: 'video', - condition: () => (navigator.getUserMedia || navigator.webkitGetUserMedia) && RocketChat.settings.get('FileUpload_Enabled') && RocketChat.settings.get('Message_VideoRecorderEnabled') && (!RocketChat.settings.get('FileUpload_MediaTypeWhiteList') || RocketChat.settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)), - action({ messageBox }) { - return VRecDialog.opened ? VRecDialog.close() : VRecDialog.open(messageBox); - }, + condition: () => (navigator.mediaDevices || navigator.getUserMedia || navigator.webkitGetUserMedia || + navigator.mozGetUserMedia || navigator.msGetUserMedia) && + window.MediaRecorder && + RocketChat.settings.get('FileUpload_Enabled') && + RocketChat.settings.get('Message_VideoRecorderEnabled') && + (!RocketChat.settings.get('FileUpload_MediaTypeWhiteList') || + RocketChat.settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)), + action: ({ messageBox }) => (VRecDialog.opened ? VRecDialog.close() : VRecDialog.open(messageBox)), }); RocketChat.messageBox.actions.add('Add_files_from', 'Computer', { diff --git a/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js b/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js index 24b3955da678..ee239c0e778b 100644 --- a/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js +++ b/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js @@ -1,26 +1,33 @@ /* globals Recorder */ -AudioRecorder = new class { //eslint-disable-line +// TODO: embed Recorder class here +// TODO: create the worker for mp3 encoding on-the-fly +AudioRecorder = new (class AudioRecorder { start(cb) { - window.AudioContext = window.AudioContext || window.webkitAudioContext; + window.audioContext = new (window.AudioContext || window.webkitAudioContext); - navigator.getUserMedia = navigator.getUserMedia || - navigator.webkitGetUserMedia || - navigator.mozGetUserMedia || - navigator.msGetUserMedia; - - window.URL = window.URL || window.webkitURL; - window.audioContext = new AudioContext; - - const ok = (stream) => { + const handleSuccess = (stream) => { this.startUserMedia(stream); - return (cb != null ? cb.call(this) : undefined); + cb && cb.call(this, true); }; - if ((navigator.getUserMedia == null)) { - return cb(false); + const handleError = (error) => { + console.error(error); + cb && cb.call(this, false); + }; + + const oldGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || + navigator.msGetUserMedia; + + if (navigator.mediaDevices) { + navigator.mediaDevices.getUserMedia({ audio: true }) + .then(handleSuccess, handleError); + return; + } else if (oldGetUserMedia) { + oldGetUserMedia.call(navigator, { audio: true }, handleSuccess, handleError); + return; } - return navigator.getUserMedia({ audio: true }, ok, (e) => console.log(`No live audio input: ${ e }`)); + cb && cb.call(this, false); } startUserMedia(stream) { @@ -36,19 +43,14 @@ AudioRecorder = new class { //eslint-disable-line stop(cb) { this.recorder.stop(); - if (cb != null) { - this.getBlob(cb); - } + cb && this.recorder.exportMP3(cb); this.stream.getAudioTracks()[0].stop(); window.audioContext.close(); + delete window.audioContext; delete this.recorder; - return delete this.stream; - } - - getBlob(cb) { - return this.recorder.exportMP3(cb); + delete this.stream; } -}; +}); diff --git a/packages/rocketchat-ui/client/lib/recorderjs/recorder.js b/packages/rocketchat-ui/client/lib/recorderjs/recorder.js index 3c9969f01b3a..1dee04ea2745 100644 --- a/packages/rocketchat-ui/client/lib/recorderjs/recorder.js +++ b/packages/rocketchat-ui/client/lib/recorderjs/recorder.js @@ -78,16 +78,6 @@ this.node.connect(this.context.destination); //this should not be necessary }; - Recorder.forceDownload = function(blob, filename){ - var url = (window.URL || window.webkitURL).createObjectURL(blob); - var link = window.document.createElement('a'); - link.href = url; - link.download = filename || 'audio-message.mp3'; - var click = document.createEvent("Event"); - click.initEvent("click", true, true); - link.dispatchEvent(click); - } - window.Recorder = Recorder; })(window); diff --git a/packages/rocketchat-ui/client/lib/recorderjs/videoRecorder.js b/packages/rocketchat-ui/client/lib/recorderjs/videoRecorder.js index 146082b1959a..9005b905cbb9 100644 --- a/packages/rocketchat-ui/client/lib/recorderjs/videoRecorder.js +++ b/packages/rocketchat-ui/client/lib/recorderjs/videoRecorder.js @@ -1,6 +1,6 @@ import { ReactiveVar } from 'meteor/reactive-var'; -VideoRecorder = new class { //eslint-disable-line +VideoRecorder = new (class VideoRecorder { constructor() { this.started = false; this.cameraStarted = new ReactiveVar(false); @@ -9,20 +9,31 @@ VideoRecorder = new class { //eslint-disable-line } start(videoel, cb) { - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; - window.URL = window.URL || window.webkitURL; - this.videoel = videoel; - const ok = (stream) => { + + const handleSuccess = (stream) => { this.startUserMedia(stream); - return (cb != null ? cb.call(this) : undefined); + cb && cb.call(this, true); + }; + + const handleError = (error) => { + console.error(error); + cb && cb.call(this, false); }; - if (navigator.getUserMedia == null) { - return cb(false); + const oldGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || + navigator.msGetUserMedia; + + if (navigator.mediaDevices) { + navigator.mediaDevices.getUserMedia({ audio: true, video: true }) + .then(handleSuccess, handleError); + return; + } else if (oldGetUserMedia) { + oldGetUserMedia.call(navigator, { audio: true, video: true }, handleSuccess, handleError); + return; } - return navigator.getUserMedia({ audio: true, video: true }, ok, (e) => console.log(`No live video input: ${ e }`)); + cb && cb.call(this, false); } record() { @@ -30,9 +41,7 @@ VideoRecorder = new class { //eslint-disable-line if (this.stream == null) { return; } - this.mediaRecorder = new MediaRecorder(this.stream); - this.mediaRecorder.stream = this.stream; - this.mediaRecorder.mimeType = 'video/webm'; + this.mediaRecorder = new MediaRecorder(this.stream, { type: 'video/webm' }); this.mediaRecorder.ondataavailable = (blobev) => { this.chunks.push(blobev.data); if (!this.recordingAvailable.get()) { @@ -45,58 +54,67 @@ VideoRecorder = new class { //eslint-disable-line startUserMedia(stream) { this.stream = stream; + try { this.videoel.srcObject = stream; - } catch (_e) { + } catch (error) { + const URL = window.URL || window.webkitURL; this.videoel.src = URL.createObjectURL(stream); } - this.videoel.onloadedmetadata = () => this.videoel.play(); + + this.videoel.onloadedmetadata = () => { + this.videoel && this.videoel.play(); + }; this.started = true; return this.cameraStarted.set(true); } stop(cb) { - if (this.started) { - this.stopRecording(); - - if (this.stream) { - const vtracks = this.stream.getVideoTracks(); - for (const vtrack of Array.from(vtracks)) { - vtrack.stop(); - } - - const atracks = this.stream.getAudioTracks(); - for (const atrack of Array.from(atracks)) { - atrack.stop(); - } + if (!this.started) { + return; + } + + this.stopRecording(); + + if (this.stream) { + const vtracks = this.stream.getVideoTracks(); + for (const vtrack of Array.from(vtracks)) { + vtrack.stop(); } - if (this.videoel) { - this.videoel.pause; - this.videoel.src = ''; + const atracks = this.stream.getAudioTracks(); + for (const atrack of Array.from(atracks)) { + atrack.stop(); } + } - this.started = false; - this.cameraStarted.set(false); - this.recordingAvailable.set(false); + if (this.videoel) { + this.videoel.pause; + this.videoel.src = ''; + } - if (cb && this.chunks) { - const blob = new Blob(this.chunks, { type : 'video/webm' }); - cb(blob); - } + this.started = false; + this.cameraStarted.set(false); + this.recordingAvailable.set(false); - delete this.recorder; - delete this.stream; - return delete this.videoel; + if (cb && this.chunks) { + const blob = new Blob(this.chunks, { type: 'video/webm' }); + cb(blob); } + + delete this.recorder; + delete this.stream; + delete this.videoel; } stopRecording() { - if (this.started && this.recording && this.mediaRecorder) { - this.mediaRecorder.stop(); - this.recording.set(false); - return delete this.mediaRecorder; + if (!this.started || !this.recording || !this.mediaRecorder) { + return; } + + this.mediaRecorder.stop(); + this.recording.set(false); + delete this.mediaRecorder; } -}; +});