diff --git a/.scripts/fix-i18n.js b/.scripts/fix-i18n.js index a4866809068e76fcafbf128a4f699b1bd39e4ae6..ad8210d7cd33123e5d52c3cbd019e2579b8859f4 100644 --- a/.scripts/fix-i18n.js +++ b/.scripts/fix-i18n.js @@ -6,9 +6,10 @@ * - remove all keys not present in source i18n file */ -const fg = require('fast-glob'); const fs = require('fs'); +const fg = require('fast-glob'); + const fixFiles = (path, source, newlineAtEnd = false) => { const sourceFile = JSON.parse(fs.readFileSync(`${ path }${ source }`, 'utf8')); const sourceKeys = Object.keys(sourceFile); diff --git a/.scripts/logs.js b/.scripts/logs.js index be65d91454b5e27bdbd8fbe3341850624f983819..a1acf80b8174e361196ef98fc11327371736ab8f 100644 --- a/.scripts/logs.js +++ b/.scripts/logs.js @@ -1,5 +1,6 @@ const path = require('path'); const fs = require('fs'); + const semver = require('semver'); const ProgressBar = require('progress'); const _ = require('underscore'); @@ -14,7 +15,7 @@ const historyDataFile = path.join(__dirname, '../.github/history.json'); let historyData = (() => { try { - return require(historyDataFile); + return require(historyDataFile); // eslint-disable-line import/no-dynamic-require } catch (error) { return {}; } diff --git a/.scripts/md.js b/.scripts/md.js index 6f927f192cc28971a18249041c3ebe38cf42d58f..ac935873a69e9d89f69d4cdea5682e9242111394 100644 --- a/.scripts/md.js +++ b/.scripts/md.js @@ -1,8 +1,9 @@ const path = require('path'); const fs = require('fs'); +const { execSync } = require('child_process'); + const semver = require('semver'); const _ = require('underscore'); -const { execSync } = require('child_process'); const historyDataFile = path.join(__dirname, '../.github/history.json'); const historyManualDataFile = path.join(__dirname, '../.github/history-manual.json'); @@ -50,7 +51,7 @@ const SummaryNameEmoticons = { const historyData = (() => { try { - return require(historyDataFile); + return require(historyDataFile); // eslint-disable-line import/no-dynamic-require } catch (error) { return {}; } @@ -58,7 +59,7 @@ const historyData = (() => { const historyManualData = (() => { try { - return require(historyManualDataFile); + return require(historyManualDataFile); // eslint-disable-line import/no-dynamic-require } catch (error) { return {}; } diff --git a/.scripts/set-version.js b/.scripts/set-version.js index abd5f8a2719e6abc6c061ada381f134ea7e1dc36..6524ce70017b283ec4ef6343b107d9f8b9b5b599 100644 --- a/.scripts/set-version.js +++ b/.scripts/set-version.js @@ -2,6 +2,7 @@ const path = require('path'); const fs = require('fs'); + const semver = require('semver'); const inquirer = require('inquirer'); // const execSync = require('child_process').execSync; @@ -10,7 +11,7 @@ const git = require('simple-git/promise')(process.cwd()); let pkgJson = {}; try { - pkgJson = require(path.resolve( + pkgJson = require(path.resolve( // eslint-disable-line import/no-dynamic-require process.cwd(), './package.json' )); diff --git a/.scripts/start.js b/.scripts/start.js index 8c1854d9180246458fd5aa594fb23f0d297a6635..5d75151e2256bae77681439a34a9ea3f8dc6984c 100644 --- a/.scripts/start.js +++ b/.scripts/start.js @@ -5,6 +5,7 @@ const fs = require('fs'); const extend = require('util')._extend; const { spawn } = require('child_process'); const net = require('net'); + const processes = []; let exitCode; @@ -116,9 +117,9 @@ function startChimp() { // params: ['2'], options: { env: Object.assign({}, process.env, { - NODE_PATH: `${ process.env.NODE_PATH + - path.delimiter + srcDir + - path.delimiter + srcDir }/node_modules`, + NODE_PATH: `${ process.env.NODE_PATH + + path.delimiter + srcDir + + path.delimiter + srcDir }/node_modules`, }), }, }); diff --git a/.scripts/version.js b/.scripts/version.js index 79f523ab48dab0de91d50518902210264cd0ee93..461003c2d585eff71d8ed8b5ebf93aaf6382bb32 100644 --- a/.scripts/version.js +++ b/.scripts/version.js @@ -1,8 +1,9 @@ const path = require('path'); + let pkgJson = {}; try { - pkgJson = require(path.resolve( + pkgJson = require(path.resolve( // eslint-disable-line import/no-dynamic-require process.cwd(), './package.json' )); diff --git a/app/2fa/client/TOTPPassword.js b/app/2fa/client/TOTPPassword.js index 0cf6d8b9e9e410220f65aa657417eeeb8b96a078..7a26863faadfe824cf864b7d1928029883ba9644 100644 --- a/app/2fa/client/TOTPPassword.js +++ b/app/2fa/client/TOTPPassword.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import toastr from 'toastr'; + import { modal } from '../../ui-utils'; import { t } from '../../utils'; -import toastr from 'toastr'; function reportError(error, callback) { if (callback) { diff --git a/app/2fa/client/accountSecurity.js b/app/2fa/client/accountSecurity.js index 4e9bc5573d1b5d2cfcf9fdd172e715e00d0cffc5..027da271a65ba4f0bf4ca27cddbad3c152ebaf9b 100644 --- a/app/2fa/client/accountSecurity.js +++ b/app/2fa/client/accountSecurity.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; +import qrcode from 'yaqrcode'; + import { modal } from '../../ui-utils'; import { settings } from '../../settings'; import { t } from '../../utils'; -import toastr from 'toastr'; -import qrcode from 'yaqrcode'; window.qrcode = qrcode; diff --git a/app/2fa/server/lib/totp.js b/app/2fa/server/lib/totp.js index a1ad86147fe0660a41d97aa6f5d4235e976afde1..fcdf46f3bbdb44e3ac8ab028e893b681aa262bf3 100644 --- a/app/2fa/server/lib/totp.js +++ b/app/2fa/server/lib/totp.js @@ -1,8 +1,9 @@ import { SHA256 } from 'meteor/sha'; import { Random } from 'meteor/random'; +import speakeasy from 'speakeasy'; + import { Users } from '../../../models'; import { settings } from '../../../settings'; -import speakeasy from 'speakeasy'; export const TOTP = { generateSecret() { diff --git a/app/2fa/server/loginHandler.js b/app/2fa/server/loginHandler.js index 4067521d2c4773d9163e88991fdfb20a53a8d06d..3afc20b6cf21ad0a40466fb1e268ff5601ce4ad6 100644 --- a/app/2fa/server/loginHandler.js +++ b/app/2fa/server/loginHandler.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; + +import { TOTP } from './lib/totp'; import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; -import { TOTP } from './lib/totp'; Accounts.registerLoginHandler('totp', function(options) { if (!options.totp || !options.totp.code) { diff --git a/app/2fa/server/methods/disable.js b/app/2fa/server/methods/disable.js index 096db7084cf666ca3fc2f8c5b4b4953cac1169cb..fe6e554305dd14c47804eb560a5b1529e85f21db 100644 --- a/app/2fa/server/methods/disable.js +++ b/app/2fa/server/methods/disable.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; import { TOTP } from '../lib/totp'; diff --git a/app/2fa/server/methods/enable.js b/app/2fa/server/methods/enable.js index 35954a5b3df61b2cfaec50e0c36fee5373b1adf5..ef34662436e60722b1ac56184f887057c31f1981 100644 --- a/app/2fa/server/methods/enable.js +++ b/app/2fa/server/methods/enable.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; import { TOTP } from '../lib/totp'; diff --git a/app/2fa/server/methods/regenerateCodes.js b/app/2fa/server/methods/regenerateCodes.js index cd723e66db8147d3776a5b3b44a3ac5eb3e07a62..bfdc8d955d7841d42c2cf00b71ab64444eca3b29 100644 --- a/app/2fa/server/methods/regenerateCodes.js +++ b/app/2fa/server/methods/regenerateCodes.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; import { TOTP } from '../lib/totp'; diff --git a/app/2fa/server/methods/validateTempToken.js b/app/2fa/server/methods/validateTempToken.js index 39ccc904365f83ed1fc4c165ea5fed5d7d963b8c..71565b0d42e3c45e530a4f10b00394858c08fcb7 100644 --- a/app/2fa/server/methods/validateTempToken.js +++ b/app/2fa/server/methods/validateTempToken.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; import { TOTP } from '../lib/totp'; diff --git a/app/2fa/server/startup/settings.js b/app/2fa/server/startup/settings.js index e83bcd8e4c99014808cc9ec95daf73fe891eee57..51ccf2ac68f3038c70de6a283f5ce8a0f5c1001f 100644 --- a/app/2fa/server/startup/settings.js +++ b/app/2fa/server/startup/settings.js @@ -17,5 +17,3 @@ settings.addGroup('Accounts', function() { }); }); }); - - diff --git a/app/action-links/both/lib/actionLinks.js b/app/action-links/both/lib/actionLinks.js index 384cc450201d50b6ad8085a7ed1cc407c76bb5c5..c87c712e079b4fc83fd90c021592a3a0f6174fa0 100644 --- a/app/action-links/both/lib/actionLinks.js +++ b/app/action-links/both/lib/actionLinks.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages, Subscriptions } from '../../../models'; // Action Links namespace creation. diff --git a/app/action-links/client/init.js b/app/action-links/client/init.js index 4f85d99d9d535f0ba71a2304a322bd7f9f5d59cc..2865be4279c9cfdd017bcdb8eb415b745fa8e355 100644 --- a/app/action-links/client/init.js +++ b/app/action-links/client/init.js @@ -1,12 +1,12 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; + import { handleError } from '../../utils'; import { fireGlobalEvent, Layout } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import { actionLinks } from '../both/lib/actionLinks'; - Template.room.events({ 'click .action-link'(event, instance) { event.preventDefault(); diff --git a/app/action-links/client/lib/actionLinks.js b/app/action-links/client/lib/actionLinks.js index 1c5b61dc4b91110a0d69639ec0d58e073c10c9e0..4391eda94afb5226c21c80d6ef7edfa7da55e2c2 100644 --- a/app/action-links/client/lib/actionLinks.js +++ b/app/action-links/client/lib/actionLinks.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { handleError } from '../../../utils'; import { actionLinks } from '../../both/lib/actionLinks'; // Action Links Handler. This method will be called off the client. diff --git a/app/action-links/server/actionLinkHandler.js b/app/action-links/server/actionLinkHandler.js index 8940e1c8150dddecc681760eb06c6eb8ce453497..067f727e3dda2b1f34638392bf2edf60e8860f52 100644 --- a/app/action-links/server/actionLinkHandler.js +++ b/app/action-links/server/actionLinkHandler.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { actionLinks } from '../both/lib/actionLinks'; // Action Links Handler. This method will be called off the client. diff --git a/app/analytics/client/loadScript.js b/app/analytics/client/loadScript.js index a07c8cb1ac9664a85dd6b40fff97694ba742d197..50d25859814f8361bc010e70ffcb8d52e609240a 100644 --- a/app/analytics/client/loadScript.js +++ b/app/analytics/client/loadScript.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { settings } from '../../settings'; Template.body.onRendered(() => { diff --git a/app/analytics/client/trackEvents.js b/app/analytics/client/trackEvents.js index acbbd13494fde8704160d93c69c29c23eea34b83..cc86418dca6250d8418be69034d9f0cc84ae7a69 100644 --- a/app/analytics/client/trackEvents.js +++ b/app/analytics/client/trackEvents.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; +import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { ChatRoom } from '../../models'; -import { Tracker } from 'meteor/tracker'; function trackEvent(category, action, label) { if (window._paq) { diff --git a/app/api/server/api.js b/app/api/server/api.js index 2d5a544e42659d8c065326b4cab7e123f68e72b0..6de8ca4bd805b1329091d0123103c60023db81cd 100644 --- a/app/api/server/api.js +++ b/app/api/server/api.js @@ -3,13 +3,14 @@ import { DDPCommon } from 'meteor/ddp-common'; import { DDP } from 'meteor/ddp'; import { Accounts } from 'meteor/accounts-base'; import { Restivus } from 'meteor/nimble:restivus'; +import { RateLimiter } from 'meteor/rate-limit'; +import _ from 'underscore'; + import { Logger } from '../../logger'; import { settings } from '../../settings'; import { metrics } from '../../metrics'; import { hasPermission, hasAllPermission } from '../../authorization'; -import { RateLimiter } from 'meteor/rate-limit'; -import _ from 'underscore'; const logger = new Logger('API', {}); const rateLimiterDictionary = {}; @@ -113,7 +114,7 @@ class APIClass extends Restivus { statusCode: 404, body: { success: false, - error: msg ? msg : 'Resource not found', + error: msg || 'Resource not found', }, }; } @@ -123,7 +124,7 @@ class APIClass extends Restivus { statusCode: 403, body: { success: false, - error: msg ? msg : 'unauthorized', + error: msg || 'unauthorized', }, }; } @@ -133,7 +134,7 @@ class APIClass extends Restivus { statusCode: 429, body: { success: false, - error: msg ? msg : 'Too many requests', + error: msg || 'Too many requests', }, }; } @@ -141,7 +142,7 @@ class APIClass extends Restivus { reloadRoutesToRefreshRateLimiter() { const { version } = this._config; this._routes.forEach((route) => { - const shouldAddRateLimitToRoute = ((typeof route.options.rateLimiterOptions === 'object' || route.options.rateLimiterOptions === undefined) && Boolean(version) && !process.env.TEST_MODE && Boolean(defaultRateLimiterOptions.numRequestsAllowed && defaultRateLimiterOptions.intervalTimeInMS)); + const shouldAddRateLimitToRoute = (typeof route.options.rateLimiterOptions === 'object' || route.options.rateLimiterOptions === undefined) && Boolean(version) && !process.env.TEST_MODE && Boolean(defaultRateLimiterOptions.numRequestsAllowed && defaultRateLimiterOptions.intervalTimeInMS); if (shouldAddRateLimitToRoute) { this.addRateLimiterRuleForRoutes({ routes: [route.path], @@ -204,7 +205,7 @@ class APIClass extends Restivus { routes = [routes]; } const { version } = this._config; - const shouldAddRateLimitToRoute = ((typeof options.rateLimiterOptions === 'object' || options.rateLimiterOptions === undefined) && Boolean(version) && !process.env.TEST_MODE && Boolean(defaultRateLimiterOptions.numRequestsAllowed && defaultRateLimiterOptions.intervalTimeInMS)); + const shouldAddRateLimitToRoute = (typeof options.rateLimiterOptions === 'object' || options.rateLimiterOptions === undefined) && Boolean(version) && !process.env.TEST_MODE && Boolean(defaultRateLimiterOptions.numRequestsAllowed && defaultRateLimiterOptions.intervalTimeInMS); if (shouldAddRateLimitToRoute) { this.addRateLimiterRuleForRoutes({ routes, diff --git a/app/api/server/helpers/deprecationWarning.js b/app/api/server/helpers/deprecationWarning.js index 52590c041f028220cbfd9ae54af7e3220160f1d7..fdcc98f4b1d2c34f7031cc0ab04478b42ded2fd3 100644 --- a/app/api/server/helpers/deprecationWarning.js +++ b/app/api/server/helpers/deprecationWarning.js @@ -12,4 +12,3 @@ API.helperMethods.set('deprecationWarning', function _deprecationWarning({ endpo return response; }); - diff --git a/app/api/server/helpers/getLoggedInUser.js b/app/api/server/helpers/getLoggedInUser.js index 2acd73c71e8ff4fe4f9b69173412b6ddf5ee9540..1ce74a93e2fcdfe0450a19be121c91a0bc35400d 100644 --- a/app/api/server/helpers/getLoggedInUser.js +++ b/app/api/server/helpers/getLoggedInUser.js @@ -1,4 +1,5 @@ import { Accounts } from 'meteor/accounts-base'; + import { Users } from '../../../models'; import { API } from '../api'; diff --git a/app/api/server/helpers/getUserFromParams.js b/app/api/server/helpers/getUserFromParams.js index 51af7c1d4e41cc98bbd30299f22b212cd8e52f02..c97d6f34e1e91e7ce4cf959d6c049f1c6d98848a 100644 --- a/app/api/server/helpers/getUserFromParams.js +++ b/app/api/server/helpers/getUserFromParams.js @@ -1,5 +1,6 @@ // Convenience method, almost need to turn it into a middleware of sorts import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; import { API } from '../api'; diff --git a/app/api/server/helpers/insertUserObject.js b/app/api/server/helpers/insertUserObject.js index 1e52665d1142e7cf7cd1831e6065ec31ba82abf7..f6674720c06161eb7784faf54d80218081396878 100644 --- a/app/api/server/helpers/insertUserObject.js +++ b/app/api/server/helpers/insertUserObject.js @@ -15,4 +15,3 @@ API.helperMethods.set('insertUserObject', function _addUserToObject({ object, us return object; }); - diff --git a/app/api/server/helpers/isUserFromParams.js b/app/api/server/helpers/isUserFromParams.js index a96779c2eedccdbf583da148312d4e113d4771b2..605f598bd43d1c5325406a47763a1d7ffcf5c747 100644 --- a/app/api/server/helpers/isUserFromParams.js +++ b/app/api/server/helpers/isUserFromParams.js @@ -3,8 +3,8 @@ import { API } from '../api'; API.helperMethods.set('isUserFromParams', function _isUserFromParams() { const params = this.requestParams(); - return (!params.userId && !params.username && !params.user) || - (params.userId && this.userId === params.userId) || - (params.username && this.user.username === params.username) || - (params.user && this.user.username === params.user); + return (!params.userId && !params.username && !params.user) + || (params.userId && this.userId === params.userId) + || (params.username && this.user.username === params.username) + || (params.user && this.user.username === params.user); }); diff --git a/app/api/server/helpers/parseJsonQuery.js b/app/api/server/helpers/parseJsonQuery.js index f752fe918d2a55e8385e4d01c15ae80127d7a031..d7eafe0f6da8caa27261d6f6f41814926f1940ea 100644 --- a/app/api/server/helpers/parseJsonQuery.js +++ b/app/api/server/helpers/parseJsonQuery.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { hasPermission } from '../../../authorization'; import { EJSON } from 'meteor/ejson'; + +import { hasPermission } from '../../../authorization'; import { API } from '../api'; API.helperMethods.set('parseJsonQuery', function _parseJsonQuery() { diff --git a/app/api/server/index.js b/app/api/server/index.js index 483de42534758b691ea6a143b8308e7f9c97ea38..da65a35e8502f98cddb0ef7c6a92ac11a6260e2d 100644 --- a/app/api/server/index.js +++ b/app/api/server/index.js @@ -1,5 +1,4 @@ import './settings'; -export { API } from './api'; import './helpers/composeRoomWithLastMessage'; import './helpers/deprecationWarning'; import './helpers/getLoggedInUser'; @@ -31,3 +30,5 @@ import './v1/stats'; import './v1/subscriptions'; import './v1/users'; import './v1/video-conference'; + +export { API } from './api'; diff --git a/app/api/server/v1/assets.js b/app/api/server/v1/assets.js index a80d5044c1c3a39bc2e7a6f6d57e08d5b35de243..eacf92ae31cd7d82b7c3e46777a29a02661ef1c9 100644 --- a/app/api/server/v1/assets.js +++ b/app/api/server/v1/assets.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { RocketChatAssets } from '../../../assets'; import Busboy from 'busboy'; + +import { RocketChatAssets } from '../../../assets'; import { API } from '../api'; API.v1.addRoute('assets.setAsset', { authRequired: true }, { @@ -10,7 +11,7 @@ API.v1.addRoute('assets.setAsset', { authRequired: true }, { let asset = {}; Meteor.wrapAsync((callback) => { - busboy.on('field', (fieldname, value) => fields[fieldname] = value); + busboy.on('field', (fieldname, value) => { fields[fieldname] = value; }); busboy.on('file', Meteor.bindEnvironment((fieldname, file, filename, encoding, mimetype) => { const isValidAsset = Object.keys(RocketChatAssets.assets).includes(fieldname); if (!isValidAsset) { diff --git a/app/api/server/v1/channels.js b/app/api/server/v1/channels.js index 6b1308dd8e5305abd991a660568b4440a02c0c38..813141f338e8bf5b4e0e1c79b27cec79be3473f8 100644 --- a/app/api/server/v1/channels.js +++ b/app/api/server/v1/channels.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Rooms, Subscriptions, Messages, Uploads, Integrations, Users } from '../../../models'; import { hasPermission } from '../../../authorization'; import { normalizeMessagesForUser } from '../../../utils/server/lib/normalizeMessagesForUser'; import { API } from '../api'; -import _ from 'underscore'; // Returns the channel IF found otherwise it will return the failure of why it didn't. Check the `statusCode` property function findChannelByIdOrName({ params, checkedArchived = true, userId }) { @@ -265,7 +266,7 @@ API.v1.addRoute('channels.files', { authRequired: true }, { const ourQuery = Object.assign({}, query, { rid: findResult._id }); const files = Uploads.find(ourQuery, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -310,7 +311,7 @@ API.v1.addRoute('channels.getIntegrations', { authRequired: true }, { ourQuery = Object.assign({}, query, ourQuery); const integrations = Integrations.find(ourQuery, { - sort: sort ? sort : { _createdAt: 1 }, + sort: sort || { _createdAt: 1 }, skip: offset, limit: count, fields, @@ -465,7 +466,7 @@ API.v1.addRoute('channels.list', { authRequired: true }, { } const cursor = Rooms.find(ourQuery, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -492,7 +493,7 @@ API.v1.addRoute('channels.list.joined', { authRequired: true }, { // TODO: CACHE: Add Breacking notice since we removed the query param const cursor = Rooms.findBySubscriptionTypeAndUserId('c', this.userId, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -569,7 +570,7 @@ API.v1.addRoute('channels.messages', { authRequired: true }, { } const cursor = Messages.find(ourQuery, { - sort: sort ? sort : { ts: -1 }, + sort: sort || { ts: -1 }, skip: offset, limit: count, fields, @@ -934,7 +935,7 @@ API.v1.addRoute('channels.getAllUserMentionsByChannel', { authRequired: true }, const mentions = Meteor.runAsUser(this.userId, () => Meteor.call('getUserMentionsByChannel', { roomId, options: { - sort: sort ? sort : { ts: 1 }, + sort: sort || { ts: 1 }, skip: offset, limit: count, }, @@ -1005,4 +1006,3 @@ API.v1.addRoute('channels.removeLeader', { authRequired: true }, { return API.v1.success(); }, }); - diff --git a/app/api/server/v1/chat.js b/app/api/server/v1/chat.js index d7258c8e74d4c22bb6f223f739d11d9153f62d77..733b9614da511d5e6d5888f1f4beb34b5eec430b 100644 --- a/app/api/server/v1/chat.js +++ b/app/api/server/v1/chat.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Messages } from '../../../models'; import { canAccessRoom, hasPermission } from '../../../authorization'; import { normalizeMessagesForUser } from '../../../utils/server/lib/normalizeMessagesForUser'; @@ -111,7 +112,7 @@ API.v1.addRoute('chat.pinMessage', { authRequired: true }, { } let pinnedMessage; - Meteor.runAsUser(this.userId, () => pinnedMessage = Meteor.call('pinMessage', msg)); + Meteor.runAsUser(this.userId, () => { pinnedMessage = Meteor.call('pinMessage', msg); }); const [message] = normalizeMessagesForUser([pinnedMessage], this.userId); @@ -153,7 +154,7 @@ API.v1.addRoute('chat.search', { authRequired: true }, { } let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('messageSearch', searchText, roomId, count).message.docs); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('messageSearch', searchText, roomId, count).message.docs; }); return API.v1.success({ messages: normalizeMessagesForUser(result, this.userId), @@ -409,7 +410,7 @@ API.v1.addRoute('chat.getThreadsList', { authRequired: true }, { } const threadQuery = Object.assign({}, query, { rid, tcount: { $exists: true } }); const cursor = Messages.find(threadQuery, { - sort: sort ? sort : { ts: 1 }, + sort: sort || { ts: 1 }, skip: offset, limit: count, fields, @@ -486,7 +487,7 @@ API.v1.addRoute('chat.getThreadMessages', { authRequired: true }, { throw new Meteor.Error('error-not-allowed', 'Not Allowed'); } const cursor = Messages.find({ ...query, tmid }, { - sort: sort ? sort : { ts: 1 }, + sort: sort || { ts: 1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/commands.js b/app/api/server/v1/commands.js index 61c1be7ea67205b78c6ab96acce4e1d2fdd0c3ce..80e75fa2b6f99c3af520181028febc91d14de216 100644 --- a/app/api/server/v1/commands.js +++ b/app/api/server/v1/commands.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { slashCommands } from '../../../utils'; import { Rooms } from '../../../models'; import { API } from '../api'; @@ -35,7 +36,7 @@ API.v1.addRoute('commands.list', { authRequired: true }, { const totalCount = commands.length; commands = Rooms.processQueryOptionsOnResult(commands, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/e2e.js b/app/api/server/v1/e2e.js index c4974add47744a742b73128fded445915a07859f..f7a6f49108a6950cfdbc17b16095d59051defb1b 100644 --- a/app/api/server/v1/e2e.js +++ b/app/api/server/v1/e2e.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; + import { API } from '../api'; API.v1.addRoute('e2e.fetchMyKeys', { authRequired: true }, { get() { let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('e2e.fetchMyKeys')); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('e2e.fetchMyKeys'); }); return API.v1.success(result); }, @@ -15,7 +16,7 @@ API.v1.addRoute('e2e.getUsersOfRoomWithoutKey', { authRequired: true }, { const { rid } = this.queryParams; let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('e2e.getUsersOfRoomWithoutKey', rid)); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('e2e.getUsersOfRoomWithoutKey', rid); }); return API.v1.success(result); }, diff --git a/app/api/server/v1/emoji-custom.js b/app/api/server/v1/emoji-custom.js index 79e54e62e479f74583f45667e096bdcf0133cb60..f638f025b6938328c67bf1e34ea7ad35b827b5f0 100644 --- a/app/api/server/v1/emoji-custom.js +++ b/app/api/server/v1/emoji-custom.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import Busboy from 'busboy'; + import { EmojiCustom } from '../../../models'; import { API } from '../api'; -import Busboy from 'busboy'; // DEPRECATED // Will be removed after v1.12.0 @@ -140,7 +141,6 @@ API.v1.addRoute('emoji-custom.update', { authRequired: true }, { })); this.request.pipe(busboy); })(); - }); }, }); diff --git a/app/api/server/v1/groups.js b/app/api/server/v1/groups.js index dba67aa913a99bd94011a70dd9bfae84804fe84d..e90577da047c3e70c3c1ae8c95eee2afebd0e949 100644 --- a/app/api/server/v1/groups.js +++ b/app/api/server/v1/groups.js @@ -1,11 +1,9 @@ import _ from 'underscore'; - import { Meteor } from 'meteor/meteor'; import { Subscriptions, Rooms, Messages, Uploads, Integrations, Users } from '../../../models/server'; import { hasPermission, canAccessRoom } from '../../../authorization/server'; import { normalizeMessagesForUser } from '../../../utils/server/lib/normalizeMessagesForUser'; - import { API } from '../api'; // Returns the private group subscription IF found otherwise it will return the failure of why it didn't. Check the `statusCode` property @@ -24,9 +22,9 @@ function findPrivateGroupByIdOrName({ params, userId, checkedArchived = true }) archived: 1, }, }; - const room = params.roomId ? - Rooms.findOneById(params.roomId, roomOptions) : - Rooms.findOneByName(params.roomName, roomOptions); + const room = params.roomId + ? Rooms.findOneById(params.roomId, roomOptions) + : Rooms.findOneByName(params.roomName, roomOptions); if (!room || room.t !== 'p') { throw new Meteor.Error('error-room-not-found', 'The required "roomId" or "roomName" param provided does not match any group'); @@ -181,7 +179,7 @@ API.v1.addRoute('groups.counters', { authRequired: true }, { const lm = room.lm ? room.lm : room._updatedAt; if (typeof subscription !== 'undefined' && subscription.open) { - unreads = Messages.countVisibleByRoomIdBetweenTimestampsInclusive(subscription.rid, (subscription.ls || subscription.ts), lm); + unreads = Messages.countVisibleByRoomIdBetweenTimestampsInclusive(subscription.rid, subscription.ls || subscription.ts, lm); unreadsFrom = subscription.ls || subscription.ts; userMentions = subscription.userMentions; joined = true; @@ -265,7 +263,7 @@ API.v1.addRoute('groups.files', { authRequired: true }, { const ourQuery = Object.assign({}, query, { rid: findResult.rid }); const files = Uploads.find(ourQuery, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -303,7 +301,7 @@ API.v1.addRoute('groups.getIntegrations', { authRequired: true }, { const ourQuery = Object.assign({}, query, { channel: { $in: channelsToSearch } }); const integrations = Integrations.find(ourQuery, { - sort: sort ? sort : { _createdAt: 1 }, + sort: sort || { _createdAt: 1 }, skip: offset, limit: count, fields, @@ -427,7 +425,7 @@ API.v1.addRoute('groups.list', { authRequired: true }, { // TODO: CACHE: Add Breacking notice since we removed the query param const cursor = Rooms.findBySubscriptionTypeAndUserId('p', this.userId, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -460,7 +458,7 @@ API.v1.addRoute('groups.listAll', { authRequired: true }, { const totalCount = rooms.length; rooms = Rooms.processQueryOptionsOnResult(rooms, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -500,7 +498,7 @@ API.v1.addRoute('groups.members', { authRequired: true }, { const users = Users.find({ _id: { $in: members } }, { fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 }, - sort: { username: sort.username != null ? sort.username : 1 }, + sort: { username: sort.username != null ? sort.username : 1 }, }).fetch(); return API.v1.success({ @@ -521,7 +519,7 @@ API.v1.addRoute('groups.messages', { authRequired: true }, { const ourQuery = Object.assign({}, query, { rid: findResult.rid }); const messages = Messages.find(ourQuery, { - sort: sort ? sort : { ts: -1 }, + sort: sort || { ts: -1 }, skip: offset, limit: count, fields, @@ -815,4 +813,3 @@ API.v1.addRoute('groups.moderators', { authRequired: true }, { }); }, }); - diff --git a/app/api/server/v1/im.js b/app/api/server/v1/im.js index 5b57ddea6745a52837bdc358f76f86bdc1af885d..6927963592b58fdf7a70b31f296e6c668efea114 100644 --- a/app/api/server/v1/im.js +++ b/app/api/server/v1/im.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getRoomByNameOrIdWithOptionToJoin } from '../../../lib'; import { Subscriptions, Uploads, Users, Messages, Rooms } from '../../../models'; import { hasPermission } from '../../../authorization'; @@ -124,7 +125,7 @@ API.v1.addRoute(['dm.files', 'im.files'], { authRequired: true }, { const ourQuery = Object.assign({}, query, { rid: findResult.room._id }); const files = Uploads.find(ourQuery, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, @@ -195,7 +196,7 @@ API.v1.addRoute(['dm.members', 'im.members'], { authRequired: true }, { const { offset, count } = this.getPaginationItems(); const { sort } = this.parseJsonQuery(); const cursor = Subscriptions.findByRoomId(findResult.room._id, { - sort: { 'u.username': sort && sort.username ? sort.username : 1 }, + sort: { 'u.username': sort && sort.username ? sort.username : 1 }, skip: offset, limit: count, }); @@ -205,7 +206,7 @@ API.v1.addRoute(['dm.members', 'im.members'], { authRequired: true }, { const users = Users.find({ username: { $in: members } }, { fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 }, - sort: { username: sort && sort.username ? sort.username : 1 }, + sort: { username: sort && sort.username ? sort.username : 1 }, }).fetch(); return API.v1.success({ @@ -227,7 +228,7 @@ API.v1.addRoute(['dm.messages', 'im.messages'], { authRequired: true }, { const ourQuery = Object.assign({}, query, { rid: findResult.room._id }); const messages = Messages.find(ourQuery, { - sort: sort ? sort : { ts: -1 }, + sort: sort || { ts: -1 }, skip: offset, limit: count, fields, @@ -267,7 +268,7 @@ API.v1.addRoute(['dm.messages.others', 'im.messages.others'], { authRequired: tr const ourQuery = Object.assign({}, query, { rid: room._id }); const msgs = Messages.find(ourQuery, { - sort: sort ? sort : { ts: -1 }, + sort: sort || { ts: -1 }, skip: offset, limit: count, fields, @@ -320,7 +321,7 @@ API.v1.addRoute(['dm.list.everyone', 'im.list.everyone'], { authRequired: true } const ourQuery = Object.assign({}, query, { t: 'd' }); const rooms = Rooms.find(ourQuery, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/import.js b/app/api/server/v1/import.js index a68788a40a557310a933c0ac30f5ef9a1c6dd5b3..0ee09ae5789ca7937d94a187f7ae9d863ecffb85 100644 --- a/app/api/server/v1/import.js +++ b/app/api/server/v1/import.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { API } from '../api'; API.v1.addRoute('uploadImportFile', { authRequired: true }, { @@ -43,7 +44,7 @@ API.v1.addRoute('getImportFileData', { authRequired: true }, { API.v1.addRoute('getLatestImportOperations', { authRequired: true }, { get() { let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('getLatestImportOperations')); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('getLatestImportOperations'); }); return API.v1.success(result); }, diff --git a/app/api/server/v1/integrations.js b/app/api/server/v1/integrations.js index a7e9fff127f22595f628010c0a2de776ad21c4ff..b4e69cbf1489fb3f0d23608d50741c0aafec9b79 100644 --- a/app/api/server/v1/integrations.js +++ b/app/api/server/v1/integrations.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { IntegrationHistory, Integrations } from '../../../models'; import { API } from '../api'; @@ -61,7 +62,7 @@ API.v1.addRoute('integrations.history', { authRequired: true }, { const ourQuery = Object.assign({}, query, { 'integration._id': id }); const history = IntegrationHistory.find(ourQuery, { - sort: sort ? sort : { _updatedAt: -1 }, + sort: sort || { _updatedAt: -1 }, skip: offset, limit: count, fields, @@ -87,7 +88,7 @@ API.v1.addRoute('integrations.list', { authRequired: true }, { const ourQuery = Object.assign({}, query); const integrations = Integrations.find(ourQuery, { - sort: sort ? sort : { ts: -1 }, + sort: sort || { ts: -1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/misc.js b/app/api/server/v1/misc.js index 8f792eeb6c84846b5f618c28bbc8b6d5180aac6b..ca1dcee6f9be08552a09257bde511b144dd8690e 100644 --- a/app/api/server/v1/misc.js +++ b/app/api/server/v1/misc.js @@ -1,13 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; +import s from 'underscore.string'; + import { hasRole } from '../../../authorization'; import { Info } from '../../../utils'; import { Users } from '../../../models'; import { settings } from '../../../settings'; import { API } from '../api'; -import s from 'underscore.string'; // DEPRECATED // Will be removed after v1.12.0 diff --git a/app/api/server/v1/permissions.js b/app/api/server/v1/permissions.js index e0d0d55f3f58f105a90b99c56d4a4b318ed7e301..c5d790533287f0a0eb7711be0083d2c54a18ae65 100644 --- a/app/api/server/v1/permissions.js +++ b/app/api/server/v1/permissions.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Permissions, Roles } from '../../../models'; import { API } from '../api'; @@ -52,7 +53,7 @@ API.v1.addRoute('permissions.listAll', { authRequired: true }, { } let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('permissions/get', updatedSinceDate)); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('permissions/get', updatedSinceDate); }); if (Array.isArray(result)) { result = { @@ -100,7 +101,7 @@ API.v1.addRoute('permissions.update', { authRequired: true }, { if (permissionNotFound) { return API.v1.failure('Invalid permission', 'error-invalid-permission'); - } else if (roleNotFound) { + } if (roleNotFound) { return API.v1.failure('Invalid role', 'error-invalid-role'); } diff --git a/app/api/server/v1/push.js b/app/api/server/v1/push.js index fa5b2a70f6523fc25a64dc9671b01d7bff9e66fa..6c1c9959011a911df74ddc8572980c9b2fedb94f 100644 --- a/app/api/server/v1/push.js +++ b/app/api/server/v1/push.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Push } from 'meteor/rocketchat:push'; + import { API } from '../api'; API.v1.addRoute('push.token', { authRequired: true }, { @@ -28,12 +29,14 @@ API.v1.addRoute('push.token', { authRequired: true }, { let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('raix:push-update', { - id, - token: { [type]: value }, - appName, - userId: this.userId, - })); + Meteor.runAsUser(this.userId, () => { + result = Meteor.call('raix:push-update', { + id, + token: { [type]: value }, + appName, + userId: this.userId, + }); + }); return API.v1.success({ result }); }, diff --git a/app/api/server/v1/roles.js b/app/api/server/v1/roles.js index 78858819e5bb3598f2d07d477a92eaaf0aff21b1..67a992427a6194986dc870e559eba7ff522793be 100644 --- a/app/api/server/v1/roles.js +++ b/app/api/server/v1/roles.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Roles } from '../../../models'; import { API } from '../api'; diff --git a/app/api/server/v1/rooms.js b/app/api/server/v1/rooms.js index 0191f6bd9e19ba841e81b8717a8458a21fa8e9d8..7cab7a10977b88c71049758fdef65824ae49e432 100644 --- a/app/api/server/v1/rooms.js +++ b/app/api/server/v1/rooms.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import Busboy from 'busboy'; + import { FileUpload } from '../../../file-upload'; import { Rooms } from '../../../models'; -import Busboy from 'busboy'; import { API } from '../api'; function findRoomByIdOrName({ params, checkedArchived = true }) { @@ -41,7 +42,7 @@ API.v1.addRoute('rooms.get', { authRequired: true }, { } let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('rooms/get', updatedSinceDate)); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('rooms/get', updatedSinceDate); }); if (Array.isArray(result)) { result = { @@ -83,7 +84,7 @@ API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { }); }); - busboy.on('field', (fieldname, value) => fields[fieldname] = value); + busboy.on('field', (fieldname, value) => { fields[fieldname] = value; }); busboy.on('finish', Meteor.bindEnvironment(() => callback())); @@ -255,7 +256,7 @@ API.v1.addRoute('rooms.getDiscussions', { authRequired: true }, { const ourQuery = Object.assign(query, { prid: room._id }); const discussions = Rooms.find(ourQuery, { - sort: sort ? sort : { fname: 1 }, + sort: sort || { fname: 1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/settings.js b/app/api/server/v1/settings.js index 284bf7558fbce6667e03a60ae34fc99d511d7be5..1fd8dba80c0b18b417e65348baef037df14db7d3 100644 --- a/app/api/server/v1/settings.js +++ b/app/api/server/v1/settings.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import _ from 'underscore'; + import { Settings } from '../../../models'; import { hasPermission } from '../../../authorization'; import { API } from '../api'; -import _ from 'underscore'; // settings endpoints API.v1.addRoute('settings.public', { authRequired: false }, { @@ -20,7 +21,7 @@ API.v1.addRoute('settings.public', { authRequired: false }, { ourQuery = Object.assign({}, query, ourQuery); const settings = Settings.find(ourQuery, { - sort: sort ? sort : { _id: 1 }, + sort: sort || { _id: 1 }, skip: offset, limit: count, fields: Object.assign({ _id: 1, value: 1 }, fields), @@ -79,7 +80,7 @@ API.v1.addRoute('settings', { authRequired: true }, { ourQuery = Object.assign({}, query, ourQuery); const settings = Settings.find(ourQuery, { - sort: sort ? sort : { _id: 1 }, + sort: sort || { _id: 1 }, skip: offset, limit: count, fields: Object.assign({ _id: 1, value: 1 }, fields), diff --git a/app/api/server/v1/stats.js b/app/api/server/v1/stats.js index d745cda1ee4863e5f7fcacb7bb9a29d4693b5d75..2f74a2092947e11090ff213b635a4eb08b1249f8 100644 --- a/app/api/server/v1/stats.js +++ b/app/api/server/v1/stats.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Statistics } from '../../../models'; import { API } from '../api'; @@ -31,7 +32,7 @@ API.v1.addRoute('statistics.list', { authRequired: true }, { const { sort, fields, query } = this.parseJsonQuery(); const statistics = Statistics.find(query, { - sort: sort ? sort : { name: 1 }, + sort: sort || { name: 1 }, skip: offset, limit: count, fields, diff --git a/app/api/server/v1/subscriptions.js b/app/api/server/v1/subscriptions.js index 9bdfd2e6da7cc7f9b5575efffd03515089568cc6..8ffa8711a335ad57550a8eaf23a2b8400ea13094 100644 --- a/app/api/server/v1/subscriptions.js +++ b/app/api/server/v1/subscriptions.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../../models'; import { API } from '../api'; @@ -17,7 +18,7 @@ API.v1.addRoute('subscriptions.get', { authRequired: true }, { } let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('subscriptions/get', updatedSinceDate)); + Meteor.runAsUser(this.userId, () => { result = Meteor.call('subscriptions/get', updatedSinceDate); }); if (Array.isArray(result)) { result = { @@ -82,5 +83,3 @@ API.v1.addRoute('subscriptions.unread', { authRequired: true }, { return API.v1.success(); }, }); - - diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index 3726c1ecec9344182f6d638a8aded0a9a21255de..13f3e38bce3be2e6754d723549faaec83fe6b14f 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -1,6 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import Busboy from 'busboy'; + import { Users, Subscriptions } from '../../../models'; import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; @@ -14,8 +17,6 @@ import { saveCustomFields, } from '../../../lib'; import { API } from '../api'; -import _ from 'underscore'; -import Busboy from 'busboy'; API.v1.addRoute('users.create', { authRequired: true }, { post() { @@ -122,7 +123,6 @@ API.v1.addRoute('users.setActiveStatus', { authRequired: true }, { Meteor.call('setUserActiveStatus', this.bodyParams.userId, this.bodyParams.activeStatus); }); return API.v1.success({ user: Users.findOneById(this.bodyParams.userId, { fields: { active: 1 } }) }); - }, }); @@ -191,7 +191,7 @@ API.v1.addRoute('users.list', { authRequired: true }, { const { sort, fields, query } = this.parseJsonQuery(); const users = Users.find(query, { - sort: sort ? sort : { username: 1 }, + sort: sort || { username: 1 }, skip: offset, limit: count, fields, @@ -409,9 +409,8 @@ API.v1.addRoute('users.getPreferences', { authRequired: true }, { return API.v1.success({ preferences, }); - } else { - return API.v1.failure(TAPi18n.__('Accounts_Default_User_Preferences_not_available').toUpperCase()); } + return API.v1.failure(TAPi18n.__('Accounts_Default_User_Preferences_not_available').toUpperCase()); }, }); diff --git a/app/api/server/v1/video-conference.js b/app/api/server/v1/video-conference.js index af6d1a7813bf94a295f072ea6b5cf09072d68e82..51d0b8830499fd0f3cd67634ae1e8fdac0639ebe 100644 --- a/app/api/server/v1/video-conference.js +++ b/app/api/server/v1/video-conference.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms } from '../../../models'; import { API } from '../api'; diff --git a/app/apps/client/admin/appInstall.js b/app/apps/client/admin/appInstall.js index 474b5e84ec05a5a9c68beb46b68236fcb942d993..8ff298c54febd1f4e51e02f6da9bfc5879e0f740 100644 --- a/app/apps/client/admin/appInstall.js +++ b/app/apps/client/admin/appInstall.js @@ -11,6 +11,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { APIClient } from '../../../utils'; import { SideNav } from '../../../ui-utils/client'; diff --git a/app/apps/client/admin/appLogs.js b/app/apps/client/admin/appLogs.js index 090bd4aa34ade1ece1911d6dc93200034c61429e..bcd621370cde25bc5d322222ffe8192c90e172d5 100644 --- a/app/apps/client/admin/appLogs.js +++ b/app/apps/client/admin/appLogs.js @@ -3,9 +3,10 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; -import { APIClient } from '../../../utils'; import moment from 'moment'; import hljs from 'highlight.js'; + +import { APIClient } from '../../../utils'; import { SideNav } from '../../../ui-utils/client'; const loadData = (instance) => { @@ -13,7 +14,6 @@ const loadData = (instance) => { APIClient.get(`apps/${ instance.id.get() }`), APIClient.get(`apps/${ instance.id.get() }/logs`), ]).then((results) => { - instance.app.set(results[0].app); instance.logs.set(results[1].logs); @@ -72,7 +72,7 @@ Template.appLogs.helpers({ if (!data) { return value; - } else if (typeof data === 'object') { + } if (typeof data === 'object') { value = hljs.highlight('json', JSON.stringify(data, null, 2)).value; } else { value = hljs.highlight('json', data).value; diff --git a/app/apps/client/admin/appManage.js b/app/apps/client/admin/appManage.js index e385abc66ded8df2f74a4b489dcfe4f0ce66c2ab..286dd35e4ab24cf294024659777788f946d85b55 100644 --- a/app/apps/client/admin/appManage.js +++ b/app/apps/client/admin/appManage.js @@ -4,19 +4,18 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n, TAPi18next } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; +import _ from 'underscore'; +import s from 'underscore.string'; +import toastr from 'toastr'; +import semver from 'semver'; import { isEmail, APIClient } from '../../../utils'; import { settings } from '../../../settings'; import { Markdown } from '../../../markdown/client'; import { modal } from '../../../ui-utils'; -import _ from 'underscore'; -import s from 'underscore.string'; -import toastr from 'toastr'; - import { AppEvents } from '../communication'; import { Utilities } from '../../lib/misc/Utilities'; import { Apps } from '../orchestrator'; -import semver from 'semver'; import { SideNav } from '../../../ui-utils/client'; function getApps(instance) { @@ -194,7 +193,7 @@ Template.apps.onDestroyed(function() { Template.appManage.helpers({ isEmail, _(key, ...args) { - const options = (args.pop()).hash; + const options = args.pop().hash; if (!_.isEmpty(args)) { options.sprintf = args; } @@ -300,7 +299,7 @@ Template.appManage.helpers({ parseDescription(i18nDescription) { const item = Markdown.parseMessageNotEscaped({ html: Template.instance().__(i18nDescription) }); - item.tokens.forEach((t) => item.html = item.html.replace(t.token, t.text)); + item.tokens.forEach((t) => { item.html = item.html.replace(t.token, t.text); }); return item.html; }, @@ -434,25 +433,24 @@ Template.appManage.events({ }); if (toSave.length === 0) { - throw 'Nothing to save..'; + throw new Error('Nothing to save..'); } const result = await APIClient.post(`apps/${ t.id.get() }/settings`, undefined, { settings: toSave }); console.log('Updating results:', result); result.updated.forEach((setting) => { - settings[setting.id].value = settings[setting.id].oldValue = setting.value; + settings[setting.id].value = setting.value; + settings[setting.id].oldValue = setting.value; }); Object.keys(settings).forEach((k) => { const setting = settings[k]; setting.hasChanged = false; }); t.settings.set(settings); - } catch (e) { console.log(e); } finally { t.loading.set(false); } - }, 'change input[type="checkbox"]': (e, t) => { @@ -470,7 +468,7 @@ Template.appManage.events({ } }, - 'change .rc-select__element' : (e, t) => { + 'change .rc-select__element': (e, t) => { const labelFor = $(e.currentTarget).attr('name'); const value = $(e.currentTarget).val(); diff --git a/app/apps/client/admin/appWhatIsIt.js b/app/apps/client/admin/appWhatIsIt.js index a916eb25819ce56a9dac9d6cfb450cf562a0a4e5..dd63716de0f508a29595773133af065cb747ae8c 100644 --- a/app/apps/client/admin/appWhatIsIt.js +++ b/app/apps/client/admin/appWhatIsIt.js @@ -3,6 +3,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { Apps } from '../orchestrator'; import { SideNav } from '../../../ui-utils/client'; diff --git a/app/apps/client/admin/apps.js b/app/apps/client/admin/apps.js index f310e08022fd762dfbde06b57ea33e0caa834a7e..683df77ef6a65003cf6bd5603bd896a347b5acd3 100644 --- a/app/apps/client/admin/apps.js +++ b/app/apps/client/admin/apps.js @@ -3,6 +3,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { t, APIClient } from '../../../utils'; import { AppEvents } from '../communication'; diff --git a/app/apps/client/admin/marketplace.js b/app/apps/client/admin/marketplace.js index 4ce551706819b92053285bc4307e529b52a4e00c..e06de068ab224dcda5b1451758c69f84470c2273 100644 --- a/app/apps/client/admin/marketplace.js +++ b/app/apps/client/admin/marketplace.js @@ -4,6 +4,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { t, APIClient } from '../../../utils'; import { modal } from '../../../ui-utils'; @@ -287,7 +288,6 @@ Template.marketplace.events({ if (confirmed) { FlowRouter.go('/admin/cloud'); } - return; }); return; } diff --git a/app/apps/client/admin/modalTemplates/iframeModal.js b/app/apps/client/admin/modalTemplates/iframeModal.js index be84a750ebe1f8097e1605371d83f6d631a4a189..bc1029a56f7d73be0655447df68488ab3a0c701f 100644 --- a/app/apps/client/admin/modalTemplates/iframeModal.js +++ b/app/apps/client/admin/modalTemplates/iframeModal.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { modal } from '../../../../ui-utils'; Template.iframeModal.onCreated(function() { diff --git a/app/apps/client/communication/websockets.js b/app/apps/client/communication/websockets.js index 905c369650c8662595c6aa7ca0d0dc160f14ee3a..1da0efecccf2fffb5faf7dd138267057ef50d73d 100644 --- a/app/apps/client/communication/websockets.js +++ b/app/apps/client/communication/websockets.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands, APIClient } from '../../../utils'; import { CachedCollectionManager } from '../../../ui-cached-collection'; diff --git a/app/apps/client/index.js b/app/apps/client/index.js index f98839294a814134a4db2ec01f586ade780a9dcc..4ee0430ecc5fada72c2b0c6a690219bfef4b56e7 100644 --- a/app/apps/client/index.js +++ b/app/apps/client/index.js @@ -1,5 +1,3 @@ -export { Apps } from './orchestrator'; - import './admin/modalTemplates/iframeModal.html'; import './admin/modalTemplates/iframeModal'; import './admin/marketplace.html'; @@ -14,3 +12,5 @@ import './admin/appManage.html'; import './admin/appManage'; import './admin/appWhatIsIt.html'; import './admin/appWhatIsIt'; + +export { Apps } from './orchestrator'; diff --git a/app/apps/client/orchestrator.js b/app/apps/client/orchestrator.js index 96962bbd0e0a3eef4fdbbe146480b5a1c00fd480..0ade72a4811a106831237f58a54f6f8659db5ac8 100644 --- a/app/apps/client/orchestrator.js +++ b/app/apps/client/orchestrator.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { AppWebsocketReceiver } from './communication'; -import { Utilities } from '../lib/misc/Utilities'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { TAPi18next } from 'meteor/tap:i18n'; + +import { AppWebsocketReceiver } from './communication'; +import { Utilities } from '../lib/misc/Utilities'; import { APIClient } from '../../utils'; import { AdminBox } from '../../ui-utils'; import { CachedCollectionManager } from '../../ui-cached-collection'; diff --git a/app/apps/server/bridges/commands.js b/app/apps/server/bridges/commands.js index a4895106dfd8a36ceca7d556ae15d2aac8faa45d..827c2606d2c0a9110ccc04629d7f268f22edcc21 100644 --- a/app/apps/server/bridges/commands.js +++ b/app/apps/server/bridges/commands.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { slashCommands } from '../../../utils'; import { SlashCommandContext } from '@rocket.chat/apps-engine/definition/slashcommands'; + +import { slashCommands } from '../../../utils'; import { Utilities } from '../../lib/misc/Utilities'; export class AppCommandsBridge { diff --git a/app/apps/server/bridges/environmental.js b/app/apps/server/bridges/environmental.js index ae8879a36bbfd451e09efdf715564dd24ccd12f7..28d8b3654eb8ef876cedf356de1eb6ec957fc400 100644 --- a/app/apps/server/bridges/environmental.js +++ b/app/apps/server/bridges/environmental.js @@ -7,7 +7,7 @@ export class AppEnvironmentalVariableBridge { async getValueByName(envVarName, appId) { this.orch.debugLog(`The App ${ appId } is getting the environmental variable value ${ envVarName }.`); - if (!(await this.isReadable(envVarName, appId))) { + if (!await this.isReadable(envVarName, appId)) { throw new Error(`The environmental variable "${ envVarName }" is not readable.`); } @@ -23,7 +23,7 @@ export class AppEnvironmentalVariableBridge { async isSet(envVarName, appId) { this.orch.debugLog(`The App ${ appId } is checking if the environmental variable is set ${ envVarName }.`); - if (!(await this.isReadable(envVarName, appId))) { + if (!await this.isReadable(envVarName, appId)) { throw new Error(`The environmental variable "${ envVarName }" is not readable.`); } diff --git a/app/apps/server/bridges/listeners.js b/app/apps/server/bridges/listeners.js index d8a08d0a9444723814c7bc0c5570dcbf73e5d69f..26f0b71630895b4073bc28d2af88d07d804b71f6 100644 --- a/app/apps/server/bridges/listeners.js +++ b/app/apps/server/bridges/listeners.js @@ -9,9 +9,9 @@ export class AppListenerBridge { if (typeof result === 'boolean') { return result; - } else { - return this.orch.getConverters().get('messages').convertAppMessage(result); } + return this.orch.getConverters().get('messages').convertAppMessage(result); + // try { // } catch (e) { @@ -26,9 +26,9 @@ export class AppListenerBridge { if (typeof result === 'boolean') { return result; - } else { - return this.orch.getConverters().get('rooms').convertAppRoom(result); } + return this.orch.getConverters().get('rooms').convertAppRoom(result); + // try { // } catch (e) { diff --git a/app/apps/server/bridges/messages.js b/app/apps/server/bridges/messages.js index 5ba76526a84acaf2ac4b58099dfda23d0f763dcc..062efcd64b8af94a77d400d8f06a5bad52cac254 100644 --- a/app/apps/server/bridges/messages.js +++ b/app/apps/server/bridges/messages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { Messages, Users, Subscriptions } from '../../../models'; import { Notifications } from '../../../notifications'; import { updateMessage } from '../../../lib/server/functions/updateMessage'; diff --git a/app/apps/server/bridges/rooms.js b/app/apps/server/bridges/rooms.js index 4d9f4e0d163c91aee6bc6900630322ce0c1740bd..250f25aa22c301f50bdb6defa0aeff02e82b1003 100644 --- a/app/apps/server/bridges/rooms.js +++ b/app/apps/server/bridges/rooms.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Subscriptions, Users } from '../../../models'; import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; + +import { Rooms, Subscriptions, Users } from '../../../models'; import { addUserToRoom } from '../../../lib/server/functions/addUserToRoom'; export class AppRoomBridge { diff --git a/app/apps/server/communication/methods.js b/app/apps/server/communication/methods.js index 986f13717fc68f714a284be8ec7e6f00dda3d02b..16170105caa618909c441437f56d7a8e8d833ea8 100644 --- a/app/apps/server/communication/methods.js +++ b/app/apps/server/communication/methods.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { hasPermission } from '../../../authorization'; diff --git a/app/apps/server/communication/rest.js b/app/apps/server/communication/rest.js index b6124ccf621c0cdd185c6c39ca21b5643c591603..0bd7e1efff61465c57abc7e0ba304ba7d2e30324 100644 --- a/app/apps/server/communication/rest.js +++ b/app/apps/server/communication/rest.js @@ -1,8 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; -import { API } from '../../../api/server'; import Busboy from 'busboy'; +import { API } from '../../../api/server'; import { getWorkspaceAccessToken, getUserCloudAccessToken } from '../../../cloud/server'; import { settings } from '../../../settings'; import { Info } from '../../../utils'; @@ -238,9 +238,8 @@ export class AppsRestApi { info.status = prl.getStatus(); return API.v1.success({ app: info }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, post() { // TODO: Verify permissions @@ -320,9 +319,8 @@ export class AppsRestApi { info.status = prl.getStatus(); return API.v1.success({ app: info }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); @@ -334,9 +332,8 @@ export class AppsRestApi { const info = prl.getInfo(); return API.v1.success({ iconFileContent: info.iconFileContent }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); @@ -348,9 +345,8 @@ export class AppsRestApi { const languages = prl.getStorageItem().languageContent || {}; return API.v1.success({ languages }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); @@ -364,7 +360,7 @@ export class AppsRestApi { const ourQuery = Object.assign({}, query, { appId: prl.getID() }); const options = { - sort: sort ? sort : { _updatedAt: -1 }, + sort: sort || { _updatedAt: -1 }, skip: offset, limit: count, fields, @@ -373,9 +369,8 @@ export class AppsRestApi { const logs = Promise.await(orchestrator.getLogStorage().find(ourQuery, options)); return API.v1.success({ logs }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); @@ -393,9 +388,8 @@ export class AppsRestApi { }); return API.v1.success({ settings }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, post() { if (!this.bodyParams || !this.bodyParams.settings) { @@ -432,11 +426,10 @@ export class AppsRestApi { } catch (e) { if (e.message.includes('No setting found')) { return API.v1.notFound(`No Setting found on the App by the id of: "${ this.urlParams.settingId }"`); - } else if (e.message.includes('No App found')) { + } if (e.message.includes('No App found')) { return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); - } else { - return API.v1.failure(e.message); } + return API.v1.failure(e.message); } }, post() { @@ -451,11 +444,10 @@ export class AppsRestApi { } catch (e) { if (e.message.includes('No setting found')) { return API.v1.notFound(`No Setting found on the App by the id of: "${ this.urlParams.settingId }"`); - } else if (e.message.includes('No App found')) { + } if (e.message.includes('No App found')) { return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); - } else { - return API.v1.failure(e.message); } + return API.v1.failure(e.message); } }, }); @@ -468,9 +460,8 @@ export class AppsRestApi { return API.v1.success({ apis: manager.apiManager.listApis(this.urlParams.id), }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); @@ -480,9 +471,8 @@ export class AppsRestApi { if (prl) { return API.v1.success({ status: prl.getStatus() }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, post() { if (!this.bodyParams.status || typeof this.bodyParams.status !== 'string') { @@ -495,9 +485,8 @@ export class AppsRestApi { const result = Promise.await(manager.changeStatus(prl.getID(), this.bodyParams.status)); return API.v1.success({ status: result.getStatus() }); - } else { - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); }, }); } diff --git a/app/apps/server/converters/messages.js b/app/apps/server/converters/messages.js index b3851d0e3bd872474abb6814c38b17040ff67cbb..2abaedd58b92cc14a18c1927c1e83a9ffffeb9a4 100644 --- a/app/apps/server/converters/messages.js +++ b/app/apps/server/converters/messages.js @@ -1,4 +1,5 @@ import { Random } from 'meteor/random'; + import { Messages, Rooms, Users } from '../../../models'; import { transformMappedData } from '../../lib/misc/transformMappedData'; diff --git a/app/apps/server/converters/rooms.js b/app/apps/server/converters/rooms.js index e889d75d32c4347be222cd1db4901d67ef828579..59c16e40ba91bfbfcb3f27ec1d3882e73930750a 100644 --- a/app/apps/server/converters/rooms.js +++ b/app/apps/server/converters/rooms.js @@ -1,6 +1,7 @@ -import { Rooms, Users } from '../../../models'; import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import { Rooms, Users } from '../../../models'; + export class AppRoomsConverter { constructor(orch) { this.orch = orch; diff --git a/app/apps/server/converters/settings.js b/app/apps/server/converters/settings.js index f8c77203ff8a323dc503aa9385371637a9e5996d..82ffcd2b2f0f1c9f17a9afc6c6aa6c6832b60442 100644 --- a/app/apps/server/converters/settings.js +++ b/app/apps/server/converters/settings.js @@ -1,6 +1,7 @@ -import { Settings } from '../../../models'; import { SettingType } from '@rocket.chat/apps-engine/definition/settings'; +import { Settings } from '../../../models'; + export class AppSettingsConverter { constructor(orch) { this.orch = orch; diff --git a/app/apps/server/converters/users.js b/app/apps/server/converters/users.js index 803d40f9973a816894429770be2d02149c1b8e9c..bccbfa0fce53ce834a7ad69b836b29f63612be62 100644 --- a/app/apps/server/converters/users.js +++ b/app/apps/server/converters/users.js @@ -1,6 +1,7 @@ -import { Users } from '../../../models'; import { UserStatusConnection, UserType } from '@rocket.chat/apps-engine/definition/users'; +import { Users } from '../../../models'; + export class AppUsersConverter { constructor(orch) { this.orch = orch; diff --git a/app/apps/server/orchestrator.js b/app/apps/server/orchestrator.js index b186e7ea4b9a854b0bb1ffc83b9c04d06f1ffd19..60b0f874de6100a25b117bf3d93a1c81983a6bdc 100644 --- a/app/apps/server/orchestrator.js +++ b/app/apps/server/orchestrator.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; -import { Permissions, AppsLogsModel, AppsModel, AppsPersistenceModel } from '../../models'; -import { settings } from '../../settings'; +import { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; + import { RealAppBridges } from './bridges'; import { AppMethods, AppsRestApi, AppServerNotifier } from './communication'; import { AppMessagesConverter, AppRoomsConverter, AppSettingsConverter, AppUsersConverter } from './converters'; import { AppRealStorage, AppRealLogsStorage } from './storage'; -import { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; +import { settings } from '../../settings'; +import { Permissions, AppsLogsModel, AppsModel, AppsPersistenceModel } from '../../models'; export let Apps; diff --git a/app/apps/server/tests/messages.tests.js b/app/apps/server/tests/messages.tests.js index 6373f8a7f5c9a7e3c5b8e23311fde0e256bf2b3f..9dee0c68bcdae6d9a63f43576623e8e1c433abfa 100644 --- a/app/apps/server/tests/messages.tests.js +++ b/app/apps/server/tests/messages.tests.js @@ -10,6 +10,7 @@ import { RoomsMock } from './mocks/models/Rooms.mock'; import { UsersMock } from './mocks/models/Users.mock'; chai.use(require('chai-datetime')); + const { expect } = chai; mock('../../../models', './mocks/models'); @@ -52,7 +53,6 @@ describe('The AppMessagesConverter instance', function() { const updatedAt = new Date('2019-03-30T01:22:08.412Z'); describe('when converting a message from Rocket.Chat to the Engine schema', function() { - it('should return `undefined` when `msgObj` is falsy', function() { const appMessage = messagesConverter.convertMessage(undefined); @@ -84,17 +84,17 @@ describe('The AppMessagesConverter instance', function() { messagesConverter.convertMessage(rocketchatMessageMock); expect(rocketchatMessageMock).to.deep.equal({ - _id : 'SimpleMessageMock', - t : 'uj', - rid : 'GENERAL', - ts : new Date('2019-03-30T01:22:08.389Z'), - msg : 'rocket.cat', - u : { - _id : 'rocket.cat', - username : 'rocket.cat', + _id: 'SimpleMessageMock', + t: 'uj', + rid: 'GENERAL', + ts: new Date('2019-03-30T01:22:08.389Z'), + msg: 'rocket.cat', + u: { + _id: 'rocket.cat', + username: 'rocket.cat', }, - groupable : false, - _updatedAt : new Date('2019-03-30T01:22:08.412Z'), + groupable: false, + _updatedAt: new Date('2019-03-30T01:22:08.412Z'), }); }); @@ -110,15 +110,14 @@ describe('The AppMessagesConverter instance', function() { const appMessage = messagesConverter.convertMessage(messagesMock.findOneById('LivechatGuestMessageMock')); expect(appMessage).to.have.property('sender').which.includes({ - id : 'guest1234', + id: 'guest1234', username: 'guest1234', - name : 'Livechat Guest', + name: 'Livechat Guest', }); }); }); describe('when converting a message from the Engine schema back to Rocket.Chat', function() { - it('should return `undefined` when `message` is falsy', function() { const rocketchatMessage = messagesConverter.convertAppMessage(undefined); diff --git a/app/apps/server/tests/mocks/data/messages.data.js b/app/apps/server/tests/mocks/data/messages.data.js index 736c03f1e8c2b502dd762550c21b391e7b4dc838..975b294d41d0f927843d4e0d2f88f067b4368786 100644 --- a/app/apps/server/tests/mocks/data/messages.data.js +++ b/app/apps/server/tests/mocks/data/messages.data.js @@ -113,4 +113,3 @@ export const appMessageInvalidRoomMock = { t: 'uj', }, }; - diff --git a/app/apps/server/tests/mocks/models/Messages.mock.js b/app/apps/server/tests/mocks/models/Messages.mock.js index bcb84a92da770d1288a7361b17954b7959acedf2..d21fb5a69adaff615ca4c23c54a926b44c74224c 100644 --- a/app/apps/server/tests/mocks/models/Messages.mock.js +++ b/app/apps/server/tests/mocks/models/Messages.mock.js @@ -3,34 +3,34 @@ import { BaseModelMock } from './BaseModel.mock'; export class MessagesMock extends BaseModelMock { data = { SimpleMessageMock: { - _id : 'SimpleMessageMock', - t : 'uj', - rid : 'GENERAL', - ts : new Date('2019-03-30T01:22:08.389Z'), - msg : 'rocket.cat', - u : { - _id : 'rocket.cat', - username : 'rocket.cat', + _id: 'SimpleMessageMock', + t: 'uj', + rid: 'GENERAL', + ts: new Date('2019-03-30T01:22:08.389Z'), + msg: 'rocket.cat', + u: { + _id: 'rocket.cat', + username: 'rocket.cat', }, - groupable : false, - _updatedAt : new Date('2019-03-30T01:22:08.412Z'), + groupable: false, + _updatedAt: new Date('2019-03-30T01:22:08.412Z'), }, LivechatGuestMessageMock: { - _id : 'LivechatGuestMessageMock', - rid : 'LivechatRoom', - msg : 'Help wanted', - token : 'guest-token', - alias : 'Livechat Guest', - ts : new Date('2019-04-06T03:57:28.263Z'), - u : { - _id : 'guest1234', + _id: 'LivechatGuestMessageMock', + rid: 'LivechatRoom', + msg: 'Help wanted', + token: 'guest-token', + alias: 'Livechat Guest', + ts: new Date('2019-04-06T03:57:28.263Z'), + u: { + _id: 'guest1234', username: 'guest1234', - name : 'Livechat Guest', + name: 'Livechat Guest', }, - _updatedAt : new Date('2019-04-06T03:57:28.278Z'), - mentions : [], - channels : [], + _updatedAt: new Date('2019-04-06T03:57:28.278Z'), + mentions: [], + channels: [], }, } } diff --git a/app/apps/server/tests/mocks/models/Users.mock.js b/app/apps/server/tests/mocks/models/Users.mock.js index 1622c5398cc080d0cf78ebce506d76d5bef3b071..2604a0cb95888b48a341d1919436ccc98830fe5d 100644 --- a/app/apps/server/tests/mocks/models/Users.mock.js +++ b/app/apps/server/tests/mocks/models/Users.mock.js @@ -3,18 +3,18 @@ import { BaseModelMock } from './BaseModel.mock'; export class UsersMock extends BaseModelMock { data = { 'rocket.cat': { - _id : 'rocket.cat', - createdAt : new Date('2019-03-27T20:51:36.821Z'), - avatarOrigin : 'local', - name : 'Rocket.Cat', - username : 'rocket.cat', - status : 'online', - statusDefault : 'online', - utcOffset : 0, - active : true, - type : 'bot', - _updatedAt : new Date('2019-03-30T01:11:50.496Z'), - roles : [ + _id: 'rocket.cat', + createdAt: new Date('2019-03-27T20:51:36.821Z'), + avatarOrigin: 'local', + name: 'Rocket.Cat', + username: 'rocket.cat', + status: 'online', + statusDefault: 'online', + utcOffset: 0, + active: true, + type: 'bot', + _updatedAt: new Date('2019-03-30T01:11:50.496Z'), + roles: [ 'bot', ], }, diff --git a/app/apps/server/tests/mocks/orchestrator.mock.js b/app/apps/server/tests/mocks/orchestrator.mock.js index a0ec3410f025ccb4912b480aef5a3ac2fb647aec..6429b7a182ef0f458f672b81072dbf70d494037f 100644 --- a/app/apps/server/tests/mocks/orchestrator.mock.js +++ b/app/apps/server/tests/mocks/orchestrator.mock.js @@ -1,6 +1,5 @@ export class AppServerOrchestratorMock { constructor() { - this._marketplaceUrl = 'https://marketplace.rocket.chat'; this._model = {}; diff --git a/app/assets/server/assets.js b/app/assets/server/assets.js index 4c87675873609c064f93cef1039a137844129b38..280dc99c17c58edd541ea27808b07d7d55ca3565 100644 --- a/app/assets/server/assets.js +++ b/app/assets/server/assets.js @@ -1,17 +1,19 @@ +import crypto from 'crypto'; + import { Meteor } from 'meteor/meteor'; import { WebApp, WebAppInternals } from 'meteor/webapp'; +import { WebAppHashing } from 'meteor/webapp-hashing'; +import _ from 'underscore'; +import sizeOf from 'image-size'; +import sharp from 'sharp'; + import { settings } from '../../settings'; import { Settings } from '../../models'; import { getURL } from '../../utils/lib/getURL'; import { mime } from '../../utils/lib/mimeTypes'; import { hasPermission } from '../../authorization'; import { RocketChatFile } from '../../file'; -import { WebAppHashing } from 'meteor/webapp-hashing'; -import _ from 'underscore'; -import sizeOf from 'image-size'; -import crypto from 'crypto'; -import sharp from 'sharp'; const RocketChatAssetsInstance = new RocketChatFile.GridFS({ name: 'assets', @@ -184,7 +186,7 @@ const assets = { }, }; -export const RocketChatAssets = new (class { +export const RocketChatAssets = new class { get mime() { return mime; } @@ -290,7 +292,7 @@ export const RocketChatAssets = new (class { const hash = crypto.createHash('sha1').update(file.buffer).digest('hex'); const extension = settingValue.url.split('.').pop(); - return assetValue.cache = { + assetValue.cache = { path: `assets/${ assetKey }.${ extension }`, cacheable: false, sourceMapUrl: undefined, @@ -304,6 +306,8 @@ export const RocketChatAssets = new (class { contentType: file.contentType, hash, }; + + return assetValue.cache; } getURL(assetName, options = { cdn: false, full: true }) { @@ -312,7 +316,7 @@ export const RocketChatAssets = new (class { return getURL(url, options); } -}); +}(); settings.addGroup('Assets'); diff --git a/app/authorization/client/hasPermission.js b/app/authorization/client/hasPermission.js index 33cee33364feec4253d01a266de82c4cf8eb8795..7820772cd4541071a96e9e1ce5a3cc9e5093e14c 100644 --- a/app/authorization/client/hasPermission.js +++ b/app/authorization/client/hasPermission.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; -import * as Models from '../../models'; + import { ChatPermissions } from './lib/ChatPermissions'; +import * as Models from '../../models'; function atLeastOne(permissions = [], scope) { return permissions.some((permissionId) => { @@ -54,4 +55,3 @@ Template.registerHelper('hasPermission', function(permission, scope) { export const hasAllPermission = (permissions, scope) => _hasPermission(permissions, scope, all); export const hasAtLeastOnePermission = (permissions, scope) => _hasPermission(permissions, scope, atLeastOne); export const hasPermission = hasAllPermission; - diff --git a/app/authorization/client/route.js b/app/authorization/client/route.js index 48a54e1477731721a2f3c24d00d5f54c5607c153..5d54d53c8888d264620582a4ab602eb168badf6f 100644 --- a/app/authorization/client/route.js +++ b/app/authorization/client/route.js @@ -1,5 +1,6 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { t } from '../../utils/client'; FlowRouter.route('/admin/permissions', { diff --git a/app/authorization/client/startup.js b/app/authorization/client/startup.js index f7ca7b7a8892f58ba7bb4ed3ba49b08040f2f5e3..cfdacbe8813f432ed5bad8c434eb7b5c0e98d65b 100644 --- a/app/authorization/client/startup.js +++ b/app/authorization/client/startup.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { CachedCollectionManager } from '../../ui-cached-collection'; + import { hasAllPermission } from './hasPermission'; +import { CachedCollectionManager } from '../../ui-cached-collection'; import { AdminBox } from '../../ui-utils/client/lib/AdminBox'; Meteor.startup(() => { - CachedCollectionManager.onLogin(() => Meteor.subscribe('roles')); AdminBox.addOption({ diff --git a/app/authorization/client/usersNameChanged.js b/app/authorization/client/usersNameChanged.js index 2409ab5ccc3089db31b702f5e2fa4c6ec0c64211..c498ca472b3c132431abf0d4d348b60dfc7bc3ae 100644 --- a/app/authorization/client/usersNameChanged.js +++ b/app/authorization/client/usersNameChanged.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Notifications } from '../../notifications'; import { RoomRoles } from '../../models'; diff --git a/app/authorization/client/views/permissions.js b/app/authorization/client/views/permissions.js index 2d34fad1698f0fd88f0da40a2c77e27978380f0a..d7c4900228be3345638d279cd17d1d495cab3dce 100644 --- a/app/authorization/client/views/permissions.js +++ b/app/authorization/client/views/permissions.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { Roles } from '../../../models'; import { ChatPermissions } from '../lib/ChatPermissions'; import { hasAllPermission } from '../hasPermission'; @@ -48,9 +49,8 @@ Template.permissions.events({ if (instance.permissionByRole[permission].indexOf(role) === -1) { return Meteor.call('authorization:addPermissionToRole', permission, role); - } else { - return Meteor.call('authorization:removeRoleFromPermission', permission, role); } + return Meteor.call('authorization:removeRoleFromPermission', permission, role); }, }); diff --git a/app/authorization/client/views/permissionsRole.js b/app/authorization/client/views/permissionsRole.js index 1a7af89bd2cae3a91ee05f2fc53bdccc4697a80a..e76cac546cf771893f38fb197bb98aa137597884 100644 --- a/app/authorization/client/views/permissionsRole.js +++ b/app/authorization/client/views/permissionsRole.js @@ -2,13 +2,14 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import { Tracker } from 'meteor/tracker'; +import toastr from 'toastr'; + import { handleError } from '../../../utils/client/lib/handleError'; import { t } from '../../../utils/lib/tapi18n'; -import { Tracker } from 'meteor/tracker'; import { Roles } from '../../../models'; import { hasAllPermission } from '../hasPermission'; import { modal } from '../../../ui-utils/client/lib/modal'; -import toastr from 'toastr'; import { SideNav } from '../../../ui-utils/client/lib/SideNav'; Template.permissionsRole.helpers({ @@ -225,9 +226,9 @@ Template.permissionsRole.events({ }); Template.permissionsRole.onCreated(function() { - this.searchRoom = new ReactiveVar; - this.searchUsername = new ReactiveVar; - this.usersInRole = new ReactiveVar; + this.searchRoom = new ReactiveVar(); + this.searchUsername = new ReactiveVar(); + this.usersInRole = new ReactiveVar(); this.limit = new ReactiveVar(50); this.ready = new ReactiveVar(true); this.subscribe('roles', FlowRouter.getParam('name')); diff --git a/app/authorization/server/functions/addUserRoles.js b/app/authorization/server/functions/addUserRoles.js index 49962c406329a481384a328841ed3de7cf0b7a5e..46302e81eb8d78c45376e76e241ae605684b4794 100644 --- a/app/authorization/server/functions/addUserRoles.js +++ b/app/authorization/server/functions/addUserRoles.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; -import { Users, Roles } from '../../../models'; -import { getRoles } from './getRoles'; import _ from 'underscore'; +import { getRoles } from './getRoles'; +import { Users, Roles } from '../../../models'; + export const addUserRoles = (userId, roleNames, scope) => { if (!userId || !roleNames) { return false; diff --git a/app/authorization/server/functions/canAccessRoom.js b/app/authorization/server/functions/canAccessRoom.js index 246fbada4234d91d4ba6cde36e4bf03ed218ef69..118149ada069a6d7ec8b208870a7fcffba0ee728 100644 --- a/app/authorization/server/functions/canAccessRoom.js +++ b/app/authorization/server/functions/canAccessRoom.js @@ -1,6 +1,6 @@ +import { hasPermission } from './hasPermission'; import { settings } from '../../../settings'; import Subscriptions from '../../../models/server/models/Subscriptions'; -import { hasPermission } from './hasPermission'; export const roomAccessValidators = [ function(room, user = {}) { diff --git a/app/authorization/server/functions/canSendMessage.js b/app/authorization/server/functions/canSendMessage.js index 5bff36f09e40437980ba558d4f038e25d8985432..96fa41ef32593b0b1855d6772322c62753c9f29f 100644 --- a/app/authorization/server/functions/canSendMessage.js +++ b/app/authorization/server/functions/canSendMessage.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Subscriptions } from '../../../models'; + import { canAccessRoom } from './canAccessRoom'; +import { Rooms, Subscriptions } from '../../../models'; export const canSendMessage = (rid, { uid, username }, extraData) => { const room = Rooms.findOneById(rid); diff --git a/app/authorization/server/functions/getUsersInRole.js b/app/authorization/server/functions/getUsersInRole.js index 255a19485970864cbcf3ecb44d2465d075d3a6cf..27c369acf9ffdfe8e36269fc2d07a72c9ff46bfd 100644 --- a/app/authorization/server/functions/getUsersInRole.js +++ b/app/authorization/server/functions/getUsersInRole.js @@ -1,4 +1,3 @@ import { Roles } from '../../../models'; export const getUsersInRole = (roleName, scope, options) => Roles.findUsersInRole(roleName, scope, options); - diff --git a/app/authorization/server/functions/removeUserFromRoles.js b/app/authorization/server/functions/removeUserFromRoles.js index 8f2b207e6d1d68f5cea12bf24f013873cce80a9b..b08c2778addbad00fc1ddfe787aa21bcb4926585 100644 --- a/app/authorization/server/functions/removeUserFromRoles.js +++ b/app/authorization/server/functions/removeUserFromRoles.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; -import { Users, Roles } from '../../../models'; -import { getRoles } from './getRoles'; import _ from 'underscore'; +import { getRoles } from './getRoles'; +import { Users, Roles } from '../../../models'; + export const removeUserFromRoles = (userId, roleNames, scope) => { if (!userId || !roleNames) { return false; diff --git a/app/authorization/server/methods/addPermissionToRole.js b/app/authorization/server/methods/addPermissionToRole.js index 7ec25d35d684626344f73f2bf42bd8ba78efb08d..91af0a77400fcede0264a8d06115abe8a5b6a358 100644 --- a/app/authorization/server/methods/addPermissionToRole.js +++ b/app/authorization/server/methods/addPermissionToRole.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../../models'; import { hasPermission } from '../functions/hasPermission'; diff --git a/app/authorization/server/methods/addUserToRole.js b/app/authorization/server/methods/addUserToRole.js index 84e34fc68048bdf74e6a855fd997612363dd4d5d..1c53476a93bfc3be93bc9524db02270f7a96d86e 100644 --- a/app/authorization/server/methods/addUserToRole.js +++ b/app/authorization/server/methods/addUserToRole.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Users, Roles } from '../../../models'; import { settings } from '../../../settings'; import { Notifications } from '../../../notifications'; import { hasPermission } from '../functions/hasPermission'; -import _ from 'underscore'; Meteor.methods({ 'authorization:addUserToRole'(roleName, username, scope) { diff --git a/app/authorization/server/methods/deleteRole.js b/app/authorization/server/methods/deleteRole.js index aa34b9b76f1470b5bdd57a6835ee55ff9b81bf81..a11c56516e11f1a71c733e916f9df9c7ccd58a1a 100644 --- a/app/authorization/server/methods/deleteRole.js +++ b/app/authorization/server/methods/deleteRole.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import * as Models from '../../../models'; import { hasPermission } from '../functions/hasPermission'; diff --git a/app/authorization/server/methods/removeRoleFromPermission.js b/app/authorization/server/methods/removeRoleFromPermission.js index 0f83861be2a92a83989c6adc66846359de007d14..11c4b3db1f1106c393ae06499185fc70742f11cd 100644 --- a/app/authorization/server/methods/removeRoleFromPermission.js +++ b/app/authorization/server/methods/removeRoleFromPermission.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../../models'; import { hasPermission } from '../functions/hasPermission'; diff --git a/app/authorization/server/methods/removeUserFromRole.js b/app/authorization/server/methods/removeUserFromRole.js index 241f97ff9355136126119144e412f04093dd7717..79aab87ba21c578d81ee98eac6bbc5ea31895901 100644 --- a/app/authorization/server/methods/removeUserFromRole.js +++ b/app/authorization/server/methods/removeUserFromRole.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Roles } from '../../../models'; import { settings } from '../../../settings'; import { Notifications } from '../../../notifications'; import { hasPermission } from '../functions/hasPermission'; -import _ from 'underscore'; Meteor.methods({ 'authorization:removeUserFromRole'(roleName, username, scope) { diff --git a/app/authorization/server/methods/saveRole.js b/app/authorization/server/methods/saveRole.js index 4d7271932a33461d98cac0470de518743877ce98..bbe217af78d6fa59f8c0e0513cee775a49688844 100644 --- a/app/authorization/server/methods/saveRole.js +++ b/app/authorization/server/methods/saveRole.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Roles } from '../../../models'; import { settings } from '../../../settings'; import { Notifications } from '../../../notifications'; diff --git a/app/authorization/server/publications/permissions.js b/app/authorization/server/publications/permissions.js index e98d745d58aeb599213acd9bdd5126550fcd6196..77a5e2f35e9f03c880f0a566d0a0ade69701aad1 100644 --- a/app/authorization/server/publications/permissions.js +++ b/app/authorization/server/publications/permissions.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import Permissions from '../../../models/server/models/Permissions'; import { Notifications } from '../../../notifications'; diff --git a/app/authorization/server/publications/roles.js b/app/authorization/server/publications/roles.js index 868174a7c11fdb4264fd19bf812fbe10c96734f4..379bca0fbc9571487006149a5b7c7e3b1a333f1b 100644 --- a/app/authorization/server/publications/roles.js +++ b/app/authorization/server/publications/roles.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Roles } from '../../../models'; Meteor.publish('roles', function() { diff --git a/app/authorization/server/publications/usersInRole.js b/app/authorization/server/publications/usersInRole.js index 9bb6f251432b590d31f05cf8d7756e04aa5f47db..5d52c862f765a9ec417f4236a1caf23c6f7de3b4 100644 --- a/app/authorization/server/publications/usersInRole.js +++ b/app/authorization/server/publications/usersInRole.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../functions/hasPermission'; import { getUsersInRole } from '../functions/getUsersInRole'; diff --git a/app/authorization/server/startup.js b/app/authorization/server/startup.js index 0ec0476ec9de5876a944f6c9d12fbd56b9348255..8d57052b66db26004653b48a36c496d01e11013a 100644 --- a/app/authorization/server/startup.js +++ b/app/authorization/server/startup.js @@ -1,5 +1,6 @@ /* eslint no-multi-spaces: 0 */ import { Meteor } from 'meteor/meteor'; + import { Roles, Permissions } from '../../models'; Meteor.startup(function() { @@ -8,76 +9,76 @@ Meteor.startup(function() { // then we can define edit-<type>-message instead of edit-message // 2. admin, moderator, and user roles should not be deleted as they are referened in the code. const permissions = [ - { _id: 'access-permissions', roles : ['admin'] }, - { _id: 'add-oauth-service', roles : ['admin'] }, - { _id: 'add-user-to-joined-room', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'add-user-to-any-c-room', roles : ['admin'] }, - { _id: 'add-user-to-any-p-room', roles : [] }, - { _id: 'api-bypass-rate-limit', roles : ['admin', 'bot'] }, - { _id: 'archive-room', roles : ['admin', 'owner'] }, - { _id: 'assign-admin-role', roles : ['admin'] }, - { _id: 'assign-roles', roles : ['admin'] }, - { _id: 'ban-user', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'bulk-create-c', roles : ['admin'] }, - { _id: 'bulk-register-user', roles : ['admin'] }, - { _id: 'create-c', roles : ['admin', 'user', 'bot'] }, - { _id: 'create-d', roles : ['admin', 'user', 'bot'] }, - { _id: 'create-p', roles : ['admin', 'user', 'bot'] }, - { _id: 'create-personal-access-tokens', roles : ['admin', 'user'] }, - { _id: 'create-user', roles : ['admin'] }, - { _id: 'clean-channel-history', roles : ['admin'] }, - { _id: 'delete-c', roles : ['admin', 'owner'] }, - { _id: 'delete-d', roles : ['admin'] }, - { _id: 'delete-message', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'delete-p', roles : ['admin', 'owner'] }, - { _id: 'delete-user', roles : ['admin'] }, - { _id: 'edit-message', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'edit-other-user-active-status', roles : ['admin'] }, - { _id: 'edit-other-user-info', roles : ['admin'] }, - { _id: 'edit-other-user-password', roles : ['admin'] }, - { _id: 'edit-other-user-avatar', roles : ['admin'] }, - { _id: 'edit-privileged-setting', roles : ['admin'] }, - { _id: 'edit-room', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'edit-room-retention-policy', roles : ['admin'] }, - { _id: 'force-delete-message', roles : ['admin', 'owner'] }, - { _id: 'join-without-join-code', roles : ['admin', 'bot'] }, - { _id: 'leave-c', roles : ['admin', 'user', 'bot', 'anonymous'] }, - { _id: 'leave-p', roles : ['admin', 'user', 'bot', 'anonymous'] }, - { _id: 'manage-assets', roles : ['admin'] }, - { _id: 'manage-emoji', roles : ['admin'] }, - { _id: 'manage-integrations', roles : ['admin'] }, - { _id: 'manage-own-integrations', roles : ['admin'] }, - { _id: 'manage-oauth-apps', roles : ['admin'] }, - { _id: 'mention-all', roles : ['admin', 'owner', 'moderator', 'user'] }, - { _id: 'mention-here', roles : ['admin', 'owner', 'moderator', 'user'] }, - { _id: 'mute-user', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'remove-user', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'reset-other-user-e2e-key', roles : ['admin'] }, - { _id: 'run-import', roles : ['admin'] }, - { _id: 'run-migration', roles : ['admin'] }, - { _id: 'set-moderator', roles : ['admin', 'owner'] }, - { _id: 'set-owner', roles : ['admin', 'owner'] }, - { _id: 'send-many-messages', roles : ['admin', 'bot'] }, - { _id: 'set-leader', roles : ['admin', 'owner'] }, - { _id: 'unarchive-room', roles : ['admin'] }, - { _id: 'view-c-room', roles : ['admin', 'user', 'bot', 'anonymous'] }, - { _id: 'user-generate-access-token', roles : ['admin'] }, - { _id: 'view-d-room', roles : ['admin', 'user', 'bot'] }, - { _id: 'view-full-other-user-info', roles : ['admin'] }, - { _id: 'view-history', roles : ['admin', 'user', 'anonymous'] }, - { _id: 'view-joined-room', roles : ['guest', 'bot', 'anonymous'] }, - { _id: 'view-join-code', roles : ['admin'] }, - { _id: 'view-logs', roles : ['admin'] }, - { _id: 'view-other-user-channels', roles : ['admin'] }, - { _id: 'view-p-room', roles : ['admin', 'user', 'anonymous'] }, - { _id: 'view-privileged-setting', roles : ['admin'] }, - { _id: 'view-room-administration', roles : ['admin'] }, - { _id: 'view-statistics', roles : ['admin'] }, - { _id: 'view-user-administration', roles : ['admin'] }, - { _id: 'preview-c-room', roles : ['admin', 'user', 'anonymous'] }, - { _id: 'view-outside-room', roles : ['admin', 'owner', 'moderator', 'user'] }, - { _id: 'view-broadcast-member-list', roles : ['admin', 'owner', 'moderator'] }, - { _id: 'call-management', roles : ['admin', 'owner', 'moderator'] }, + { _id: 'access-permissions', roles: ['admin'] }, + { _id: 'add-oauth-service', roles: ['admin'] }, + { _id: 'add-user-to-joined-room', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'add-user-to-any-c-room', roles: ['admin'] }, + { _id: 'add-user-to-any-p-room', roles: [] }, + { _id: 'api-bypass-rate-limit', roles: ['admin', 'bot'] }, + { _id: 'archive-room', roles: ['admin', 'owner'] }, + { _id: 'assign-admin-role', roles: ['admin'] }, + { _id: 'assign-roles', roles: ['admin'] }, + { _id: 'ban-user', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'bulk-create-c', roles: ['admin'] }, + { _id: 'bulk-register-user', roles: ['admin'] }, + { _id: 'create-c', roles: ['admin', 'user', 'bot'] }, + { _id: 'create-d', roles: ['admin', 'user', 'bot'] }, + { _id: 'create-p', roles: ['admin', 'user', 'bot'] }, + { _id: 'create-personal-access-tokens', roles: ['admin', 'user'] }, + { _id: 'create-user', roles: ['admin'] }, + { _id: 'clean-channel-history', roles: ['admin'] }, + { _id: 'delete-c', roles: ['admin', 'owner'] }, + { _id: 'delete-d', roles: ['admin'] }, + { _id: 'delete-message', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'delete-p', roles: ['admin', 'owner'] }, + { _id: 'delete-user', roles: ['admin'] }, + { _id: 'edit-message', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'edit-other-user-active-status', roles: ['admin'] }, + { _id: 'edit-other-user-info', roles: ['admin'] }, + { _id: 'edit-other-user-password', roles: ['admin'] }, + { _id: 'edit-other-user-avatar', roles: ['admin'] }, + { _id: 'edit-privileged-setting', roles: ['admin'] }, + { _id: 'edit-room', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'edit-room-retention-policy', roles: ['admin'] }, + { _id: 'force-delete-message', roles: ['admin', 'owner'] }, + { _id: 'join-without-join-code', roles: ['admin', 'bot'] }, + { _id: 'leave-c', roles: ['admin', 'user', 'bot', 'anonymous'] }, + { _id: 'leave-p', roles: ['admin', 'user', 'bot', 'anonymous'] }, + { _id: 'manage-assets', roles: ['admin'] }, + { _id: 'manage-emoji', roles: ['admin'] }, + { _id: 'manage-integrations', roles: ['admin'] }, + { _id: 'manage-own-integrations', roles: ['admin'] }, + { _id: 'manage-oauth-apps', roles: ['admin'] }, + { _id: 'mention-all', roles: ['admin', 'owner', 'moderator', 'user'] }, + { _id: 'mention-here', roles: ['admin', 'owner', 'moderator', 'user'] }, + { _id: 'mute-user', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'remove-user', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'reset-other-user-e2e-key', roles: ['admin'] }, + { _id: 'run-import', roles: ['admin'] }, + { _id: 'run-migration', roles: ['admin'] }, + { _id: 'set-moderator', roles: ['admin', 'owner'] }, + { _id: 'set-owner', roles: ['admin', 'owner'] }, + { _id: 'send-many-messages', roles: ['admin', 'bot'] }, + { _id: 'set-leader', roles: ['admin', 'owner'] }, + { _id: 'unarchive-room', roles: ['admin'] }, + { _id: 'view-c-room', roles: ['admin', 'user', 'bot', 'anonymous'] }, + { _id: 'user-generate-access-token', roles: ['admin'] }, + { _id: 'view-d-room', roles: ['admin', 'user', 'bot'] }, + { _id: 'view-full-other-user-info', roles: ['admin'] }, + { _id: 'view-history', roles: ['admin', 'user', 'anonymous'] }, + { _id: 'view-joined-room', roles: ['guest', 'bot', 'anonymous'] }, + { _id: 'view-join-code', roles: ['admin'] }, + { _id: 'view-logs', roles: ['admin'] }, + { _id: 'view-other-user-channels', roles: ['admin'] }, + { _id: 'view-p-room', roles: ['admin', 'user', 'anonymous'] }, + { _id: 'view-privileged-setting', roles: ['admin'] }, + { _id: 'view-room-administration', roles: ['admin'] }, + { _id: 'view-statistics', roles: ['admin'] }, + { _id: 'view-user-administration', roles: ['admin'] }, + { _id: 'preview-c-room', roles: ['admin', 'user', 'anonymous'] }, + { _id: 'view-outside-room', roles: ['admin', 'owner', 'moderator', 'user'] }, + { _id: 'view-broadcast-member-list', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'call-management', roles: ['admin', 'owner', 'moderator'] }, ]; for (const permission of permissions) { diff --git a/app/autolinker/client/client.js b/app/autolinker/client/client.js index 2b6d46cc58c330e54705b70fb92f906dc7ee714e..b7e7f905bbce33f9b2099d28a6f9dad81326ab76 100644 --- a/app/autolinker/client/client.js +++ b/app/autolinker/client/client.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import s from 'underscore.string'; +import Autolinker from 'autolinker'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; -import Autolinker from 'autolinker'; const createAutolinker = () => { const regUrls = new RegExp(settings.get('AutoLinker_UrlsRegExp')); diff --git a/app/autolinker/server/settings.js b/app/autolinker/server/settings.js index d8b3a32eae2a1a26d0462cf90de66662ae9c8215..81e65d05c0d2e535abb6b306f6056acc35c9c279 100644 --- a/app/autolinker/server/settings.js +++ b/app/autolinker/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/autotranslate/client/index.js b/app/autotranslate/client/index.js index 9852ca567287ca6156e7a519d7042719d758ccf7..c1deaf68e6452e5f37f3a44ca83709a7cb4a498b 100644 --- a/app/autotranslate/client/index.js +++ b/app/autotranslate/client/index.js @@ -1,5 +1,6 @@ import './lib/actionButton'; -export { AutoTranslate } from './lib/autotranslate'; import './lib/tabBar'; import './views/autoTranslateFlexTab.html'; import './views/autoTranslateFlexTab'; + +export { AutoTranslate } from './lib/autotranslate'; diff --git a/app/autotranslate/client/lib/actionButton.js b/app/autotranslate/client/lib/actionButton.js index 16b100739870b1bebc4fa7b8bbc3c0d1cbac761e..66fd562ca65a375d896f1088e8a31cc117b3c1c9 100644 --- a/app/autotranslate/client/lib/actionButton.js +++ b/app/autotranslate/client/lib/actionButton.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + +import { AutoTranslate } from './autotranslate'; import { settings } from '../../../settings'; import { hasAtLeastOnePermission } from '../../../authorization'; import { MessageAction } from '../../../ui-utils'; import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; import { Messages } from '../../../models'; -import { AutoTranslate } from './autotranslate'; Meteor.startup(function() { Tracker.autorun(function() { @@ -22,7 +23,7 @@ Meteor.startup(function() { action() { const { msg: message } = messageArgs(this); const language = AutoTranslate.getLanguage(message.rid); - if ((!message.translations || !message.translations[language])) { // } && !_.find(message.attachments, attachment => { return attachment.translations && attachment.translations[language]; })) { + if (!message.translations || !message.translations[language]) { // } && !_.find(message.attachments, attachment => { return attachment.translations && attachment.translations[language]; })) { AutoTranslate.messageIdsToWait[message._id] = true; Messages.update({ _id: message._id }, { $set: { autoTranslateFetching: true } }); Meteor.call('autoTranslate.translateMessage', message, language); @@ -47,7 +48,7 @@ Meteor.startup(function() { action() { const { msg: message } = messageArgs(this); const language = AutoTranslate.getLanguage(message.rid); - if ((!message.translations || !message.translations[language])) { // } && !_.find(message.attachments, attachment => { return attachment.translations && attachment.translations[language]; })) { + if (!message.translations || !message.translations[language]) { // } && !_.find(message.attachments, attachment => { return attachment.translations && attachment.translations[language]; })) { AutoTranslate.messageIdsToWait[message._id] = true; Messages.update({ _id: message._id }, { $set: { autoTranslateFetching: true } }); Meteor.call('autoTranslate.translateMessage', message, language); @@ -57,7 +58,6 @@ Meteor.startup(function() { }, condition(message) { return message && message.u && message.u._id !== Meteor.userId() && message.translations && message.translations.original; - }, order: 90, }); diff --git a/app/autotranslate/client/lib/autotranslate.js b/app/autotranslate/client/lib/autotranslate.js index 9b2c02c4a429d98e76664269c865a557dea39ab9..93753239b24e6ca9608bf83e3d49dfed74feecfc 100644 --- a/app/autotranslate/client/lib/autotranslate.js +++ b/app/autotranslate/client/lib/autotranslate.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import _ from 'underscore'; +import mem from 'mem'; + import { Subscriptions, Messages } from '../../../models'; import { callbacks } from '../../../callbacks'; import { settings } from '../../../settings'; import { hasAtLeastOnePermission } from '../../../authorization'; import { CachedCollectionManager } from '../../../ui-cached-collection'; -import _ from 'underscore'; -import mem from 'mem'; export const AutoTranslate = { findSubscriptionByRid: mem((rid) => Subscriptions.findOne({ rid })), diff --git a/app/autotranslate/client/lib/tabBar.js b/app/autotranslate/client/lib/tabBar.js index d3077ec0c636b77a4071439de7c85f3ff1f81d31..f527022009aabe61b1dec1e9f7859cae9432c8b7 100644 --- a/app/autotranslate/client/lib/tabBar.js +++ b/app/autotranslate/client/lib/tabBar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { hasAtLeastOnePermission } from '../../../authorization'; import { TabBar } from '../../../ui-utils'; diff --git a/app/autotranslate/client/views/autoTranslateFlexTab.js b/app/autotranslate/client/views/autoTranslateFlexTab.js index 6f2e0f787efbd0ec92fc987f30fbec53608dab92..3add779473b39de37b52a2131be4ef408a0cb32e 100644 --- a/app/autotranslate/client/views/autoTranslateFlexTab.js +++ b/app/autotranslate/client/views/autoTranslateFlexTab.js @@ -2,11 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Random } from 'meteor/random'; import { Template } from 'meteor/templating'; -import { ChatSubscription, Subscriptions, Messages } from '../../../models'; -import { t, handleError } from '../../../utils'; import _ from 'underscore'; import toastr from 'toastr'; +import { ChatSubscription, Subscriptions, Messages } from '../../../models'; +import { t, handleError } from '../../../utils'; + Template.autoTranslateFlexTab.helpers({ autoTranslate() { const sub = ChatSubscription.findOne({ @@ -43,7 +44,7 @@ Template.autoTranslateFlexTab.helpers({ let language = _.findWhere(supportedLanguages, { language: autoTranslateLanguage }); if (language) { return language.language; - } else if (autoTranslateLanguage.indexOf('-') !== -1) { + } if (autoTranslateLanguage.indexOf('-') !== -1) { language = _.findWhere(supportedLanguages, { language: autoTranslateLanguage.substr(0, 2) }); return language && language.language; } @@ -63,7 +64,7 @@ Template.autoTranslateFlexTab.helpers({ let language = _.findWhere(supportedLanguages, { language: targetLanguage }); if (language) { return language.name; - } else if (targetLanguage.indexOf('-') !== -1) { + } if (targetLanguage.indexOf('-') !== -1) { language = _.findWhere(supportedLanguages, { language: targetLanguage.substr(0, 2) }); return language && language.name; } diff --git a/app/autotranslate/server/autotranslate.js b/app/autotranslate/server/autotranslate.js index d362c5656d2eb4d5ecc37819021bb9ae0e2d42cc..13c77caf4c94b2e0907c00f4e00c6ea2d808dfa8 100644 --- a/app/autotranslate/server/autotranslate.js +++ b/app/autotranslate/server/autotranslate.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { Subscriptions, Messages } from '../../models'; import { Markdown } from '../../markdown/server'; -import _ from 'underscore'; -import s from 'underscore.string'; class AutoTranslate { constructor() { @@ -146,7 +147,7 @@ class AutoTranslate { deTokenize(message) { if (message.tokens && message.tokens.length > 0) { for (const { token, text, noHtml } of message.tokens) { - message.msg = message.msg.replace(token, () => (noHtml ? noHtml : text)); + message.msg = message.msg.replace(token, () => noHtml || text); } } return message.msg; @@ -238,6 +239,10 @@ class AutoTranslate { params.target = target; } + if (this.supportedLanguages[target]) { + return this.supportedLanguages[target]; + } + try { result = HTTP.get('https://translation.googleapis.com/language/translate/v2/languages', { params }); } catch (e) { @@ -248,14 +253,9 @@ class AutoTranslate { result = HTTP.get('https://translation.googleapis.com/language/translate/v2/languages', { params }); } } - } finally { - if (this.supportedLanguages[target]) { - return this.supportedLanguages[target]; - } else { - this.supportedLanguages[target || 'en'] = result && result.data && result.data.data && result.data.data.languages; - return this.supportedLanguages[target || 'en']; - } } + this.supportedLanguages[target || 'en'] = result && result.data && result.data.data && result.data.data.languages; + return this.supportedLanguages[target || 'en']; } } } diff --git a/app/autotranslate/server/methods/getSupportedLanguages.js b/app/autotranslate/server/methods/getSupportedLanguages.js index a5314246498793210fd4837fa9e07b679ea8e6cd..2f44877a7e1c410a09dc7c30177f385522e38328 100644 --- a/app/autotranslate/server/methods/getSupportedLanguages.js +++ b/app/autotranslate/server/methods/getSupportedLanguages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { hasPermission } from '../../../authorization'; import AutoTranslate from '../autotranslate'; diff --git a/app/autotranslate/server/methods/saveSettings.js b/app/autotranslate/server/methods/saveSettings.js index 16544597def3b6b0ce46f887593d3244ef52d33e..c7a9adcc208a0e483b16a28200767b8957247aa3 100644 --- a/app/autotranslate/server/methods/saveSettings.js +++ b/app/autotranslate/server/methods/saveSettings.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Subscriptions } from '../../../models'; diff --git a/app/autotranslate/server/methods/translateMessage.js b/app/autotranslate/server/methods/translateMessage.js index c57abe6d6311de4220e4c81722d49f9c8c422b39..26ea7cf301a11404509a6a5891b0ef7a7d515b89 100644 --- a/app/autotranslate/server/methods/translateMessage.js +++ b/app/autotranslate/server/methods/translateMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms } from '../../../models'; import AutoTranslate from '../autotranslate'; diff --git a/app/autotranslate/server/permissions.js b/app/autotranslate/server/permissions.js index aadd3fbb44a76bb443fea7222f328096e2b465da..64ce0028fa872c6cb8e7a6bd465ca3947283de0a 100644 --- a/app/autotranslate/server/permissions.js +++ b/app/autotranslate/server/permissions.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../models'; Meteor.startup(() => { diff --git a/app/autotranslate/server/settings.js b/app/autotranslate/server/settings.js index 1045144ccefc6c961aabf89929ee77841319b86c..0bc6c22cdd555d17935f12c67f0400415f08c65d 100644 --- a/app/autotranslate/server/settings.js +++ b/app/autotranslate/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/blockstack/server/loginHandler.js b/app/blockstack/server/loginHandler.js index 83b5a71a60a958c4ff49a67a643a3bd339338924..de00f0d1ccf4d8c9bccfe4ce1b676f1a67c092e8 100644 --- a/app/blockstack/server/loginHandler.js +++ b/app/blockstack/server/loginHandler.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; -import { settings } from '../../settings'; -import { Users } from '../../models'; -import { setUserAvatar } from '../../lib'; + import { updateOrCreateUser } from './userHandler'; import { handleAccessToken } from './tokenHandler'; import { logger } from './logger'; +import { settings } from '../../settings'; +import { Users } from '../../models'; +import { setUserAvatar } from '../../lib'; // Blockstack login handler, triggered by a blockstack authResponse in route Accounts.registerLoginHandler('blockstack', (loginRequest) => { diff --git a/app/blockstack/server/routes.js b/app/blockstack/server/routes.js index 1f19ecb8c6969afcd3f10d7e87a1ab174289df98..ee4c7cc087dfe4a9bf3f017a3ff06c25df79b133 100644 --- a/app/blockstack/server/routes.js +++ b/app/blockstack/server/routes.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; + import { settings } from '../../settings'; import { RocketChatAssets } from '../../assets'; diff --git a/app/blockstack/server/settings.js b/app/blockstack/server/settings.js index be4f0095aafb32c66efa8d1b61929347763193e6..f5e79db6497573fe1d36ea5c63e84b332ca45820 100644 --- a/app/blockstack/server/settings.js +++ b/app/blockstack/server/settings.js @@ -1,8 +1,9 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; import { ServiceConfiguration } from 'meteor/service-configuration'; + import { logger } from './logger'; +import { settings } from '../../settings'; const defaults = { enable: false, diff --git a/app/blockstack/server/tokenHandler.js b/app/blockstack/server/tokenHandler.js index bfe1afe7ccc1696f11940a462e0045cfe83c077f..32cd176086fbb81652bef65728b50cff8a1ebd28 100644 --- a/app/blockstack/server/tokenHandler.js +++ b/app/blockstack/server/tokenHandler.js @@ -2,6 +2,7 @@ import { decodeToken } from 'blockstack'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Match, check } from 'meteor/check'; + import { logger } from './logger'; // Handler extracts data from JSON and tokenised reponse. diff --git a/app/blockstack/server/userHandler.js b/app/blockstack/server/userHandler.js index 4b3bdd28c589e6a4f0f7334ef091337dfbbfcfee..8078d5358c7de2409ac8b5306eb83e4b2cb661c9 100644 --- a/app/blockstack/server/userHandler.js +++ b/app/blockstack/server/userHandler.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { ServiceConfiguration } from 'meteor/service-configuration'; -import { generateUsernameSuggestion } from '../../lib'; + import { logger } from './logger'; +import { generateUsernameSuggestion } from '../../lib'; // Updates or creates a user after we authenticate with Blockstack // Clones Accounts.updateOrCreateUserFromExternalService with some modifications diff --git a/app/bot-helpers/server/index.js b/app/bot-helpers/server/index.js index ec853a1d35ba3c5c1067eacbb01699f11e827923..e88fef7641d060b3c9f999e5f0da1290ceba2485 100644 --- a/app/bot-helpers/server/index.js +++ b/app/bot-helpers/server/index.js @@ -1,9 +1,10 @@ import './settings'; import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Users, Rooms } from '../../models'; import { settings } from '../../settings'; import { hasRole } from '../../authorization'; -import _ from 'underscore'; /** * BotHelpers helps bots @@ -35,11 +36,10 @@ class BotHelpers { request(prop, ...params) { if (typeof this[prop] === 'undefined') { return null; - } else if (typeof this[prop] === 'function') { + } if (typeof this[prop] === 'function') { return this[prop](...params); - } else { - return this[prop]; } + return this[prop]; } addUserToRole(userName, roleName) { @@ -86,65 +86,64 @@ class BotHelpers { if (!Object.keys(this.userFields).length) { this.requestError(); return false; - } else { - return this._allUsers.fetch(); } + return this._allUsers.fetch(); } + get onlineUsers() { if (!Object.keys(this.userFields).length) { this.requestError(); return false; - } else { - return this._onlineUsers.fetch(); } + return this._onlineUsers.fetch(); } + get allUsernames() { if (!this.userFields.hasOwnProperty('username')) { this.requestError(); return false; - } else { - return this._allUsers.fetch().map((user) => user.username); } + return this._allUsers.fetch().map((user) => user.username); } + get onlineUsernames() { if (!this.userFields.hasOwnProperty('username')) { this.requestError(); return false; - } else { - return this._onlineUsers.fetch().map((user) => user.username); } + return this._onlineUsers.fetch().map((user) => user.username); } + get allNames() { if (!this.userFields.hasOwnProperty('name')) { this.requestError(); return false; - } else { - return this._allUsers.fetch().map((user) => user.name); } + return this._allUsers.fetch().map((user) => user.name); } + get onlineNames() { if (!this.userFields.hasOwnProperty('name')) { this.requestError(); return false; - } else { - return this._onlineUsers.fetch().map((user) => user.name); } + return this._onlineUsers.fetch().map((user) => user.name); } + get allIDs() { if (!this.userFields.hasOwnProperty('_id') || !this.userFields.hasOwnProperty('username')) { this.requestError(); return false; - } else { - return this._allUsers.fetch().map((user) => ({ id: user._id, name: user.username })); } + return this._allUsers.fetch().map((user) => ({ id: user._id, name: user.username })); } + get onlineIDs() { if (!this.userFields.hasOwnProperty('_id') || !this.userFields.hasOwnProperty('username')) { this.requestError(); return false; - } else { - return this._onlineUsers.fetch().map((user) => ({ id: user._id, name: user.username })); } + return this._onlineUsers.fetch().map((user) => ({ id: user._id, name: user.username })); } } @@ -161,8 +160,7 @@ Meteor.methods({ const userID = Meteor.userId(); if (userID && hasRole(userID, 'bot')) { return botHelpers.request(...args); - } else { - throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'botRequest' }); } + throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'botRequest' }); }, }); diff --git a/app/bot-helpers/server/settings.js b/app/bot-helpers/server/settings.js index fc5206c17d06ea71cb3dfe82ce061b34c635b4b1..dc4f5640c940ba91c4fe1c78b0792a684503463a 100644 --- a/app/bot-helpers/server/settings.js +++ b/app/bot-helpers/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/callbacks/lib/callbacks.js b/app/callbacks/lib/callbacks.js index 206bd201afd482a27bea93791bef124d4cf8af0b..589764076924c60b2786d091cc8c3fb19aa1aa8e 100644 --- a/app/callbacks/lib/callbacks.js +++ b/app/callbacks/lib/callbacks.js @@ -45,7 +45,7 @@ callbacks.add = function(hook, callback, priority, id = Random.id()) { callbacks[hook] = getHooks(hook); if (callbacks.showTime === true) { - const err = new Error; + const err = new Error(); callback.stack = err.stack; } @@ -104,7 +104,7 @@ callbacks.run = function(hook, item, constant) { } } } - return (typeof callbackResult === 'undefined') ? result : callbackResult; + return typeof callbackResult === 'undefined' ? result : callbackResult; }, item); if (callbacks.showTotalTime === true) { @@ -114,7 +114,6 @@ callbacks.run = function(hook, item, constant) { } return result; - }; diff --git a/app/cas/client/cas_client.js b/app/cas/client/cas_client.js index 2f451f1929c1155c457b9aba01c6d4cf107a26ef..7046f4d024eda6f95da56d9a482802b949269c28 100644 --- a/app/cas/client/cas_client.js +++ b/app/cas/client/cas_client.js @@ -1,21 +1,21 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; + import { settings } from '../../settings'; const openCenteredPopup = function(url, width, height) { - const screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft; const screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop; const outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth; - const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22); + const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : document.body.clientHeight - 22; // XXX what is the 22? // Use `outerWidth - width` and `outerHeight - height` for help in // positioning the popup centered relative to the current window const left = screenX + (outerWidth - width) / 2; const top = screenY + (outerHeight - height) / 2; - const features = (`width=${ width },height=${ height },left=${ left },top=${ top },scrollbars=yes`); + const features = `width=${ width },height=${ height },left=${ left },top=${ top },scrollbars=yes`; const newwindow = window.open(url, 'Login', features); if (newwindow.focus) { @@ -39,7 +39,7 @@ Meteor.loginWithCas = function(options, callback) { const appUrl = Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX; // check if the provided CAS URL already has some parameters - const delim = (login_url.split('?').length > 1) ? '&' : '?'; + const delim = login_url.split('?').length > 1 ? '&' : '?'; const loginUrl = `${ login_url }${ delim }service=${ appUrl }/_cas/${ credentialToken }`; const popup = openCenteredPopup( diff --git a/app/cas/server/cas_rocketchat.js b/app/cas/server/cas_rocketchat.js index 45f5fd61b6d22d43107d1974b4d516556e93eb0c..0a6ec78e520e04d8869f464f23e59d3be797502f 100644 --- a/app/cas/server/cas_rocketchat.js +++ b/app/cas/server/cas_rocketchat.js @@ -1,7 +1,9 @@ import { Meteor } from 'meteor/meteor'; +import { ServiceConfiguration } from 'meteor/service-configuration'; + import { Logger } from '../../logger'; import { settings } from '../../settings'; -import { ServiceConfiguration } from 'meteor/service-configuration'; + export const logger = new Logger('CAS', {}); Meteor.startup(function() { @@ -39,16 +41,16 @@ function updateServices(/* record*/) { timer = Meteor.setTimeout(function() { const data = { // These will pe passed to 'node-cas' as options - enabled: settings.get('CAS_enabled'), - base_url: settings.get('CAS_base_url'), - login_url: settings.get('CAS_login_url'), + enabled: settings.get('CAS_enabled'), + base_url: settings.get('CAS_base_url'), + login_url: settings.get('CAS_login_url'), // Rocketchat Visuals - buttonLabelText: settings.get('CAS_button_label_text'), + buttonLabelText: settings.get('CAS_button_label_text'), buttonLabelColor: settings.get('CAS_button_label_color'), - buttonColor: settings.get('CAS_button_color'), - width: settings.get('CAS_popup_width'), - height: settings.get('CAS_popup_height'), - autoclose: settings.get('CAS_autoclose'), + buttonColor: settings.get('CAS_button_color'), + width: settings.get('CAS_popup_width'), + height: settings.get('CAS_popup_height'), + autoclose: settings.get('CAS_autoclose'), }; // Either register or deregister the CAS login service based upon its configuration diff --git a/app/cas/server/cas_server.js b/app/cas/server/cas_server.js index c3d60a2a5af3ed66c68dc15f1b3da07f90640eaa..410fd4f16e06afa700eb12d8503eb4ea7a077cdb 100644 --- a/app/cas/server/cas_server.js +++ b/app/cas/server/cas_server.js @@ -1,17 +1,19 @@ +import url from 'url'; + import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; import { WebApp } from 'meteor/webapp'; -import { settings } from '../../settings'; import { RoutePolicy } from 'meteor/routepolicy'; -import { Rooms, Subscriptions, CredentialTokens } from '../../models'; -import { _setRealName } from '../../lib'; -import { logger } from './cas_rocketchat'; import _ from 'underscore'; import fiber from 'fibers'; -import url from 'url'; import CAS from 'cas'; +import { logger } from './cas_rocketchat'; +import { settings } from '../../settings'; +import { Rooms, Subscriptions, CredentialTokens } from '../../models'; +import { _setRealName } from '../../lib'; + RoutePolicy.declare('/_cas/', 'network'); const closePopup = function(res) { @@ -21,7 +23,6 @@ const closePopup = function(res) { }; const casTicket = function(req, token, callback) { - // get configuration if (!settings.get('CAS_enabled')) { logger.error('Got ticket validation request, but CAS is not enabled'); @@ -61,8 +62,6 @@ const casTicket = function(req, token, callback) { callback(); })); - - return; }; const middleware = function(req, res, next) { @@ -90,7 +89,6 @@ const middleware = function(req, res, next) { casTicket(req, credentialToken, function() { closePopup(res); }); - } catch (err) { logger.error(`Unexpected error : ${ err.message }`); closePopup(res); @@ -112,7 +110,6 @@ WebApp.connectHandlers.use(function(req, res, next) { * */ Accounts.registerLoginHandler(function(options) { - if (!options.cas) { return undefined; } @@ -153,7 +150,6 @@ Accounts.registerLoginHandler(function(options) { // Source internal attributes if (syncUserDataFieldMap) { - // Our mapping table: key(int_attr) -> value(ext_attr) // Spoken: Source this internal attribute from these external attributes const attr_map = JSON.parse(syncUserDataFieldMap); @@ -206,7 +202,6 @@ Accounts.registerLoginHandler(function(options) { } } } else { - // Define new user const newUser = { username: result.username, @@ -267,7 +262,6 @@ Accounts.registerLoginHandler(function(options) { } }); } - } return { userId: user._id }; diff --git a/app/channel-settings-mail-messages/client/lib/startup.js b/app/channel-settings-mail-messages/client/lib/startup.js index 0ed7a682f7982a3329e164552527653767e66a38..60986fc628be65ae2240e1e1bb0d60ed7df95425 100644 --- a/app/channel-settings-mail-messages/client/lib/startup.js +++ b/app/channel-settings-mail-messages/client/lib/startup.js @@ -1,5 +1,6 @@ // import resetSelection from '../resetSelection'; import { Meteor } from 'meteor/meteor'; + import { TabBar } from '../../../ui-utils'; import { hasAllPermission } from '../../../authorization'; diff --git a/app/channel-settings-mail-messages/client/views/mailMessagesInstructions.js b/app/channel-settings-mail-messages/client/views/mailMessagesInstructions.js index 861e371c1443b9228238fb59a01b3e88213f4348..a141dc7bc5afb9bbdcf0dccb739ced6fb86f4a86 100644 --- a/app/channel-settings-mail-messages/client/views/mailMessagesInstructions.js +++ b/app/channel-settings-mail-messages/client/views/mailMessagesInstructions.js @@ -4,11 +4,12 @@ import { Blaze } from 'meteor/blaze'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; +import { Deps } from 'meteor/deps'; +import toastr from 'toastr'; + import { ChatRoom } from '../../../models'; import { t, isEmail, handleError, roomTypes } from '../../../utils'; import { settings } from '../../../settings'; -import { Deps } from 'meteor/deps'; -import toastr from 'toastr'; import resetSelection from '../resetSelection'; const filterNames = (old) => { @@ -235,14 +236,14 @@ Template.mailMessagesInstructions.onCreated(function() { this.selectedUsers = new ReactiveVar([]); this.userFilter = new ReactiveVar(''); - const filter = { exceptions :[Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; + const filter = { exceptions: [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; Deps.autorun(() => { filter.exceptions = [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)); }); this.ac = new AutoComplete( { - selector:{ + selector: { item: '.rc-popup-list__item', container: '.rc-popup-list__list', }, diff --git a/app/channel-settings-mail-messages/server/lib/startup.js b/app/channel-settings-mail-messages/server/lib/startup.js index c96f5ac6e6cf1c0a7d166dbe6c4e29322d46038f..a04875ad90da49ad3bde4ca4d3f62b02c770ec68 100644 --- a/app/channel-settings-mail-messages/server/lib/startup.js +++ b/app/channel-settings-mail-messages/server/lib/startup.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../../models'; Meteor.startup(function() { diff --git a/app/channel-settings-mail-messages/server/methods/mailMessages.js b/app/channel-settings-mail-messages/server/methods/mailMessages.js index c68cfa63d4ff3a0acd2cc68186215d58fc07a700..d911210a25fc6c5f4addb141d565443effad5e56 100644 --- a/app/channel-settings-mail-messages/server/methods/mailMessages.js +++ b/app/channel-settings-mail-messages/server/methods/mailMessages.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import _ from 'underscore'; +import moment from 'moment'; + import { hasPermission } from '../../../authorization'; import { Users, Messages } from '../../../models'; import { settings } from '../../../settings'; import { Message } from '../../../ui-utils'; -import _ from 'underscore'; -import moment from 'moment'; import * as Mailer from '../../../mailer'; Meteor.methods({ diff --git a/app/channel-settings/client/index.js b/app/channel-settings/client/index.js index 5f84cf2870b34d7498b429a19ac990e39675402d..9834b106c9d90ffdaf076ab4ede4112355e19607 100644 --- a/app/channel-settings/client/index.js +++ b/app/channel-settings/client/index.js @@ -1,6 +1,7 @@ import './startup/messageTypes'; import './startup/tabBar'; import './startup/trackSettingsChange'; -export { ChannelSettings } from './lib/ChannelSettings'; import './views/channelSettings.html'; import './views/channelSettings'; + +export { ChannelSettings } from './lib/ChannelSettings'; diff --git a/app/channel-settings/client/lib/ChannelSettings.js b/app/channel-settings/client/lib/ChannelSettings.js index b705c206b20de7a15af3732fa1755ac5bb981421..26467705ec47a11dd79d338a697a515e06cbd810 100644 --- a/app/channel-settings/client/lib/ChannelSettings.js +++ b/app/channel-settings/client/lib/ChannelSettings.js @@ -38,4 +38,4 @@ export const ChannelSettings = new class { }); return _.sortBy(allowedOptions, 'order'); } -}; +}(); diff --git a/app/channel-settings/client/startup/messageTypes.js b/app/channel-settings/client/startup/messageTypes.js index c0128c87ef34cc3dcc7b0c7c9ab3372266a96798..5b73ce3ffba39400ec69b3f1d019c3721f9c940c 100644 --- a/app/channel-settings/client/startup/messageTypes.js +++ b/app/channel-settings/client/startup/messageTypes.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { MessageTypes } from '../../../ui-utils'; import { t } from '../../../utils'; -import s from 'underscore.string'; Meteor.startup(function() { MessageTypes.registerType({ diff --git a/app/channel-settings/client/startup/tabBar.js b/app/channel-settings/client/startup/tabBar.js index 798dff511e366ec57a8c45befcbc38f35ca0445e..2a3d794c40466a8e29708855b3be2bc5ef92c9ea 100644 --- a/app/channel-settings/client/startup/tabBar.js +++ b/app/channel-settings/client/startup/tabBar.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { TabBar } from '../../../ui-utils'; Meteor.startup(() => { diff --git a/app/channel-settings/client/startup/trackSettingsChange.js b/app/channel-settings/client/startup/trackSettingsChange.js index 3b4c423725a83c832831bdc8da04da2623575ae6..4dc05e611fc106e577b104d6fd9daf7008e31e23 100644 --- a/app/channel-settings/client/startup/trackSettingsChange.js +++ b/app/channel-settings/client/startup/trackSettingsChange.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; + import { callbacks } from '../../../callbacks'; import { RoomManager } from '../../../ui-utils'; import { roomTypes } from '../../../utils'; diff --git a/app/channel-settings/client/views/channelSettings.js b/app/channel-settings/client/views/channelSettings.js index 806cd5682d6b35bc275c9b83c752044bfbeecee7..04d010a3394d3bfdd93241e4f0203448bb92c17f 100644 --- a/app/channel-settings/client/views/channelSettings.js +++ b/app/channel-settings/client/views/channelSettings.js @@ -5,6 +5,7 @@ import { TAPi18n } from 'meteor/tap:i18n'; import toastr from 'toastr'; import moment from 'moment'; import s from 'underscore.string'; + import { modal, popover, call, erase, hide, leave } from '../../../ui-utils'; import { ChatRoom } from '../../../models'; import { settings } from '../../../settings'; @@ -178,7 +179,7 @@ Template.channelSettingsEditing.events({ popoverClass: 'notifications-preferences', template: 'pushNotificationsPopover', data: { - change : (value) => { + change: (value) => { const falseOrUndefined = value === 'disabled' ? false : undefined; const realValue = value === 'enabled' ? true : falseOrUndefined; return this.value.set(realValue); @@ -207,7 +208,8 @@ Template.channelSettingsEditing.events({ }); Template.channelSettingsEditing.onCreated(function() { - const room = this.room = ChatRoom.findOne(this.data && this.data.rid); + const room = ChatRoom.findOne(this.data && this.data.rid); + this.room = room; this.settings = { name: { type: 'text', @@ -326,9 +328,9 @@ Template.channelSettingsEditing.onCreated(function() { canView() { if (!['c', 'p'].includes(room.t)) { return false; - } else if (room.t === 'p' && !hasAllPermission('create-c')) { + } if (room.t === 'p' && !hasAllPermission('create-c')) { return false; - } else if (room.t === 'c' && !hasAllPermission('create-p')) { + } if (room.t === 'c' && !hasAllPermission('create-p')) { return false; } return true; @@ -360,7 +362,6 @@ Template.channelSettingsEditing.onCreated(function() { } return reject(); }); - }); } // return $('.channel-settings form [name=\'t\']').prop('checked', !!room.type === 'p'); @@ -668,7 +669,7 @@ Template.channelSettingsEditing.onCreated(function() { }; Object.keys(this.settings).forEach((key) => { const setting = this.settings[key]; - const def = setting.getValue ? setting.getValue(this.room) : (this.room[key] || false); + const def = setting.getValue ? setting.getValue(this.room) : this.room[key] || false; setting.default = new ReactiveVar(def); setting.value = new ReactiveVar(def); }); diff --git a/app/channel-settings/server/functions/saveReactWhenReadOnly.js b/app/channel-settings/server/functions/saveReactWhenReadOnly.js index c50d4c3aadbfd55cdb14cba3a3f70bd19fb3f0fd..97d20782b235643973d74c4ae026127e690089a9 100644 --- a/app/channel-settings/server/functions/saveReactWhenReadOnly.js +++ b/app/channel-settings/server/functions/saveReactWhenReadOnly.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms } from '../../../models'; export const saveReactWhenReadOnly = function(rid, allowReact) { diff --git a/app/channel-settings/server/functions/saveRoomAnnouncement.js b/app/channel-settings/server/functions/saveRoomAnnouncement.js index 4c31a9b11d83a8f84b5895ef3031025b861dc6ca..07df9e4edf426d1a0d7878950488798ec59a1f56 100644 --- a/app/channel-settings/server/functions/saveRoomAnnouncement.js +++ b/app/channel-settings/server/functions/saveRoomAnnouncement.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms, Messages } from '../../../models'; export const saveRoomAnnouncement = function(rid, roomAnnouncement, user, sendMessage = true) { diff --git a/app/channel-settings/server/functions/saveRoomCustomFields.js b/app/channel-settings/server/functions/saveRoomCustomFields.js index da8fea1b18793eee28847d82043538e8b24bf835..0252a2de6768a5276f9b7fc865d672a475f6e4b6 100644 --- a/app/channel-settings/server/functions/saveRoomCustomFields.js +++ b/app/channel-settings/server/functions/saveRoomCustomFields.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms, Subscriptions } from '../../../models'; export const saveRoomCustomFields = function(rid, roomCustomFields) { diff --git a/app/channel-settings/server/functions/saveRoomDescription.js b/app/channel-settings/server/functions/saveRoomDescription.js index 72a7a310b5c641deb6ddb7d4d9d6c9796c20e4fe..89860061ac3d5b6b3ad3a9c89343563c3f71df31 100644 --- a/app/channel-settings/server/functions/saveRoomDescription.js +++ b/app/channel-settings/server/functions/saveRoomDescription.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms, Messages } from '../../../models'; export const saveRoomDescription = function(rid, roomDescription, user) { diff --git a/app/channel-settings/server/functions/saveRoomName.js b/app/channel-settings/server/functions/saveRoomName.js index 27c73524a1157747c46b45951703b3209edc7318..1584febd2e3bf7f8de1641bb8f2263c4307ed404 100644 --- a/app/channel-settings/server/functions/saveRoomName.js +++ b/app/channel-settings/server/functions/saveRoomName.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms, Messages, Subscriptions, Integrations } from '../../../models'; import { roomTypes, getValidRoomName } from '../../../utils'; import { callbacks } from '../../../callbacks'; diff --git a/app/channel-settings/server/functions/saveRoomReadOnly.js b/app/channel-settings/server/functions/saveRoomReadOnly.js index b5d88c96c8b341b1e14b49246d763f48798eeca7..baf8dff166bf669d52d393dfed1b2bc0b470200a 100644 --- a/app/channel-settings/server/functions/saveRoomReadOnly.js +++ b/app/channel-settings/server/functions/saveRoomReadOnly.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms } from '../../../models'; import { hasPermission } from '../../../authorization'; diff --git a/app/channel-settings/server/functions/saveRoomSystemMessages.js b/app/channel-settings/server/functions/saveRoomSystemMessages.js index 7fb229e0d12878877017bb5ceb8b8f9a684a9f0f..c1a2ba92f00354732008b4b303d8aa9127766b93 100644 --- a/app/channel-settings/server/functions/saveRoomSystemMessages.js +++ b/app/channel-settings/server/functions/saveRoomSystemMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms } from '../../../models'; export const saveRoomSystemMessages = function(rid, systemMessages) { diff --git a/app/channel-settings/server/functions/saveRoomTokens.js b/app/channel-settings/server/functions/saveRoomTokens.js index ad68265b9cf4cd5320397d19ff4e97b07fb98b72..3c634a9996a244aced497caf6d5b0ede2d88e170 100644 --- a/app/channel-settings/server/functions/saveRoomTokens.js +++ b/app/channel-settings/server/functions/saveRoomTokens.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms } from '../../../models'; export const saveRoomTokenpass = function(rid, tokenpass) { diff --git a/app/channel-settings/server/functions/saveRoomTopic.js b/app/channel-settings/server/functions/saveRoomTopic.js index a12bbef2c15985ad96eb5deb365fa1ce8dadcfc6..89ba7c5ec9140b3b77cfb399d42b0ff7260bbef5 100644 --- a/app/channel-settings/server/functions/saveRoomTopic.js +++ b/app/channel-settings/server/functions/saveRoomTopic.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms, Messages } from '../../../models'; export const saveRoomTopic = function(rid, roomTopic, user, sendMessage = true) { diff --git a/app/channel-settings/server/functions/saveRoomType.js b/app/channel-settings/server/functions/saveRoomType.js index e848be23b80fda1d2bb9920bd24eebeb9d2af876..9bf6cb4503bad84e9565755a6877b65362d6f0c5 100644 --- a/app/channel-settings/server/functions/saveRoomType.js +++ b/app/channel-settings/server/functions/saveRoomType.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Subscriptions, Messages } from '../../../models'; import { settings } from '../../../settings'; diff --git a/app/channel-settings/server/functions/saveStreamingOptions.js b/app/channel-settings/server/functions/saveStreamingOptions.js index 5b5490314dec4bcc9d9e9d2495b2c5621b9e1aed..473d6b26c2bb171a8bf7b8688a8389e64c4b2cec 100644 --- a/app/channel-settings/server/functions/saveStreamingOptions.js +++ b/app/channel-settings/server/functions/saveStreamingOptions.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Rooms } from '../../../models'; export const saveStreamingOptions = function(rid, options) { diff --git a/app/channel-settings/server/index.js b/app/channel-settings/server/index.js index 9b86dcca63f53d6989e183df3322e5334b98de42..abbd2bf327fff950296b45478b85b1be724c1b29 100644 --- a/app/channel-settings/server/index.js +++ b/app/channel-settings/server/index.js @@ -1,5 +1,6 @@ import './startup'; +import './methods/saveRoomSettings'; + export { saveRoomTopic } from './functions/saveRoomTopic'; export { saveStreamingOptions } from './functions/saveStreamingOptions'; export { saveRoomName } from './functions/saveRoomName'; -import './methods/saveRoomSettings'; diff --git a/app/channel-settings/server/methods/saveRoomSettings.js b/app/channel-settings/server/methods/saveRoomSettings.js index d8fa642ca685fa4d83b005f6ed18004f286fc213..45738633fd71ce905351b2cc3c1921f699377037 100644 --- a/app/channel-settings/server/methods/saveRoomSettings.js +++ b/app/channel-settings/server/methods/saveRoomSettings.js @@ -1,9 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; import { callbacks } from '../../../callbacks'; - import { saveRoomName } from '../functions/saveRoomName'; import { saveRoomTopic } from '../functions/saveRoomTopic'; import { saveRoomAnnouncement } from '../functions/saveRoomAnnouncement'; @@ -34,7 +34,7 @@ Meteor.methods({ if (typeof settings !== 'object') { settings = { - [settings] : value, + [settings]: value, }; } diff --git a/app/channel-settings/server/startup.js b/app/channel-settings/server/startup.js index be9f1e4fb0ee0b3e95d586d0ba8ea8b31620c1ea..698723ebe994788530e7a8bf6658fae3d3cc6528 100644 --- a/app/channel-settings/server/startup.js +++ b/app/channel-settings/server/startup.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../models'; Meteor.startup(function() { diff --git a/app/chatpal-search/client/route.js b/app/chatpal-search/client/route.js index 74cf84c86739c6bfcc48ad6cb25d0d76cf123f52..cb0281953064b53025f8cfe9d7c79618f1458795 100644 --- a/app/chatpal-search/client/route.js +++ b/app/chatpal-search/client/route.js @@ -1,5 +1,6 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { t } from '../../utils'; FlowRouter.route('/admin/chatpal', { diff --git a/app/chatpal-search/client/template/admin.js b/app/chatpal-search/client/template/admin.js index c4c2a201ae2835b222d44ba097846d07e32060f3..bcbf71c873e69b82abafcd3b21e1c56eabc91a31 100644 --- a/app/chatpal-search/client/template/admin.js +++ b/app/chatpal-search/client/template/admin.js @@ -2,12 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { settings } from '../../../settings'; import { hasRole } from '../../../authorization'; -import toastr from 'toastr'; Template.ChatpalAdmin.onCreated(function() { - const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; this.validateEmail = (email) => re.test(email.toLowerCase()); @@ -16,7 +16,7 @@ Template.ChatpalAdmin.onCreated(function() { const lang = settings.get('Language'); - this.lang = (lang === 'de' || lang === 'en') ? lang : 'en'; + this.lang = lang === 'de' || lang === 'en' ? lang : 'en'; this.tac = new ReactiveVar(); @@ -45,7 +45,6 @@ Template.ChatpalAdmin.events({ t.apiKey.set(key); }); - } catch (e) { console.log(e); toastr.error(TAPi18n.__('Chatpal_ERROR_username_already_exists'));// TODO error messages diff --git a/app/chatpal-search/client/template/result.js b/app/chatpal-search/client/template/result.js index f9d1bf9353f98839275794fe8bd032abedf1e631..08c3512905d5d65c192ee4ab946827dfa10e25a5 100644 --- a/app/chatpal-search/client/template/result.js +++ b/app/chatpal-search/client/template/result.js @@ -1,8 +1,9 @@ -import { DateFormat } from '../../../lib'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + +import { DateFormat } from '../../../lib'; import { roomTypes, getURL } from '../../../utils'; import { Subscriptions } from '../../../models'; diff --git a/app/chatpal-search/server/provider/index.js b/app/chatpal-search/server/provider/index.js index 66f8774d7e51ee0524d7ed8923e36da184ef1e07..4195805d53b7edbaa399338d51ce0997f25cff8b 100644 --- a/app/chatpal-search/server/provider/index.js +++ b/app/chatpal-search/server/provider/index.js @@ -1,14 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; -import ChatpalLogger from '../utils/logger'; import { Random } from 'meteor/random'; + +import ChatpalLogger from '../utils/logger'; import { Rooms, Messages } from '../../../models'; /** * Enables HTTP functions on Chatpal Backend */ class Backend { - constructor(options) { this._options = options; } @@ -20,13 +20,12 @@ class Backend { */ index(docs) { const options = { - data:docs, - params:{ language:this._options.language }, + data: docs, + params: { language: this._options.language }, ...this._options.httpOptions, }; try { - const response = HTTP.call('POST', `${ this._options.baseurl }${ this._options.updatepath }`, options); if (response.statusCode >= 200 && response.statusCode < 300) { @@ -34,13 +33,11 @@ class Backend { } else { throw new Error(response); } - } catch (e) { // TODO how to deal with this ChatpalLogger.error('indexing failed', JSON.stringify(e, null, 2)); return false; } - } /** @@ -53,11 +50,11 @@ class Backend { ChatpalLogger.debug(`Remove ${ type }(${ id }) from Index`); const options = { - data:{ + data: { delete: { query: `id:${ id } AND type:${ type }`, }, - commit:{}, + commit: {}, }, ...this._options.httpOptions, }; @@ -72,7 +69,7 @@ class Backend { } count(type) { - return this.query({ type, rows:0, text:'*' })[type].numFound; + return this.query({ type, rows: 0, text: '*' })[type].numFound; } /** @@ -81,7 +78,6 @@ class Backend { * @param callback */ query(params, callback) { - const options = { params, ...this._options.httpOptions, @@ -97,14 +93,12 @@ class Backend { callback(undefined, result.data); }); } else { - const response = HTTP.call('POST', this._options.baseurl + this._options.searchpath, options); if (response.statusCode >= 200 && response.statusCode < 300) { return response.data; - } else { - throw new Error(response); } + throw new Error(response); } } catch (e) { ChatpalLogger.error('query failed', JSON.stringify(e, null, 2)); @@ -113,7 +107,6 @@ class Backend { } suggest(params, callback) { - const options = { params, ...this._options.httpOptions, @@ -134,12 +127,13 @@ class Backend { ChatpalLogger.debug('Clear Index'); const options = { - data:{ + data: { delete: { query: '*:*', }, - commit:{}, - }, ...this._options.httpOptions, + commit: {}, + }, + ...this._options.httpOptions, }; try { @@ -157,10 +151,9 @@ class Backend { * @returns {boolean} */ static ping(config) { - const options = { params: { - stats:true, + stats: true, }, ...config.httpOptions, }; @@ -170,21 +163,18 @@ class Backend { if (response.statusCode >= 200 && response.statusCode < 300) { return response.data.stats; - } else { - return false; } + return false; } catch (e) { return false; } } - } /** * Enabled batch indexing */ class BatchIndexer { - constructor(size, func, ...rest) { this._size = size; this._func = func; @@ -209,14 +199,12 @@ class BatchIndexer { * Provides index functions to chatpal provider */ export default class Index { - /** * Creates Index Stub * @param options * @param clear if a complete reindex should be done */ constructor(options, clear, date) { - this._id = Random.id(); this._backend = new Backend(options); @@ -280,22 +268,22 @@ export default class Index { * @private */ _existsDataOlderThan(date) { - return Messages.model.find({ ts:{ $lt: new Date(date) }, t:{ $exists:false } }, { limit:1 }).fetch().length > 0; + return Messages.model.find({ ts: { $lt: new Date(date) }, t: { $exists: false } }, { limit: 1 }).fetch().length > 0; } _doesRoomCountDiffer() { - return Rooms.find({ t:{ $ne:'d' } }).count() !== this._backend.count('room'); + return Rooms.find({ t: { $ne: 'd' } }).count() !== this._backend.count('room'); } _doesUserCountDiffer() { - return Meteor.users.find({ active:true }).count() !== this._backend.count('user'); + return Meteor.users.find({ active: true }).count() !== this._backend.count('user'); } /** * Index users by using a database cursor */ _indexUsers() { - const cursor = Meteor.users.find({ active:true }); + const cursor = Meteor.users.find({ active: true }); ChatpalLogger.debug(`Start indexing ${ cursor.count() } users`); @@ -311,7 +299,7 @@ export default class Index { * @private */ _indexRooms() { - const cursor = Rooms.find({ t:{ $ne:'d' } }); + const cursor = Rooms.find({ t: { $ne: 'd' } }); ChatpalLogger.debug(`Start indexing ${ cursor.count() } rooms`); @@ -323,11 +311,10 @@ export default class Index { } _indexMessages(date, gap) { - const start = new Date(date - gap); const end = new Date(date); - const cursor = Messages.model.find({ ts:{ $gt: start, $lt: end }, t:{ $exists:false } }); + const cursor = Messages.model.find({ ts: { $gt: start, $lt: end }, t: { $exists: false } }); ChatpalLogger.debug(`Start indexing ${ cursor.count() } messages between ${ start.toString() } and ${ end.toString() }`); @@ -341,16 +328,13 @@ export default class Index { } _run(date, resolve, reject) { - this._running = true; if (this._existsDataOlderThan(date) && !this._break) { - Meteor.setTimeout(() => { date = this._indexMessages(date, (this._options.windowSize || 24) * 3600000); this._run(date, resolve, reject); - }, this._options.timeout || 1000); } else if (this._break) { ChatpalLogger.info(`stopped bootstrap (index-id: ${ this._id })`); @@ -361,7 +345,6 @@ export default class Index { resolve(); } else { - ChatpalLogger.info(`No messages older than already indexed date ${ new Date(date).toString() }`); if (this._doesUserCountDiffer() && !this._break) { @@ -387,18 +370,15 @@ export default class Index { } _bootstrap(clear, date) { - ChatpalLogger.info('Start bootstrapping'); return new Promise((resolve, reject) => { - if (clear) { this._backend.clear(); date = new Date().getTime(); } this._run(date, resolve, reject); - }); } @@ -448,5 +428,4 @@ export default class Index { type, }, callback); } - } diff --git a/app/chatpal-search/server/provider/provider.js b/app/chatpal-search/server/provider/provider.js index 1ba32fb25a09f6fb80f94acd046d387e49bbdc70..a46d935c7250b569e78cfbf85512a5edd0a6ae05 100644 --- a/app/chatpal-search/server/provider/provider.js +++ b/app/chatpal-search/server/provider/provider.js @@ -1,14 +1,15 @@ import { Meteor } from 'meteor/meteor'; + import { searchProviderService, SearchProvider } from '../../../search/server'; -import Index from './index'; import ChatpalLogger from '../utils/logger'; import { Subscriptions } from '../../../models'; +import Index from './index'; + /** * The chatpal search provider enables chatpal search. An appropriate backedn has to be specified by settings. */ class ChatpalProvider extends SearchProvider { - /** * Create chatpal provider with some settings for backend and ui */ @@ -18,7 +19,7 @@ class ChatpalProvider extends SearchProvider { this.chatpalBaseUrl = 'https://beta.chatpal.io/v1'; this._settings.add('Backend', 'select', 'cloud', { - values:[ + values: [ { key: 'cloud', i18nLabel: 'Cloud Service' }, { key: 'onsite', i18nLabel: 'On-Site' }, ], @@ -26,7 +27,7 @@ class ChatpalProvider extends SearchProvider { i18nDescription: 'Chatpal_Backend_Description', }); this._settings.add('API_Key', 'string', '', { - enableQuery:[{ + enableQuery: [{ _id: 'Search.chatpalProvider.Backend', value: 'cloud', }], @@ -34,7 +35,7 @@ class ChatpalProvider extends SearchProvider { i18nDescription: 'Chatpal_API_Key_Description', }); this._settings.add('Base_URL', 'string', '', { - enableQuery:[{ + enableQuery: [{ _id: 'Search.chatpalProvider.Backend', value: 'onsite', }], @@ -42,7 +43,7 @@ class ChatpalProvider extends SearchProvider { i18nDescription: 'Chatpal_Base_URL_Description', }); this._settings.add('HTTP_Headers', 'string', '', { - enableQuery:[{ + enableQuery: [{ _id: 'Search.chatpalProvider.Backend', value: 'onsite', }], @@ -129,7 +130,6 @@ class ChatpalProvider extends SearchProvider { * @inheritDoc */ on(name, value, payload) { - if (!this.index) { this.indexFail = true; return false; @@ -154,15 +154,14 @@ class ChatpalProvider extends SearchProvider { * @private */ _checkForClear(reason) { - if (reason === 'startup') { return false; } if (reason === 'switch') { return true; } - return this._indexConfig.backendtype !== this._settings.get('Backend') || - (this._indexConfig.backendtype === 'onsite' && this._indexConfig.baseurl !== (this._settings.get('Base_URL').endsWith('/') ? this._settings.get('Base_URL').slice(0, -1) : this._settings.get('Base_URL'))) || - (this._indexConfig.backendtype === 'cloud' && this._indexConfig.httpOptions.headers['X-Api-Key'] !== this._settings.get('API_Key')) || - this._indexConfig.language !== this._settings.get('Main_Language'); + return this._indexConfig.backendtype !== this._settings.get('Backend') + || (this._indexConfig.backendtype === 'onsite' && this._indexConfig.baseurl !== (this._settings.get('Base_URL').endsWith('/') ? this._settings.get('Base_URL').slice(0, -1) : this._settings.get('Base_URL'))) + || (this._indexConfig.backendtype === 'cloud' && this._indexConfig.httpOptions.headers['X-Api-Key'] !== this._settings.get('API_Key')) + || this._indexConfig.language !== this._settings.get('Main_Language'); } /** @@ -191,7 +190,6 @@ class ChatpalProvider extends SearchProvider { * @private */ _ping(config, resolve, reject, timeout = 5000) { - const maxTimeout = 200000; const stats = Index.ping(config); @@ -200,14 +198,12 @@ class ChatpalProvider extends SearchProvider { ChatpalLogger.debug('ping was successfull'); resolve({ config, stats }); } else { - ChatpalLogger.warn(`ping failed, retry in ${ timeout } ms`); this._pingTimeout = Meteor.setTimeout(() => { this._ping(config, resolve, reject, Math.min(maxTimeout, 2 * timeout)); }, timeout); } - } /** @@ -216,7 +212,6 @@ class ChatpalProvider extends SearchProvider { * @private */ _getIndexConfig() { - return new Promise((resolve, reject) => { const config = { backendtype: this._settings.get('Backend'), @@ -254,7 +249,6 @@ class ChatpalProvider extends SearchProvider { this._ping(config, resolve, reject); }); - } /** @@ -276,7 +270,6 @@ class ChatpalProvider extends SearchProvider { * @param reject */ start(reason, resolve, reject) { - const clear = this._checkForClear(reason); ChatpalLogger.debug(`clear = ${ clear } with reason '${ reason }'`); @@ -309,8 +302,7 @@ class ChatpalProvider extends SearchProvider { * @returns {*} */ search(text, context, payload, callback) { - - if (!this.index) { return callback({ msg:'Chatpal_currently_not_active' }); } + if (!this.index) { return callback({ msg: 'Chatpal_currently_not_active' }); } const type = payload.resultType === 'All' ? ['message', 'user', 'room'] : ['message']; const params = Object.assign({}, payload.custom); @@ -325,15 +317,13 @@ class ChatpalProvider extends SearchProvider { callback, params ); - } /** * @inheritDoc */ suggest(text, context, payload, callback) { - - if (!this.index) { return callback({ msg:'Chatpal_currently_not_active' }); } + if (!this.index) { return callback({ msg: 'Chatpal_currently_not_active' }); } const type = payload.resultType === 'All' ? ['message', 'user', 'room'] : ['message']; diff --git a/app/chatpal-search/server/utils/utils.js b/app/chatpal-search/server/utils/utils.js index d30ba0415c64e342a81235bd3f23fa97f2b458f0..91b1ffe64f222d16ec490e1f0b1f0445a4332e51 100644 --- a/app/chatpal-search/server/utils/utils.js +++ b/app/chatpal-search/server/utils/utils.js @@ -7,9 +7,8 @@ Meteor.methods({ const response = HTTP.call('POST', 'https://beta.chatpal.io/v1/account', { data: { email, tier: 'free' } }); if (response.statusCode === 201) { return response.data.key; - } else { - return false; } + return false; } catch (e) { return false; } @@ -19,9 +18,8 @@ Meteor.methods({ const response = HTTP.call('GET', `https://beta.chatpal.io/v1/terms/${ lang }.html`); if (response.statusCode === 200) { return response.content; - } else { - return undefined; } + return undefined; } catch (e) { return false; } diff --git a/app/cloud/client/admin/callback.js b/app/cloud/client/admin/callback.js index 1a5fbabf5e8d609d9d6a1d782b8bacbf853fdd4b..de860026192ef91dbbe58c044a2f4838c595f15a 100644 --- a/app/cloud/client/admin/callback.js +++ b/app/cloud/client/admin/callback.js @@ -4,11 +4,11 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; - import { FlowRouter } from 'meteor/kadira:flow-router'; +import queryString from 'query-string'; + import { SideNav } from '../../../ui-utils/client'; -import queryString from 'query-string'; Template.cloudCallback.onCreated(function() { const instance = this; @@ -44,4 +44,3 @@ Template.cloudCallback.onRendered(() => { SideNav.openFlex(); }); }); - diff --git a/app/cloud/client/admin/cloud.js b/app/cloud/client/admin/cloud.js index 2084644ddd778b4f73b2ba4289230b8988ef9c84..4eeb6ce73021fa31a7a9363421b0bcebc64c2c02 100644 --- a/app/cloud/client/admin/cloud.js +++ b/app/cloud/client/admin/cloud.js @@ -4,11 +4,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; +import queryString from 'query-string'; +import toastr from 'toastr'; + import { t } from '../../../utils'; import { SideNav } from '../../../ui-utils/client'; -import queryString from 'query-string'; -import toastr from 'toastr'; Template.cloud.onCreated(function() { const instance = this; @@ -219,4 +220,3 @@ Template.cloud.onRendered(() => { SideNav.openFlex(); }); }); - diff --git a/app/cloud/client/index.js b/app/cloud/client/index.js index 73262bf3de657f148ea056f7823c6ad8f8a1674d..d0241a21c12e2e2ebc417510703e054d312d26a0 100644 --- a/app/cloud/client/index.js +++ b/app/cloud/client/index.js @@ -3,6 +3,7 @@ import './admin/cloud'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { FlowRouter } from 'meteor/kadira:flow-router'; + import { AdminBox } from '../../ui-utils'; import { hasAtLeastOnePermission } from '../../authorization'; diff --git a/app/cloud/server/functions/checkUserHasCloudLogin.js b/app/cloud/server/functions/checkUserHasCloudLogin.js index ca738ab83c4eb64d093a5563d076d303738bce23..39743627152ba0c45898f5a75dae80023a85f8e2 100644 --- a/app/cloud/server/functions/checkUserHasCloudLogin.js +++ b/app/cloud/server/functions/checkUserHasCloudLogin.js @@ -1,5 +1,5 @@ -import { Users } from '../../../models'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; +import { Users } from '../../../models'; export function checkUserHasCloudLogin(userId) { const { connectToCloud, workspaceRegistered } = retrieveRegistrationStatus(); diff --git a/app/cloud/server/functions/connectWorkspace.js b/app/cloud/server/functions/connectWorkspace.js index 923271b948253d8f8ef9777873b1fa8343446a38..5ec79dbdb7e5fb1694872570596a52da3c37847b 100644 --- a/app/cloud/server/functions/connectWorkspace.js +++ b/app/cloud/server/functions/connectWorkspace.js @@ -1,10 +1,11 @@ import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; -import { Settings } from '../../../models'; + import { getRedirectUri } from './getRedirectUri'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; import { getWorkspaceAccessToken } from './getWorkspaceAccessToken'; +import { Settings } from '../../../models'; +import { settings } from '../../../settings'; export function connectWorkspace(token) { const { connectToCloud } = retrieveRegistrationStatus(); diff --git a/app/cloud/server/functions/finishOAuthAuthorization.js b/app/cloud/server/functions/finishOAuthAuthorization.js index 71892a34d3f476485177de069bca6cf6ceae3dbb..5bf24cb9992bdcf559c754f0d96c8fffa51cde52 100644 --- a/app/cloud/server/functions/finishOAuthAuthorization.js +++ b/app/cloud/server/functions/finishOAuthAuthorization.js @@ -1,9 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; -import { Users } from '../../../models'; import { getRedirectUri } from './getRedirectUri'; +import { settings } from '../../../settings'; +import { Users } from '../../../models'; import { userScopes } from '../oauthScopes'; export function finishOAuthAuthorization(code, state) { diff --git a/app/cloud/server/functions/getOAuthAuthorizationUrl.js b/app/cloud/server/functions/getOAuthAuthorizationUrl.js index b0f3b687989ca114131f750ccae0ee913f3d3448..e5ff7f0f8d2e70e7e9162414554a44d5679b4d93 100644 --- a/app/cloud/server/functions/getOAuthAuthorizationUrl.js +++ b/app/cloud/server/functions/getOAuthAuthorizationUrl.js @@ -1,8 +1,8 @@ import { Random } from 'meteor/random'; -import { Settings } from '../../../models'; -import { settings } from '../../../settings'; import { getRedirectUri } from './getRedirectUri'; +import { Settings } from '../../../models'; +import { settings } from '../../../settings'; import { userScopes } from '../oauthScopes'; export function getOAuthAuthorizationUrl() { diff --git a/app/cloud/server/functions/getUserCloudAccessToken.js b/app/cloud/server/functions/getUserCloudAccessToken.js index e1e05b570dd4681aa89d7cd57aed19204438819c..3be0f726b121506648bcda7101bf6cf5fae0033a 100644 --- a/app/cloud/server/functions/getUserCloudAccessToken.js +++ b/app/cloud/server/functions/getUserCloudAccessToken.js @@ -1,11 +1,12 @@ import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; -import { Users } from '../../../models'; + import { getRedirectUri } from './getRedirectUri'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; import { unregisterWorkspace } from './unregisterWorkspace'; import { userLoggedOut } from './userLoggedOut'; +import { Users } from '../../../models'; +import { settings } from '../../../settings'; import { userScopes } from '../oauthScopes'; export function getUserCloudAccessToken(userId, forceNew = false, scope = '', save = true) { diff --git a/app/cloud/server/functions/getWorkspaceAccessToken.js b/app/cloud/server/functions/getWorkspaceAccessToken.js index d8af1aa97a16c52fb1dbdcaed6f91d947659118c..5ae3552e0001f0fcaf2415f424617226b2614dd6 100644 --- a/app/cloud/server/functions/getWorkspaceAccessToken.js +++ b/app/cloud/server/functions/getWorkspaceAccessToken.js @@ -1,10 +1,11 @@ import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; -import { Settings } from '../../../models'; + import { getRedirectUri } from './getRedirectUri'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; import { unregisterWorkspace } from './unregisterWorkspace'; +import { Settings } from '../../../models'; +import { settings } from '../../../settings'; import { workspaceScopes } from '../oauthScopes'; export function getWorkspaceAccessToken(forceNew = false, scope = '', save = true) { diff --git a/app/cloud/server/functions/getWorkspaceLicense.js b/app/cloud/server/functions/getWorkspaceLicense.js index 2506f45f36b70666d923c5596451395d1b0e3b9a..d769895ecfa38881b9f067ffb1f32f49aab531e9 100644 --- a/app/cloud/server/functions/getWorkspaceLicense.js +++ b/app/cloud/server/functions/getWorkspaceLicense.js @@ -1,8 +1,9 @@ import { HTTP } from 'meteor/http'; + +import { getWorkspaceAccessToken } from './getWorkspaceAccessToken'; import { settings } from '../../../settings'; import { Settings } from '../../../models'; -import { getWorkspaceAccessToken } from './getWorkspaceAccessToken'; export function getWorkspaceLicense() { const token = getWorkspaceAccessToken(); diff --git a/app/cloud/server/functions/retrieveRegistrationStatus.js b/app/cloud/server/functions/retrieveRegistrationStatus.js index b4843af6d364efbe53ead8d7ca80030e486dd078..562238c466cbe3622485be7b5f2b5c2a181f847d 100644 --- a/app/cloud/server/functions/retrieveRegistrationStatus.js +++ b/app/cloud/server/functions/retrieveRegistrationStatus.js @@ -4,7 +4,7 @@ import { Users } from '../../../models'; export function retrieveRegistrationStatus() { const info = { connectToCloud: settings.get('Register_Server'), - workspaceRegistered: (settings.get('Cloud_Workspace_Client_Id')) ? true : false, + workspaceRegistered: !!settings.get('Cloud_Workspace_Client_Id'), workspaceId: settings.get('Cloud_Workspace_Id'), uniqueId: settings.get('uniqueID'), token: '', diff --git a/app/cloud/server/functions/startRegisterWorkspace.js b/app/cloud/server/functions/startRegisterWorkspace.js index c4e3f97b23fd29c1207f3333b63cfff5e2c72caa..e6c98490bde3da2bfad5c245c5c61f74447ede12 100644 --- a/app/cloud/server/functions/startRegisterWorkspace.js +++ b/app/cloud/server/functions/startRegisterWorkspace.js @@ -1,11 +1,11 @@ import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; -import { Settings } from '../../../models'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; - -import { statistics } from '../../../statistics'; import { syncWorkspace } from './syncWorkspace'; +import { settings } from '../../../settings'; +import { Settings } from '../../../models'; +import { statistics } from '../../../statistics'; + export function startRegisterWorkspace(resend = false) { const { workspaceRegistered, connectToCloud } = retrieveRegistrationStatus(); diff --git a/app/cloud/server/functions/syncWorkspace.js b/app/cloud/server/functions/syncWorkspace.js index 90bba1be4182c5c0175641fa184d707fa7f389fa..93f1cddbc1341e01c9e20012def4201d39391621 100644 --- a/app/cloud/server/functions/syncWorkspace.js +++ b/app/cloud/server/functions/syncWorkspace.js @@ -1,11 +1,11 @@ import { HTTP } from 'meteor/http'; -import { settings } from '../../../settings'; + import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; import { getWorkspaceAccessToken } from './getWorkspaceAccessToken'; - -import { statistics } from '../../../statistics'; import { getWorkspaceLicense } from './getWorkspaceLicense'; +import { statistics } from '../../../statistics'; +import { settings } from '../../../settings'; export function syncWorkspace(reconnectCheck = false) { const { workspaceRegistered, connectToCloud } = retrieveRegistrationStatus(); @@ -47,7 +47,6 @@ export function syncWorkspace(reconnectCheck = false) { }); getWorkspaceLicense(); - } catch (e) { if (e.response && e.response.data && e.response.data.error) { console.error(`Failed to sync with Rocket.Chat Cloud. Error: ${ e.response.data.error }`); diff --git a/app/cloud/server/functions/unregisterWorkspace.js b/app/cloud/server/functions/unregisterWorkspace.js index 3898d371dfb2509a3311385c6c0d9ebd0a891dbe..a1102b1505d07f312c49c00cd18fdf1413b5b59d 100644 --- a/app/cloud/server/functions/unregisterWorkspace.js +++ b/app/cloud/server/functions/unregisterWorkspace.js @@ -1,6 +1,6 @@ +import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; import { Settings } from '../../../models'; -import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; export function unregisterWorkspace() { const { workspaceRegistered } = retrieveRegistrationStatus(); diff --git a/app/cloud/server/functions/userLoggedOut.js b/app/cloud/server/functions/userLoggedOut.js index 5ae712357beea8873e07b6fe59b99fc9b8d13db1..6e08b878eb6f3f32bbc37935c3a9c2410dbb7ee2 100644 --- a/app/cloud/server/functions/userLoggedOut.js +++ b/app/cloud/server/functions/userLoggedOut.js @@ -1,7 +1,6 @@ import { Users } from '../../../models'; export function userLoggedOut(userId) { - if (!userId) { return false; } diff --git a/app/cloud/server/functions/userLogout.js b/app/cloud/server/functions/userLogout.js index 1ec06eb3f729aab02b14771f93ec931c64f0c2cd..5dea9eb07815ed609adba05826e79463c139ee83 100644 --- a/app/cloud/server/functions/userLogout.js +++ b/app/cloud/server/functions/userLogout.js @@ -1,7 +1,8 @@ import { HTTP } from 'meteor/http'; -import { Users } from '../../../models'; + import { userLoggedOut } from './userLoggedOut'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; +import { Users } from '../../../models'; import { settings } from '../../../settings'; export function userLogout(userId) { diff --git a/app/cloud/server/index.js b/app/cloud/server/index.js index c80ef818b9c75ae8f642b7735b20c90a4b895ee5..4a2e16941c00bce8491dfbafaff4119b2243238a 100644 --- a/app/cloud/server/index.js +++ b/app/cloud/server/index.js @@ -2,7 +2,6 @@ import './methods'; import { getWorkspaceAccessToken } from './functions/getWorkspaceAccessToken'; import { getWorkspaceLicense } from './functions/getWorkspaceLicense'; import { getUserCloudAccessToken } from './functions/getUserCloudAccessToken'; - import { Permissions } from '../../models'; if (Permissions) { diff --git a/app/cloud/server/methods.js b/app/cloud/server/methods.js index 1594315902393f417312acd48689f661d6514971..b648f2ffaa8fc486ac9b03489f6327ef6daa9c0f 100644 --- a/app/cloud/server/methods.js +++ b/app/cloud/server/methods.js @@ -1,7 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; -import { hasPermission } from '../../authorization'; -import { Settings } from '../../models'; + import { retrieveRegistrationStatus } from './functions/retrieveRegistrationStatus'; import { connectWorkspace } from './functions/connectWorkspace'; @@ -12,6 +11,8 @@ import { disconnectWorkspace } from './functions/disconnectWorkspace'; import { syncWorkspace } from './functions/syncWorkspace'; import { checkUserHasCloudLogin } from './functions/checkUserHasCloudLogin'; import { userLogout } from './functions/userLogout'; +import { Settings } from '../../models'; +import { hasPermission } from '../../authorization'; Meteor.methods({ 'cloud:checkRegisterStatus'() { diff --git a/app/colors/client/client.js b/app/colors/client/client.js index d9a4dcc890b0c8fd29bcda0bf99f221c8ed45cf8..5f76a7c453aa94865a79615c0dff2b1ecd7a3e6d 100644 --- a/app/colors/client/client.js +++ b/app/colors/client/client.js @@ -1,6 +1,7 @@ +import s from 'underscore.string'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; -import s from 'underscore.string'; // // HexColorPreview is a named function that will process Colors diff --git a/app/cors/lib/common.js b/app/cors/lib/common.js index bcfc13ea69fb718a1416d579cdf2d79305b42673..e9e53068854e548762af138aaa85faa751ba1d1b 100644 --- a/app/cors/lib/common.js +++ b/app/cors/lib/common.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/cors/server/cors.js b/app/cors/server/cors.js index 16d972f80d9b1f1576deb25a86b3ac7303e3fcb1..8d59968807a53c81d266b9794014d45c1d3c677d 100644 --- a/app/cors/server/cors.js +++ b/app/cors/server/cors.js @@ -1,11 +1,14 @@ +import url from 'url'; + import { Meteor } from 'meteor/meteor'; import { WebApp, WebAppInternals } from 'meteor/webapp'; +import _ from 'underscore'; + import { settings } from '../../settings'; import { Logger } from '../../logger'; -const logger = new Logger('CORS', {}); -import _ from 'underscore'; -import url from 'url'; + +const logger = new Logger('CORS', {}); WebApp.rawConnectHandlers.use(Meteor.bindEnvironment(function(req, res, next) { if (req._body) { @@ -24,7 +27,7 @@ WebApp.rawConnectHandlers.use(Meteor.bindEnvironment(function(req, res, next) { let buf = ''; req.setEncoding('utf8'); req.on('data', function(chunk) { - return buf += chunk; + buf += chunk; }); req.on('end', function() { diff --git a/app/crowd/server/crowd.js b/app/crowd/server/crowd.js index 11a2daac04711990a5902a87b7c395ea7b9eb306..5dc92542603dfd048e1f49d4dae7758f1e182053 100644 --- a/app/crowd/server/crowd.js +++ b/app/crowd/server/crowd.js @@ -2,12 +2,13 @@ import { Meteor } from 'meteor/meteor'; import { SHA256 } from 'meteor/sha'; import { SyncedCron } from 'meteor/littledata:synced-cron'; import { Accounts } from 'meteor/accounts-base'; +import _ from 'underscore'; + import { Logger } from '../../logger'; import { _setRealName } from '../../lib'; import { Users } from '../../models'; import { settings } from '../../settings'; import { hasRole } from '../../authorization'; -import _ from 'underscore'; const logger = new Logger('CROWD', {}); @@ -40,7 +41,7 @@ export class CROWD { this.options = { crowd: { - base: (!/\/$/.test(url) ? url += '/' : url), + base: !/\/$/.test(url) ? url += '/' : url, }, application: { name: settings.get('CROWD_APP_USERNAME'), @@ -149,7 +150,7 @@ export class CROWD { username: self.cleanUsername(crowdUser.username), crowd_username: crowdUser.crowd_username, emails: [{ - address : crowdUser.email, + address: crowdUser.email, verified: true, }], active: crowdUser.active, diff --git a/app/crowd/server/index.js b/app/crowd/server/index.js index 33b6eab8d4f70886b7bc621bb38e8261259afc06..9203d22fa08f29bdd279739925006f1f955fb9ac 100644 --- a/app/crowd/server/index.js +++ b/app/crowd/server/index.js @@ -4,4 +4,3 @@ import { CROWD } from './crowd'; export { CROWD, }; - diff --git a/app/crowd/server/settings.js b/app/crowd/server/settings.js index a82016b47a8febf4015aae905db4572269301523..234344bdd12b59500490962aa099046f5daf7ff8 100644 --- a/app/crowd/server/settings.js +++ b/app/crowd/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/custom-oauth/client/custom_oauth_client.js b/app/custom-oauth/client/custom_oauth_client.js index f17b8e249616c7d9517da906bec45fb9ef51f0cd..780f22370bfc768089f68cb42be7939251cccf4a 100644 --- a/app/custom-oauth/client/custom_oauth_client.js +++ b/app/custom-oauth/client/custom_oauth_client.js @@ -5,6 +5,7 @@ import { Random } from 'meteor/random'; import { ServiceConfiguration } from 'meteor/service-configuration'; import { OAuth } from 'meteor/oauth'; import s from 'underscore.string'; + import { isURL } from '../../utils/lib/isURL'; // Request custom OAuth credentials for the user @@ -91,8 +92,8 @@ export class CustomOAuth { const loginUrl = `${ this.authorizePath }${ separator }client_id=${ config.clientId }&redirect_uri=${ OAuth._redirectUri(this.name, config) - }&response_type=code` + - `&state=${ OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl) + }&response_type=code` + + `&state=${ OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl) }&scope=${ this.scope }`; OAuth.launchLogin({ diff --git a/app/custom-oauth/server/custom_oauth_server.js b/app/custom-oauth/server/custom_oauth_server.js index a6289d872e4a8bb8c0f6074fa56f31dd6bdc38f7..9976e3f66f7432675f6532ec3fe6979fcaa43a5c 100644 --- a/app/custom-oauth/server/custom_oauth_server.js +++ b/app/custom-oauth/server/custom_oauth_server.js @@ -4,10 +4,11 @@ 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'; + +import { mapRolesFromSSO, updateRolesFromSSO } from './oauth_helpers'; import { Logger } from '../../logger'; import { Users } from '../../models'; -import { mapRolesFromSSO, updateRolesFromSSO } from './oauth_helpers'; -import _ from 'underscore'; import { isURL } from '../../utils/lib/isURL'; import { registerAccessTokenService } from '../../lib/server/oauth/oauth'; @@ -183,7 +184,6 @@ export class CustomOAuth { registerService() { const self = this; OAuth.registerService(this.name, 2, null, (query) => { - const response = self.getAccessToken(query); const identity = self.getIdentity(response.access_token); @@ -191,7 +191,7 @@ export class CustomOAuth { _OAuthCustom: true, accessToken: response.access_token, idToken: response.id_token, - expiresAt: (+new Date) + (1000 * parseInt(response.expires_in, 10)), + expiresAt: +new Date() + (1000 * parseInt(response.expires_in, 10)), }; // only set the token in serviceData if it's there. this ensures @@ -390,7 +390,6 @@ export class CustomOAuth { return true; }); - } registerAccessTokenService(name) { @@ -414,7 +413,7 @@ export class CustomOAuth { const serviceData = { accessToken: options.accessToken, - expiresAt: (+new Date) + (1000 * parseInt(options.expiresIn, 10)), + expiresAt: +new Date() + (1000 * parseInt(options.expiresIn, 10)), }; const fields = _.pick(identity, whitelisted); diff --git a/app/custom-sounds/client/admin/adminSounds.js b/app/custom-sounds/client/admin/adminSounds.js index 80e25477512bb294d654fccc5a24ff0ad2ea69a4..0f1609dd106105a82ab0d41ce031196cc784c243 100644 --- a/app/custom-sounds/client/admin/adminSounds.js +++ b/app/custom-sounds/client/admin/adminSounds.js @@ -1,11 +1,12 @@ import { ReactiveVar } from 'meteor/reactive-var'; -import { RocketChatTabBar, SideNav, TabBar } from '../../../ui-utils'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -import { CustomSounds } from '../../../models'; import s from 'underscore.string'; +import { CustomSounds } from '../../../models'; +import { RocketChatTabBar, SideNav, TabBar } from '../../../ui-utils'; + Template.adminSounds.helpers({ searchText() { const instance = Template.instance(); @@ -46,8 +47,8 @@ Template.adminSounds.helpers({ const instance = Template.instance(); return function(currentTarget) { if ( - currentTarget.offsetHeight + currentTarget.scrollTop >= - currentTarget.scrollHeight - 100 + currentTarget.offsetHeight + currentTarget.scrollTop + >= currentTarget.scrollHeight - 100 ) { return instance.limit.set(instance.limit.get() + 50); } @@ -96,13 +97,13 @@ Template.adminSounds.onCreated(function() { }); this.autorun(function() { - const limit = (instance.limit != null) ? instance.limit.get() : 0; + const limit = instance.limit != null ? instance.limit.get() : 0; const subscription = instance.subscribe('customSounds', '', limit); instance.ready.set(subscription.ready()); }); this.customsounds = function() { - const filter = (instance.filter != null) ? s.trim(instance.filter.get()) : ''; + const filter = instance.filter != null ? s.trim(instance.filter.get()) : ''; let query = {}; @@ -111,7 +112,7 @@ Template.adminSounds.onCreated(function() { query = { name: filterReg }; } - const limit = (instance.limit != null) ? instance.limit.get() : 0; + const limit = instance.limit != null ? instance.limit.get() : 0; return CustomSounds.find(query, { limit, sort: { name: 1 } }).fetch(); }; diff --git a/app/custom-sounds/client/admin/soundEdit.js b/app/custom-sounds/client/admin/soundEdit.js index 3ebbeb66bfa0d635086822c15f3a0ec56f4a2ec0..f28aa360b421d6c9e7f081f16f47cc74e10bb5d8 100644 --- a/app/custom-sounds/client/admin/soundEdit.js +++ b/app/custom-sounds/client/admin/soundEdit.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; -import { t, handleError } from '../../../utils'; import toastr from 'toastr'; import s from 'underscore.string'; +import { t, handleError } from '../../../utils'; + Template.soundEdit.helpers({ sound() { return Template.instance().sound; @@ -30,7 +31,7 @@ Template.soundEdit.events({ }, 'change input[type=file]'(ev) { - const e = (ev.originalEvent != null) ? ev.originalEvent : ev; + const e = ev.originalEvent != null ? ev.originalEvent : ev; let { files } = e.target; if (e.target.files == null || files.length === 0) { if (e.dataTransfer.files != null) { @@ -131,7 +132,6 @@ Template.soundEdit.onCreated(function() { if (uploadError != null) { handleError(uploadError); console.log(uploadError); - return; } } ); diff --git a/app/custom-sounds/client/admin/soundInfo.js b/app/custom-sounds/client/admin/soundInfo.js index a15f03af6c0d121b719164aa528434f83e81f9ad..4467e57e8e534f5885b803dc1db65ed5d2acb37f 100644 --- a/app/custom-sounds/client/admin/soundInfo.js +++ b/app/custom-sounds/client/admin/soundInfo.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { modal } from '../../../ui-utils'; import { t, handleError } from '../../../utils'; diff --git a/app/custom-sounds/client/index.js b/app/custom-sounds/client/index.js index 5d0ef124474af418cb85d1a7971381ae8cd6d18f..ca11995874f103131f15e6c74ced19c9e88bc2b9 100644 --- a/app/custom-sounds/client/index.js +++ b/app/custom-sounds/client/index.js @@ -1,4 +1,3 @@ -export { CustomSounds } from './lib/CustomSounds'; import './notifications/deleteCustomSound'; import './notifications/updateCustomSound'; import './admin/adminSoundEdit.html'; @@ -11,3 +10,5 @@ import './admin/soundInfo.html'; import './admin/soundInfo'; import './admin/route'; import './admin/startup'; + +export { CustomSounds } from './lib/CustomSounds'; diff --git a/app/custom-sounds/client/lib/CustomSounds.js b/app/custom-sounds/client/lib/CustomSounds.js index 79f477ae4237214c8907779fe345724dd8d85001..3d32b19e74f38dc5f60384404d786ebae36d5bac 100644 --- a/app/custom-sounds/client/lib/CustomSounds.js +++ b/app/custom-sounds/client/lib/CustomSounds.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; -import { CachedCollectionManager } from '../../../ui-cached-collection'; import _ from 'underscore'; +import { CachedCollectionManager } from '../../../ui-cached-collection'; + class CustomSoundsClass { constructor() { this.list = new ReactiveVar({}); diff --git a/app/custom-sounds/client/notifications/deleteCustomSound.js b/app/custom-sounds/client/notifications/deleteCustomSound.js index b35063245c5293c2d5d7495d295be0b3713694e2..59b9d0929a99f7399e59829772d90f129614ac9d 100644 --- a/app/custom-sounds/client/notifications/deleteCustomSound.js +++ b/app/custom-sounds/client/notifications/deleteCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { CachedCollectionManager } from '../../../ui-cached-collection'; import { Notifications } from '../../../notifications'; import { CustomSounds } from '../lib/CustomSounds'; diff --git a/app/custom-sounds/client/notifications/updateCustomSound.js b/app/custom-sounds/client/notifications/updateCustomSound.js index ab91a113d4a8243d1e6bab1e687302ad59c94c23..813c7dfbd44767f4fe1f0f35e76fd3e7daed3598 100644 --- a/app/custom-sounds/client/notifications/updateCustomSound.js +++ b/app/custom-sounds/client/notifications/updateCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { CachedCollectionManager } from '../../../ui-cached-collection'; import { Notifications } from '../../../notifications'; import { CustomSounds } from '../lib/CustomSounds'; diff --git a/app/custom-sounds/server/methods/deleteCustomSound.js b/app/custom-sounds/server/methods/deleteCustomSound.js index 9057f752ce1c77b17f7a1617427c040ca30e2895..ba26d32673b2a90cd257e08618741a6510e62e9f 100644 --- a/app/custom-sounds/server/methods/deleteCustomSound.js +++ b/app/custom-sounds/server/methods/deleteCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { CustomSounds } from '../../../models'; import { hasPermission } from '../../../authorization'; import { Notifications } from '../../../notifications'; diff --git a/app/custom-sounds/server/methods/insertOrUpdateSound.js b/app/custom-sounds/server/methods/insertOrUpdateSound.js index 2e0a61395e3e7efaa57353237ee4fbd9f0892f24..36ea5839736b2f5314d10c1d15f67613585f0b6c 100644 --- a/app/custom-sounds/server/methods/insertOrUpdateSound.js +++ b/app/custom-sounds/server/methods/insertOrUpdateSound.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { hasPermission } from '../../../authorization'; import { CustomSounds } from '../../../models'; import { Notifications } from '../../../notifications'; import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; -import s from 'underscore.string'; Meteor.methods({ insertOrUpdateSound(soundData) { @@ -51,18 +52,17 @@ Meteor.methods({ createSound._id = _id; return _id; - } else { - // update sound - if (soundData.newFile) { - RocketChatFileCustomSoundsInstance.deleteFile(`${ soundData._id }.${ soundData.previousExtension }`); - } - - if (soundData.name !== soundData.previousName) { - CustomSounds.setName(soundData._id, soundData.name); - Notifications.notifyAll('updateCustomSound', { soundData }); - } + } + // update sound + if (soundData.newFile) { + RocketChatFileCustomSoundsInstance.deleteFile(`${ soundData._id }.${ soundData.previousExtension }`); + } - return soundData._id; + if (soundData.name !== soundData.previousName) { + CustomSounds.setName(soundData._id, soundData.name); + Notifications.notifyAll('updateCustomSound', { soundData }); } + + return soundData._id; }, }); diff --git a/app/custom-sounds/server/methods/listCustomSounds.js b/app/custom-sounds/server/methods/listCustomSounds.js index 05a72f0a03d87b28c1ff843f9a2a7b3444a00c53..90bf6db20435a5c7dbade3fd05fd824c6b8acfd4 100644 --- a/app/custom-sounds/server/methods/listCustomSounds.js +++ b/app/custom-sounds/server/methods/listCustomSounds.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { CustomSounds } from '../../../models'; Meteor.methods({ diff --git a/app/custom-sounds/server/methods/uploadCustomSound.js b/app/custom-sounds/server/methods/uploadCustomSound.js index 04c57c8dc3175cc77b1c43e7b45fe93e95293f11..7d3d48d361b4ad88738fcc572eef2929afae680e 100644 --- a/app/custom-sounds/server/methods/uploadCustomSound.js +++ b/app/custom-sounds/server/methods/uploadCustomSound.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Notifications } from '../../../notifications'; import { RocketChatFile } from '../../../file'; diff --git a/app/custom-sounds/server/publications/customSounds.js b/app/custom-sounds/server/publications/customSounds.js index 31163a5076b22f3cedb7fa7a44a6a63a00eaff63..9f94960206cd2bbb25ece6a55354d73ea3c25a4e 100644 --- a/app/custom-sounds/server/publications/customSounds.js +++ b/app/custom-sounds/server/publications/customSounds.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { CustomSounds } from '../../../models'; import s from 'underscore.string'; +import { CustomSounds } from '../../../models'; + Meteor.publish('customSounds', function(filter, limit) { if (!this.userId) { return this.ready(); diff --git a/app/custom-sounds/server/startup/custom-sounds.js b/app/custom-sounds/server/startup/custom-sounds.js index 934798cb170f453ccbcd4528041900e02b1b9baf..7417d90e568f251131bec4071300b0a0d4942e25 100644 --- a/app/custom-sounds/server/startup/custom-sounds.js +++ b/app/custom-sounds/server/startup/custom-sounds.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; +import _ from 'underscore'; + import { RocketChatFile } from '../../../file'; import { settings } from '../../../settings'; -import _ from 'underscore'; export let RocketChatFileCustomSoundsInstance; @@ -34,8 +35,7 @@ Meteor.startup(function() { }); return WebApp.connectHandlers.use('/custom-sounds/', Meteor.bindEnvironment(function(req, res/* , next*/) { - const params = - { sound: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) }; + const params = { sound: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) }; if (_.isEmpty(params.sound)) { res.writeHead(403); diff --git a/app/custom-sounds/server/startup/permissions.js b/app/custom-sounds/server/startup/permissions.js index fc27ecb798931dcd0072ba4ff7afc46a11d27d9b..7a9ba36a56c79c1224b0c827cf35ac1ee8660df5 100644 --- a/app/custom-sounds/server/startup/permissions.js +++ b/app/custom-sounds/server/startup/permissions.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../../models'; Meteor.startup(() => { diff --git a/app/discussion/client/createDiscussionMessageAction.js b/app/discussion/client/createDiscussionMessageAction.js index cd3a43ea9b2844233442a0b917cd14eb204cefe4..7c974fc8d619ada47630a3537cdd62213e359463 100644 --- a/app/discussion/client/createDiscussionMessageAction.js +++ b/app/discussion/client/createDiscussionMessageAction.js @@ -33,9 +33,11 @@ Meteor.startup(function() { title: t('Discussion_title'), modifier: 'modal', content: 'CreateDiscussion', - data: { rid: message.rid, message, onCreate() { - modal.close(); - } }, + data: { rid: message.rid, + message, + onCreate() { + modal.close(); + } }, confirmOnEnter: false, showConfirmButton: false, showCancelButton: false, diff --git a/app/discussion/client/discussionFromMessageBox.js b/app/discussion/client/discussionFromMessageBox.js index dbade46fc93d96ee5302070b89aadc4a7e38d7d9..964d1f384f0749745b1ba9bbb3afe25d181f20a5 100644 --- a/app/discussion/client/discussionFromMessageBox.js +++ b/app/discussion/client/discussionFromMessageBox.js @@ -31,6 +31,5 @@ Meteor.startup(function() { }); }, }); - }); }); diff --git a/app/discussion/client/views/DiscussionTabbar.js b/app/discussion/client/views/DiscussionTabbar.js index 64e74c98d360cf029cf6ca28e43cd3608834b0d8..ff73ab8ff64eecdadaf44f432a1e983d77b1e102 100644 --- a/app/discussion/client/views/DiscussionTabbar.js +++ b/app/discussion/client/views/DiscussionTabbar.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { messageContext } from '../../../ui-utils/client/lib/messageContext'; import { DiscussionOfRoom } from '../lib/discussionsOfRoom'; diff --git a/app/discussion/client/views/creationDialog/CreateDiscussion.js b/app/discussion/client/views/creationDialog/CreateDiscussion.js index e28f2a4264c9a152a23c87fa6a297054b5887dfd..a786507c330f4c50f5b11c213d2208d3035c1306 100755 --- a/app/discussion/client/views/creationDialog/CreateDiscussion.js +++ b/app/discussion/client/views/creationDialog/CreateDiscussion.js @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor'; - import { Template } from 'meteor/templating'; import { ReactiveVar } from 'meteor/reactive-var'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; @@ -176,7 +175,6 @@ Template.CreateDiscussion.onCreated(function() { this.selectedUsers = new ReactiveVar([]); this.onSelectUser = ({ item: user }) => { - if (user.username === (msg && msg.u.username)) { return; } @@ -189,14 +187,14 @@ Template.CreateDiscussion.onCreated(function() { this.selectedUsers.set([...users, user]); } }; - this.onClickTagUser = (({ username }) => { + this.onClickTagUser = ({ username }) => { this.selectedUsers.set(this.selectedUsers.get().filter((user) => user.username !== username)); - }); - this.deleteLastItemUser = (() => { + }; + this.deleteLastItemUser = () => { const arr = this.selectedUsers.get(); arr.pop(); this.selectedUsers.set(arr); - }); + }; // callback to allow setting a parent Channel or e. g. tracking the event using Piwik or GA const { parentChannel, reply } = callbacks.run('openDiscussionCreationScreen') || {}; @@ -252,7 +250,6 @@ Template.SearchCreateDiscussion.events({ const { deleteLastItem } = t; return deleteLastItem && deleteLastItem(); } - }, 'keyup input'(e, t) { t.ac.onKeyUp(e); @@ -269,7 +266,6 @@ Template.SearchCreateDiscussion.events({ }, }); Template.SearchCreateDiscussion.onRendered(function() { - const { name } = this.data; this.ac.element = this.firstNode.querySelector(`[name=${ name }]`); diff --git a/app/discussion/lib/discussionRoomType.js b/app/discussion/lib/discussionRoomType.js index b229e638a26b2b7edd73558895c4da0098192831..f6b33073f8cbb2118b184ca8d28808b4a910466e 100644 --- a/app/discussion/lib/discussionRoomType.js +++ b/app/discussion/lib/discussionRoomType.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { RoomTypeConfig, roomTypes, getUserPreference } from '../../utils'; export class DiscussionRoomType extends RoomTypeConfig { diff --git a/app/discussion/server/authorization.js b/app/discussion/server/authorization.js index 68204b6da6c26527ddea001eb58b15362bf1a89b..6835305ed82be7c1863519be7f7f88fcaf060e56 100644 --- a/app/discussion/server/authorization.js +++ b/app/discussion/server/authorization.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { addRoomAccessValidator, canAccessRoom } from '../../authorization'; import { Rooms } from '../../models'; diff --git a/app/discussion/server/config.js b/app/discussion/server/config.js index 5155c5769c74927caedcf1e64fa3bac666d5300e..abdcaac9a582875509e5479cbc929cbae183ec1c 100644 --- a/app/discussion/server/config.js +++ b/app/discussion/server/config.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(() => { diff --git a/app/discussion/server/hooks/joinDiscussionOnMessage.js b/app/discussion/server/hooks/joinDiscussionOnMessage.js index 755850edbb4a4e6149f21e41e671ae22303a2d65..08eb79071dc41e35123cbe1e3c4c24e3a7e0449e 100644 --- a/app/discussion/server/hooks/joinDiscussionOnMessage.js +++ b/app/discussion/server/hooks/joinDiscussionOnMessage.js @@ -4,7 +4,6 @@ import { callbacks } from '../../../callbacks/server'; import { Subscriptions } from '../../../models/server'; callbacks.add('beforeSaveMessage', (message, room) => { - // abort if room is not a discussion if (!room || !room.prid) { return message; diff --git a/app/discussion/server/hooks/propagateDiscussionMetadata.js b/app/discussion/server/hooks/propagateDiscussionMetadata.js index c4b9ece7b9e75a0ed716f8c7737be59199cc0d4b..902965ca23e45f4cd787cb0989b8efa12c1db706 100644 --- a/app/discussion/server/hooks/propagateDiscussionMetadata.js +++ b/app/discussion/server/hooks/propagateDiscussionMetadata.js @@ -26,7 +26,7 @@ callbacks.add('afterDeleteMessage', function(message, { _id, prid } = {}) { callbacks.add('afterDeleteRoom', (rid) => Rooms.find({ prid: rid }, { fields: { _id: 1 } }).forEach(({ _id }) => deleteRoom(_id)), 'DeleteDiscussionChain'); // TODO discussions define new fields -callbacks.add('afterRoomNameChange', ({ rid, name, oldName }) => Rooms.update({ prid: rid, ...(oldName && { topic: oldName }) }, { $set: { topic: name } }, { multi: true }), 'updateTopicDiscussion'); +callbacks.add('afterRoomNameChange', ({ rid, name, oldName }) => Rooms.update({ prid: rid, ...oldName && { topic: oldName } }, { $set: { topic: name } }, { multi: true }), 'updateTopicDiscussion'); callbacks.add('afterDeleteRoom', (drid) => Messages.update({ drid }, { $unset: { diff --git a/app/discussion/server/methods/createDiscussion.js b/app/discussion/server/methods/createDiscussion.js index f4b7358ab5eafc06b657435d8e36afccda6ce820..78535311ad9d5835a9343f73ddf1a8977c4330f5 100644 --- a/app/discussion/server/methods/createDiscussion.js +++ b/app/discussion/server/methods/createDiscussion.js @@ -122,7 +122,6 @@ Meteor.methods({ * @param {string[]} users - users to be added */ createDiscussion({ prid, pmid, t_name, reply, users }) { - if (!settings.get('Discussion_enabled')) { throw new Meteor.Error('error-action-not-allowed', 'You are not allowed to create a discussion', { method: 'createDiscussion' }); } diff --git a/app/discussion/server/permissions.js b/app/discussion/server/permissions.js index 4e89b97c667938cb176a38a9277c7c6b2ba5ef66..49bfe798b0b43216ae7360dfcafad8e8e6ae6973 100644 --- a/app/discussion/server/permissions.js +++ b/app/discussion/server/permissions.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../models'; Meteor.startup(() => { diff --git a/app/dolphin/lib/common.js b/app/dolphin/lib/common.js index 5c0582012e693501fc01e70d589a6ed17533ab69..36c95452a97570f459c65ad91f9daaa0bc39683d 100644 --- a/app/dolphin/lib/common.js +++ b/app/dolphin/lib/common.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; -import { settings } from '../../settings'; import { ServiceConfiguration } from 'meteor/service-configuration'; + +import { settings } from '../../settings'; import { CustomOAuth } from '../../custom-oauth'; import { callbacks } from '../../callbacks'; import { Settings } from '../../models'; diff --git a/app/drupal/lib/common.js b/app/drupal/lib/common.js index 9777d32d9c871f83f4ce37191bb2334f4d42ff0c..f46259e8de388ea37eba25b345e0693b9f7b49d5 100644 --- a/app/drupal/lib/common.js +++ b/app/drupal/lib/common.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { CustomOAuth } from '../../custom-oauth'; diff --git a/app/e2e/client/accountEncryption.js b/app/e2e/client/accountEncryption.js index 60fc2aa3ec5defbe883250d46c30f877adf25924..da1071b15c36d4f4f2e9ec5bc248964aaf75d0f4 100644 --- a/app/e2e/client/accountEncryption.js +++ b/app/e2e/client/accountEncryption.js @@ -2,9 +2,10 @@ import { Template } from 'meteor/templating'; import { ReactiveVar } from 'meteor/reactive-var'; import toastr from 'toastr'; import s from 'underscore.string'; + +import { e2e } from './rocketchat.e2e'; import { settings } from '../../settings'; import { t } from '../../utils'; -import { e2e } from './rocketchat.e2e'; Template.accountEncryption.helpers({ isEnabled() { @@ -26,7 +27,7 @@ Template.accountEncryption.helpers({ const encryptionKey = instance.encryptionKey.get(); const confirmationEncryptionKey = instance.confirmationEncryptionKey.get(); - if ((!encryptionKey || encryptionKey !== confirmationEncryptionKey)) { + if (!encryptionKey || encryptionKey !== confirmationEncryptionKey) { return ret; } }, @@ -53,8 +54,8 @@ Template.accountEncryption.events({ Template.accountEncryption.onCreated(function() { const self = this; - this.encryptionKey = new ReactiveVar; - this.confirmationEncryptionKey = new ReactiveVar; + this.encryptionKey = new ReactiveVar(); + this.confirmationEncryptionKey = new ReactiveVar(); this.save = function(cb) { const instance = this; @@ -82,5 +83,4 @@ Template.accountEncryption.onCreated(function() { this.find('[name=encryptionKey]').value = ''; this.find('[name=confirmation-encryptionKey]').value = ''; }; - }); diff --git a/app/e2e/client/events.js b/app/e2e/client/events.js index fea692b5bd00226c896ed66436931c3ea628b44d..c59b20594b85f2632af2ec8dd29ef46d3ff3eeb5 100644 --- a/app/e2e/client/events.js +++ b/app/e2e/client/events.js @@ -1,4 +1,5 @@ import { Accounts } from 'meteor/accounts-base'; + import { e2e } from './rocketchat.e2e'; Accounts.onLogout(() => { diff --git a/app/e2e/client/helper.js b/app/e2e/client/helper.js index 96dbd1de96dd30be61acf1194c41ba45c58b22e0..bf1de708da6eee21b80b9474d8310ef954c89c2a 100644 --- a/app/e2e/client/helper.js +++ b/app/e2e/client/helper.js @@ -43,50 +43,50 @@ export function splitVectorAndEcryptedData(cipherText) { } export async function encryptRSA(key, data) { - return await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, key, data); + return crypto.subtle.encrypt({ name: 'RSA-OAEP' }, key, data); } export async function encryptAES(vector, key, data) { - return await crypto.subtle.encrypt({ name: 'AES-CBC', iv: vector }, key, data); + return crypto.subtle.encrypt({ name: 'AES-CBC', iv: vector }, key, data); } export async function decryptRSA(key, data) { - return await crypto.subtle.decrypt({ name: 'RSA-OAEP' }, key, data); + return crypto.subtle.decrypt({ name: 'RSA-OAEP' }, key, data); } export async function decryptAES(vector, key, data) { - return await crypto.subtle.decrypt({ name: 'AES-CBC', iv: vector }, key, data); + return crypto.subtle.decrypt({ name: 'AES-CBC', iv: vector }, key, data); } export async function generateAESKey() { - return await crypto.subtle.generateKey({ name: 'AES-CBC', length: 128 }, true, ['encrypt', 'decrypt']); + return crypto.subtle.generateKey({ name: 'AES-CBC', length: 128 }, true, ['encrypt', 'decrypt']); } export async function generateRSAKey() { - return await crypto.subtle.generateKey({ name: 'RSA-OAEP', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: 'SHA-256' } }, true, ['encrypt', 'decrypt']); + return crypto.subtle.generateKey({ name: 'RSA-OAEP', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: 'SHA-256' } }, true, ['encrypt', 'decrypt']); } export async function exportJWKKey(key) { - return await crypto.subtle.exportKey('jwk', key); + return crypto.subtle.exportKey('jwk', key); } export async function importRSAKey(keyData, keyUsages = ['encrypt', 'decrypt']) { - return await crypto.subtle.importKey('jwk', keyData, { name: 'RSA-OAEP', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: 'SHA-256' } }, true, keyUsages); + return crypto.subtle.importKey('jwk', keyData, { name: 'RSA-OAEP', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: 'SHA-256' } }, true, keyUsages); } export async function importAESKey(keyData, keyUsages = ['encrypt', 'decrypt']) { - return await crypto.subtle.importKey('jwk', keyData, { name: 'AES-CBC' }, true, keyUsages); + return crypto.subtle.importKey('jwk', keyData, { name: 'AES-CBC' }, true, keyUsages); } export async function importRawKey(keyData, keyUsages = ['deriveKey']) { - return await crypto.subtle.importKey('raw', keyData, { name: 'PBKDF2' }, false, keyUsages); + return crypto.subtle.importKey('raw', keyData, { name: 'PBKDF2' }, false, keyUsages); } export async function deriveKey(salt, baseKey, keyUsages = ['encrypt', 'decrypt']) { const iterations = 1000; const hash = 'SHA-256'; - return await crypto.subtle.deriveKey({ name: 'PBKDF2', salt, iterations, hash }, baseKey, { name: 'AES-CBC', length: 256 }, true, keyUsages); + return crypto.subtle.deriveKey({ name: 'PBKDF2', salt, iterations, hash }, baseKey, { name: 'AES-CBC', length: 256 }, true, keyUsages); } export async function readFileAsArrayBuffer(file) { diff --git a/app/e2e/client/rocketchat.e2e.js b/app/e2e/client/rocketchat.e2e.js index 3ac3cf6ebad29e7310cf66c88642f43444a243d1..7fe0e86784084518d26112f73ba21a46eec62c8c 100644 --- a/app/e2e/client/rocketchat.e2e.js +++ b/app/e2e/client/rocketchat.e2e.js @@ -4,12 +4,8 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { EJSON } from 'meteor/ejson'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { Rooms, Subscriptions, Messages } from '../../models'; -import { promises } from '../../promises/client'; -import { settings } from '../../settings'; -import { Notifications } from '../../notifications'; -import { Layout, call, modal, alerts } from '../../ui-utils'; import { TAPi18n } from 'meteor/tap:i18n'; + import { E2ERoom } from './rocketchat.e2e.room'; import { Deferred, @@ -25,6 +21,11 @@ import { importRawKey, deriveKey, } from './helper'; +import { Rooms, Subscriptions, Messages } from '../../models'; +import { promises } from '../../promises/client'; +import { settings } from '../../settings'; +import { Notifications } from '../../notifications'; +import { Layout, call, modal, alerts } from '../../ui-utils'; import './events.js'; import './accountEncryption.html'; @@ -438,7 +439,7 @@ class E2E { return; } - return await Messages.find({ t: 'e2e', e2e: 'pending' }).forEach(async (item) => { + return Messages.find({ t: 'e2e', e2e: 'pending' }).forEach(async (item) => { await this.decryptMessage(item); }); } diff --git a/app/e2e/client/rocketchat.e2e.room.js b/app/e2e/client/rocketchat.e2e.room.js index 3ca4c811dde21d0e66184b88ce7824aaf721265a..d4f59fdcbc289f5c47c66f8f0a0384285dd34572 100644 --- a/app/e2e/client/rocketchat.e2e.room.js +++ b/app/e2e/client/rocketchat.e2e.room.js @@ -1,13 +1,10 @@ import _ from 'underscore'; - import { Base64 } from 'meteor/base64'; import { ReactiveVar } from 'meteor/reactive-var'; import { EJSON } from 'meteor/ejson'; import { Random } from 'meteor/random'; import { TimeSync } from 'meteor/mizzao:timesync'; -import { Notifications } from '../../notifications'; -import { Rooms, Subscriptions } from '../../models'; -import { call } from '../../ui-utils'; + import { e2e } from './rocketchat.e2e'; import { Deferred, @@ -25,6 +22,9 @@ import { importRSAKey, readFileAsArrayBuffer, } from './helper'; +import { Notifications } from '../../notifications'; +import { Rooms, Subscriptions } from '../../models'; +import { call } from '../../ui-utils'; export class E2ERoom { constructor(userId, roomId, t) { @@ -56,7 +56,7 @@ export class E2ERoom { } if (this.establishing.get()) { - return await this.readyPromise; + return this.readyPromise; } console.log('E2E -> Initiating handshake'); diff --git a/app/e2e/client/tabbar.js b/app/e2e/client/tabbar.js index 21edfaadafed3fdf0236f9c618fa613bf598a4fa..00cae6e5782114511dcd90f30e9eb237e64f9450 100644 --- a/app/e2e/client/tabbar.js +++ b/app/e2e/client/tabbar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { hasAllPermission } from '../../authorization'; import { call, TabBar } from '../../ui-utils'; import { ChatRoom } from '../../models'; @@ -11,7 +12,7 @@ Meteor.startup(() => { i18nTitle: 'E2E', icon: 'key', class: () => (ChatRoom.findOne(Session.get('openedRoom')) || {}).encrypted && 'enabled', - action:() => { + action: () => { const room = ChatRoom.findOne(Session.get('openedRoom')); call('saveRoomSettings', room._id, 'encrypted', !room.encrypted); }, diff --git a/app/e2e/server/methods/fetchMyKeys.js b/app/e2e/server/methods/fetchMyKeys.js index 5777b16e7e0a23705d7ba4b15ad10473e7918766..f50e8578f815195429faee4f61eef41792f415ca 100644 --- a/app/e2e/server/methods/fetchMyKeys.js +++ b/app/e2e/server/methods/fetchMyKeys.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; Meteor.methods({ diff --git a/app/e2e/server/methods/getUsersOfRoomWithoutKey.js b/app/e2e/server/methods/getUsersOfRoomWithoutKey.js index eb448b098e9bf4b9f9b5bccd1e8468196a5ac374..a686af5e88c4ca9db4eaf0ab19eef9fcb5acb505 100644 --- a/app/e2e/server/methods/getUsersOfRoomWithoutKey.js +++ b/app/e2e/server/methods/getUsersOfRoomWithoutKey.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions, Users } from '../../../models'; Meteor.methods({ diff --git a/app/e2e/server/methods/requestSubscriptionKeys.js b/app/e2e/server/methods/requestSubscriptionKeys.js index c3b42675e975ccf0bfcbe0cd792b4b0bb90a4737..2a381c2eea88195d4b75fd6d8d38713f694db456 100644 --- a/app/e2e/server/methods/requestSubscriptionKeys.js +++ b/app/e2e/server/methods/requestSubscriptionKeys.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions, Rooms } from '../../../models'; import { Notifications } from '../../../notifications'; @@ -16,10 +17,10 @@ Meteor.methods({ // For all subscriptions without E2E key, get the rooms that have encryption enabled const query = { - e2eKeyId : { + e2eKeyId: { $exists: true, }, - _id : { + _id: { $in: roomIds, }, }; diff --git a/app/e2e/server/methods/resetUserE2EKey.js b/app/e2e/server/methods/resetUserE2EKey.js index f48ca2f0a5866c43c3bd0c5b36826e5de9241faf..b1259a32b709a64657505835ac37cf05735df83f 100644 --- a/app/e2e/server/methods/resetUserE2EKey.js +++ b/app/e2e/server/methods/resetUserE2EKey.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Subscriptions } from '../../../models'; import { hasPermission } from '../../../authorization'; diff --git a/app/e2e/server/methods/setRoomKeyID.js b/app/e2e/server/methods/setRoomKeyID.js index dfcc04a8b73bf1b414207ba916f54cb7e57e95e3..a273e803b93405322dfa450ab61a1843dbff27ce 100644 --- a/app/e2e/server/methods/setRoomKeyID.js +++ b/app/e2e/server/methods/setRoomKeyID.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms } from '../../../models'; Meteor.methods({ diff --git a/app/e2e/server/methods/setUserPublicAndPivateKeys.js b/app/e2e/server/methods/setUserPublicAndPivateKeys.js index 42ca627f3b1addf214ba496ff754811d6c167d1d..f1c4604babda6b9ba676d98b9dd3065e2fa155a4 100644 --- a/app/e2e/server/methods/setUserPublicAndPivateKeys.js +++ b/app/e2e/server/methods/setUserPublicAndPivateKeys.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; Meteor.methods({ diff --git a/app/e2e/server/methods/updateGroupKey.js b/app/e2e/server/methods/updateGroupKey.js index 18471e38c9a7a8550d987ba9f4bd8c41103d488f..78123f8a0ad7f2d0846bbc6183a8ad10e6cd3b04 100644 --- a/app/e2e/server/methods/updateGroupKey.js +++ b/app/e2e/server/methods/updateGroupKey.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions } from '../../../models'; Meteor.methods({ diff --git a/app/emoji-custom/client/admin/adminEmoji.js b/app/emoji-custom/client/admin/adminEmoji.js index d18d614115753400e187367edbd0e3ccfeae0665..3d64e3b189cec3be770c79c0b4a72e8c3fbb4996 100644 --- a/app/emoji-custom/client/admin/adminEmoji.js +++ b/app/emoji-custom/client/admin/adminEmoji.js @@ -1,11 +1,12 @@ import { ReactiveVar } from 'meteor/reactive-var'; -import { RocketChatTabBar, SideNav, TabBar } from '../../../ui-utils'; import { Tracker } from 'meteor/tracker'; -import { EmojiCustom } from '../../../models'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import s from 'underscore.string'; +import { EmojiCustom } from '../../../models'; +import { RocketChatTabBar, SideNav, TabBar } from '../../../ui-utils'; + Template.adminEmoji.helpers({ searchText() { const instance = Template.instance(); @@ -79,13 +80,13 @@ Template.adminEmoji.onCreated(function() { }); this.autorun(function() { - const limit = (instance.limit != null) ? instance.limit.get() : 0; + const limit = instance.limit != null ? instance.limit.get() : 0; const subscription = instance.subscribe('fullEmojiData', '', limit); instance.ready.set(subscription.ready()); }); this.customemoji = function() { - const filter = (instance.filter != null) ? s.trim(instance.filter.get()) : ''; + const filter = instance.filter != null ? s.trim(instance.filter.get()) : ''; let query = {}; @@ -94,7 +95,7 @@ Template.adminEmoji.onCreated(function() { query = { $or: [{ name: filterReg }, { aliases: filterReg }] }; } - const limit = (instance.limit != null) ? instance.limit.get() : 0; + const limit = instance.limit != null ? instance.limit.get() : 0; return EmojiCustom.find(query, { limit, sort: { name: 1 } }).fetch(); }; diff --git a/app/emoji-custom/client/admin/emojiEdit.js b/app/emoji-custom/client/admin/emojiEdit.js index e112e2ecec8d5b260a1947241cb521c5fa2c8f2d..b226ea27c470e77eee496ab83698061acaafabc8 100644 --- a/app/emoji-custom/client/admin/emojiEdit.js +++ b/app/emoji-custom/client/admin/emojiEdit.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; -import { t, handleError } from '../../../utils'; import toastr from 'toastr'; import s from 'underscore.string'; +import { t, handleError } from '../../../utils'; + Template.emojiEdit.helpers({ emoji() { return Template.instance().emoji; @@ -129,7 +130,6 @@ Template.emojiEdit.onCreated(function() { if (uploadError != null) { handleError(uploadError); console.log(uploadError); - return; } } ); diff --git a/app/emoji-custom/client/admin/emojiInfo.js b/app/emoji-custom/client/admin/emojiInfo.js index 91d43e4580713535085718a8bf97fb4262d61558..cb84c0053b6b30431fedbb21a091a8e24f5f1be6 100644 --- a/app/emoji-custom/client/admin/emojiInfo.js +++ b/app/emoji-custom/client/admin/emojiInfo.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { handleError, t } from '../../../utils'; import { modal } from '../../../ui-utils'; @@ -67,17 +68,16 @@ Template.emojiInfo.events({ Meteor.call('deleteEmojiCustom', _id, (error/* , result*/) => { if (error) { return handleError(error); - } else { - modal.open({ - title: t('Deleted'), - text: t('Custom_Emoji_Has_Been_Deleted'), - type: 'success', - timer: 2000, - showConfirmButton: false, - }); - - instance.tabBar.close(); } + modal.open({ + title: t('Deleted'), + text: t('Custom_Emoji_Has_Been_Deleted'), + type: 'success', + timer: 2000, + showConfirmButton: false, + }); + + instance.tabBar.close(); }); }); } diff --git a/app/emoji-custom/client/lib/emojiCustom.js b/app/emoji-custom/client/lib/emojiCustom.js index 97a0f5e778a003c59148cc78dc7bbb92afee8597..2ae2ef02a2b0ad1b14cc09e4cbe93f89b664a140 100644 --- a/app/emoji-custom/client/lib/emojiCustom.js +++ b/app/emoji-custom/client/lib/emojiCustom.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Session } from 'meteor/session'; + import { isSetNotNull } from './function-isSet'; import { RoomManager, call } from '../../../ui-utils'; import { emoji, EmojiPicker } from '../../../emoji'; diff --git a/app/emoji-custom/client/lib/function-isSet.js b/app/emoji-custom/client/lib/function-isSet.js index 1dd2e6e7e8a0e9637afbc91d75dc379b01271469..f580568969050732e665b740b85b55950167bf32 100644 --- a/app/emoji-custom/client/lib/function-isSet.js +++ b/app/emoji-custom/client/lib/function-isSet.js @@ -5,9 +5,8 @@ export const isSet = function(fn) { value = fn(); } catch (e) { value = undefined; - } finally { - return value !== undefined; } + return value !== undefined; }; export const isSetNotNull = function(fn) { @@ -16,7 +15,6 @@ export const isSetNotNull = function(fn) { value = fn(); } catch (e) { value = null; - } finally { - return value !== null && value !== undefined; } + return value !== null && value !== undefined; }; diff --git a/app/emoji-custom/client/notifications/deleteEmojiCustom.js b/app/emoji-custom/client/notifications/deleteEmojiCustom.js index ecdb80e417de7a9f7959c90376c54a061c3012b0..ebc66d1791633aca417a9c84f9a7246c998c9e89 100644 --- a/app/emoji-custom/client/notifications/deleteEmojiCustom.js +++ b/app/emoji-custom/client/notifications/deleteEmojiCustom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Notifications } from '../../../notifications'; import { deleteEmojiCustom } from '../lib/emojiCustom'; diff --git a/app/emoji-custom/client/notifications/updateEmojiCustom.js b/app/emoji-custom/client/notifications/updateEmojiCustom.js index 338ccbbc72687de59495ad4625fb56fa169789d3..feaa701ee74018b610d22b891d0adbd73e50fdaf 100644 --- a/app/emoji-custom/client/notifications/updateEmojiCustom.js +++ b/app/emoji-custom/client/notifications/updateEmojiCustom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Notifications } from '../../../notifications'; import { updateEmojiCustom } from '../lib/emojiCustom'; diff --git a/app/emoji-custom/server/methods/deleteEmojiCustom.js b/app/emoji-custom/server/methods/deleteEmojiCustom.js index 02c80d6ce3602fb719ebea794954e298cf6632b3..b9623960ea2bfcca2729d050e244dbe353f97aa6 100644 --- a/app/emoji-custom/server/methods/deleteEmojiCustom.js +++ b/app/emoji-custom/server/methods/deleteEmojiCustom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { EmojiCustom } from '../../../models'; import { Notifications } from '../../../notifications'; diff --git a/app/emoji-custom/server/methods/insertOrUpdateEmoji.js b/app/emoji-custom/server/methods/insertOrUpdateEmoji.js index 32b7c1f7f6025d6d36c84836aba0c91dcd274a25..0b39008574b2de40e1cb0f727c906cfa74f18312 100644 --- a/app/emoji-custom/server/methods/insertOrUpdateEmoji.js +++ b/app/emoji-custom/server/methods/insertOrUpdateEmoji.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { hasPermission } from '../../../authorization'; import { Notifications } from '../../../notifications'; import { EmojiCustom } from '../../../models'; import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; -import _ from 'underscore'; -import s from 'underscore.string'; Meteor.methods({ insertOrUpdateEmoji(emojiData) { @@ -71,40 +72,39 @@ Meteor.methods({ Notifications.notifyLogged('updateEmojiCustom', { emojiData: createEmoji }); return _id; - } else { - // update emoji - if (emojiData.newFile) { + } + // update emoji + if (emojiData.newFile) { + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.extension }`)); + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.previousExtension }`)); + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.extension }`)); + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)); + + EmojiCustom.setExtension(emojiData._id, emojiData.extension); + } else if (emojiData.name !== emojiData.previousName) { + const rs = RocketChatFileEmojiCustomInstance.getFileWithReadStream(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)); + if (rs !== null) { RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.extension }`)); - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.previousExtension }`)); - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.extension }`)); - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)); - - EmojiCustom.setExtension(emojiData._id, emojiData.extension); - } else if (emojiData.name !== emojiData.previousName) { - const rs = RocketChatFileEmojiCustomInstance.getFileWithReadStream(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)); - if (rs !== null) { - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.extension }`)); - const ws = RocketChatFileEmojiCustomInstance.createWriteStream(encodeURIComponent(`${ emojiData.name }.${ emojiData.previousExtension }`), rs.contentType); - ws.on('end', Meteor.bindEnvironment(() => - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)) - )); - rs.readStream.pipe(ws); - } + const ws = RocketChatFileEmojiCustomInstance.createWriteStream(encodeURIComponent(`${ emojiData.name }.${ emojiData.previousExtension }`), rs.contentType); + ws.on('end', Meteor.bindEnvironment(() => + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.previousName }.${ emojiData.previousExtension }`)) + )); + rs.readStream.pipe(ws); } + } - if (emojiData.name !== emojiData.previousName) { - EmojiCustom.setName(emojiData._id, emojiData.name); - } + if (emojiData.name !== emojiData.previousName) { + EmojiCustom.setName(emojiData._id, emojiData.name); + } - if (emojiData.aliases) { - EmojiCustom.setAliases(emojiData._id, emojiData.aliases); - } else { - EmojiCustom.setAliases(emojiData._id, []); - } + if (emojiData.aliases) { + EmojiCustom.setAliases(emojiData._id, emojiData.aliases); + } else { + EmojiCustom.setAliases(emojiData._id, []); + } - Notifications.notifyLogged('updateEmojiCustom', { emojiData }); + Notifications.notifyLogged('updateEmojiCustom', { emojiData }); - return true; - } + return true; }, }); diff --git a/app/emoji-custom/server/methods/listEmojiCustom.js b/app/emoji-custom/server/methods/listEmojiCustom.js index 1c7f0072bc805450a28a63e8f6a922c157c71f10..d06b382af85e6ecfc34c8c7ffda7db58b4b22731 100644 --- a/app/emoji-custom/server/methods/listEmojiCustom.js +++ b/app/emoji-custom/server/methods/listEmojiCustom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { EmojiCustom } from '../../../models'; Meteor.methods({ diff --git a/app/emoji-custom/server/methods/uploadEmojiCustom.js b/app/emoji-custom/server/methods/uploadEmojiCustom.js index b32173c17efada00045033636f1dfe37c1bea04d..c9c902cdd49f3170ccd8ca2a308bb15010d48d52 100644 --- a/app/emoji-custom/server/methods/uploadEmojiCustom.js +++ b/app/emoji-custom/server/methods/uploadEmojiCustom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Notifications } from '../../../notifications'; import { hasPermission } from '../../../authorization'; import { RocketChatFile } from '../../../file'; diff --git a/app/emoji-custom/server/publications/fullEmojiData.js b/app/emoji-custom/server/publications/fullEmojiData.js index 6d49ceb42cc93ba3a3a69543ab0944032036d1b9..b2771a914aeecd3e9d7a1127daafb9c246062588 100644 --- a/app/emoji-custom/server/publications/fullEmojiData.js +++ b/app/emoji-custom/server/publications/fullEmojiData.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { EmojiCustom } from '../../../models'; import s from 'underscore.string'; +import { EmojiCustom } from '../../../models'; + Meteor.publish('fullEmojiData', function(filter, limit) { if (!this.userId) { return this.ready(); diff --git a/app/emoji-custom/server/startup/emoji-custom.js b/app/emoji-custom/server/startup/emoji-custom.js index 807f67b7295ef29d34ef0050b12893a3e50642de..8110fc0667eead1c233e5150affe98fa9e71e27c 100644 --- a/app/emoji-custom/server/startup/emoji-custom.js +++ b/app/emoji-custom/server/startup/emoji-custom.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { RocketChatFile } from '../../../file'; -import _ from 'underscore'; export let RocketChatFileEmojiCustomInstance; @@ -35,8 +36,7 @@ Meteor.startup(function() { return WebApp.connectHandlers.use('/emoji-custom/', Meteor.bindEnvironment(function(req, res/* , next*/) { - const params = - { emoji: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) }; + const params = { emoji: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) }; if (_.isEmpty(params.emoji)) { res.writeHead(403); diff --git a/app/emoji-emojione/lib/rocketchat.js b/app/emoji-emojione/lib/rocketchat.js index b3ce738c157d40f1d5be68a8b11031f646686916..d581d96d792dc0e2230ac97b462c03493eed88d0 100644 --- a/app/emoji-emojione/lib/rocketchat.js +++ b/app/emoji-emojione/lib/rocketchat.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; -import { emoji } from '../../emoji'; -import { getUserPreference } from '../../utils'; import { emojione } from 'meteor/emojione:emojione'; + import { emojisByCategory, emojiCategories, toneList } from './emojiPicker'; +import { emoji } from '../../emoji'; +import { getUserPreference } from '../../utils'; emoji.packages.emojione = emojione; emoji.packages.emojione.imageType = 'png'; @@ -23,9 +24,8 @@ function isSetNotNull(fn) { value = fn(); } catch (e) { value = null; - } finally { - return value !== null && value !== undefined; } + return value !== null && value !== undefined; } // RocketChat.emoji.list is the collection of emojis from all emoji packages diff --git a/app/emoji-emojione/server/callbacks.js b/app/emoji-emojione/server/callbacks.js index 36a374c967ec945962b14ebe1b0a23572b0d27dd..7cc1b2844c37efa758a5deecc68880a056c0135f 100644 --- a/app/emoji-emojione/server/callbacks.js +++ b/app/emoji-emojione/server/callbacks.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { callbacks } from '../../callbacks'; import { emojione } from 'meteor/emojione:emojione'; +import { callbacks } from '../../callbacks'; + Meteor.startup(function() { callbacks.add('beforeSendMessageNotifications', (message) => emojione.shortnameToUnicode(message)); }); diff --git a/app/emoji/client/emojiParser.js b/app/emoji/client/emojiParser.js index 503de3c1194a61134699add2726d3c4873f55308..a271dfdff6088bd4bb5030d6637e4c5d1d4abdc1 100644 --- a/app/emoji/client/emojiParser.js +++ b/app/emoji/client/emojiParser.js @@ -1,5 +1,4 @@ import s from 'underscore.string'; - import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; diff --git a/app/emoji/client/emojiPicker.js b/app/emoji/client/emojiPicker.js index b17264c0fad2c1d5b1505c9082b2b8af3ea05ede..4448901badc5fe14afef43beb5060fb08fe2f581 100644 --- a/app/emoji/client/emojiPicker.js +++ b/app/emoji/client/emojiPicker.js @@ -1,9 +1,10 @@ import { ReactiveVar } from 'meteor/reactive-var'; -import { emoji } from '../lib/rocketchat'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import { isSetNotNull } from './function-isSet'; import { EmojiPicker } from './lib/EmojiPicker'; +import { emoji } from '../lib/rocketchat'; const emojiCategories = {}; /** @@ -143,9 +144,8 @@ Template.emojiPicker.helpers({ if (searchTerm.length > 0) { return getEmojisBySearchTerm(searchTerm); - } else { - return getEmojisByCategory(category); } + return getEmojisByCategory(category); }, currentTone() { return `tone-${ Template.instance().tone }`; @@ -172,9 +172,8 @@ Template.emojiPicker.helpers({ if (searchTerm.length > 0) { return TAPi18n.__('Search'); - } else { - return categoryName(hash); } + return categoryName(hash); }, }); diff --git a/app/emoji/client/function-isSet.js b/app/emoji/client/function-isSet.js index 1dd2e6e7e8a0e9637afbc91d75dc379b01271469..f580568969050732e665b740b85b55950167bf32 100644 --- a/app/emoji/client/function-isSet.js +++ b/app/emoji/client/function-isSet.js @@ -5,9 +5,8 @@ export const isSet = function(fn) { value = fn(); } catch (e) { value = undefined; - } finally { - return value !== undefined; } + return value !== undefined; }; export const isSetNotNull = function(fn) { @@ -16,7 +15,6 @@ export const isSetNotNull = function(fn) { value = fn(); } catch (e) { value = null; - } finally { - return value !== null && value !== undefined; } + return value !== null && value !== undefined; }; diff --git a/app/emoji/client/index.js b/app/emoji/client/index.js index 255bcdfbb6f4e8e263a7e01cc1508aab5222673d..b0ac0d5a37322abbd22fabece8d219291fd41967 100644 --- a/app/emoji/client/index.js +++ b/app/emoji/client/index.js @@ -1,9 +1,9 @@ -import { emoji } from '../lib/rocketchat'; import './emojiParser'; import './emojiPicker.html'; import './emojiPicker'; import { EmojiPicker } from './lib/EmojiPicker'; import { renderEmoji } from './lib/emojiRenderer'; +import { emoji } from '../lib/rocketchat'; export { renderEmoji, diff --git a/app/emoji/client/lib/EmojiPicker.js b/app/emoji/client/lib/EmojiPicker.js index 97f6a0a28da15f940a75752695a16d9338ffaddb..35e448549358aa7c0e87b9d830668bd4c1581b84 100644 --- a/app/emoji/client/lib/EmojiPicker.js +++ b/app/emoji/client/lib/EmojiPicker.js @@ -1,8 +1,9 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; -import { emoji } from '../../lib/rocketchat'; import _ from 'underscore'; +import { emoji } from '../../lib/rocketchat'; + export const EmojiPicker = { width: 365, height: 290, diff --git a/app/emoji/client/lib/emojiRenderer.js b/app/emoji/client/lib/emojiRenderer.js index 4c8ded7a24544b503d7968ae384c7ebd0d1b40d5..d4b2ba2f49939c896201b940616b2f4ca77fab1e 100644 --- a/app/emoji/client/lib/emojiRenderer.js +++ b/app/emoji/client/lib/emojiRenderer.js @@ -1,8 +1,9 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; +import { HTML } from 'meteor/htmljs'; + import { emoji } from '../../lib/rocketchat'; import { isSetNotNull } from '../function-isSet'; -import { HTML } from 'meteor/htmljs'; export const renderEmoji = function(_emoji) { if (isSetNotNull(() => emoji.list[_emoji].emojiPackage)) { diff --git a/app/error-handler/server/lib/RocketChat.ErrorHandler.js b/app/error-handler/server/lib/RocketChat.ErrorHandler.js index ee6845ebafef61435d72e3de613e605a486f8f3f..a542d801fe72caf046c07b6d3ac05c81d0bf6e79 100644 --- a/app/error-handler/server/lib/RocketChat.ErrorHandler.js +++ b/app/error-handler/server/lib/RocketChat.ErrorHandler.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { Users, Rooms } from '../../../models'; import { sendMessage } from '../../../lib'; @@ -71,4 +72,4 @@ class ErrorHandler { } } -export default new ErrorHandler; +export default new ErrorHandler(); diff --git a/app/favico/client/index.js b/app/favico/client/index.js index a762961a1e632ec4bb617fb86f1b66bdc7b51126..239a252e455cab4e67bf8db7be33b3ee6813766d 100644 --- a/app/favico/client/index.js +++ b/app/favico/client/index.js @@ -1,4 +1,3 @@ import { Favico } from './favico'; export { Favico }; - diff --git a/app/federation/client/admin/dashboard.js b/app/federation/client/admin/dashboard.js index eb4f6d55d470c85a9fe9c6200e5e655cafc178aa..1979e798b262785e6b136dbcd132101291ed4bfe 100644 --- a/app/federation/client/admin/dashboard.js +++ b/app/federation/client/admin/dashboard.js @@ -2,9 +2,9 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; import { ReactiveVar } from 'meteor/reactive-var'; - import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { FlowRouter } from 'meteor/kadira:flow-router'; + import { AdminBox } from '../../../ui-utils'; import { hasRole } from '../../../authorization'; diff --git a/app/federation/server/PeerClient.js b/app/federation/server/PeerClient.js index a1b49b970b9265851fb4dfb12b41b18703f15873..8b6a0b144b3abcaf99cdcac4250109d4e29832e2 100644 --- a/app/federation/server/PeerClient.js +++ b/app/federation/server/PeerClient.js @@ -1,12 +1,14 @@ import qs from 'querystring'; + import { Meteor } from 'meteor/meteor'; -import { callbacks } from '../../callbacks'; -import { settings } from '../../settings'; -import { FederationEvents, FederationKeys, Messages, Rooms, Subscriptions, Users } from '../../models'; import { updateStatus } from './settingsUpdater'; import { logger } from './logger'; import { FederatedMessage, FederatedRoom, FederatedUser } from './federatedResources'; +import { callbacks } from '../../callbacks'; +import { settings } from '../../settings'; +import { FederationEvents, FederationKeys, Messages, Rooms, Subscriptions, Users } from '../../models'; + import { Federation } from '.'; export class PeerClient { @@ -364,8 +366,8 @@ export class PeerClient { const { peer: { domain: localPeerDomain } } = this; // Check if room or user who joined are federated - if ((!userWhoJoined.federation || userWhoJoined.federation.peer === localPeerDomain) && - !FederatedRoom.isFederated(localPeerDomain, room)) { + if ((!userWhoJoined.federation || userWhoJoined.federation.peer === localPeerDomain) + && !FederatedRoom.isFederated(localPeerDomain, room)) { return users; } diff --git a/app/federation/server/PeerDNS.js b/app/federation/server/PeerDNS.js index 7ed27f6cbce99697a27ae6690c4a93ae0c12396a..c3356aaa8bb413ee598980590e61369ebebe519c 100644 --- a/app/federation/server/PeerDNS.js +++ b/app/federation/server/PeerDNS.js @@ -1,9 +1,12 @@ import dns from 'dns'; + import { Meteor } from 'meteor/meteor'; -import { FederationDNSCache } from '../../models'; + import { logger } from './logger'; import { updateStatus } from './settingsUpdater'; +import { FederationDNSCache } from '../../models'; + import { Federation } from '.'; const dnsResolveSRV = Meteor.wrapAsync(dns.resolveSrv); diff --git a/app/federation/server/PeerHTTP/PeerHTTP.js b/app/federation/server/PeerHTTP/PeerHTTP.js index dfccab7c26a9294edad7d1c856791c16342c60d8..fbcb1e72962df861d17d9e4973a7b3f869b98c50 100644 --- a/app/federation/server/PeerHTTP/PeerHTTP.js +++ b/app/federation/server/PeerHTTP/PeerHTTP.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; +import { skipRetryOnSpecificError, delay } from './utils'; import { logger } from '../logger'; + import { Federation } from '..'; -import { skipRetryOnSpecificError, delay } from './utils'; export class PeerHTTP { constructor() { diff --git a/app/federation/server/PeerPinger.js b/app/federation/server/PeerPinger.js index c6d18fd7bff30b7dfbfaeedf1c11c2dd559c7e41..aa3bcbfa8a4c30447e51378e36a7e48befafc354 100644 --- a/app/federation/server/PeerPinger.js +++ b/app/federation/server/PeerPinger.js @@ -1,11 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { logger } from './logger'; - -import { FederationPeers } from '../../models'; +import moment from 'moment'; +import { logger } from './logger'; import { ping } from './methods/ping'; +import { FederationPeers } from '../../models'; -import moment from 'moment'; export class PeerPinger { constructor() { diff --git a/app/federation/server/PeerServer/PeerServer.js b/app/federation/server/PeerServer/PeerServer.js index f09083e9bcc9d12653262940a0a0800ad8a47b53..73c51ba053e5801db570bddb19607cadce32c278 100644 --- a/app/federation/server/PeerServer/PeerServer.js +++ b/app/federation/server/PeerServer/PeerServer.js @@ -2,9 +2,9 @@ import { callbacks } from '../../../callbacks'; import { setReaction } from '../../../reactions/server'; import { addUserToRoom, removeUserFromRoom, deleteMessage } from '../../../lib'; import { Rooms, Subscriptions, FederationPeers } from '../../../models'; - import { FederatedMessage, FederatedRoom, FederatedUser } from '../federatedResources'; import { logger } from '../logger.js'; + import { Federation } from '..'; export class PeerServer { diff --git a/app/federation/server/PeerServer/routes/events.js b/app/federation/server/PeerServer/routes/events.js index 83153a829c729fb393e5988213b33a3b97165512..45153c80bd7335afa37c81c3425e5f6299809166 100644 --- a/app/federation/server/PeerServer/routes/events.js +++ b/app/federation/server/PeerServer/routes/events.js @@ -1,7 +1,7 @@ import { Meteor } from 'meteor/meteor'; + import { API } from '../../../../api'; import { FederationKeys } from '../../../../models'; - import { Federation } from '../..'; API.v1.addRoute('federation.events', { authRequired: false }, { diff --git a/app/federation/server/PeerServer/routes/uploads.js b/app/federation/server/PeerServer/routes/uploads.js index a076259d9140e1db9e54666547ac14643b9964e4..ec24f75ca2ba598d4a63a86eec58b4f590765bd2 100644 --- a/app/federation/server/PeerServer/routes/uploads.js +++ b/app/federation/server/PeerServer/routes/uploads.js @@ -1,8 +1,8 @@ import { Meteor } from 'meteor/meteor'; + import { API } from '../../../../api'; import { Uploads } from '../../../../models'; import { FileUpload } from '../../../../file-upload'; - import { Federation } from '../..'; API.v1.addRoute('federation.uploads', { authRequired: false }, { diff --git a/app/federation/server/PeerServer/routes/users.js b/app/federation/server/PeerServer/routes/users.js index 3442e76b71587f87b3875b12f7d1f9a0d30ecd5a..89006ad583a97a4372e5b20a2d58f71822066dcc 100644 --- a/app/federation/server/PeerServer/routes/users.js +++ b/app/federation/server/PeerServer/routes/users.js @@ -1,6 +1,5 @@ import { API } from '../../../../api'; import { Users } from '../../../../models'; - import { FederatedUser } from '../../federatedResources'; import { Federation } from '../..'; diff --git a/app/federation/server/federatedResources/FederatedMessage.js b/app/federation/server/federatedResources/FederatedMessage.js index e606bbcd39a27a831008dc782a00588965d97e23..92d98a0ada21432d39615313154cb2afe68f0291 100644 --- a/app/federation/server/federatedResources/FederatedMessage.js +++ b/app/federation/server/federatedResources/FederatedMessage.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; + import { sendMessage, updateMessage } from '../../../lib'; import { Messages, Rooms, Users } from '../../../models'; import { FileUpload } from '../../../file-upload'; - import { FederatedResource } from './FederatedResource'; import { FederatedRoom } from './FederatedRoom'; import { FederatedUser } from './FederatedUser'; + import { Federation } from '..'; export class FederatedMessage extends FederatedResource { @@ -57,7 +58,6 @@ export class FederatedMessage extends FederatedResource { // Prepare mentions for (const mention of message.mentions) { - mention.federation = mention.federation || {}; if (mention.username.indexOf('@') === -1) { diff --git a/app/federation/server/federatedResources/FederatedRoom.js b/app/federation/server/federatedResources/FederatedRoom.js index 1f47e1e37b69d2f17f7ef8d32bc31e4ff0d1838f..494edb1f96c5097f78ba2fa6512be4b824ac17ba 100644 --- a/app/federation/server/federatedResources/FederatedRoom.js +++ b/app/federation/server/federatedResources/FederatedRoom.js @@ -1,8 +1,8 @@ +import { FederatedResource } from './FederatedResource'; +import { FederatedUser } from './FederatedUser'; import { createRoom } from '../../../lib'; import { Rooms, Subscriptions, Users } from '../../../models'; -import { FederatedResource } from './FederatedResource'; -import { FederatedUser } from './FederatedUser'; export class FederatedRoom extends FederatedResource { constructor(localPeerIdentifier, room, extras = {}) { diff --git a/app/federation/server/federatedResources/FederatedUser.js b/app/federation/server/federatedResources/FederatedUser.js index 74f40bbf3168504f29edcd39e7ea32c630a26895..de6a7fee06527c0bb8641be1b0d5adb05295c449 100644 --- a/app/federation/server/federatedResources/FederatedUser.js +++ b/app/federation/server/federatedResources/FederatedUser.js @@ -1,6 +1,6 @@ +import { FederatedResource } from './FederatedResource'; import { Users } from '../../../models'; -import { FederatedResource } from './FederatedResource'; export class FederatedUser extends FederatedResource { constructor(localPeerIdentifier, user) { diff --git a/app/federation/server/federation-settings.js b/app/federation/server/federation-settings.js index d7f5b03f970722aeb73058ddaac0b5ee4c6f62dc..7a1b200fd0e0d75c9d6d871d47a24ec714ab71f0 100644 --- a/app/federation/server/federation-settings.js +++ b/app/federation/server/federation-settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { FederationKeys } from '../../models'; diff --git a/app/federation/server/index.js b/app/federation/server/index.js index 92f10a862344e8404eb1dcba0ba3f4af7ea5e832..834a67c10f6a921860edafc500941dc0c4d8f6b3 100644 --- a/app/federation/server/index.js +++ b/app/federation/server/index.js @@ -1,11 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { _ } from 'meteor/underscore'; -import { settings } from '../../settings'; -import { FederationKeys } from '../../models'; -import { getWorkspaceAccessToken } from '../../cloud/server'; import './federation-settings'; - import { logger } from './logger'; import { PeerClient } from './PeerClient'; import { PeerDNS } from './PeerDNS'; @@ -13,11 +9,13 @@ import { PeerHTTP } from './PeerHTTP'; import { PeerPinger } from './PeerPinger'; import { PeerServer } from './PeerServer'; import * as SettingsUpdater from './settingsUpdater'; - import './methods/dashboard'; import { addUser } from './methods/addUser'; import { searchUsers } from './methods/searchUsers'; import { ping } from './methods/ping'; +import { getWorkspaceAccessToken } from '../../cloud/server'; +import { FederationKeys } from '../../models'; +import { settings } from '../../settings'; const peerClient = new PeerClient(); const peerDNS = new PeerDNS(); diff --git a/app/federation/server/methods/addUser.js b/app/federation/server/methods/addUser.js index 4ae95f512996a54d8e8ef86c82c8706db1130cd1..9a0d7a3ceaa4e87c64c51d3d804b37f7256d4aa8 100644 --- a/app/federation/server/methods/addUser.js +++ b/app/federation/server/methods/addUser.js @@ -1,7 +1,9 @@ import { Meteor } from 'meteor/meteor'; + import { Users, FederationPeers } from '../../../models'; import { Federation } from '..'; + import { logger } from '../logger'; export function addUser(identifier) { diff --git a/app/federation/server/methods/dashboard.js b/app/federation/server/methods/dashboard.js index 0e359ab209d104f34f4b355235e5bf0a364a2667..b05dd122a4284b4158a40bee8801901fb2c0dd1c 100644 --- a/app/federation/server/methods/dashboard.js +++ b/app/federation/server/methods/dashboard.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import moment from 'moment'; import { FederationEvents, FederationPeers, Users } from '../../../models'; + import { Federation } from '..'; export function federationGetOverviewData() { diff --git a/app/federation/server/methods/ping.js b/app/federation/server/methods/ping.js index 9e8782789e3383eecec8f0d702832196355e271f..30cace3ad9619237a6b82452d31e88d5f4afbd03 100644 --- a/app/federation/server/methods/ping.js +++ b/app/federation/server/methods/ping.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { FederationEvents } from '../../../models'; import { settings } from '../../../settings'; import { delay } from '../PeerHTTP/utils'; diff --git a/app/file-upload/client/lib/fileUploadHandler.js b/app/file-upload/client/lib/fileUploadHandler.js index 9804c0ecca3bceca00c336f179b653cc003f8c7b..fe13fdcbb9650daf4681318182f18c3af611b8a7 100644 --- a/app/file-upload/client/lib/fileUploadHandler.js +++ b/app/file-upload/client/lib/fileUploadHandler.js @@ -2,6 +2,7 @@ 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'; import { Uploads, Avatars } from '../../../models'; @@ -20,9 +21,8 @@ export const fileUploadHandler = (directive, meta, file) => { if (store) { return new FileUploadBase(store, meta, file); - } else { - console.error('Invalid file store', directive); } + console.error('Invalid file store', directive); }; Tracker.autorun(function() { diff --git a/app/file-upload/lib/FileUploadBase.js b/app/file-upload/lib/FileUploadBase.js index e3e08b49d1b3d6a63410b6365741eedd9c630feb..cbd8cb699d83db4871f1cb2135bf22491ebade47 100644 --- a/app/file-upload/lib/FileUploadBase.js +++ b/app/file-upload/lib/FileUploadBase.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { UploadFS } from 'meteor/jalik:ufs'; +import _ from 'underscore'; + import { canAccessRoom, hasPermission } from '../../authorization'; import { settings } from '../../settings'; -import _ from 'underscore'; UploadFS.config.defaultStorePermissions = new UploadFS.StorePermissions({ insert(userId, doc) { diff --git a/app/file-upload/server/config/AmazonS3.js b/app/file-upload/server/config/AmazonS3.js index 31fdfc79b3cd5fa172342ff33bc5f1ea12b6be8b..c262351fc0da0759c241a98abfbe23cff79b047a 100644 --- a/app/file-upload/server/config/AmazonS3.js +++ b/app/file-upload/server/config/AmazonS3.js @@ -1,10 +1,11 @@ +import http from 'http'; +import https from 'https'; + import _ from 'underscore'; + import { settings } from '../../../settings'; import { FileUploadClass, FileUpload } from '../lib/FileUpload'; - import '../../ufs/AmazonS3/server.js'; -import http from 'http'; -import https from 'https'; const get = function(file, req, res) { const fileUrl = this.store.getRedirectURL(file); diff --git a/app/file-upload/server/config/FileSystem.js b/app/file-upload/server/config/FileSystem.js index e9b3b003c0206f53f42389faf53b783ba892bcbe..6589d657665f1bd9e5b342fa2f86f441bf92497e 100644 --- a/app/file-upload/server/config/FileSystem.js +++ b/app/file-upload/server/config/FileSystem.js @@ -1,8 +1,10 @@ +import fs from 'fs'; + import { Meteor } from 'meteor/meteor'; import { UploadFS } from 'meteor/jalik:ufs'; -import { settings } from '../../../settings'; import _ from 'underscore'; -import fs from 'fs'; + +import { settings } from '../../../settings'; import { FileUploadClass, FileUpload } from '../lib/FileUpload'; const FileSystemUploads = new FileUploadClass({ @@ -27,7 +29,6 @@ const FileSystemUploads = new FileUploadClass({ } catch (e) { res.writeHead(404); res.end(); - return; } }, @@ -43,7 +44,6 @@ const FileSystemUploads = new FileUploadClass({ } } catch (e) { out.end(); - return; } }, }); @@ -66,7 +66,6 @@ const FileSystemAvatars = new FileUploadClass({ } catch (e) { res.writeHead(404); res.end(); - return; } }, }); @@ -92,7 +91,6 @@ const FileSystemUserDataFiles = new FileUploadClass({ } catch (e) { res.writeHead(404); res.end(); - return; } }, }); diff --git a/app/file-upload/server/config/GoogleStorage.js b/app/file-upload/server/config/GoogleStorage.js index 57ab5c5577c5d9b9870b1667f296b9c57fb3bdaa..0af606ead1f02fcdd5bc580accbe193178ddd8a8 100644 --- a/app/file-upload/server/config/GoogleStorage.js +++ b/app/file-upload/server/config/GoogleStorage.js @@ -1,9 +1,11 @@ +import http from 'http'; +import https from 'https'; + import _ from 'underscore'; + import { FileUploadClass, FileUpload } from '../lib/FileUpload'; import { settings } from '../../../settings'; import '../../ufs/GoogleStorage/server.js'; -import http from 'http'; -import https from 'https'; const get = function(file, req, res) { this.store.getRedirectURL(file, (err, fileUrl) => { diff --git a/app/file-upload/server/config/GridFS.js b/app/file-upload/server/config/GridFS.js index f849d77b00936f6c4234ad922fec7affe17b8e10..95bfafb5d96650b6dfd7e0f5a9e2c9bfe317a8d9 100644 --- a/app/file-upload/server/config/GridFS.js +++ b/app/file-upload/server/config/GridFS.js @@ -1,7 +1,9 @@ -import { UploadFS } from 'meteor/jalik:ufs'; import stream from 'stream'; import zlib from 'zlib'; import util from 'util'; + +import { UploadFS } from 'meteor/jalik:ufs'; + import { Logger } from '../../../logger'; import { FileUploadClass, FileUpload } from '../lib/FileUpload'; diff --git a/app/file-upload/server/config/Webdav.js b/app/file-upload/server/config/Webdav.js index 84d2e00ce390e038a146e801a3fb18cea629e5ac..85def43bdf7e4cdf80de980ab85a797d2b2fec0e 100644 --- a/app/file-upload/server/config/Webdav.js +++ b/app/file-upload/server/config/Webdav.js @@ -1,4 +1,5 @@ import _ from 'underscore'; + import { FileUploadClass, FileUpload } from '../lib/FileUpload'; import { settings } from '../../../settings'; import '../../ufs/Webdav/server.js'; diff --git a/app/file-upload/server/config/_configUploadStorage.js b/app/file-upload/server/config/_configUploadStorage.js index f3940013903fff01d8a1c61c58c2416491ae6f11..3fb54925db717cc9b2d5fcc77ded2962f4621ec7 100644 --- a/app/file-upload/server/config/_configUploadStorage.js +++ b/app/file-upload/server/config/_configUploadStorage.js @@ -1,6 +1,7 @@ import { UploadFS } from 'meteor/jalik:ufs'; -import { settings } from '../../../settings'; import _ from 'underscore'; + +import { settings } from '../../../settings'; import './AmazonS3.js'; import './FileSystem.js'; import './GoogleStorage.js'; diff --git a/app/file-upload/server/lib/FileUpload.js b/app/file-upload/server/lib/FileUpload.js index 00e6e5830eae6a8b9713874536dde29d2c9618e6..3464f4aede33b964dfdc9dc2f20b88ca317182f0 100644 --- a/app/file-upload/server/lib/FileUpload.js +++ b/app/file-upload/server/lib/FileUpload.js @@ -1,6 +1,7 @@ -import { Meteor } from 'meteor/meteor'; import fs from 'fs'; import stream from 'stream'; + +import { Meteor } from 'meteor/meteor'; import streamBuffers from 'stream-buffers'; import Future from 'fibers/future'; import sharp from 'sharp'; @@ -8,6 +9,8 @@ import { Cookies } from 'meteor/ostrio:cookies'; import { UploadFS } from 'meteor/jalik:ufs'; import { Match } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; +import filesize from 'filesize'; + import { settings } from '../../../settings'; import Uploads from '../../../models/server/models/Uploads'; import UserDataFiles from '../../../models/server/models/UserDataFiles'; @@ -20,7 +23,6 @@ import { roomTypes } from '../../../utils/server/lib/roomTypes'; import { hasPermission } from '../../../authorization/server/functions/hasPermission'; import { canAccessRoom } from '../../../authorization/server/functions/canAccessRoom'; import { fileUploadIsValidContentType } from '../../../utils/lib/fileUploadRestrictions'; -import filesize from 'filesize'; const cookie = new Cookies(); let maxFileSize = 0; @@ -253,8 +255,6 @@ export const FileUpload = { console.error(err); fut.return(); }); - - return; }; reorientation(() => { @@ -311,7 +311,7 @@ export const FileUpload = { // This file type can be pretty much anything, so it's better if we don't mess with the file extension if (file.type !== 'application/octet-stream') { const ext = mime.extension(file.type); - if (ext && false === new RegExp(`\.${ ext }$`, 'i').test(file.name)) { + if (ext && new RegExp(`\.${ ext }$`, 'i').test(file.name) === false) { file.name = `${ file.name }.${ ext }`; } } diff --git a/app/file-upload/server/lib/proxy.js b/app/file-upload/server/lib/proxy.js index f193d8ec97c8f1fc1596869462cfc21a070741c8..0ac8d52d97ec1816c377ac9f87e0983d1c694092 100644 --- a/app/file-upload/server/lib/proxy.js +++ b/app/file-upload/server/lib/proxy.js @@ -1,11 +1,13 @@ +import http from 'http'; +import URL from 'url'; + 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 { Logger } from '../../../logger'; import { isDocker } from '../../../utils'; -import http from 'http'; -import URL from 'url'; const logger = new Logger('UploadProxy'); diff --git a/app/file-upload/server/lib/requests.js b/app/file-upload/server/lib/requests.js index b0793af4b9b0a81b109a0939fc5692e84b1f3e4c..039231a0d5c4b8348f03d379b6ee02a6598640af 100644 --- a/app/file-upload/server/lib/requests.js +++ b/app/file-upload/server/lib/requests.js @@ -1,9 +1,9 @@ import { WebApp } from 'meteor/webapp'; -import { Uploads } from '../../../models'; + import { FileUpload } from './FileUpload'; +import { Uploads } from '../../../models'; WebApp.connectHandlers.use('/file-upload/', function(req, res, next) { - const match = /^\/([^\/]+)\/(.*)/.exec(req.url); if (match && match[1]) { diff --git a/app/file-upload/server/methods/getS3FileUrl.js b/app/file-upload/server/methods/getS3FileUrl.js index 9c68fa548323e73b392cd6ea46268fb1a885f7b0..9cd915c5e77c2a363f797377ea67632006423fd1 100644 --- a/app/file-upload/server/methods/getS3FileUrl.js +++ b/app/file-upload/server/methods/getS3FileUrl.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { UploadFS } from 'meteor/jalik:ufs'; + import { settings } from '../../../settings'; import { Uploads } from '../../../models'; diff --git a/app/file-upload/server/methods/sendFileMessage.js b/app/file-upload/server/methods/sendFileMessage.js index 2bd882a95ed5667824f60fd98e748d68345748a5..cdf9aef166f966b8300011e2c704507c7192108e 100644 --- a/app/file-upload/server/methods/sendFileMessage.js +++ b/app/file-upload/server/methods/sendFileMessage.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; +import _ from 'underscore'; + import { Uploads } from '../../../models'; import { callbacks } from '../../../callbacks'; import { FileUpload } from '../lib/FileUpload'; -import _ from 'underscore'; Meteor.methods({ async sendFileMessage(roomId, store, file, msgData = {}) { diff --git a/app/file-upload/ufs/AmazonS3/server.js b/app/file-upload/ufs/AmazonS3/server.js index b1442e07c9253a30a8e67d9ac02978b645ad2d13..656bfb2c06563acdcc9a03c22629b377c415cf84 100644 --- a/app/file-upload/ufs/AmazonS3/server.js +++ b/app/file-upload/ufs/AmazonS3/server.js @@ -1,9 +1,10 @@ +import stream from 'stream'; + import { check } from 'meteor/check'; import { UploadFS } from 'meteor/jalik:ufs'; import { Random } from 'meteor/random'; import _ from 'underscore'; import S3 from 'aws-sdk/clients/s3'; -import stream from 'stream'; /** * AmazonS3 store @@ -11,7 +12,6 @@ import stream from 'stream'; * @constructor */ export class AmazonS3Store extends UploadFS.Store { - constructor(options) { // Default options // options.secretAccessKey, diff --git a/app/file-upload/ufs/GoogleStorage/server.js b/app/file-upload/ufs/GoogleStorage/server.js index 00426dbd2f39eb15371e04db7d25a1eb3efebaa4..b350caa6df38e0f8eb8cbe762e6677df5319c44c 100644 --- a/app/file-upload/ufs/GoogleStorage/server.js +++ b/app/file-upload/ufs/GoogleStorage/server.js @@ -9,7 +9,6 @@ import { Storage } from '@google-cloud/storage'; * @constructor */ export class GoogleStorageStore extends UploadFS.Store { - constructor(options) { super(options); diff --git a/app/file-upload/ufs/Webdav/server.js b/app/file-upload/ufs/Webdav/server.js index 9319927836b399f13a78022f07a9577d29e95449..ccfcf25deeca26882a0003259293ce5529266829 100644 --- a/app/file-upload/ufs/Webdav/server.js +++ b/app/file-upload/ufs/Webdav/server.js @@ -1,24 +1,23 @@ +import stream from 'stream'; + import { check } from 'meteor/check'; import { UploadFS } from 'meteor/jalik:ufs'; import { Random } from 'meteor/random'; import { createClient } from 'webdav'; -import stream from 'stream'; /** * WebDAV store * @param options * @constructor */ export class WebdavStore extends UploadFS.Store { - constructor(options) { - super(options); const client = createClient( options.connection.credentials.server, { - username:options.connection.credentials.username, - password:options.connection.credentials.password, + username: options.connection.credentials.username, + password: options.connection.credentials.password, } ); diff --git a/app/file/server/file.server.js b/app/file/server/file.server.js index 2484f4d7965d824e9b09c9f245df6c4b5362efed..dce6d9a0c975b30bc9634f22668d376ed14299f4 100644 --- a/app/file/server/file.server.js +++ b/app/file/server/file.server.js @@ -1,9 +1,10 @@ -import { Meteor } from 'meteor/meteor'; -import { MongoInternals } from 'meteor/mongo'; -import Grid from 'gridfs-stream'; import stream from 'stream'; import fs from 'fs'; import path from 'path'; + +import { Meteor } from 'meteor/meteor'; +import { MongoInternals } from 'meteor/mongo'; +import Grid from 'gridfs-stream'; import mkdirp from 'mkdirp'; // Fix problem with usernames being converted to object id @@ -133,8 +134,6 @@ RocketChatFile.GridFS = class { } return this.remove(fileName); } - - }; RocketChatFile.FileSystem = class { diff --git a/app/github-enterprise/lib/common.js b/app/github-enterprise/lib/common.js index 11d021b6f92a5f0591f67772967884410b3f5ec0..7b50bc78d47bb194cb54a9c3f8fb366873f4ce87 100644 --- a/app/github-enterprise/lib/common.js +++ b/app/github-enterprise/lib/common.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { CustomOAuth } from '../../custom-oauth'; import { settings } from '../../settings'; diff --git a/app/gitlab/lib/common.js b/app/gitlab/lib/common.js index 959ba8f70fa9d4e08e6bd94552a2d27b36dec8c5..14410b4723f64d76e6db512b2cefe0950738976f 100644 --- a/app/gitlab/lib/common.js +++ b/app/gitlab/lib/common.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { CustomOAuth } from '../../custom-oauth'; diff --git a/app/google-vision/client/googlevision.js b/app/google-vision/client/googlevision.js index cefb9f234ace5bd9ffc09facac92972e8bbfa7ed..e63133fe90cb589b5cbb59b887dc319d31c4ceaf 100644 --- a/app/google-vision/client/googlevision.js +++ b/app/google-vision/client/googlevision.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; diff --git a/app/google-vision/server/googlevision.js b/app/google-vision/server/googlevision.js index d59b87a4c8b3744788735be3816f450d32f033bc..658ef00f26316682f769bfd1cd8a04925b88b3e0 100644 --- a/app/google-vision/server/googlevision.js +++ b/app/google-vision/server/googlevision.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { Notifications } from '../../notifications'; @@ -69,7 +70,7 @@ class GoogleVision { Notifications.notifyUser(user._id, 'message', { _id: Random.id(), rid: message.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Adult_images_are_not_allowed', {}, user.language), }); } @@ -159,4 +160,4 @@ class GoogleVision { } } -export default new GoogleVision; +export default new GoogleVision(); diff --git a/app/google-vision/server/settings.js b/app/google-vision/server/settings.js index a8639886b4875187ed4946eae9ca67e285a41b83..ae5a41dd9178bbf39d0cd866602bd96b0c73ad9f 100644 --- a/app/google-vision/server/settings.js +++ b/app/google-vision/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/grant-facebook/server/index.js b/app/grant-facebook/server/index.js index b95e147134c041f10b4fb0c46db4eb34fa74e5cd..be3e0759abf7cc5c61115b4c89772574d3f9b66a 100644 --- a/app/grant-facebook/server/index.js +++ b/app/grant-facebook/server/index.js @@ -1,6 +1,7 @@ -import { Providers, GrantError } from '../../grant'; import { HTTP } from 'meteor/http'; +import { Providers, GrantError } from '../../grant'; + const userAgent = 'Meteor'; const version = 'v2.10'; diff --git a/app/grant-github/server/index.js b/app/grant-github/server/index.js index 51b6428d457e986528f2f2aa2f895f649ec04dde..e01741e304f680942faebcdc9d9a0c7fc7bb1a29 100644 --- a/app/grant-github/server/index.js +++ b/app/grant-github/server/index.js @@ -1,6 +1,7 @@ -import { Providers, GrantError } from '../../grant'; import { HTTP } from 'meteor/http'; +import { Providers, GrantError } from '../../grant'; + const userAgent = 'Meteor'; function getIdentity(accessToken) { diff --git a/app/grant-google/server/index.js b/app/grant-google/server/index.js index ef685eff355ebc1197c23fef3f28f0582bf2601c..5c4aa9dad0daacd7e584d9b3c4cd6c50c73d666a 100644 --- a/app/grant-google/server/index.js +++ b/app/grant-google/server/index.js @@ -1,6 +1,7 @@ -import { Providers, GrantError } from '../../grant'; import { HTTP } from 'meteor/http'; +import { Providers, GrantError } from '../../grant'; + const userAgent = 'Meteor'; function getIdentity(accessToken) { diff --git a/app/grant/server/authenticate.js b/app/grant/server/authenticate.js index ccaef8f1822f0c10c497b42b41e71d5d1b32e74d..48f7b0976200c626f8177739eb9cce399bc8f522 100644 --- a/app/grant/server/authenticate.js +++ b/app/grant/server/authenticate.js @@ -1,9 +1,10 @@ -import { AccountsServer } from '../../accounts'; -import { Users } from '../../models'; import { Accounts } from 'meteor/accounts-base'; import { Meteor } from 'meteor/meteor'; + import { GrantError } from './error'; import Providers from './providers'; +import { AccountsServer } from '../../accounts'; +import { Users } from '../../models'; import { t } from '../../utils'; const setAvatarFromUrl = (userId, url) => new Promise((resolve, reject) => { @@ -11,9 +12,9 @@ const setAvatarFromUrl = (userId, url) => new Promise((resolve, reject) => { Meteor.call('setAvatarFromService', url, '', 'url', (err) => { if (err) { if (err.details && err.details.timeToReset) { - reject((t('error-too-many-requests', { + reject(t('error-too-many-requests', { seconds: parseInt(err.details.timeToReset / 1000), - }))); + })); } else { reject(t('Avatar_url_invalid_or_error')); } diff --git a/app/grant/server/error.js b/app/grant/server/error.js index 16ab38913db889f11bdaa7576f2572499d1a2bd7..249319e6b912e2253c4b7743324c40e0d8098843 100644 --- a/app/grant/server/error.js +++ b/app/grant/server/error.js @@ -1,5 +1,2 @@ export class GrantError extends Error { - constructor(...args) { - super(...args); - } } diff --git a/app/grant/server/grant.js b/app/grant/server/grant.js index 191e547b76d01ce342bf1e12216f55f761969706..b6a256a32e3163f9d310c1c921daf8bbd2147a5c 100644 --- a/app/grant/server/grant.js +++ b/app/grant/server/grant.js @@ -1,7 +1,7 @@ -import { hostname } from '../../lib'; import Providers from './providers'; import Settings from './settings'; import { path, generateCallback, generateAppCallback } from './routes'; +import { hostname } from '../../lib'; function addProviders(config) { Settings.forEach((settings, providerName) => { diff --git a/app/grant/server/providers.js b/app/grant/server/providers.js index ba9de5d65fe54ca729081a4e883f147a9140d29b..59735448e466f1eb35da56520e981867ab9edf76 100644 --- a/app/grant/server/providers.js +++ b/app/grant/server/providers.js @@ -18,7 +18,7 @@ class Providers extends Storage { } } -const providers = new Providers; +const providers = new Providers(); export default providers; diff --git a/app/grant/server/settings.js b/app/grant/server/settings.js index 2d426a614ed2e60dce1a98ca6fd1981bd205a26f..c5145b5649e3613b48e8f48eaeb4a87e1586ebcf 100644 --- a/app/grant/server/settings.js +++ b/app/grant/server/settings.js @@ -18,8 +18,9 @@ class Settings extends Storage { constructor() { super(); - this.apps = new Apps; + this.apps = new Apps(); } + add(settings) { check(settings, { enabled: Match.Optional(Boolean), @@ -37,6 +38,6 @@ class Settings extends Storage { } } -const settings = new Settings; +const settings = new Settings(); export default settings; diff --git a/app/graphql/server/api.js b/app/graphql/server/api.js index 9da7e0e705e03971e271d1fb823429fad6ee5ea0..60e56262e109aa2326db18053074486be11c6cb4 100644 --- a/app/graphql/server/api.js +++ b/app/graphql/server/api.js @@ -4,12 +4,13 @@ import { SubscriptionServer } from 'subscriptions-transport-ws'; import { execute, subscribe } from 'graphql'; import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; -import { settings } from '../../settings'; import bodyParser from 'body-parser'; import express from 'express'; import cors from 'cors'; import { executableSchema } from './schema'; +import { settings } from '../../settings'; + const subscriptionPort = settings.get('Graphql_Subscription_Port') || 3100; diff --git a/app/graphql/server/mocks/accounts/graphql-api.js b/app/graphql/server/mocks/accounts/graphql-api.js index d45aa90d2da93f5b73be254b35497033c09fa32a..4dc6a6783eca5452e0eaa4f38d60f7dd1b4cb696 100644 --- a/app/graphql/server/mocks/accounts/graphql-api.js +++ b/app/graphql/server/mocks/accounts/graphql-api.js @@ -4,7 +4,7 @@ // maybe Promise is not wrapped with Fiber // See: https://github.com/meteor/meteor/blob/a362e20a37547362b581fed52f7171d022e83b62/packages/promise/server.js // Opened issue: https://github.com/js-accounts/graphql/issues/16 -export const authenticated = (Accounts, func) => (async (root, args, context, info) => { +export const authenticated = (Accounts, func) => async (root, args, context, info) => { const { authToken } = context; if (!authToken || authToken === '' || authToken === null) { @@ -17,5 +17,5 @@ export const authenticated = (Accounts, func) => (async (root, args, context, in throw new Error('Invalid or expired token!'); } - return await func(root, args, Object.assign(context, { user: userObject }), info); -}); + return func(root, args, Object.assign(context, { user: userObject }), info); +}; diff --git a/app/graphql/server/resolvers/accounts/index.js b/app/graphql/server/resolvers/accounts/index.js index 57b837ec61b165f0ce3d7e79cf69f0686689be0d..8d49638291a71c5881dc1f9e66a1ffbde2d5f491 100644 --- a/app/graphql/server/resolvers/accounts/index.js +++ b/app/graphql/server/resolvers/accounts/index.js @@ -1,11 +1,12 @@ import { createJSAccountsGraphQL } from '@accounts/graphql-api'; -import { AccountsServer } from '../../../../accounts'; import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; + // queries import * as oauthProviders from './oauthProviders'; // types import * as OauthProviderType from './OauthProvider-type'; +import { AccountsServer } from '../../../../accounts'; const accountsGraphQL = createJSAccountsGraphQL(AccountsServer); diff --git a/app/graphql/server/resolvers/accounts/oauthProviders.js b/app/graphql/server/resolvers/accounts/oauthProviders.js index 0719d944174a9821848fad125b0966904fea57a8..7928e07705e3144e556fdb8bec53424ec60ad163 100644 --- a/app/graphql/server/resolvers/accounts/oauthProviders.js +++ b/app/graphql/server/resolvers/accounts/oauthProviders.js @@ -23,9 +23,8 @@ const resolver = { const providers = JSON.parse(result).data; return providers.map((name) => ({ name })); - } else { - throw new Error('Could not parse the result'); } + throw new Error('Could not parse the result'); } catch (e) { throw new Error('rocketchat:grant not installed'); } diff --git a/app/graphql/server/resolvers/channels/Channel-type.js b/app/graphql/server/resolvers/channels/Channel-type.js index a0aab1087f28c7c990649a517dd2b936692a666c..c21d7102ca8402c72eb062c696c705ac03860e8d 100644 --- a/app/graphql/server/resolvers/channels/Channel-type.js +++ b/app/graphql/server/resolvers/channels/Channel-type.js @@ -1,6 +1,6 @@ -import { Subscriptions, Users } from '../../../../models'; import property from 'lodash.property'; +import { Subscriptions, Users } from '../../../../models'; import schema from '../../schemas/channels/Channel-type.graphqls'; const resolver = { diff --git a/app/graphql/server/resolvers/channels/channelByName.js b/app/graphql/server/resolvers/channels/channelByName.js index 14b70378b5e19e7040162c0b65e9aa70389b19a0..21fb67f95155bc2b63ce90ea7aaf3c1158f3a4b4 100644 --- a/app/graphql/server/resolvers/channels/channelByName.js +++ b/app/graphql/server/resolvers/channels/channelByName.js @@ -1,7 +1,6 @@ +import { roomPublicFields } from './settings'; import { Rooms } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; -import { roomPublicFields } from './settings'; import schema from '../../schemas/channels/channelByName.graphqls'; const resolver = { diff --git a/app/graphql/server/resolvers/channels/channels.js b/app/graphql/server/resolvers/channels/channels.js index 80a357154ce27f10f2729cbdccf41f5b08c9ad62..638504a3b5e7c8c88d6d53e815faebb9e45ff049 100644 --- a/app/graphql/server/resolvers/channels/channels.js +++ b/app/graphql/server/resolvers/channels/channels.js @@ -1,7 +1,6 @@ +import { roomPublicFields } from './settings'; import { Rooms } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; -import { roomPublicFields } from './settings'; import schema from '../../schemas/channels/channels.graphqls'; const resolver = { @@ -18,7 +17,7 @@ const resolver = { // Filter if (typeof args.filter !== 'undefined') { // nameFilter - if (typeof args.filter.nameFilter !== undefined) { + if (typeof args.filter.nameFilter !== 'undefined') { query.name = { $regex: new RegExp(args.filter.nameFilter, 'i'), }; diff --git a/app/graphql/server/resolvers/channels/channelsByUser.js b/app/graphql/server/resolvers/channels/channelsByUser.js index 51848b16082b8fe808c0fc78bbbcbb628a9111c3..09cff6675773501c86192ead76d601a190dea991 100644 --- a/app/graphql/server/resolvers/channels/channelsByUser.js +++ b/app/graphql/server/resolvers/channels/channelsByUser.js @@ -1,7 +1,6 @@ +import { roomPublicFields } from './settings'; import { Users, Subscriptions, Rooms } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; -import { roomPublicFields } from './settings'; import schema from '../../schemas/channels/channelsByUser.graphqls'; const resolver = { diff --git a/app/graphql/server/resolvers/channels/deleteChannel.js b/app/graphql/server/resolvers/channels/deleteChannel.js index 8eeff88e88c985bd76b4964ac3ecc250b0c04939..3c3aaca6de96c9b90f6e3f7fb6ff2b1e684dccfa 100644 --- a/app/graphql/server/resolvers/channels/deleteChannel.js +++ b/app/graphql/server/resolvers/channels/deleteChannel.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Subscriptions } from '../../../../models'; +import { Rooms, Subscriptions } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/channels/deleteChannel.graphqls'; diff --git a/app/graphql/server/resolvers/channels/directChannel.js b/app/graphql/server/resolvers/channels/directChannel.js index 20ab63ec987c910f7e031b709a93e92b5e683dfe..a23219814f1777348867abeb9d929dbfeeb709a8 100644 --- a/app/graphql/server/resolvers/channels/directChannel.js +++ b/app/graphql/server/resolvers/channels/directChannel.js @@ -1,7 +1,6 @@ +import { roomPublicFields } from './settings'; import { Rooms } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; -import { roomPublicFields } from './settings'; import schema from '../../schemas/channels/directChannel.graphqls'; const resolver = { diff --git a/app/graphql/server/resolvers/channels/hideChannel.js b/app/graphql/server/resolvers/channels/hideChannel.js index 12083caf47cc3c349096d4994a7adf9beeaeb5bd..b0865c7e4fb1a10a20b5ed9b94cb318c3fad922d 100644 --- a/app/graphql/server/resolvers/channels/hideChannel.js +++ b/app/graphql/server/resolvers/channels/hideChannel.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Subscriptions } from '../../../../models'; +import { Rooms, Subscriptions } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/channels/hideChannel.graphqls'; diff --git a/app/graphql/server/resolvers/channels/leaveChannel.js b/app/graphql/server/resolvers/channels/leaveChannel.js index 0df7d8bf0eb913b5a21327cf08f10af0dbc679ee..8448e778b5393bfd5c8866f85c550d58fe65afb1 100644 --- a/app/graphql/server/resolvers/channels/leaveChannel.js +++ b/app/graphql/server/resolvers/channels/leaveChannel.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms } from '../../../../models'; +import { Rooms } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/channels/leaveChannel.graphqls'; diff --git a/app/graphql/server/resolvers/messages/Message-type.js b/app/graphql/server/resolvers/messages/Message-type.js index 7f83e8ff72ffe0044f6f69bee02811098f3031ef..5f9bd1cbc69fad1ed460bfbaa53f1b4dab513f98 100644 --- a/app/graphql/server/resolvers/messages/Message-type.js +++ b/app/graphql/server/resolvers/messages/Message-type.js @@ -1,6 +1,6 @@ -import { Rooms, Users } from '../../../../models'; import property from 'lodash.property'; +import { Rooms, Users } from '../../../../models'; import { dateToFloat } from '../../helpers/dateToFloat'; import schema from '../../schemas/messages/Message-type.graphqls'; diff --git a/app/graphql/server/resolvers/messages/addReactionToMessage.js b/app/graphql/server/resolvers/messages/addReactionToMessage.js index 0960963d66a1342c8b041c1d49079258eb75596a..a90b8e57f493812b333b1dfa41759d8cbce60207 100644 --- a/app/graphql/server/resolvers/messages/addReactionToMessage.js +++ b/app/graphql/server/resolvers/messages/addReactionToMessage.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Messages } from '../../../../models'; +import { Messages } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/messages/addReactionToMessage.graphqls'; diff --git a/app/graphql/server/resolvers/messages/chatMessageAdded.js b/app/graphql/server/resolvers/messages/chatMessageAdded.js index e8b6ebe4e41cb533a046ef6f7e99c223ccfffb39..f8e3e54c455a41392715cf6a680a9d49d841003b 100644 --- a/app/graphql/server/resolvers/messages/chatMessageAdded.js +++ b/app/graphql/server/resolvers/messages/chatMessageAdded.js @@ -1,7 +1,7 @@ import { withFilter } from 'graphql-subscriptions'; + import { Rooms } from '../../../../models'; import { callbacks } from '../../../../callbacks'; - import { pubsub } from '../../subscriptions'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/messages/chatMessageAdded.graphqls'; @@ -15,7 +15,7 @@ export function publishMessage(message) { function shouldPublish(message, { id, directTo }, username) { if (id) { return message.rid === id; - } else if (directTo) { + } if (directTo) { const room = Rooms.findOne({ usernames: { $all: [directTo, username] }, t: 'd', diff --git a/app/graphql/server/resolvers/messages/deleteMessage.js b/app/graphql/server/resolvers/messages/deleteMessage.js index c91f5dc4ac28c19429f3d8cace39e1f4e7d62046..feb2374ba29cc0773100a6d6d2d73d7928d0e290 100644 --- a/app/graphql/server/resolvers/messages/deleteMessage.js +++ b/app/graphql/server/resolvers/messages/deleteMessage.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Messages } from '../../../../models'; +import { Messages } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/messages/deleteMessage.graphqls'; diff --git a/app/graphql/server/resolvers/messages/editMessage.js b/app/graphql/server/resolvers/messages/editMessage.js index 818702bcd150a0bc70c6549b307e5a952bc002e8..9511a3dfc1038ea203d305b54b88a75d717fe181 100644 --- a/app/graphql/server/resolvers/messages/editMessage.js +++ b/app/graphql/server/resolvers/messages/editMessage.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Messages } from '../../../../models'; +import { Messages } from '../../../../models'; import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/messages/editMessage.graphqls'; diff --git a/app/graphql/server/resolvers/messages/messages.js b/app/graphql/server/resolvers/messages/messages.js index 03f6daee8bceac673bcfd12a4c11c05137ca043a..e52e2d0ac783de0ccdc6682818cfa45281a4ee36 100644 --- a/app/graphql/server/resolvers/messages/messages.js +++ b/app/graphql/server/resolvers/messages/messages.js @@ -1,5 +1,4 @@ import { Rooms, Messages } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/messages/messages.graphqls'; diff --git a/app/graphql/server/resolvers/users/User-type.js b/app/graphql/server/resolvers/users/User-type.js index c9c4add527fa00a8739074724738f96231fb8429..0abf0c5751ee9cf9b518da05e71d261bca6fdd45 100644 --- a/app/graphql/server/resolvers/users/User-type.js +++ b/app/graphql/server/resolvers/users/User-type.js @@ -1,7 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { Avatars, Rooms } from '../../../../models'; import property from 'lodash.property'; +import { Avatars, Rooms } from '../../../../models'; import schema from '../../schemas/users/User-type.graphqls'; const resolver = { @@ -18,7 +18,7 @@ const resolver = { return avatar.url; } }, - channels: Meteor.bindEnvironment(async ({ _id }) => await Rooms.findBySubscriptionUserId(_id).fetch()), + channels: Meteor.bindEnvironment(({ _id }) => Rooms.findBySubscriptionUserId(_id).fetch()), directMessages: ({ username }) => Rooms.findDirectRoomContainingUsername(username).fetch(), }, }; diff --git a/app/graphql/server/resolvers/users/setStatus.js b/app/graphql/server/resolvers/users/setStatus.js index e66ebf11ae10d7a2daaf4e95472a23de90bdde1f..d4a68da651a65106035f0e8bc727bc83fc55d3d5 100644 --- a/app/graphql/server/resolvers/users/setStatus.js +++ b/app/graphql/server/resolvers/users/setStatus.js @@ -1,5 +1,4 @@ import { Users } from '../../../../models'; - import { authenticated } from '../../helpers/authenticated'; import schema from '../../schemas/users/setStatus.graphqls'; diff --git a/app/highlight-words/client/client.js b/app/highlight-words/client/client.js index b2e811b3b8707ec6004c06c0cc4c122966b937e9..a3ce4425d4750b226d541c44091486fb750f11da 100644 --- a/app/highlight-words/client/client.js +++ b/app/highlight-words/client/client.js @@ -4,13 +4,12 @@ */ import _ from 'underscore'; import s from 'underscore.string'; - import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; +import { highlightWords, getRegexHighlight, getRegexHighlightUrl } from './helper'; import { callbacks } from '../../callbacks'; import { getUserPreference } from '../../utils'; -import { highlightWords, getRegexHighlight, getRegexHighlightUrl } from './helper'; Tracker.autorun(() => { const toHighlight = (getUserPreference(Meteor.userId(), 'highlights') || []).filter((highlight) => !s.isBlank(highlight)).map((highlight) => ({ diff --git a/app/highlight-words/client/helper.js b/app/highlight-words/client/helper.js index a82bbdc2a4e078130752d41a68bbd0f4eedb0f84..5afd122b6f9a2b502a2646131df3f524f92dce10 100644 --- a/app/highlight-words/client/helper.js +++ b/app/highlight-words/client/helper.js @@ -22,7 +22,6 @@ export const highlightWords = (msg, highlights) => highlights.reduce((msg, { hig const urlMatches = checkHighlightedWordsInUrls(msg, urlRegex); if (!urlMatches) { return msg.replace(regex, highlightTemplate); - } return removeHighlightedUrls(msg.replace(regex, highlightTemplate), highlight, urlMatches); }, msg); diff --git a/app/highlight-words/tests/helper.tests.js b/app/highlight-words/tests/helper.tests.js index 16e3812138bd78dd16f10847a4aeaba313037450..28c5fd075164eda1141fc2e99652c7458fdfbde8 100644 --- a/app/highlight-words/tests/helper.tests.js +++ b/app/highlight-words/tests/helper.tests.js @@ -2,6 +2,7 @@ import 'babel-polyfill'; import assert from 'assert'; + import { highlightWords, getRegexHighlight, getRegexHighlightUrl } from '../client/helper'; describe('helper', () => { diff --git a/app/iframe-login/client/iframe_client.js b/app/iframe-login/client/iframe_client.js index 48e72e251ecabad5b4489fb4c63b773a6cfa477d..d4c718fb4059a7ab019de5456f86a720b0a04d13 100644 --- a/app/iframe-login/client/iframe_client.js +++ b/app/iframe-login/client/iframe_client.js @@ -1,7 +1,8 @@ import { Accounts } from 'meteor/accounts-base'; -import { IframeLogin } from '../../ui-utils'; import _ from 'underscore'; +import { IframeLogin } from '../../ui-utils'; + const iframeLogin = new IframeLogin(); const { _unstoreLoginToken } = Accounts; diff --git a/app/iframe-login/server/iframe_rocketchat.js b/app/iframe-login/server/iframe_rocketchat.js index 794be76c18c2cdc4f996e7dbac2760b77e01688a..b23285be8e6f28f8469776bc9be083343b5ba6d4 100644 --- a/app/iframe-login/server/iframe_rocketchat.js +++ b/app/iframe-login/server/iframe_rocketchat.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/importer-csv/server/adder.js b/app/importer-csv/server/adder.js index 8ab31878fb7b5e67e46dee610ff983a21973df92..da1eaacdd0357c9ba643a9cd513918040b5afb10 100644 --- a/app/importer-csv/server/adder.js +++ b/app/importer-csv/server/adder.js @@ -1,5 +1,5 @@ +import { CsvImporter } from './importer'; import { Importers } from '../../importer/server'; import { CsvImporterInfo } from '../lib/info'; -import { CsvImporter } from './importer'; Importers.add(new CsvImporterInfo(), CsvImporter); diff --git a/app/importer-csv/server/importer.js b/app/importer-csv/server/importer.js index 5eeed2a18673355d44ae40ac6cebf49088865e60..fdc715c38cf5a81ca87b3f7d3c9c495caaa56606 100644 --- a/app/importer-csv/server/importer.js +++ b/app/importer-csv/server/importer.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; + import { Base, ProgressStep, @@ -252,7 +253,7 @@ export class CsvImporter extends Base { this.channels.channels.push({ id: cname.replace('.', '_'), name: cname, - rocketId: (cname.toUpperCase() === 'GENERAL' ? 'GENERAL' : existantRoom._id), + rocketId: cname.toUpperCase() === 'GENERAL' ? 'GENERAL' : existantRoom._id, do_import: true, }); } diff --git a/app/importer-hipchat-enterprise/server/adder.js b/app/importer-hipchat-enterprise/server/adder.js index 097a5071306da6639a3bdba5b9cee395e4b60872..11f9a8e7b4b653211de33bff34c43d112e95cbfb 100644 --- a/app/importer-hipchat-enterprise/server/adder.js +++ b/app/importer-hipchat-enterprise/server/adder.js @@ -1,5 +1,5 @@ +import { HipChatEnterpriseImporter } from './importer'; import { Importers } from '../../importer/server'; import { HipChatEnterpriseImporterInfo } from '../lib/info'; -import { HipChatEnterpriseImporter } from './importer'; Importers.add(new HipChatEnterpriseImporterInfo(), HipChatEnterpriseImporter); diff --git a/app/importer-hipchat-enterprise/server/importer.js b/app/importer-hipchat-enterprise/server/importer.js index cb905639e254befc507aa10d97239ebba02f7b08..768f13a961eb91577676e309b3ccdc54a4d8ca17 100644 --- a/app/importer-hipchat-enterprise/server/importer.js +++ b/app/importer-hipchat-enterprise/server/importer.js @@ -1,7 +1,13 @@ +import { Readable } from 'stream'; +import path from 'path'; +import fs from 'fs'; + import limax from 'limax'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; +import TurndownService from 'turndown'; + import { Base, ProgressStep, @@ -12,10 +18,6 @@ import { } from '../../importer/server'; import { Messages, Users, Subscriptions, Rooms } from '../../models'; import { insertMessage } from '../../lib'; -import { Readable } from 'stream'; -import path from 'path'; -import fs from 'fs'; -import TurndownService from 'turndown'; const turndownService = new TurndownService({ strongDelimiter: '*', @@ -105,7 +107,7 @@ export class HipChatEnterpriseImporter extends Base { tempUsers.push(userData); if (tempUsers.length >= 100) { - await this.storeTempUsers(tempUsers); + await this.storeTempUsers(tempUsers); // eslint-disable-line no-await-in-loop tempUsers = []; } } @@ -158,7 +160,7 @@ export class HipChatEnterpriseImporter extends Base { count++; if (tempRooms.length >= 100) { - await this.storeTempRooms(tempRooms); + await this.storeTempRooms(tempRooms); // eslint-disable-line no-await-in-loop tempRooms = []; } } @@ -235,7 +237,7 @@ export class HipChatEnterpriseImporter extends Base { } if (msgs.length >= 500) { - await this.storeUserTempMessages(msgs, roomIdentifier, index); + await this.storeUserTempMessages(msgs, roomIdentifier, index); // eslint-disable-line no-await-in-loop msgs = []; } } @@ -277,7 +279,7 @@ export class HipChatEnterpriseImporter extends Base { if (m.UserMessage) { const newId = `hipchatenterprise-${ id }-user-${ m.UserMessage.id }`; const skipMessage = this._checkIfMessageExists(newId); - const skipAttachment = (skipMessage && (m.UserMessage.attachment_path ? this._checkIfMessageExists(`${ newId }-attachment`) : true)); + const skipAttachment = skipMessage && (m.UserMessage.attachment_path ? this._checkIfMessageExists(`${ newId }-attachment`) : true); if (!skipMessage || !skipAttachment) { roomMsgs.push({ @@ -335,7 +337,7 @@ export class HipChatEnterpriseImporter extends Base { if (roomMsgs.length >= 500) { subIndex++; - await this.storeTempMessages(roomMsgs, roomIdentifier, index, subIndex, id); + await this.storeTempMessages(roomMsgs, roomIdentifier, index, subIndex, id); // eslint-disable-line no-await-in-loop roomMsgs = []; } } @@ -385,7 +387,7 @@ export class HipChatEnterpriseImporter extends Base { await this.prepareRoomsFile(file); break; case 'history.json': - return await this.prepareMessagesFile(file, info); + return this.prepareMessagesFile(file, info); case 'emoticons.json': this.logger.error('HipChat Enterprise importer doesn\'t import emoticons.', info); break; @@ -407,7 +409,7 @@ export class HipChatEnterpriseImporter extends Base { this.logger.info(`new entry from import folder: ${ fileName }`); if (fs.statSync(fullFilePath).isDirectory()) { - await this._prepareFolderEntry(fullFilePath, fullRelativePath); + await this._prepareFolderEntry(fullFilePath, fullRelativePath); // eslint-disable-line no-await-in-loop continue; } @@ -429,7 +431,7 @@ export class HipChatEnterpriseImporter extends Base { }); }); - await promise.catch((error) => { + await promise.catch((error) => { // eslint-disable-line no-await-in-loop this.logger.error(error); fileData = null; }); @@ -441,7 +443,7 @@ export class HipChatEnterpriseImporter extends Base { this.logger.info(`Processing the file: ${ fileName }`); const info = this.path.parse(fullRelativePath); - await this.prepareFile(info, fileData, fileName); + await this.prepareFile(info, fileData, fileName); // eslint-disable-line no-await-in-loop this.logger.debug('moving to next import folder entry'); } catch (e) { @@ -1110,7 +1112,7 @@ export class HipChatEnterpriseImporter extends Base { let msgCount = 0; try { for (const msg of list.messages) { - await this._importSingleMessage(msg, roomIdentifier, room); + await this._importSingleMessage(msg, roomIdentifier, room); // eslint-disable-line no-await-in-loop msgCount++; if (msgCount >= 50) { super.addCountCompleted(msgCount); @@ -1125,7 +1127,6 @@ export class HipChatEnterpriseImporter extends Base { super.addCountCompleted(msgCount); } }); - } async _importMessages(startedByUserId) { @@ -1136,7 +1137,7 @@ export class HipChatEnterpriseImporter extends Base { }, { fields: { _id: true } }).fetch(); for (const item of messageListIds) { - await this._importMessageList(startedByUserId, item._id); + await this._importMessageList(startedByUserId, item._id); // eslint-disable-line no-await-in-loop } } diff --git a/app/importer-hipchat/server/adder.js b/app/importer-hipchat/server/adder.js index 3a5d8b473625e2686e9a8755eb7d89c4fcb6a9bb..7379752371af36e5c1d324ffdf666273059e5417 100644 --- a/app/importer-hipchat/server/adder.js +++ b/app/importer-hipchat/server/adder.js @@ -1,5 +1,5 @@ +import { HipChatImporter } from './importer'; import { Importers } from '../../importer/server'; import { HipChatImporterInfo } from '../lib/info'; -import { HipChatImporter } from './importer'; Importers.add(new HipChatImporterInfo(), HipChatImporter); diff --git a/app/importer-hipchat/server/importer.js b/app/importer-hipchat/server/importer.js index b3a8968be2172c4919a8baf95db52abbbd0cfd9f..2573e9ba63b290f5f57982aac823a064256c909f 100644 --- a/app/importer-hipchat/server/importer.js +++ b/app/importer-hipchat/server/importer.js @@ -1,6 +1,9 @@ import limax from 'limax'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import _ from 'underscore'; +import moment from 'moment'; + import { Base, ProgressStep, @@ -11,8 +14,6 @@ import { import { RocketChatFile } from '../../file'; import { Users, Rooms } from '../../models'; import { sendMessage } from '../../lib'; -import _ from 'underscore'; -import moment from 'moment'; import 'moment-timezone'; @@ -58,7 +59,8 @@ export class HipChatImporter extends Base { tempMessages[roomName] = {}; } try { - return tempMessages[roomName][msgGroupData] = JSON.parse(entry.getData().toString()); + tempMessages[roomName][msgGroupData] = JSON.parse(entry.getData().toString()); + return tempMessages[roomName][msgGroupData]; } catch (error) { return this.logger.warn(`${ entry.entryName } is not a valid JSON file! Unable to import it.`); } @@ -67,10 +69,10 @@ export class HipChatImporter extends Base { const usersName = entry.entryName.split(this.usersPrefix)[1]; if (usersName === 'list.json') { super.updateProgress(ProgressStep.PREPARING_USERS); - return tempUsers = JSON.parse(entry.getData().toString()).users; - } else { - return this.logger.warn(`Unexpected file in the ${ this.name } import: ${ entry.entryName }`); + tempUsers = JSON.parse(entry.getData().toString()).users; + return tempUsers; } + return this.logger.warn(`Unexpected file in the ${ this.name } import: ${ entry.entryName }`); } }); const usersId = this.collection.insert({ @@ -164,7 +166,11 @@ export class HipChatImporter extends Base { this.collection.update({ _id: this.users._id }, { $set: { users: this.users.users } }); importSelection.channels.forEach((channel) => - this.channels.channels.forEach((c) => c.room_id === channel.channel_id && (c.do_import = channel.do_import)) + this.channels.channels.forEach((c) => { + if (c.room_id === channel.channel_id) { + c.do_import = channel.do_import; + } + }) ); this.collection.update({ _id: this.channels._id }, { $set: { channels: this.channels.channels } }); @@ -239,7 +245,7 @@ export class HipChatImporter extends Base { } Meteor.runAsUser(userId, () => { const returned = Meteor.call('createChannel', channel.name, []); - return channel.rocketId = returned.rid; + channel.rocketId = returned.rid; }); Rooms.update({ _id: channel.rocketId, diff --git a/app/importer-slack-users/server/adder.js b/app/importer-slack-users/server/adder.js index 6d23f6939b13f4617bd92f988adfcc0def838d5e..1651465e5d4e3b947f8382e29e54b512ba37f3be 100644 --- a/app/importer-slack-users/server/adder.js +++ b/app/importer-slack-users/server/adder.js @@ -1,5 +1,5 @@ +import { SlackUsersImporter } from './importer'; import { Importers } from '../../importer/server'; import { SlackUsersImporterInfo } from '../lib/info'; -import { SlackUsersImporter } from './importer'; Importers.add(new SlackUsersImporterInfo(), SlackUsersImporter); diff --git a/app/importer-slack-users/server/importer.js b/app/importer-slack-users/server/importer.js index 42e60bb918a9f4e3b3ddc197d4d024bfe5df0fef..9895fd07990dd134b643f6db8fa52d1af3606739 100644 --- a/app/importer-slack-users/server/importer.js +++ b/app/importer-slack-users/server/importer.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; + import { Base, ProgressStep, diff --git a/app/importer-slack/server/adder.js b/app/importer-slack/server/adder.js index 6442d31dfa428223b0a5c14c524487b2809e2353..d8499b517f006fe51be84a5373af932974bec3db 100644 --- a/app/importer-slack/server/adder.js +++ b/app/importer-slack/server/adder.js @@ -1,5 +1,5 @@ +import { SlackImporter } from './importer'; import { Importers } from '../../importer/server'; import { SlackImporterInfo } from '../lib/info'; -import { SlackImporter } from './importer'; Importers.add(new SlackImporterInfo(), SlackImporter); diff --git a/app/importer-slack/server/importer.js b/app/importer-slack/server/importer.js index 0df63a0c8eea1fbdd2a0c58f294719573415ad71..6c91c32532bda3a2f8ab361fc9afb6af295cfc66 100644 --- a/app/importer-slack/server/importer.js +++ b/app/importer-slack/server/importer.js @@ -1,5 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import _ from 'underscore'; + import { Base, ProgressStep, @@ -12,7 +14,6 @@ import { getUserAvatarURL } from '../../utils/lib/getUserAvatarURL'; import { Users, Rooms, Messages } from '../../models'; import { sendMessage } from '../../lib'; -import _ from 'underscore'; export class SlackImporter extends Base { constructor(info) { @@ -221,7 +222,7 @@ export class SlackImporter extends Base { return; } - Meteor.runAsUser (startedByUserId, () => { + Meteor.runAsUser(startedByUserId, () => { const existantRoom = Rooms.findOneByName(channel.name); if (existantRoom || channel.is_general) { if (channel.is_general && existantRoom && channel.name !== existantRoom.name) { @@ -377,8 +378,8 @@ export class SlackImporter extends Base { ...msgDataDefaults, attachments: [{ text: this.convertSlackMessageToRocketChat(message.attachments[0].text), - author_name : message.attachments[0].author_subname, - author_icon : getUserAvatarURL(message.attachments[0].author_subname), + author_name: message.attachments[0].author_subname, + author_icon: getUserAvatarURL(message.attachments[0].author_subname), }], }; Messages.createWithTypeRoomIdMessageAndUser('message_pinned', room._id, '', this.getRocketUser(message.user), msgObj); diff --git a/app/importer/client/ImporterWebsocketReceiver.js b/app/importer/client/ImporterWebsocketReceiver.js index 1d834134c29a2febcd22dde277d7b6bd69e798a8..83c70b3238844a04f53e57e2463e1150fa50d6d5 100644 --- a/app/importer/client/ImporterWebsocketReceiver.js +++ b/app/importer/client/ImporterWebsocketReceiver.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { CachedCollectionManager } from '../../ui-cached-collection'; class ImporterWebsocketReceiverDef { diff --git a/app/importer/client/admin/adminImport.js b/app/importer/client/admin/adminImport.js index 9848f308b6ec63ecfdd4dda9f95ed73872d98c2a..834a3ecf66daee3970e299db20213dbc8c52ad28 100644 --- a/app/importer/client/admin/adminImport.js +++ b/app/importer/client/admin/adminImport.js @@ -1,9 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { Importers } from '..'; + import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import { hasRole } from '../../../authorization'; import { t, handleError } from '../../../utils'; import { SideNav } from '../../../ui-utils/client'; diff --git a/app/importer/client/admin/adminImportHistory.js b/app/importer/client/admin/adminImportHistory.js index d6cd8e56838b3d57360f930ed7d44a0f77c79433..8458d8dbbb11d050659b1cf8adf8d186b4ccd405 100644 --- a/app/importer/client/admin/adminImportHistory.js +++ b/app/importer/client/admin/adminImportHistory.js @@ -1,13 +1,16 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { Importers } from '..'; + import { Template } from 'meteor/templating'; -import { hasRole } from '../../../authorization'; -import { t, APIClient } from '../../../utils'; import toastr from 'toastr'; import { ReactiveVar } from 'meteor/reactive-var'; -import { ProgressStep } from '../../lib/ImporterProgressStep'; import { FlowRouter } from 'meteor/kadira:flow-router'; + +import { hasRole } from '../../../authorization'; +import { t, APIClient } from '../../../utils'; +import { ProgressStep } from '../../lib/ImporterProgressStep'; import { SideNav } from '../../../ui-utils/client'; Template.adminImportHistory.helpers({ diff --git a/app/importer/client/admin/adminImportPrepare.js b/app/importer/client/admin/adminImportPrepare.js index fab8cb853f76d4613312eca0e163050b2ff48457..82cf2be025481af424810be52a7c6f638f8f1bd7 100644 --- a/app/importer/client/admin/adminImportPrepare.js +++ b/app/importer/client/admin/adminImportPrepare.js @@ -1,14 +1,17 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; + import { Importers } from '..'; + import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { hasRole } from '../../../authorization'; import { settings } from '../../../settings'; import { t, handleError, APIClient } from '../../../utils'; -import toastr from 'toastr'; import { SideNav } from '../../../ui-utils/client'; Template.adminImportPrepare.helpers({ @@ -250,7 +253,7 @@ Template.adminImportPrepare.onCreated(function() { this.message_count = new ReactiveVar(0); function loadSelection(progress) { - if ((progress != null ? progress.step : undefined)) { + if (progress != null ? progress.step : undefined) { switch (progress.step) { // When the import is running, take the user to the progress page case 'importer_importing_started': @@ -304,15 +307,13 @@ Template.adminImportPrepare.onCreated(function() { instance.preparing.set(false); return loadSelection(data); }); - } else { - // Otherwise, we might need to do something based upon the current step - // of the import - return loadSelection(progress); } + // Otherwise, we might need to do something based upon the current step + // of the import + return loadSelection(progress); }); - } else { - return FlowRouter.go('/admin/import'); } + return FlowRouter.go('/admin/import'); }); Template.adminImportPrepare.onRendered(() => { diff --git a/app/importer/client/admin/adminImportProgress.js b/app/importer/client/admin/adminImportProgress.js index d1d1d79e40d89a73a713d041d3380a8b7c01904a..cc05d750398bb1c4275e9efc06e2ba2687c6de1c 100644 --- a/app/importer/client/admin/adminImportProgress.js +++ b/app/importer/client/admin/adminImportProgress.js @@ -1,11 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; + import { Importers, ImporterWebsocketReceiver, ProgressStep } from '..'; + import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -import { t, handleError } from '../../../utils'; import toastr from 'toastr'; +import { t, handleError } from '../../../utils'; + Template.adminImportProgress.helpers({ step() { return Template.instance().step.get(); diff --git a/app/importer/client/index.js b/app/importer/client/index.js index 437226a18ed84bbd16af70dab7ab36602f8aec7d..ff06c8ee496b17e5feac1d518b5db25ca1af5c1d 100644 --- a/app/importer/client/index.js +++ b/app/importer/client/index.js @@ -1,6 +1,6 @@ +import { ImporterWebsocketReceiver } from './ImporterWebsocketReceiver'; import { Importers } from '../lib/Importers'; import { ImporterInfo } from '../lib/ImporterInfo'; -import { ImporterWebsocketReceiver } from './ImporterWebsocketReceiver'; import { ProgressStep } from '../lib/ImporterProgressStep'; import './admin/adminImport.html'; import './admin/adminImport'; diff --git a/app/importer/server/classes/ImporterBase.js b/app/importer/server/classes/ImporterBase.js index 603741f29be790a39c1c13e324283109aada5c13..27792029a2b8f0e38904623ffeac7cc4d37e6714 100644 --- a/app/importer/server/classes/ImporterBase.js +++ b/app/importer/server/classes/ImporterBase.js @@ -1,20 +1,22 @@ +import http from 'http'; +import fs from 'fs'; +import https from 'https'; + import { Meteor } from 'meteor/meteor'; +import AdmZip from 'adm-zip'; +import getFileType from 'file-type'; + import { Progress } from './ImporterProgress'; -import { ProgressStep } from '../../lib/ImporterProgressStep'; import { Selection } from './ImporterSelection'; +import { ImporterWebsocket } from './ImporterWebsocket'; +import { ProgressStep } from '../../lib/ImporterProgressStep'; import { Imports } from '../models/Imports'; import { ImporterInfo } from '../../lib/ImporterInfo'; import { RawImports } from '../models/RawImports'; -import { ImporterWebsocket } from './ImporterWebsocket'; import { Settings } from '../../../models'; import { Logger } from '../../../logger'; import { FileUpload } from '../../../file-upload'; import { sendMessage } from '../../../lib'; -import http from 'http'; -import fs from 'fs'; -import https from 'https'; -import AdmZip from 'adm-zip'; -import getFileType from 'file-type'; /** * Base class for all of the importers. @@ -58,11 +60,11 @@ export class Base { */ static getBSONSafeArraysFromAnArray(theArray) { const BSONSize = Base.getBSONSize(theArray); - const maxSize = Math.floor(theArray.length / (Math.ceil(BSONSize / Base.getMaxBSONSize()))); + const maxSize = Math.floor(theArray.length / Math.ceil(BSONSize / Base.getMaxBSONSize())); const safeArrays = []; let i = 0; while (i < theArray.length) { - safeArrays.push(theArray.slice(i, (i += maxSize))); + safeArrays.push(theArray.slice(i, i += maxSize)); } return safeArrays; } diff --git a/app/importer/server/index.js b/app/importer/server/index.js index 7d69bb18fc830f04c23b3a745bebd3ca253e1b8a..489bcabf5c87b1d2353c088df20e5f91ec91a2de 100644 --- a/app/importer/server/index.js +++ b/app/importer/server/index.js @@ -1,14 +1,14 @@ import { Base } from './classes/ImporterBase'; import { Imports } from './models/Imports'; -import { Importers } from '../lib/Importers'; -import { ImporterInfo } from '../lib/ImporterInfo'; import { ImporterWebsocket } from './classes/ImporterWebsocket'; import { Progress } from './classes/ImporterProgress'; -import { ProgressStep } from '../lib/ImporterProgressStep'; import { RawImports } from './models/RawImports'; import { Selection } from './classes/ImporterSelection'; import { SelectionChannel } from './classes/ImporterSelectionChannel'; import { SelectionUser } from './classes/ImporterSelectionUser'; +import { ProgressStep } from '../lib/ImporterProgressStep'; +import { ImporterInfo } from '../lib/ImporterInfo'; +import { Importers } from '../lib/Importers'; import './methods/getImportProgress'; import './methods/getSelectionData'; import './methods/prepareImport'; diff --git a/app/importer/server/methods/downloadPublicImportFile.js b/app/importer/server/methods/downloadPublicImportFile.js index 2b1c0defdd6d1d04becbbc589cb043f5d951d047..956e75acc7959fe06361062c0da14d9dba6a409a 100644 --- a/app/importer/server/methods/downloadPublicImportFile.js +++ b/app/importer/server/methods/downloadPublicImportFile.js @@ -1,10 +1,13 @@ +import http from 'http'; +import fs from 'fs'; + import { Meteor } from 'meteor/meteor'; + import { Importers } from '..'; + import { RocketChatImportFileInstance } from '../startup/store'; import { ProgressStep } from '../../lib/ImporterProgressStep'; import { hasRole } from '../../../authorization'; -import http from 'http'; -import fs from 'fs'; function downloadHttpFile(fileUrl, writeStream) { http.get(fileUrl, function(response) { diff --git a/app/importer/server/methods/getImportFileData.js b/app/importer/server/methods/getImportFileData.js index b51b3829cd2148ca3b382a1ade09fd5c7bdfe591..3dcfccd497bc73bc8d4612405948ec22fd1a6d75 100644 --- a/app/importer/server/methods/getImportFileData.js +++ b/app/importer/server/methods/getImportFileData.js @@ -1,10 +1,14 @@ -import { RocketChatImportFileInstance } from '../startup/store'; +import path from 'path'; +import fs from 'fs'; + import { Meteor } from 'meteor/meteor'; + +import { RocketChatImportFileInstance } from '../startup/store'; + import { Importers } from '..'; + import { hasRole } from '../../../authorization'; import { ProgressStep } from '../../lib/ImporterProgressStep'; -import path from 'path'; -import fs from 'fs'; Meteor.methods({ getImportFileData(importerKey) { @@ -38,9 +42,8 @@ Meteor.methods({ if (waitingSteps.indexOf(importer.instance.progress.step) >= 0) { if (importer.instance.importRecord && importer.instance.importRecord.valid) { return { waiting: true }; - } else { - throw new Meteor.Error('error-import-operation-invalid', 'Invalid Import Operation', { method: 'getImportFileData' }); } + throw new Meteor.Error('error-import-operation-invalid', 'Invalid Import Operation', { method: 'getImportFileData' }); } const readySteps = [ @@ -71,13 +74,11 @@ Meteor.methods({ console.error(e); throw new Meteor.Error(e); }); - - } else { - importer.instance.updateRecord({ - fileData: results, - }); - - return results; } + importer.instance.updateRecord({ + fileData: results, + }); + + return results; }, }); diff --git a/app/importer/server/methods/getImportProgress.js b/app/importer/server/methods/getImportProgress.js index 9eb52cdb9157c8d98307161c1994ed34cf90ebd5..4bde28d663ef00e85eca50a4861ef837668b7364 100644 --- a/app/importer/server/methods/getImportProgress.js +++ b/app/importer/server/methods/getImportProgress.js @@ -1,5 +1,7 @@ import { Meteor } from 'meteor/meteor'; + import { Importers } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/importer/server/methods/getLatestImportOperations.js b/app/importer/server/methods/getLatestImportOperations.js index 2d1a587dd70320eb8ba404679dce74fc54456da7..af710a67ecc1b56fc8092e915834cab3c54e535c 100644 --- a/app/importer/server/methods/getLatestImportOperations.js +++ b/app/importer/server/methods/getLatestImportOperations.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Imports } from '../models/Imports'; import { hasRole } from '../../../authorization'; diff --git a/app/importer/server/methods/getSelectionData.js b/app/importer/server/methods/getSelectionData.js index c17f5988aa082badaf165254fae30ed1a520aff2..782e0316a67c762fc62bc1411641c15f166b823d 100644 --- a/app/importer/server/methods/getSelectionData.js +++ b/app/importer/server/methods/getSelectionData.js @@ -1,8 +1,10 @@ import { Meteor } from 'meteor/meteor'; + import { Importers, ProgressStep, } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/importer/server/methods/prepareImport.js b/app/importer/server/methods/prepareImport.js index 4776e4276455b11e2972d431c6d758621b1c3689..1444d8af8c32de055b206efbceb80ff08a290a34 100644 --- a/app/importer/server/methods/prepareImport.js +++ b/app/importer/server/methods/prepareImport.js @@ -1,6 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Importers } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ @@ -27,8 +29,7 @@ Meteor.methods({ if (results instanceof Promise) { return results.catch((e) => { throw new Meteor.Error(e); }); - } else { - return results; } + return results; }, }); diff --git a/app/importer/server/methods/restartImport.js b/app/importer/server/methods/restartImport.js index 6d35bbf5f7e4d4128e8bf0d83a87655af507b0cd..94f486bf6d98fa4aad26a5ec74e939ffdae30f3e 100644 --- a/app/importer/server/methods/restartImport.js +++ b/app/importer/server/methods/restartImport.js @@ -1,8 +1,10 @@ import { Meteor } from 'meteor/meteor'; + import { Importers, ProgressStep, } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/importer/server/methods/setupImporter.js b/app/importer/server/methods/setupImporter.js index 1ea4baac8001bef9680e799d7dac01a77353c6bb..1d96538255426ed856ac502580a81ea240ae26b4 100644 --- a/app/importer/server/methods/setupImporter.js +++ b/app/importer/server/methods/setupImporter.js @@ -1,5 +1,7 @@ import { Meteor } from 'meteor/meteor'; + import { Importers } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/importer/server/methods/startImport.js b/app/importer/server/methods/startImport.js index 82b97ced3bf2d8e9c14158adb299e3420f2ac30c..19e13da783fcf23a3e5212edbfba24fe3f665e2e 100644 --- a/app/importer/server/methods/startImport.js +++ b/app/importer/server/methods/startImport.js @@ -1,10 +1,12 @@ import { Meteor } from 'meteor/meteor'; + import { Importers, Selection, SelectionChannel, SelectionUser, } from '..'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/importer/server/methods/uploadImportFile.js b/app/importer/server/methods/uploadImportFile.js index 4417acf2a5f067f56dc1090ef74af73de75c5a10..54f2e04ae8b115d84907f77ff4867a4dcb42fd4d 100644 --- a/app/importer/server/methods/uploadImportFile.js +++ b/app/importer/server/methods/uploadImportFile.js @@ -1,5 +1,7 @@ import { Meteor } from 'meteor/meteor'; + import { Importers } from '..'; + import { RocketChatFile } from '../../../file'; import { RocketChatImportFileInstance } from '../startup/store'; import { hasRole } from '../../../authorization'; diff --git a/app/importer/server/models/Imports.js b/app/importer/server/models/Imports.js index 585156e02ecb0351dfb8c4c66da930a3e5a5041c..1bba254a81cad1eacb144003dbdb0f6023bfec63 100644 --- a/app/importer/server/models/Imports.js +++ b/app/importer/server/models/Imports.js @@ -8,7 +8,7 @@ class ImportsModel extends Base { findPendingImport(key) { // Finds the latest import operation - const data = this.findOne({ importerKey: key }, { createdAt : -1 }); + const data = this.findOne({ importerKey: key }, { createdAt: -1 }); if (!data || !data.status) { return data; } diff --git a/app/importer/server/startup/setImportsToInvalid.js b/app/importer/server/startup/setImportsToInvalid.js index 4c03a8c816da90c32ac7146ed15607675f73afeb..2622f2eb6c06243c0f74deb6f6574e570e405c52 100644 --- a/app/importer/server/startup/setImportsToInvalid.js +++ b/app/importer/server/startup/setImportsToInvalid.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Imports } from '../models/Imports'; import { RawImports } from '../models/RawImports'; diff --git a/app/importer/server/startup/store.js b/app/importer/server/startup/store.js index faaba0b8aac6a13f0d21282660692686ce2e4027..70aa8f293dfe8cf84383e3bc934506051f155dd4 100644 --- a/app/importer/server/startup/store.js +++ b/app/importer/server/startup/store.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { RocketChatFile } from '../../../file'; import { settings } from '../../../settings'; diff --git a/app/integrations/client/route.js b/app/integrations/client/route.js index 8d70059e94dd70d6d22c95611f1bbc8145b2a364..944188db98cd4cad3a02860bef4f75bab77fb7a7 100644 --- a/app/integrations/client/route.js +++ b/app/integrations/client/route.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { t } from '../../utils'; FlowRouter.route('/admin/integrations', { diff --git a/app/integrations/client/views/integrations.js b/app/integrations/client/views/integrations.js index e394652c3a3d38637e0a22d7d26852eaeea9f53d..aaf73c2b183ed7cbd548e4f89ff022344c30d652 100644 --- a/app/integrations/client/views/integrations.js +++ b/app/integrations/client/views/integrations.js @@ -1,10 +1,11 @@ import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; +import moment from 'moment'; + import { hasAtLeastOnePermission } from '../../../authorization'; import { integrations } from '../../lib/rocketchat'; import { ChatIntegrations } from '../collections'; -import moment from 'moment'; import { SideNav } from '../../../ui-utils/client'; Template.integrations.helpers({ diff --git a/app/integrations/client/views/integrationsIncoming.js b/app/integrations/client/views/integrationsIncoming.js index 65cb3399a284400762d319167618521caf033de0..e419033ff408c25832e24e5c4a6f0066f9869878 100644 --- a/app/integrations/client/views/integrationsIncoming.js +++ b/app/integrations/client/views/integrationsIncoming.js @@ -4,16 +4,17 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; +import hljs from 'highlight.js'; +import toastr from 'toastr'; + +import { exampleMsg, exampleSettings, exampleUser } from './messageExample'; import { hasAtLeastOnePermission, hasAllPermission } from '../../../authorization'; import { modal, SideNav } from '../../../ui-utils/client'; import { t, handleError } from '../../../utils'; import { ChatIntegrations } from '../collections'; -import { exampleMsg, exampleSettings, exampleUser } from './messageExample'; -import hljs from 'highlight.js'; -import toastr from 'toastr'; Template.integrationsIncoming.onCreated(function _incomingIntegrationsOnCreated() { - return this.record = new ReactiveVar({ + this.record = new ReactiveVar({ username: 'rocket.cat', }); }); @@ -157,17 +158,16 @@ Template.integrationsIncoming.events({ Meteor.call('deleteIncomingIntegration', params.id, (err) => { if (err) { return handleError(err); - } else { - modal.open({ - title: t('Deleted'), - text: t('Your_entry_has_been_deleted'), - type: 'success', - timer: 1000, - showConfirmButton: false, - }); - - FlowRouter.go('admin-integrations'); } + modal.open({ + title: t('Deleted'), + text: t('Your_entry_has_been_deleted'), + type: 'success', + timer: 1000, + showConfirmButton: false, + }); + + FlowRouter.go('admin-integrations'); }); }); }, diff --git a/app/integrations/client/views/integrationsNew.js b/app/integrations/client/views/integrationsNew.js index 8198ccb6e30e4f35af7a67e055f80bde4669fa79..e5e6c54c528c2ee494a72296cafa281ab1f73be8 100644 --- a/app/integrations/client/views/integrationsNew.js +++ b/app/integrations/client/views/integrationsNew.js @@ -1,5 +1,6 @@ import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { hasAtLeastOnePermission } from '../../../authorization'; import { SideNav } from '../../../ui-utils/client'; diff --git a/app/integrations/client/views/integrationsOutgoing.js b/app/integrations/client/views/integrationsOutgoing.js index c649502303f431d9c7217732ffacabe2d71e0a67..ba136d3fbc3f407f94cdbeaaf96e0fd236c550a8 100644 --- a/app/integrations/client/views/integrationsOutgoing.js +++ b/app/integrations/client/views/integrationsOutgoing.js @@ -5,14 +5,15 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; +import hljs from 'highlight.js'; +import toastr from 'toastr'; + +import { exampleMsg, exampleSettings, exampleUser } from './messageExample'; import { hasAllPermission, hasAtLeastOnePermission } from '../../../authorization'; import { modal, SideNav } from '../../../ui-utils'; import { t, handleError } from '../../../utils/client'; import { ChatIntegrations } from '../collections'; import { integrations } from '../../lib/rocketchat'; -import hljs from 'highlight.js'; -import toastr from 'toastr'; -import { exampleMsg, exampleSettings, exampleUser } from './messageExample'; Template.integrationsOutgoing.onCreated(function _integrationsOutgoingOnCreated() { this.record = new ReactiveVar({ @@ -326,8 +327,8 @@ Template.integrationsOutgoing.events({ scriptEnabled: scriptEnabled === '1', impersonateUser: impersonateUser === '1', retryFailedCalls: retryFailedCalls === '1', - retryCount: retryCount ? retryCount : 6, - retryDelay: retryDelay ? retryDelay : 'powers-of-ten', + retryCount: retryCount || 6, + retryDelay: retryDelay || 'powers-of-ten', triggerWordAnywhere: triggerWordAnywhere === '1', runOnEdits: runOnEdits === '1', }; @@ -360,4 +361,3 @@ Template.integrationsOutgoing.onRendered(() => { SideNav.openFlex(); }); }); - diff --git a/app/integrations/client/views/integrationsOutgoingHistory.js b/app/integrations/client/views/integrationsOutgoingHistory.js index 96a36c88d99dc637a326fdf97cdb6620f08253d7..02252347c462767c00cbd07fefd79ea79099c5b8 100644 --- a/app/integrations/client/views/integrationsOutgoingHistory.js +++ b/app/integrations/client/views/integrationsOutgoingHistory.js @@ -4,14 +4,15 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; -import { handleError } from '../../../utils'; -import { hasAllPermission, hasAtLeastOnePermission } from '../../../authorization'; -import { ChatIntegrations, ChatIntegrationHistory } from '../collections'; -import { integrations } from '../../lib/rocketchat'; import _ from 'underscore'; import hljs from 'highlight.js'; import moment from 'moment'; import toastr from 'toastr'; + +import { handleError } from '../../../utils'; +import { hasAllPermission, hasAtLeastOnePermission } from '../../../authorization'; +import { ChatIntegrations, ChatIntegrationHistory } from '../collections'; +import { integrations } from '../../lib/rocketchat'; import { SideNav } from '../../../ui-utils/client'; Template.integrationsOutgoingHistory.onCreated(function _integrationsOutgoingHistoryOnCreated() { @@ -80,11 +81,10 @@ Template.integrationsOutgoingHistory.helpers({ iconClass(history) { if (typeof history.error !== 'undefined' && history.error) { return 'icon-cancel-circled error-color'; - } else if (history.finished) { + } if (history.finished) { return 'icon-ok-circled success-color'; - } else { - return 'icon-help-circled'; } + return 'icon-help-circled'; }, statusI18n(error) { @@ -106,11 +106,10 @@ Template.integrationsOutgoingHistory.helpers({ jsonStringify(data) { if (!data) { return ''; - } else if (typeof data === 'object') { + } if (typeof data === 'object') { return hljs.highlight('json', JSON.stringify(data, null, 2)).value; - } else { - return hljs.highlight('json', data).value; } + return hljs.highlight('json', data).value; }, integrationId() { @@ -140,7 +139,6 @@ Template.integrationsOutgoingHistory.events({ Meteor.call('replayOutgoingIntegration', { integrationId: t.data.params().id, historyId }, (e) => { if (e) { handleError(e); - return; } }); }, diff --git a/app/integrations/server/api/api.js b/app/integrations/server/api/api.js index 9360669bc441fe5116299d56a74dfa836403fa9c..4d87a4d679dbff19099352c19c8a673444babc56 100644 --- a/app/integrations/server/api/api.js +++ b/app/integrations/server/api/api.js @@ -1,19 +1,21 @@ +import vm from 'vm'; + import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; import { Random } from 'meteor/random'; -import * as Models from '../../../models'; import { Restivus } from 'meteor/nimble:restivus'; -import { API } from '../../../api'; import { Livechat } from 'meteor/rocketchat:livechat'; -import { processWebhookMessage } from '../../../lib'; -import { logger } from '../logger'; import Fiber from 'fibers'; import Future from 'fibers/future'; import _ from 'underscore'; import s from 'underscore.string'; -import vm from 'vm'; import moment from 'moment'; +import { logger } from '../logger'; +import { processWebhookMessage } from '../../../lib'; +import { API } from '../../../api'; +import * as Models from '../../../models'; + const Api = new Restivus({ enableCors: true, apiPath: 'hooks/', @@ -80,7 +82,8 @@ function buildSandbox(store = {}) { Livechat, Store: { set(key, val) { - return store[key] = val; + store[key] = val; + return val; }, get(key) { return store[key]; @@ -98,7 +101,7 @@ function buildSandbox(store = {}) { } }, }; - Object.keys(Models).filter((k) => !k.startsWith('_')).forEach((k) => sandbox[k] = Models[k]); + Object.keys(Models).filter((k) => !k.startsWith('_')).forEach((k) => { sandbox[k] = Models[k]; }); return { store, sandbox }; } @@ -264,7 +267,7 @@ function executeIntegrationRest() { if (!result) { logger.incoming.debug('[Process Incoming Request result of Trigger', this.integration.name, ':] No data'); return API.v1.success(); - } else if (result && result.error) { + } if (result && result.error) { return API.v1.failure(result.error); } @@ -327,7 +330,7 @@ function integrationSampleRest() { token: Random.id(24), channel_id: Random.id(), channel_name: 'general', - timestamp: new Date, + timestamp: new Date(), user_id: Random.id(), user_name: 'rocket.cat', text: 'Sample text 1', @@ -336,7 +339,7 @@ function integrationSampleRest() { token: Random.id(24), channel_id: Random.id(), channel_name: 'general', - timestamp: new Date, + timestamp: new Date(), user_id: Random.id(), user_name: 'rocket.cat', text: 'Sample text 2', @@ -345,7 +348,7 @@ function integrationSampleRest() { token: Random.id(24), channel_id: Random.id(), channel_name: 'general', - timestamp: new Date, + timestamp: new Date(), user_id: Random.id(), user_name: 'rocket.cat', text: 'Sample text 3', diff --git a/app/integrations/server/lib/triggerHandler.js b/app/integrations/server/lib/triggerHandler.js index ff3eb684177d933b2197d6409eb47873db66cf74..b8b28cdad1936252a81033a2df278eab0a2e65c5 100644 --- a/app/integrations/server/lib/triggerHandler.js +++ b/app/integrations/server/lib/triggerHandler.js @@ -1,18 +1,20 @@ +import vm from 'vm'; + import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { HTTP } from 'meteor/http'; -import * as Models from '../../../models'; -import { settings } from '../../../settings'; -import { getRoomByNameOrIdWithOptionToJoin, processWebhookMessage } from '../../../lib'; -import { logger } from '../logger'; -import { integrations } from '../../lib/rocketchat'; import _ from 'underscore'; import s from 'underscore.string'; import moment from 'moment'; -import vm from 'vm'; import Fiber from 'fibers'; import Future from 'fibers/future'; +import * as Models from '../../../models'; +import { settings } from '../../../settings'; +import { getRoomByNameOrIdWithOptionToJoin, processWebhookMessage } from '../../../lib'; +import { logger } from '../logger'; +import { integrations } from '../../lib/rocketchat'; + integrations.triggerHandler = new class RocketChatIntegrationHandler { constructor() { this.vm = vm; @@ -155,10 +157,9 @@ integrations.triggerHandler = new class RocketChatIntegrationHandler { if (historyId) { Models.IntegrationHistory.update({ _id: historyId }, { $set: history }); return historyId; - } else { - history._createdAt = new Date(); - return Models.IntegrationHistory.insert(Object.assign({ _id: Random.id() }, history)); } + history._createdAt = new Date(); + return Models.IntegrationHistory.insert(Object.assign({ _id: Random.id() }, history)); } // Trigger is the trigger, nameOrId is a string which is used to try and find a room, room is a room, message is a message, and data contains "user_name" if trigger.impersonateUser is truthful. @@ -220,7 +221,7 @@ integrations.triggerHandler = new class RocketChatIntegrationHandler { Fiber, Promise, Store: { - set: (key, val) => store[key] = val, + set: (key, val) => { store[key] = val; }, get: (key) => store[key], }, HTTP: (method, url, options) => { @@ -345,7 +346,6 @@ integrations.triggerHandler = new class RocketChatIntegrationHandler { logger.outgoing.debug(integration.scriptCompiled.replace(/^/gm, ' ')); // Only output the compiled script if debugging is enabled, so the logs don't get spammed. logger.outgoing.error('Stack:'); logger.outgoing.error(e.stack.replace(/^/gm, ' ')); - return; } } @@ -812,4 +812,4 @@ integrations.triggerHandler = new class RocketChatIntegrationHandler { this.executeTriggerUrl(history.url, integration, { event, message, room, owner, user }); } -}; +}(); diff --git a/app/integrations/server/lib/validation.js b/app/integrations/server/lib/validation.js index 4a0380366ef4cdf860831f2ee55ef376e83ae9b9..0cfcc38ef52a6860050e3c587a0cf834dd61e80c 100644 --- a/app/integrations/server/lib/validation.js +++ b/app/integrations/server/lib/validation.js @@ -1,11 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Babel } from 'meteor/babel-compiler'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { Rooms, Users, Subscriptions } from '../../../models'; import { hasPermission, hasAllPermission } from '../../../authorization'; import { integrations } from '../../lib/rocketchat'; -import _ from 'underscore'; -import s from 'underscore.string'; + const scopedChannels = ['all_public_channels', 'all_private_groups', 'all_direct_messages']; const validChannelChars = ['@', '#']; diff --git a/app/integrations/server/methods/clearIntegrationHistory.js b/app/integrations/server/methods/clearIntegrationHistory.js index 7e7e2a16e974f3f0d781081c6e9457eaad461f1d..98604cf7aec3e5d9172221c07cbb1170888999da 100644 --- a/app/integrations/server/methods/clearIntegrationHistory.js +++ b/app/integrations/server/methods/clearIntegrationHistory.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { IntegrationHistory, Integrations } from '../../../models'; diff --git a/app/integrations/server/methods/incoming/addIncomingIntegration.js b/app/integrations/server/methods/incoming/addIncomingIntegration.js index 92526bcdbacff20dea7343255ac97a45ddf30395..f6b72b9801aa096a481fc51edbed6dcf438603a7 100644 --- a/app/integrations/server/methods/incoming/addIncomingIntegration.js +++ b/app/integrations/server/methods/incoming/addIncomingIntegration.js @@ -1,10 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Babel } from 'meteor/babel-compiler'; -import { hasPermission, hasAllPermission } from '../../../../authorization'; -import { Users, Rooms, Integrations, Roles, Subscriptions } from '../../../../models'; import _ from 'underscore'; import s from 'underscore.string'; + +import { hasPermission, hasAllPermission } from '../../../../authorization'; +import { Users, Rooms, Integrations, Roles, Subscriptions } from '../../../../models'; + const validChannelChars = ['@', '#']; Meteor.methods({ diff --git a/app/integrations/server/methods/incoming/deleteIncomingIntegration.js b/app/integrations/server/methods/incoming/deleteIncomingIntegration.js index f6f8618459a12144a10d3ba54bca8dac94c17a18..b4f4fa104dc24fd7978fbe20684e8e833768b9ab 100644 --- a/app/integrations/server/methods/incoming/deleteIncomingIntegration.js +++ b/app/integrations/server/methods/incoming/deleteIncomingIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { Integrations } from '../../../../models'; @@ -9,7 +10,7 @@ Meteor.methods({ if (hasPermission(this.userId, 'manage-integrations')) { integration = Integrations.findOne(integrationId); } else if (hasPermission(this.userId, 'manage-own-integrations')) { - integration = Integrations.findOne(integrationId, { fields : { '_createdBy._id': this.userId } }); + integration = Integrations.findOne(integrationId, { fields: { '_createdBy._id': this.userId } }); } else { throw new Meteor.Error('not_authorized', 'Unauthorized', { method: 'deleteIncomingIntegration' }); } diff --git a/app/integrations/server/methods/incoming/updateIncomingIntegration.js b/app/integrations/server/methods/incoming/updateIncomingIntegration.js index bb85c49c2bc3a90a4461c2caadab878eef330a81..46af5d49fc1782e938a8d047d102365a1fd2c409 100644 --- a/app/integrations/server/methods/incoming/updateIncomingIntegration.js +++ b/app/integrations/server/methods/incoming/updateIncomingIntegration.js @@ -1,9 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { hasAllPermission, hasPermission } from '../../../../authorization'; -import { Integrations, Rooms, Users, Roles, Subscriptions } from '../../../../models'; import { Babel } from 'meteor/babel-compiler'; import _ from 'underscore'; import s from 'underscore.string'; + +import { Integrations, Rooms, Users, Roles, Subscriptions } from '../../../../models'; +import { hasAllPermission, hasPermission } from '../../../../authorization'; + const validChannelChars = ['@', '#']; Meteor.methods({ diff --git a/app/integrations/server/methods/outgoing/addOutgoingIntegration.js b/app/integrations/server/methods/outgoing/addOutgoingIntegration.js index d7294f553503e136115cae3f8d761b21384e4897..adfe1c8b0f9ca1bde7066df9b8d9339aa042ba0a 100644 --- a/app/integrations/server/methods/outgoing/addOutgoingIntegration.js +++ b/app/integrations/server/methods/outgoing/addOutgoingIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { Users, Integrations } from '../../../../models'; import { integrations } from '../../../lib/rocketchat'; diff --git a/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.js b/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.js index 098cea0811333dfbe6420b2eb4ed7bec696d3a67..7853d8830fae98df26f50cc4a7e908bd5cec3531 100644 --- a/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.js +++ b/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { IntegrationHistory, Integrations } from '../../../../models'; diff --git a/app/integrations/server/methods/outgoing/replayOutgoingIntegration.js b/app/integrations/server/methods/outgoing/replayOutgoingIntegration.js index 8efd460e97705523fbcf975f20f9bbb530abcd51..aea7cafcf80e12cf35a9756f2eff56112f2ae924 100644 --- a/app/integrations/server/methods/outgoing/replayOutgoingIntegration.js +++ b/app/integrations/server/methods/outgoing/replayOutgoingIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { Integrations, IntegrationHistory } from '../../../../models'; import { integrations } from '../../../lib/rocketchat'; diff --git a/app/integrations/server/methods/outgoing/updateOutgoingIntegration.js b/app/integrations/server/methods/outgoing/updateOutgoingIntegration.js index bf63ff7debe575e1069b910a788a617f72a575f5..1695ed5a7f3a2f9fe7b4b6b520ee6a6417639bdf 100644 --- a/app/integrations/server/methods/outgoing/updateOutgoingIntegration.js +++ b/app/integrations/server/methods/outgoing/updateOutgoingIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { Integrations, Users } from '../../../../models'; import { integrations } from '../../../lib/rocketchat'; diff --git a/app/integrations/server/publications/integrationHistory.js b/app/integrations/server/publications/integrationHistory.js index 1c9cca70669e8b3f0ba6ee0305ea0b1583cbe743..32114c5e9191b87522c4b7044cca74c76aef06e9 100644 --- a/app/integrations/server/publications/integrationHistory.js +++ b/app/integrations/server/publications/integrationHistory.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { IntegrationHistory } from '../../../models'; @@ -9,9 +10,8 @@ Meteor.publish('integrationHistory', function _integrationHistoryPublication(int if (hasPermission(this.userId, 'manage-integrations')) { return IntegrationHistory.findByIntegrationId(integrationId, { sort: { _updatedAt: -1 }, limit }); - } else if (hasPermission(this.userId, 'manage-own-integrations')) { + } if (hasPermission(this.userId, 'manage-own-integrations')) { return IntegrationHistory.findByIntegrationIdAndCreatedBy(integrationId, this.userId, { sort: { _updatedAt: -1 }, limit }); - } else { - throw new Meteor.Error('not-authorized'); } + throw new Meteor.Error('not-authorized'); }); diff --git a/app/integrations/server/publications/integrations.js b/app/integrations/server/publications/integrations.js index 1ea723978b0a4c23280fc576ece61b6055ef0689..4bd51562636a5b9577f2120adc07ba2b1e53ed4f 100644 --- a/app/integrations/server/publications/integrations.js +++ b/app/integrations/server/publications/integrations.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Integrations } from '../../../models'; @@ -9,9 +10,8 @@ Meteor.publish('integrations', function _integrationPublication() { if (hasPermission(this.userId, 'manage-integrations')) { return Integrations.find(); - } else if (hasPermission(this.userId, 'manage-own-integrations')) { + } if (hasPermission(this.userId, 'manage-own-integrations')) { return Integrations.find({ '_createdBy._id': this.userId }); - } else { - throw new Meteor.Error('not-authorized'); } + throw new Meteor.Error('not-authorized'); }); diff --git a/app/irc/server/irc-bridge/index.js b/app/irc/server/irc-bridge/index.js index 255d9946b70d9ae56897ab5a30dc7dba59bea34a..fe8fd7b770cfe7cbac244da8dd5928aaa1e3d526 100644 --- a/app/irc/server/irc-bridge/index.js +++ b/app/irc/server/irc-bridge/index.js @@ -1,8 +1,9 @@ -import { callbacks } from '../../../callbacks'; import Queue from 'queue-fifo'; -import * as servers from '../servers'; + import * as peerCommandHandlers from './peerHandlers'; import * as localCommandHandlers from './localHandlers'; +import { callbacks } from '../../../callbacks'; +import * as servers from '../servers'; class Bridge { constructor(config) { diff --git a/app/irc/server/irc-bridge/localHandlers/onCreateUser.js b/app/irc/server/irc-bridge/localHandlers/onCreateUser.js index 1549a703c9a00958775a432191ca73055a9c0bcf..7ca9450ffa604098ac5b32f8fd2e9d6fcc348625 100644 --- a/app/irc/server/irc-bridge/localHandlers/onCreateUser.js +++ b/app/irc/server/irc-bridge/localHandlers/onCreateUser.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Rooms } from '../../../../models'; export default function handleOnCreateUser(newUser) { diff --git a/app/irc/server/irc-bridge/localHandlers/onLogin.js b/app/irc/server/irc-bridge/localHandlers/onLogin.js index 30af7c62d7eef69419ce11f3e97eec9f26c5384b..972d587084f8f72f9e7d04f41310a43417f6de15 100644 --- a/app/irc/server/irc-bridge/localHandlers/onLogin.js +++ b/app/irc/server/irc-bridge/localHandlers/onLogin.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Rooms } from '../../../../models'; export default function handleOnLogin(login) { diff --git a/app/irc/server/irc-bridge/peerHandlers/disconnected.js b/app/irc/server/irc-bridge/peerHandlers/disconnected.js index 0a30933857c7cb7975ffbea3faf921ec882194de..f4e2efe6d6b0cc199942bf4bc2d8fd919c47aab4 100644 --- a/app/irc/server/irc-bridge/peerHandlers/disconnected.js +++ b/app/irc/server/irc-bridge/peerHandlers/disconnected.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Rooms } from '../../../../models'; export default function handleQUIT(args) { diff --git a/app/irc/server/irc-bridge/peerHandlers/userRegistered.js b/app/irc/server/irc-bridge/peerHandlers/userRegistered.js index 739f822e7dae24c56ad2684060cbeb2c650ef0f0..44363d14342ae863164126e2a7f37c458d65d691 100644 --- a/app/irc/server/irc-bridge/peerHandlers/userRegistered.js +++ b/app/irc/server/irc-bridge/peerHandlers/userRegistered.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../../models'; export default async function handleUserRegistered(args) { diff --git a/app/irc/server/irc-settings.js b/app/irc/server/irc-settings.js index f82b2df20287aeac5a08a102842aaab1028847ec..9ad6ad0ca5fb00fa956100ef10118d6593b346dd 100644 --- a/app/irc/server/irc-settings.js +++ b/app/irc/server/irc-settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/irc/server/irc.js b/app/irc/server/irc.js index 92f2bbed8357d85187f055f2f1b4446ad7f9aec2..dd6c4449ab01ebea693570f8de2aff6245cb3b23 100644 --- a/app/irc/server/irc.js +++ b/app/irc/server/irc.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; + import Bridge from './irc-bridge'; +import { settings } from '../../settings'; if (!!settings.get('IRC_Enabled') === true) { // Normalize the config values diff --git a/app/irc/server/methods/resetIrcConnection.js b/app/irc/server/methods/resetIrcConnection.js index 0abb366e0f66f5cdae16e8a83ca4cee55d3d6566..f29076a347b070f1152cea4c9da0331abcb2b8cf 100644 --- a/app/irc/server/methods/resetIrcConnection.js +++ b/app/irc/server/methods/resetIrcConnection.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { t } from '../../../utils'; import Bridge from '../irc-bridge'; Meteor.methods({ resetIrcConnection() { - const ircEnabled = (!!settings.get('IRC_Enabled')) === true; + const ircEnabled = !!settings.get('IRC_Enabled') === true; if (Meteor.ircBridge) { Meteor.ircBridge.stop(); diff --git a/app/irc/server/servers/RFC2813/index.js b/app/irc/server/servers/RFC2813/index.js index 981b74ffd8ed37010e8ee09e50616a83e676708e..3b8a2f63cd664cd97fdeeb400a89da7361a6d750 100644 --- a/app/irc/server/servers/RFC2813/index.js +++ b/app/irc/server/servers/RFC2813/index.js @@ -3,7 +3,6 @@ import util from 'util'; import { EventEmitter } from 'events'; import parseMessage from './parseMessage'; - import peerCommandHandlers from './peerCommandHandlers'; import localCommandHandlers from './localCommandHandlers'; @@ -20,7 +19,6 @@ class RFC2813 { // Hold the buffer while receiving this.receiveBuffer = new Buffer(''); - } /** @@ -90,7 +88,8 @@ class RFC2813 { }); this.write({ - command: 'SERVER', parameters: [this.config.server.name], + command: 'SERVER', + parameters: [this.config.server.name], trailer: this.config.server.description, }); } @@ -123,7 +122,7 @@ class RFC2813 { * */ onReceiveFromPeer(chunk) { - if (typeof (chunk) === 'string') { + if (typeof chunk === 'string') { this.receiveBuffer += chunk; } else { this.receiveBuffer = Buffer.concat([this.receiveBuffer, chunk]); @@ -171,7 +170,6 @@ class RFC2813 { this.log(`Handling local command: ${ command }`); localCommandHandlers[command].call(this, parameters); - } else { this.log(`Unhandled local command: ${ JSON.stringify(command) }`); } diff --git a/app/irc/server/servers/RFC2813/localCommandHandlers.js b/app/irc/server/servers/RFC2813/localCommandHandlers.js index ba6a9ec9bcf960223ff79a66e50212d9efa70070..ddbb450b14c50858c42959f8d103bd3d65974356 100644 --- a/app/irc/server/servers/RFC2813/localCommandHandlers.js +++ b/app/irc/server/servers/RFC2813/localCommandHandlers.js @@ -3,7 +3,8 @@ function registerUser(parameters) { this.write({ prefix: this.config.server.name, - command: 'NICK', parameters: [nick, 1, username, 'irc.rocket.chat', 1, '+i'], + command: 'NICK', + parameters: [nick, 1, username, 'irc.rocket.chat', 1, '+i'], trailer: name, }); } @@ -16,7 +17,8 @@ function joinChannel(parameters) { this.write({ prefix: this.config.server.name, - command: 'NJOIN', parameters: [`#${ roomName }`], + command: 'NJOIN', + parameters: [`#${ roomName }`], trailer: nick, }); } @@ -29,7 +31,8 @@ function joinedChannel(parameters) { this.write({ prefix: nick, - command: 'JOIN', parameters: [`#${ roomName }`], + command: 'JOIN', + parameters: [`#${ roomName }`], }); } @@ -41,7 +44,8 @@ function leftChannel(parameters) { this.write({ prefix: nick, - command: 'PART', parameters: [`#${ roomName }`], + command: 'PART', + parameters: [`#${ roomName }`], }); } @@ -54,7 +58,8 @@ function sentMessage(parameters) { this.write({ prefix: nick, - command: 'PRIVMSG', parameters: [to], + command: 'PRIVMSG', + parameters: [to], trailer: message, }); } diff --git a/app/irc/server/servers/RFC2813/parseMessage.js b/app/irc/server/servers/RFC2813/parseMessage.js index 4199e66972afe739178c17eac03d6ee334ec534b..15e7a616b87fc5b7170314adfcedecc984659b91 100644 --- a/app/irc/server/servers/RFC2813/parseMessage.js +++ b/app/irc/server/servers/RFC2813/parseMessage.js @@ -61,7 +61,7 @@ module.exports = function parseMessage(line) { message.args = middle.split(/ +/); } - if (typeof (trailing) !== 'undefined' && trailing.length) { + if (typeof trailing !== 'undefined' && trailing.length) { message.args.push(trailing); } diff --git a/app/issuelinks/client/client.js b/app/issuelinks/client/client.js index bf10fa9be64a50cacf736ced6fbd0fb6793cf264..f9fe1bc9d537400b54a8b1bc1249b9a51fa95651 100644 --- a/app/issuelinks/client/client.js +++ b/app/issuelinks/client/client.js @@ -1,6 +1,7 @@ +import s from 'underscore.string'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; -import s from 'underscore.string'; // // IssueLink is a named function that will add issue links diff --git a/app/katex/lib/katex.js b/app/katex/lib/katex.js index 4083fe92f3878f0906711fece3794fc9704e58a5..3a6f9a26ab6db3ddb1ae3e061e672e7ae79cc0db 100644 --- a/app/katex/lib/katex.js +++ b/app/katex/lib/katex.js @@ -1,13 +1,12 @@ import { Random } from 'meteor/random'; -import { settings } from '../../settings'; -import { callbacks } from '../../callbacks'; import _ from 'underscore'; import s from 'underscore.string'; import katex from 'katex'; -class Boundary { - constructor() {} +import { callbacks } from '../../callbacks'; +import { settings } from '../../settings'; +class Boundary { length() { return this.end - this.start; } @@ -72,8 +71,8 @@ class Katex { return null; } - const inner = new Boundary; - const outer = new Boundary; + const inner = new Boundary(); + const outer = new Boundary(); inner.start = pos + closer.length; inner.end = inner.start + closerIndex; @@ -128,8 +127,8 @@ class Katex { }, }); } catch ({ message }) { - return `<div class="katex-error katex-${ displayMode ? 'block' : 'inline' }-error">` + - `${ s.escapeHTML(message) }</div>`; + return `<div class="katex-error katex-${ displayMode ? 'block' : 'inline' }-error">` + + `${ s.escapeHTML(message) }</div>`; } } @@ -148,7 +147,8 @@ class Katex { // Set what comes after the latex block to be examined next str = parts.after; } - return result += str; + result += str; + return result; } renderMessage = (message) => { @@ -187,7 +187,7 @@ class Katex { isParenthesisSyntaxEnabled = () => settings.get('Katex_Parenthesis_Syntax') } -const instance = new Katex; +const instance = new Katex(); callbacks.add('renderMessage', instance.renderMessage, callbacks.priority.HIGH - 1, 'katex'); diff --git a/app/katex/server/index.js b/app/katex/server/index.js index ee368f15c035ca2238d37c0ee14043a337256914..abd6cf881ecab04f98f62d9814b3aebdc5e5b71e 100644 --- a/app/katex/server/index.js +++ b/app/katex/server/index.js @@ -1,2 +1,3 @@ import './settings'; + export { Katex } from '../lib/katex'; diff --git a/app/katex/server/settings.js b/app/katex/server/settings.js index 9700ced5578e6a8a3a42ecef7dd58d77ff419f0a..43f1fbbd0b1a469da36429077efe50978e3785fd 100644 --- a/app/katex/server/settings.js +++ b/app/katex/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/lazy-load/client/index.js b/app/lazy-load/client/index.js index 81e10d757503b9203e3fc0531ab781ffccf8b618..463e58cc16f6388ac6e897e36251361078fc9d31 100644 --- a/app/lazy-load/client/index.js +++ b/app/lazy-load/client/index.js @@ -27,7 +27,6 @@ const isVisible = (el, instance) => { return loadImage(el, instance); } }); - }; window.addEventListener('resize', window.lazyloadtick); diff --git a/app/lazy-load/client/lazyloadImage.js b/app/lazy-load/client/lazyloadImage.js index 605ed4a5782651a2fc363ff1bc5ad2aade8eb337..c711f73ebb9d97bf7faa0f771d77fc156adee9c0 100644 --- a/app/lazy-load/client/lazyloadImage.js +++ b/app/lazy-load/client/lazyloadImage.js @@ -1,10 +1,10 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import './lazyloadImage.html'; import { addImage } from '.'; -const emptyImageEncoded = - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8+/u3PQAJJAM0dIyWdgAAAABJRU5ErkJggg=='; +const emptyImageEncoded = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8+/u3PQAJJAM0dIyWdgAAAABJRU5ErkJggg=='; const imgsrcs = new Set(); diff --git a/app/ldap/server/ldap.js b/app/ldap/server/ldap.js index 0af7687477b76262b210b60e4e1e5cfbdaced0a7..c18370b09ce1feb970166e560a0823f2dee48851 100644 --- a/app/ldap/server/ldap.js +++ b/app/ldap/server/ldap.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; -import { Logger } from '../../logger'; import ldapjs from 'ldapjs'; import Bunyan from 'bunyan'; +import { settings } from '../../settings'; +import { Logger } from '../../logger'; + const logger = new Logger('LDAP', { sections: { connection: 'Connection', @@ -379,11 +380,12 @@ export default class LDAP { logger.search.info(title); // Force LDAP idle to wait the record processing this.client._updateIdle(true); - page(null, entries, { end, next: () => { + page(null, entries, { end, + next: () => { // Reset idle timer - this.client._updateIdle(); - next && next(); - } }); + this.client._updateIdle(); + next && next(); + } }); }; this.client.search(BaseDN, options, (error, res) => { @@ -396,7 +398,6 @@ export default class LDAP { res.on('error', (error) => { logger.search.error(error); page(error); - return; }); let entries = []; @@ -462,7 +463,6 @@ export default class LDAP { res.on('error', (error) => { logger.search.error(error); callback(error); - return; }); const entries = []; diff --git a/app/ldap/server/loginHandler.js b/app/ldap/server/loginHandler.js index ed513493271958e7a722739b346eeb3ba36567c1..6fab601454175865e6ee0a6f36ef17d8d1643c88 100644 --- a/app/ldap/server/loginHandler.js +++ b/app/ldap/server/loginHandler.js @@ -1,13 +1,14 @@ import { SHA256 } from 'meteor/sha'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import ldapEscape from 'ldap-escape'; + +import { slug, getLdapUsername, getLdapUserUniqueID, syncUserData, addLdapUser } from './sync'; +import LDAP from './ldap'; import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { Logger } from '../../logger'; -import { slug, getLdapUsername, getLdapUserUniqueID, syncUserData, addLdapUser } from './sync'; -import LDAP from './ldap'; -import ldapEscape from 'ldap-escape'; const logger = new Logger('LDAPHandler', {}); diff --git a/app/ldap/server/sync.js b/app/ldap/server/sync.js index 3b94bd9a43bc5c87d18b28f680646a19cb4331d1..550c079a697f401cf2c9832d9d7c8b2058bb1957 100644 --- a/app/ldap/server/sync.js +++ b/app/ldap/server/sync.js @@ -1,6 +1,10 @@ import limax from 'limax'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import { SyncedCron } from 'meteor/littledata:synced-cron'; +import _ from 'underscore'; + +import LDAP from './ldap'; import { RocketChatFile } from '../../file'; import { settings } from '../../settings'; import { Notifications } from '../../notifications'; @@ -8,10 +12,7 @@ import { Users } from '../../models'; import { Logger } from '../../logger'; import { _setRealName, _setUsername } from '../../lib'; import { templateVarHandler } from '../../utils'; -import { SyncedCron } from 'meteor/littledata:synced-cron'; import { FileUpload } from '../../file-upload'; -import _ from 'underscore'; -import LDAP from './ldap'; const logger = new Logger('LDAPSync', {}); @@ -139,11 +140,14 @@ export function getDataToSyncUserData(ldapUser, user) { // TODO: Find a better solution. const dKeys = userField.split('.'); const lastKey = _.last(dKeys); - _.reduce(dKeys, (obj, currKey) => ( - (currKey === lastKey) - ? obj[currKey] = tmpLdapField - : obj[currKey] = obj[currKey] || {} - ), userData); + _.reduce(dKeys, (obj, currKey) => { + if (currKey === lastKey) { + obj[currKey] = tmpLdapField; + } else { + obj[currKey] = obj[currKey]; + } + return obj[currKey]; + }, userData); logger.debug(`user.${ userField } changed to: ${ tmpLdapField }`); } } diff --git a/app/ldap/server/syncUsers.js b/app/ldap/server/syncUsers.js index ddfcae4d866c451a37011740f8b854c3ae4b5506..8713c8973e5c903c7a3dc50593f5e35a6ea2f98c 100644 --- a/app/ldap/server/syncUsers.js +++ b/app/ldap/server/syncUsers.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; + +import { importNewUsers } from './sync'; import { hasRole } from '../../authorization'; import { settings } from '../../settings'; -import { importNewUsers } from './sync'; Meteor.methods({ ldap_sync_now() { diff --git a/app/ldap/server/testConnection.js b/app/ldap/server/testConnection.js index 5c5c30c763a67d1cc24da34d63cf16ef3264cc24..1511a944e238a755e3ef1860207ed87e15814096 100644 --- a/app/ldap/server/testConnection.js +++ b/app/ldap/server/testConnection.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; + +import LDAP from './ldap'; import { hasRole } from '../../authorization'; import { settings } from '../../settings'; -import LDAP from './ldap'; Meteor.methods({ ldap_test_connection() { diff --git a/app/lib/client/CustomTranslations.js b/app/lib/client/CustomTranslations.js index 6c052a25ab5f64e8b0f8d717954626bd22431a93..2530da32269e8e9173d3c86fec5d06ba058607fb 100644 --- a/app/lib/client/CustomTranslations.js +++ b/app/lib/client/CustomTranslations.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { TAPi18n } from 'meteor/tap:i18n'; -import { applyCustomTranslations } from '../../utils'; import { Tracker } from 'meteor/tracker'; +import { applyCustomTranslations } from '../../utils'; + Meteor.startup(function() { Tracker.autorun(function() { // Re apply translations if tap language was changed diff --git a/app/lib/client/OAuthProxy.js b/app/lib/client/OAuthProxy.js index d99608f037551db40441d24cb446ac32362d4721..544737c906c898c8c791a5ebec9904cb933f69b3 100644 --- a/app/lib/client/OAuthProxy.js +++ b/app/lib/client/OAuthProxy.js @@ -1,5 +1,6 @@ import _ from 'underscore'; import { OAuth } from 'meteor/oauth'; + import { settings } from '../../settings'; OAuth.launchLogin = _.wrap(OAuth.launchLogin, function(func, options) { diff --git a/app/lib/client/UserDeleted.js b/app/lib/client/UserDeleted.js index 3ba6d1c70aecc05e0a6e74aad12c6f205a56d5ee..c68ef53e5218d91852e140183b1d71178ca8d1a6 100644 --- a/app/lib/client/UserDeleted.js +++ b/app/lib/client/UserDeleted.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatMessage } from '../../models'; import { Notifications } from '../../notifications'; diff --git a/app/lib/client/defaultTabBars.js b/app/lib/client/defaultTabBars.js index d8071d009e2a2d050cf0897f5fef273413f84766..e2e157443ff02f3170ea71f320e9f5be12d3c8e7 100644 --- a/app/lib/client/defaultTabBars.js +++ b/app/lib/client/defaultTabBars.js @@ -1,4 +1,5 @@ import { Session } from 'meteor/session'; + import { TabBar } from '../../ui-utils'; import { Rooms } from '../../models'; import { hasAllPermission } from '../../authorization'; diff --git a/app/lib/client/index.js b/app/lib/client/index.js index b9a0bfa6f57eeff8af64d28268559551cacf6eb1..f67950d96caed1e0e7d0f9f59874710c63ee5147 100644 --- a/app/lib/client/index.js +++ b/app/lib/client/index.js @@ -11,4 +11,5 @@ import './methods/sendMessage'; import './views/customFieldsForm.html'; import './views/customFieldsForm'; import '../startup/defaultRoomTypes'; + export * from './lib'; diff --git a/app/lib/client/lib/LoginPresence.js b/app/lib/client/lib/LoginPresence.js index 60a6549e91406aa0c059bbfcc0d8d9631e0d7928..18ed539df838442f9145342fde90efd128c8a3d6 100644 --- a/app/lib/client/lib/LoginPresence.js +++ b/app/lib/client/lib/LoginPresence.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; export const LoginPresence = { diff --git a/app/lib/client/lib/RocketChatAnnouncement.js b/app/lib/client/lib/RocketChatAnnouncement.js index 53235d45d4f1386d442b1da579769417bbced006..16f6fc1e5c021f78b3e037b39b95f3693ea87c66 100644 --- a/app/lib/client/lib/RocketChatAnnouncement.js +++ b/app/lib/client/lib/RocketChatAnnouncement.js @@ -9,19 +9,24 @@ export class RocketChatAnnouncement { this.callback = new ReactiveVar(args.callback); this.style = new ReactiveVar(args.style); } + save() { const announcementObject = { message: this.message.get(), callback: this.callback.get(), style: this.style.get() }; Meteor.call('saveRoomSettings', this.room.get(), 'roomAnnouncement', announcementObject); } + getMessage() { return this.message.get(); } + getCallback() { return this.callback.get(); } + getStyle() { return this.callback.get(); } + getByRoom(rid) { const roomData = Session.get(`roomData${ rid }`); if (!roomData) { return null; } @@ -31,6 +36,7 @@ export class RocketChatAnnouncement { this.style.set(roomData.announcementDetails ? roomData.announcementDetails.style : null); return this; } + clear() { this.message.set(null); this.callback.set(null); diff --git a/app/lib/client/lib/formatDate.js b/app/lib/client/lib/formatDate.js index e1ae40d793578aef3eb17bedd983400a7666fa8c..19d211b996cb8b08f882be16a298b2333370ddf2 100644 --- a/app/lib/client/lib/formatDate.js +++ b/app/lib/client/lib/formatDate.js @@ -1,5 +1,4 @@ import moment from 'moment'; - import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; diff --git a/app/lib/client/lib/settings.js b/app/lib/client/lib/settings.js index 5ceef5efedc56f0c4d06b2a23da8385c156daa1c..62806990bd6adc1861e59dd02989703d5d185b14 100644 --- a/app/lib/client/lib/settings.js +++ b/app/lib/client/lib/settings.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { t } from '../../../utils'; import { modal } from '../../../ui-utils'; import { settings } from '../../../settings'; diff --git a/app/lib/client/lib/startup/commands.js b/app/lib/client/lib/startup/commands.js index 5fbcf3dbf2037d95d6d7d2af030613e2ced76643..0d9a7179ae9d5dbb9b44621f71ac901c27f703c0 100644 --- a/app/lib/client/lib/startup/commands.js +++ b/app/lib/client/lib/startup/commands.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { slashCommands, APIClient } from '../../../../utils'; // Track logins and when they login, get the commands diff --git a/app/lib/client/lib/userRoles.js b/app/lib/client/lib/userRoles.js index bd155ff88f3b9fb19314426f9da81c5c0a0e8d1e..c0414276b40822cf3f378c675d91208050ec49b6 100644 --- a/app/lib/client/lib/userRoles.js +++ b/app/lib/client/lib/userRoles.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { UserRoles, RoomRoles, ChatMessage } from '../../../models'; import { handleError } from '../../../utils'; import { Notifications } from '../../../notifications'; diff --git a/app/lib/client/methods/sendMessage.js b/app/lib/client/methods/sendMessage.js index 8d0cad763450532f990654b220b62531186c325a..4ba64c0059a7a394ea731fc5ba20f8665d3a6215 100644 --- a/app/lib/client/methods/sendMessage.js +++ b/app/lib/client/methods/sendMessage.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { TimeSync } from 'meteor/mizzao:timesync'; +import s from 'underscore.string'; + import { ChatMessage } from '../../../models'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { promises } from '../../../promises/client'; -import s from 'underscore.string'; Meteor.methods({ sendMessage(message) { diff --git a/app/lib/client/views/customFieldsForm.js b/app/lib/client/views/customFieldsForm.js index 103c6d73ccacb45965209c6e29c95c91785d2a46..1a7fbc2f733a673bbcbae5c945cfb7a6383a9238 100644 --- a/app/lib/client/views/customFieldsForm.js +++ b/app/lib/client/views/customFieldsForm.js @@ -1,6 +1,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; Template.customFieldsForm.helpers({ @@ -34,7 +35,7 @@ Template.customFieldsForm.helpers({ if (typeof formData[field.fieldName] !== 'undefined') { return formData[field.fieldName] === current; - } else if (typeof field.defaultValue !== 'undefined') { + } if (typeof field.defaultValue !== 'undefined') { return field.defaultValue === current; } }, diff --git a/app/lib/lib/MessageTypes.js b/app/lib/lib/MessageTypes.js index 9967b313e7e94c053ac13a7d8894ca9ace219db1..012d76f0360cfb0b55dff4277a62142035bbd292 100644 --- a/app/lib/lib/MessageTypes.js +++ b/app/lib/lib/MessageTypes.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { MessageTypes } from '../../ui-utils'; import { callbacks } from '../../callbacks'; diff --git a/app/lib/lib/roomTypes/conversation.js b/app/lib/lib/roomTypes/conversation.js index 3c35787677f73a339d0f01cbb37d5e1558b3fed5..7e1ca775bd1d5752fbc74ce894c7b669fbae6924 100644 --- a/app/lib/lib/roomTypes/conversation.js +++ b/app/lib/lib/roomTypes/conversation.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getUserPreference, RoomTypeConfig } from '../../../utils'; export class ConversationRoomType extends RoomTypeConfig { diff --git a/app/lib/lib/roomTypes/direct.js b/app/lib/lib/roomTypes/direct.js index 0e5cd8db8665f2f9dfb26d025861dca20dcc89a4..a8a000b7dfd8527f42828e660aa58e21f5c69555 100644 --- a/app/lib/lib/roomTypes/direct.js +++ b/app/lib/lib/roomTypes/direct.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { ChatRoom, Subscriptions } from '../../../models'; import { openRoom } from '../../../ui-utils'; import { getUserPreference, RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext } from '../../../utils'; @@ -52,13 +53,12 @@ export class DirectMessageRoomType extends RoomTypeConfig { } roomName(roomData) { - // this function can receive different types of data // if it doesn't have fname and name properties, should be a Room object // so, need to find the related subscription - const subscription = roomData && (roomData.fname || roomData.name) ? - roomData : - Subscriptions.findOne({ rid: roomData._id }); + const subscription = roomData && (roomData.fname || roomData.name) + ? roomData + : Subscriptions.findOne({ rid: roomData._id }); if (subscription === undefined) { return console.log('roomData', roomData); diff --git a/app/lib/lib/roomTypes/favorite.js b/app/lib/lib/roomTypes/favorite.js index 8eea9b564d407dcb1b7beca558b707a559292e6c..fc4e39a64e8b1e6d1fc0a24111e4d8724f0a13f0 100644 --- a/app/lib/lib/roomTypes/favorite.js +++ b/app/lib/lib/roomTypes/favorite.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { getUserPreference, RoomTypeConfig } from '../../../utils'; @@ -12,6 +13,7 @@ export class FavoriteRoomType extends RoomTypeConfig { label: 'Favorites', }); } + condition() { return settings.get('Favorite_Rooms') && getUserPreference(Meteor.userId(), 'sidebarShowFavorites'); } diff --git a/app/lib/lib/roomTypes/private.js b/app/lib/lib/roomTypes/private.js index 4dc389911df0d80ec73965b7fd27aa9cddc6c6a3..ee095a937f2a360017fe13b88de7d494aa2a4067 100644 --- a/app/lib/lib/roomTypes/private.js +++ b/app/lib/lib/roomTypes/private.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatRoom, ChatSubscription } from '../../../models'; import { openRoom } from '../../../ui-utils'; import { settings } from '../../../settings'; diff --git a/app/lib/lib/roomTypes/public.js b/app/lib/lib/roomTypes/public.js index 60216d9a19438ab33a3c424ec9b087197f020ee7..50813c912a795e9e1b7510147ef82124ef333c7e 100644 --- a/app/lib/lib/roomTypes/public.js +++ b/app/lib/lib/roomTypes/public.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { openRoom } from '../../../ui-utils'; import { ChatRoom, ChatSubscription } from '../../../models'; import { settings } from '../../../settings'; diff --git a/app/lib/lib/roomTypes/unread.js b/app/lib/lib/roomTypes/unread.js index f4a81450f3c1ef05d60618cd6b1855671213eecc..0422f8a466805e0bb76961d470030c943381660a 100644 --- a/app/lib/lib/roomTypes/unread.js +++ b/app/lib/lib/roomTypes/unread.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getUserPreference, RoomTypeConfig } from '../../../utils'; export class UnreadRoomType extends RoomTypeConfig { diff --git a/app/lib/lib/startup/settingsOnLoadSiteUrl.js b/app/lib/lib/startup/settingsOnLoadSiteUrl.js index d398b6fca5c10087fd52c38976fbfe231c78401f..2fb003f72df0573c9614b5bf56963a9d1bc94f05 100644 --- a/app/lib/lib/startup/settingsOnLoadSiteUrl.js +++ b/app/lib/lib/startup/settingsOnLoadSiteUrl.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { WebAppInternals } from 'meteor/webapp'; + import { settings } from '../../../settings'; export let hostname; diff --git a/app/lib/server/functions/addUserToDefaultChannels.js b/app/lib/server/functions/addUserToDefaultChannels.js index 7777744be5037f1720251f27bec13b1aed0c453a..c7a2a0b2c5b53b641450960886106076158537b1 100644 --- a/app/lib/server/functions/addUserToDefaultChannels.js +++ b/app/lib/server/functions/addUserToDefaultChannels.js @@ -6,7 +6,6 @@ export const addUserToDefaultChannels = function(user, silenced) { callbacks.run('beforeJoinDefaultChannels', user); const defaultRooms = Rooms.findByDefaultAndTypes(true, ['c', 'p'], { fields: { usernames: 0 } }).fetch(); defaultRooms.forEach((room) => { - // put user in default rooms const muted = room.ro && !hasPermission(user._id, 'post-readonly'); if (muted) { @@ -14,7 +13,6 @@ export const addUserToDefaultChannels = function(user, silenced) { } if (!Subscriptions.findOneByRoomIdAndUserId(room._id, user._id)) { - // Add a subscription to this user Subscriptions.createWithRoomAndUser(room, user, { ts: new Date(), diff --git a/app/lib/server/functions/addUserToRoom.js b/app/lib/server/functions/addUserToRoom.js index e108b2a72c250a76773298be830436da53680d12..09da986640cfeacaf38ce944926372078b895a0d 100644 --- a/app/lib/server/functions/addUserToRoom.js +++ b/app/lib/server/functions/addUserToRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms, Subscriptions, Messages } from '../../../models'; import { hasPermission } from '../../../authorization'; import { callbacks } from '../../../callbacks'; diff --git a/app/lib/server/functions/archiveRoom.js b/app/lib/server/functions/archiveRoom.js index c59702f796673700ec25739ab3147a18e0a5767e..cc63b650de7d89a6953b1633194391cbf413797c 100644 --- a/app/lib/server/functions/archiveRoom.js +++ b/app/lib/server/functions/archiveRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms, Subscriptions } from '../../../models'; import { callbacks } from '../../../callbacks'; diff --git a/app/lib/server/functions/attachMessage.js b/app/lib/server/functions/attachMessage.js index 8a8901d81ac647137d28bf42a4b1b9ce950d434a..4abffd1ebf33f0e6a1bbbd8315c4b8fce7e99eea 100644 --- a/app/lib/server/functions/attachMessage.js +++ b/app/lib/server/functions/attachMessage.js @@ -1,6 +1,7 @@ import { getUserAvatarURL } from '../../../utils/lib/getUserAvatarURL'; import { roomTypes } from '../../../utils'; + export const attachMessage = function(message, room) { const { msg, u: { username }, ts, attachments, _id } = message; return { diff --git a/app/lib/server/functions/checkEmailAvailability.js b/app/lib/server/functions/checkEmailAvailability.js index 8382962497cf975920404dcd626639d19bddd121..1c327dd95c90b623021b7b54e283bd1f02d3e738 100644 --- a/app/lib/server/functions/checkEmailAvailability.js +++ b/app/lib/server/functions/checkEmailAvailability.js @@ -2,5 +2,5 @@ import { Meteor } from 'meteor/meteor'; import s from 'underscore.string'; export const checkEmailAvailability = function(email) { - return !Meteor.users.findOne({ 'emails.address': { $regex : new RegExp(`^${ s.trim(s.escapeRegExp(email)) }$`, 'i') } }); + return !Meteor.users.findOne({ 'emails.address': { $regex: new RegExp(`^${ s.trim(s.escapeRegExp(email)) }$`, 'i') } }); }; diff --git a/app/lib/server/functions/checkUsernameAvailability.js b/app/lib/server/functions/checkUsernameAvailability.js index 5ab313b04604fa9fa9879559e6411912dfb5297b..e881786805aa6983aad886f094b8c436e31b8ebb 100644 --- a/app/lib/server/functions/checkUsernameAvailability.js +++ b/app/lib/server/functions/checkUsernameAvailability.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import s from 'underscore.string'; + import { settings } from '../../../settings'; let usernameBlackList = []; @@ -14,7 +15,6 @@ const usernameIsBlocked = (username, usernameBlackList) => usernameBlackList.len && usernameBlackList.some((restrictedUsername) => restrictedUsername.test(s.trim(s.escapeRegExp(username)))); export const checkUsernameAvailability = function(username) { - if (usernameIsBlocked(username, usernameBlackList)) { return false; } diff --git a/app/lib/server/functions/cleanRoomHistory.js b/app/lib/server/functions/cleanRoomHistory.js index 58d64a456d6155e41d23e878b7254b6cd8b3e29d..6aacf66444eb263b57550a2203a4cf8ba1ad3ee5 100644 --- a/app/lib/server/functions/cleanRoomHistory.js +++ b/app/lib/server/functions/cleanRoomHistory.js @@ -1,8 +1,9 @@ import { TAPi18n } from 'meteor/tap:i18n'; + +import { deleteRoom } from './deleteRoom'; import { FileUpload } from '../../../file-upload'; import { Messages, Rooms } from '../../../models'; import { Notifications } from '../../../notifications'; -import { deleteRoom } from './deleteRoom'; export const cleanRoomHistory = function({ rid, latest = new Date(), oldest = new Date('0001-01-01T00:00:00Z'), inclusive = true, limit = 0, excludePinned = true, ignoreDiscussion = true, filesOnly = false, fromUsers = [] }) { const gt = inclusive ? '$gte' : '$gt'; @@ -32,7 +33,7 @@ export const cleanRoomHistory = function({ rid, latest = new Date(), oldest = ne } if (!ignoreDiscussion) { - Messages.findDiscussionByRoomIdPinnedTimestampAndUsers(rid, excludePinned, ts, fromUsers, { fields: { drid: 1 }, ...(limit && { limit }) }).fetch() + Messages.findDiscussionByRoomIdPinnedTimestampAndUsers(rid, excludePinned, ts, fromUsers, { fields: { drid: 1 }, ...limit && { limit } }).fetch() .forEach(({ drid }) => deleteRoom(drid)); } diff --git a/app/lib/server/functions/createRoom.js b/app/lib/server/functions/createRoom.js index 79c4671a559c9bb060ead11d3da3f149b6a318de..445bc7f913c106b5b212e2377db82b2d5fe7d944 100644 --- a/app/lib/server/functions/createRoom.js +++ b/app/lib/server/functions/createRoom.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { Users, Rooms, Subscriptions } from '../../../models'; import { callbacks } from '../../../callbacks'; import { hasPermission, addUserRoles } from '../../../authorization'; import { getValidRoomName } from '../../../utils'; import { Apps } from '../../../apps/server'; -import _ from 'underscore'; -import s from 'underscore.string'; function createDirectRoom(source, target, extraData, options) { const rid = [source._id, target._id].sort().join(''); diff --git a/app/lib/server/functions/deleteMessage.js b/app/lib/server/functions/deleteMessage.js index c2e3c34958cd75f9ca9feb52a226886571be27cf..e74ff6d7d1bbf06d9f78a7088d6af2ca1beb0294 100644 --- a/app/lib/server/functions/deleteMessage.js +++ b/app/lib/server/functions/deleteMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { FileUpload } from '../../../file-upload'; import { settings } from '../../../settings'; import { Messages, Uploads, Rooms } from '../../../models'; diff --git a/app/lib/server/functions/deleteRoom.js b/app/lib/server/functions/deleteRoom.js index e33c6ef3a2e71a0ebcc5ff860ea307879e5c10d0..8d113906d8b8da04882661a529b4d99bd5144647 100644 --- a/app/lib/server/functions/deleteRoom.js +++ b/app/lib/server/functions/deleteRoom.js @@ -1,5 +1,6 @@ import { Messages, Subscriptions, Rooms } from '../../../models'; import { callbacks } from '../../../callbacks'; + export const deleteRoom = function(rid) { Messages.removeFilesByRoomId(rid); Messages.removeByRoomId(rid); diff --git a/app/lib/server/functions/deleteUser.js b/app/lib/server/functions/deleteUser.js index 94c629e5f170e89e9d64f8f0e6beac0cb871b4e6..537732d1617fa44d7184b11a980d00db4cd96fe3 100644 --- a/app/lib/server/functions/deleteUser.js +++ b/app/lib/server/functions/deleteUser.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; + import { FileUpload } from '../../../file-upload'; import { Users, Subscriptions, Messages, Rooms, Integrations, FederationPeers } from '../../../models'; import { hasRole, getUsersInRole } from '../../../authorization'; diff --git a/app/lib/server/functions/getAvatarSuggestionForUser.js b/app/lib/server/functions/getAvatarSuggestionForUser.js index 687e5c5f79a769219653eb1ed9cce6e85278ff1f..2960145bfb9dbb9653f26d7fe404fa43cca205b0 100644 --- a/app/lib/server/functions/getAvatarSuggestionForUser.js +++ b/app/lib/server/functions/getAvatarSuggestionForUser.js @@ -2,6 +2,7 @@ import { check } from 'meteor/check'; import { HTTP } from 'meteor/http'; import { Gravatar } from 'meteor/jparker:gravatar'; import { ServiceConfiguration } from 'meteor/service-configuration'; + import { settings } from '../../../settings'; export function getAvatarSuggestionForUser(user) { diff --git a/app/lib/server/functions/getFullUserData.js b/app/lib/server/functions/getFullUserData.js index 14538b57eb4184c43ecf0b1c2546f772f4af766a..41e476aace4489611506f4c2ea3595f7ecb678b4 100644 --- a/app/lib/server/functions/getFullUserData.js +++ b/app/lib/server/functions/getFullUserData.js @@ -1,4 +1,5 @@ import s from 'underscore.string'; + import { Logger } from '../../../logger'; import { settings } from '../../../settings'; import { Users } from '../../../models'; diff --git a/app/lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js b/app/lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js index bae1f1cb3cf6ff39bd46819ea5333cdcafdda205..7306b487424b9bed1b822f1345845fb6a382d58e 100644 --- a/app/lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js +++ b/app/lib/server/functions/getRoomByNameOrIdWithOptionToJoin.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Users, Subscriptions } from '../../../models'; import _ from 'underscore'; +import { Rooms, Users, Subscriptions } from '../../../models'; + export const getRoomByNameOrIdWithOptionToJoin = function _getRoomByNameOrIdWithOptionToJoin({ currentUserId, nameOrId, type = '', tryDirectByUserIdOnly = false, joinChannel = true, errorOnEmpty = true }) { let room; diff --git a/app/lib/server/functions/getUsernameSuggestion.js b/app/lib/server/functions/getUsernameSuggestion.js index fc2420f86d4631e198d0645b6f65c03d225c889a..e7be6544a07fbb70404ea336b711ed1cbb9a166a 100644 --- a/app/lib/server/functions/getUsernameSuggestion.js +++ b/app/lib/server/functions/getUsernameSuggestion.js @@ -1,4 +1,5 @@ import limax from 'limax'; + import { Users } from '../../../models'; import { settings } from '../../../settings'; @@ -25,7 +26,6 @@ export function generateUsernameSuggestion(user) { let usernames = []; if (user.name) { - usernames.push(name(user.name)); const nameParts = user.name.split(' '); diff --git a/app/lib/server/functions/insertMessage.js b/app/lib/server/functions/insertMessage.js index 0331326243a1bbc052433de98aa9ac32d8ca709f..35c7ccec1501dfb08e8ee87477f8f55012993522 100644 --- a/app/lib/server/functions/insertMessage.js +++ b/app/lib/server/functions/insertMessage.js @@ -1,4 +1,5 @@ import { Match, check } from 'meteor/check'; + import { Markdown } from '../../../markdown/server'; import { Messages } from '../../../models'; diff --git a/app/lib/server/functions/notifications/email.js b/app/lib/server/functions/notifications/email.js index 7ec82b8529dd27905afe31c918b31b68c624d181..0f696cba6f2945f9da27b869fbbcacf8838ccd38 100644 --- a/app/lib/server/functions/notifications/email.js +++ b/app/lib/server/functions/notifications/email.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; import s from 'underscore.string'; + import * as Mailer from '../../../../mailer'; import { settings } from '../../../../settings'; import { roomTypes } from '../../../../utils'; @@ -137,7 +138,6 @@ export function shouldNotifyEmail({ hasReplyToThread, roomType, }) { - // use connected (don't need to send him an email) if (statusConnection === 'online') { return false; diff --git a/app/lib/server/functions/notifications/index.js b/app/lib/server/functions/notifications/index.js index 3627a29484479e08d517210ea70a2d496c41c16b..92a3733961f935ca6541145827eb430b46b51f8d 100644 --- a/app/lib/server/functions/notifications/index.js +++ b/app/lib/server/functions/notifications/index.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; -import { settings } from '../../../../settings'; import s from 'underscore.string'; +import { settings } from '../../../../settings'; + /** * This function returns a string ready to be shown in the notification * diff --git a/app/lib/server/functions/notifications/mobile.js b/app/lib/server/functions/notifications/mobile.js index 030285198b75b99347ab3d9dafaf7c52ac5bc4f1..58d1aabc2c7130037e6d1be07446fa215ff04aaf 100644 --- a/app/lib/server/functions/notifications/mobile.js +++ b/app/lib/server/functions/notifications/mobile.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../../settings'; import { Subscriptions } from '../../../../models'; import { roomTypes } from '../../../../utils'; @@ -33,7 +34,7 @@ async function getBadgeCount(userId) { } function canSendMessageToRoom(room, username) { - return !((room.muted || []).includes(username)); + return !(room.muted || []).includes(username); } export async function sendSinglePush({ room, message, userId, receiverUsername, senderUsername, senderName, notificationMessage }) { diff --git a/app/lib/server/functions/processWebhookMessage.js b/app/lib/server/functions/processWebhookMessage.js index d08a744133fa6390aebf615402bb10899201e598..c51f4fb85b96fa6a53bb8346f2cd46f171e0f3d0 100644 --- a/app/lib/server/functions/processWebhookMessage.js +++ b/app/lib/server/functions/processWebhookMessage.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { Subscriptions } from '../../../models'; -import { getRoomByNameOrIdWithOptionToJoin } from './getRoomByNameOrIdWithOptionToJoin'; -import { sendMessage } from './sendMessage'; import _ from 'underscore'; import s from 'underscore.string'; +import { getRoomByNameOrIdWithOptionToJoin } from './getRoomByNameOrIdWithOptionToJoin'; +import { sendMessage } from './sendMessage'; +import { Subscriptions } from '../../../models'; + export const processWebhookMessage = function(messageObj, user, defaultValues = { channel: '', alias: '', avatar: '', emoji: '' }, mustBeJoined = false) { const sentData = []; const channels = [].concat(messageObj.channel || messageObj.roomId || defaultValues.channel); @@ -57,7 +58,7 @@ export const processWebhookMessage = function(messageObj, user, defaultValues = attachments: messageObj.attachments || [], parseUrls: messageObj.parseUrls !== undefined ? messageObj.parseUrls : !messageObj.attachments, bot: messageObj.bot, - groupable: (messageObj.groupable !== undefined) ? messageObj.groupable : false, + groupable: messageObj.groupable !== undefined ? messageObj.groupable : false, }; if (!_.isEmpty(messageObj.icon_url) || !_.isEmpty(messageObj.avatar)) { diff --git a/app/lib/server/functions/removeUserFromRoom.js b/app/lib/server/functions/removeUserFromRoom.js index 1baec02eb7d3fad3cfb31d756c5c7ebc9b7dfed0..8a81100bb13d2f2492fefce9070a2c31acde8749 100644 --- a/app/lib/server/functions/removeUserFromRoom.js +++ b/app/lib/server/functions/removeUserFromRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms, Messages, Subscriptions } from '../../../models'; import { callbacks } from '../../../callbacks'; diff --git a/app/lib/server/functions/saveCustomFields.js b/app/lib/server/functions/saveCustomFields.js index 90a700d7ae4afdc92bd23ceac8114cf9b52c53ab..ca70a7f3a58e3f17238e7cf04a41faf29ec03894 100644 --- a/app/lib/server/functions/saveCustomFields.js +++ b/app/lib/server/functions/saveCustomFields.js @@ -1,6 +1,8 @@ +import s from 'underscore.string'; + import { settings } from '../../../settings'; + import { validateCustomFields, saveCustomFieldsWithoutValidation } from '.'; -import s from 'underscore.string'; export const saveCustomFields = function(userId, formData) { if (s.trim(settings.get('Accounts_CustomFields')) !== '') { diff --git a/app/lib/server/functions/saveCustomFieldsWithoutValidation.js b/app/lib/server/functions/saveCustomFieldsWithoutValidation.js index 9b5149834a379140e59b527f5a0a3349d4054de2..8bca7c6119db579ddfc2a90ff645c114a0a79dfb 100644 --- a/app/lib/server/functions/saveCustomFieldsWithoutValidation.js +++ b/app/lib/server/functions/saveCustomFieldsWithoutValidation.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { settings } from '../../../settings'; import { Users, Subscriptions } from '../../../models'; -import s from 'underscore.string'; export const saveCustomFieldsWithoutValidation = function(userId, formData) { if (s.trim(settings.get('Accounts_CustomFields')) !== '') { @@ -13,7 +14,7 @@ export const saveCustomFieldsWithoutValidation = function(userId, formData) { } const customFields = {}; - Object.keys(customFieldsMeta).forEach((key) => customFields[key] = formData[key]); + Object.keys(customFieldsMeta).forEach((key) => { customFields[key] = formData[key]; }); Users.setCustomFields(userId, customFields); // Update customFields of all Direct Messages' Rooms for userId diff --git a/app/lib/server/functions/saveUser.js b/app/lib/server/functions/saveUser.js index 1dd48066911b9ef9fb28abc0defa3a494da5258a..1d478416ee0b6ba686ec639f903d2de58fef90fb 100644 --- a/app/lib/server/functions/saveUser.js +++ b/app/lib/server/functions/saveUser.js @@ -2,14 +2,16 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import _ from 'underscore'; import s from 'underscore.string'; -import * as Mailer from '../../../mailer'; import { Gravatar } from 'meteor/jparker:gravatar'; + +import * as Mailer from '../../../mailer'; import { getRoles, hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import PasswordPolicy from '../lib/PasswordPolicyClass'; -import { checkEmailAvailability, checkUsernameAvailability, setUserAvatar, setEmail, setRealName, setUsername } from '.'; import { validateEmailDomain } from '../lib'; +import { checkEmailAvailability, checkUsernameAvailability, setUserAvatar, setEmail, setRealName, setUsername } from '.'; + const passwordPolicy = new PasswordPolicy(); let html = ''; diff --git a/app/lib/server/functions/sendMessage.js b/app/lib/server/functions/sendMessage.js index e629f2858a1bb10945a202bec15bd6276ac5ede4..290218f14e3d69b6ff0724ccc2f9250bfa6c0e7a 100644 --- a/app/lib/server/functions/sendMessage.js +++ b/app/lib/server/functions/sendMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { Messages } from '../../../models'; @@ -50,7 +51,6 @@ const validateAttachmentsFields = (attachmentField) => { if (typeof attachmentField.value !== 'undefined') { attachmentField.value = String(attachmentField.value); } - }; const validateAttachmentsActions = (attachmentActions) => { diff --git a/app/lib/server/functions/setEmail.js b/app/lib/server/functions/setEmail.js index 5bdf8b4b2c03475c1886fab412513d7a63ffd70b..982194ae78e55764a8d5fbd67d2628373e088d2a 100644 --- a/app/lib/server/functions/setEmail.js +++ b/app/lib/server/functions/setEmail.js @@ -1,9 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { Users } from '../../../models'; import { hasPermission } from '../../../authorization'; import { RateLimiter, validateEmailDomain } from '../lib'; + import { checkEmailAvailability } from '.'; -import s from 'underscore.string'; const _setEmail = function(userId, email, shouldSendVerificationEmail = true) { email = s.trim(email); diff --git a/app/lib/server/functions/setRealName.js b/app/lib/server/functions/setRealName.js index b1bde3c715a3102a9b0b44d961392f07a95a9b12..40262fd612bf9ed14021215943b0f03bc87af5bd 100644 --- a/app/lib/server/functions/setRealName.js +++ b/app/lib/server/functions/setRealName.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { Users, Subscriptions } from '../../../models'; import { settings } from '../../../settings'; import { Notifications } from '../../../notifications'; import { hasPermission } from '../../../authorization'; import { RateLimiter } from '../lib'; -import s from 'underscore.string'; export const _setRealName = function(userId, name) { name = s.trim(name); diff --git a/app/lib/server/functions/setUserAvatar.js b/app/lib/server/functions/setUserAvatar.js index 1f3ed06702d0f3f5d0932b11be7ee88eb602b42c..4e7ec6201c9bc22f483072e589948f3498a0f702 100644 --- a/app/lib/server/functions/setUserAvatar.js +++ b/app/lib/server/functions/setUserAvatar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; + import { RocketChatFile } from '../../../file'; import { FileUpload } from '../../../file-upload'; import { Users } from '../../../models'; @@ -11,7 +12,7 @@ export const setUserAvatar = function(user, dataURI, contentType, service) { if (service === 'initials') { return Users.setAvatarOrigin(user._id, service); - } else if (service === 'url') { + } if (service === 'url') { let result = null; try { diff --git a/app/lib/server/functions/setUsername.js b/app/lib/server/functions/setUsername.js index 9e8a550235905ca688bf01adc3148d13c3151147..087e36bce301f9f5193946b67d2ae53602740877 100644 --- a/app/lib/server/functions/setUsername.js +++ b/app/lib/server/functions/setUsername.js @@ -1,11 +1,13 @@ import { Meteor } from 'meteor/meteor'; import s from 'underscore.string'; import { Accounts } from 'meteor/accounts-base'; + import { FileUpload } from '../../../file-upload'; import { settings } from '../../../settings'; import { Users, Messages, Subscriptions, Rooms, LivechatDepartmentAgents } from '../../../models'; import { hasPermission } from '../../../authorization'; import { RateLimiter } from '../lib'; + import { checkUsernameAvailability, setUserAvatar, getAvatarSuggestionForUser } from '.'; export const _setUsername = function(userId, u) { @@ -87,7 +89,7 @@ export const _setUsername = function(userId, u) { }; export const setUsername = RateLimiter.limitFunction(_setUsername, 1, 60000, { - [0]() { + 0() { return !Meteor.userId() || !hasPermission(Meteor.userId(), 'edit-other-user-info'); }, }); diff --git a/app/lib/server/functions/updateMessage.js b/app/lib/server/functions/updateMessage.js index 167472f3834c7b722acbbfe6d1d695092f1c3f5f..5dd785c9ab3fade47740b512871bd11eb90d3a93 100644 --- a/app/lib/server/functions/updateMessage.js +++ b/app/lib/server/functions/updateMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages, Rooms } from '../../../models'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; diff --git a/app/lib/server/functions/validateCustomFields.js b/app/lib/server/functions/validateCustomFields.js index 1e9da50f0164b64e674b1b5da9c73ec6d5a134f6..fc3834f29fd66b95562b22593d9f24fc2c617431 100644 --- a/app/lib/server/functions/validateCustomFields.js +++ b/app/lib/server/functions/validateCustomFields.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import s from 'underscore.string'; +import { settings } from '../../../settings'; + export const validateCustomFields = function(fields) { // Special Case: // If an admin didn't set any custom fields there's nothing to validate against so consider any customFields valid diff --git a/app/lib/server/index.js b/app/lib/server/index.js index 8dec3f3b38d28cd150f9d0caa7b8b2bb872fb93d..dfbf8f7b010e81d2c8bc73ba29b87aa71b54baff 100644 --- a/app/lib/server/index.js +++ b/app/lib/server/index.js @@ -1,5 +1,3 @@ -export * from './lib'; -export * from './functions'; import './startup/email'; import './startup/oAuthServicesUpdate'; import './startup/rateLimiter'; @@ -68,3 +66,6 @@ import './methods/unarchiveRoom'; import './methods/unblockUser'; import './methods/updateMessage'; import './publications/settings'; + +export * from './lib'; +export * from './functions'; diff --git a/app/lib/server/lib/RateLimiter.js b/app/lib/server/lib/RateLimiter.js index 9ff5af7aad659af10221d4c6ab209fd271201d9a..c0f1074c82b4cea491209b0629d6ed5561eb2888 100644 --- a/app/lib/server/lib/RateLimiter.js +++ b/app/lib/server/lib/RateLimiter.js @@ -13,18 +13,17 @@ export const RateLimiterClass = new class { return function(...args) { const match = {}; _.each(matchers, function(matcher, key) { - return match[key] = args[key]; + match[key] = args[key]; }); rateLimiter.increment(match); const rateLimitResult = rateLimiter.check(match); if (rateLimitResult.allowed) { return fn.apply(null, args); - } else { - throw new Meteor.Error('error-too-many-requests', `Error, too many requests. Please slow down. You must wait ${ Math.ceil(rateLimitResult.timeToReset / 1000) } seconds before trying again.`, { - timeToReset: rateLimitResult.timeToReset, - seconds: Math.ceil(rateLimitResult.timeToReset / 1000), - }); } + throw new Meteor.Error('error-too-many-requests', `Error, too many requests. Please slow down. You must wait ${ Math.ceil(rateLimitResult.timeToReset / 1000) } seconds before trying again.`, { + timeToReset: rateLimitResult.timeToReset, + seconds: Math.ceil(rateLimitResult.timeToReset / 1000), + }); }; } @@ -37,9 +36,8 @@ export const RateLimiterClass = new class { name: methodName, }; _.each(matchers, function(matcher, key) { - return match[key] = matchers[key]; + match[key] = matchers[key]; }); return DDPRateLimiter.addRule(match, numRequests, timeInterval); } - -}; +}(); diff --git a/app/lib/server/lib/bugsnag.js b/app/lib/server/lib/bugsnag.js index b734817afe6a72b03a0eea037b9bbf39c2dc4c34..c707d7e2ca76857c7736333fc5ac098cec91a0f1 100644 --- a/app/lib/server/lib/bugsnag.js +++ b/app/lib/server/lib/bugsnag.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import bugsnag from 'bugsnag'; + import { settings } from '../../../settings'; import { Info } from '../../../utils'; -import bugsnag from 'bugsnag'; settings.get('Bugsnag_api_key', (key, value) => { if (value) { diff --git a/app/lib/server/lib/configLogger.js b/app/lib/server/lib/configLogger.js index b4bb239c7b6df77fedebd48721d48cd730435f59..3039cc628598921cace1c8e8a187e4d2c417e350 100644 --- a/app/lib/server/lib/configLogger.js +++ b/app/lib/server/lib/configLogger.js @@ -1,13 +1,14 @@ import { Meteor } from 'meteor/meteor'; + import { LoggerManager } from '../../../logger'; import { settings } from '../../../settings'; settings.get('Log_Package', function(key, value) { - return LoggerManager.showPackage = value; + LoggerManager.showPackage = value; }); settings.get('Log_File', function(key, value) { - return LoggerManager.showFileAndLine = value; + LoggerManager.showFileAndLine = value; }); settings.get('Log_Level', function(key, value) { diff --git a/app/lib/server/lib/debug.js b/app/lib/server/lib/debug.js index d7c4e5c5bff8438a84c94dc68459f83d644d852c..4344a20ea8aae9215da55e14bf26ba0754951df8 100644 --- a/app/lib/server/lib/debug.js +++ b/app/lib/server/lib/debug.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { metrics } from '../../../metrics'; -import _ from 'underscore'; import { Logger } from '../../../logger'; const logger = new Logger('Meteor', { @@ -19,13 +20,13 @@ const logger = new Logger('Meteor', { let Log_Trace_Methods; let Log_Trace_Subscriptions; -settings.get('Log_Trace_Methods', (key, value) => Log_Trace_Methods = value); -settings.get('Log_Trace_Subscriptions', (key, value) => Log_Trace_Subscriptions = value); +settings.get('Log_Trace_Methods', (key, value) => { Log_Trace_Methods = value; }); +settings.get('Log_Trace_Subscriptions', (key, value) => { Log_Trace_Subscriptions = value; }); let Log_Trace_Methods_Filter; let Log_Trace_Subscriptions_Filter; -settings.get('Log_Trace_Methods_Filter', (key, value) => Log_Trace_Methods_Filter = value ? new RegExp(value) : undefined); -settings.get('Log_Trace_Subscriptions_Filter', (key, value) => Log_Trace_Subscriptions_Filter = value ? new RegExp(value) : undefined); +settings.get('Log_Trace_Methods_Filter', (key, value) => { Log_Trace_Methods_Filter = value ? new RegExp(value) : undefined; }); +settings.get('Log_Trace_Subscriptions_Filter', (key, value) => { Log_Trace_Subscriptions_Filter = value ? new RegExp(value) : undefined; }); const traceConnection = (enable, filter, prefix, name, connection, userId) => { if (!enable) { diff --git a/app/lib/server/lib/defaultBlockedDomainsList.js b/app/lib/server/lib/defaultBlockedDomainsList.js index 73334b3c9b925d65c856e8619e7dc19782a9c6de..2d5e73d30f7ea40b85d7cb6d2a44c323019a9e2c 100644 --- a/app/lib/server/lib/defaultBlockedDomainsList.js +++ b/app/lib/server/lib/defaultBlockedDomainsList.js @@ -943,4 +943,3 @@ export const emailDomainDefaultBlackList = [ 'zxcvbnm.com', 'zzz.com', ]; - diff --git a/app/lib/server/lib/index.js b/app/lib/server/lib/index.js index f43ce7aa240fe402227ba98624b707c6d8c3a7b5..958e8b04d095b1a75072e17f83175548e292cec2 100644 --- a/app/lib/server/lib/index.js +++ b/app/lib/server/lib/index.js @@ -5,6 +5,9 @@ for the *server* pieces of code which does include the shared library files. */ +import './notifyUsersOnMessage'; +import './meteorFixes'; + export { sendNotification } from './sendNotificationsOnMessage'; export { hostname } from '../../lib/startup/settingsOnLoadSiteUrl'; export { passwordPolicy } from './passwordPolicy'; @@ -12,6 +15,3 @@ export { validateEmailDomain } from './validateEmailDomain'; export { RateLimiterClass as RateLimiter } from './RateLimiter'; export { processDirectEmail } from './processDirectEmail'; export { msgStream } from './msgStream'; - -import './notifyUsersOnMessage'; -import './meteorFixes'; diff --git a/app/lib/server/lib/interceptDirectReplyEmails.js b/app/lib/server/lib/interceptDirectReplyEmails.js index 1845bbcf73f2e4875c7ce3601c8779ef03507324..bd70f16774f9cc01c607dc3e6e28207dd0fbd225 100644 --- a/app/lib/server/lib/interceptDirectReplyEmails.js +++ b/app/lib/server/lib/interceptDirectReplyEmails.js @@ -1,8 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import IMAP from 'imap'; import POP3Lib from 'poplib'; import { simpleParser } from 'mailparser'; + +import { settings } from '../../../settings'; + import { processDirectEmail } from '.'; export class IMAPIntercepter { @@ -63,7 +65,7 @@ export class IMAPIntercepter { return true; } - stop(callback = new Function) { + stop(callback = new Function()) { this.imap.end(); this.imap.once('end', callback); } @@ -259,7 +261,7 @@ export class POP3Helper { return this.running; } - stop(callback = new Function) { + stop(callback = new Function()) { if (this.isActive()) { Meteor.clearInterval(this.running); } diff --git a/app/lib/server/lib/notifyUsersOnMessage.js b/app/lib/server/lib/notifyUsersOnMessage.js index 925df7ec55027b23e6d7664beb7f175bc9233691..e5c4dd7dfa5c2559c042ad2b672655d0d07e8d9f 100644 --- a/app/lib/server/lib/notifyUsersOnMessage.js +++ b/app/lib/server/lib/notifyUsersOnMessage.js @@ -33,9 +33,9 @@ export function updateUsersSubscriptions(message, room, users) { const highlightOptions = { fields: { userHighlights: 1, 'u._id': 1 } }; - const highlights = users ? - Subscriptions.findByRoomAndUsersWithUserHighlights(room._id, users, highlightOptions).fetch() : - Subscriptions.findByRoomWithUserHighlights(room._id, highlightOptions).fetch(); + const highlights = users + ? Subscriptions.findByRoomAndUsersWithUserHighlights(room._id, users, highlightOptions).fetch() + : Subscriptions.findByRoomWithUserHighlights(room._id, highlightOptions).fetch(); if (message.mentions != null) { message.mentions.forEach(function(mention) { @@ -90,8 +90,7 @@ function notifyUsersOnMessage(message, room) { // TODO: Review as I am not sure how else to get around this as the incrementing of the msgs count shouldn't be in this callback Rooms.incMsgCountById(message.rid, 1); return message; - } else if (message.editedAt) { - + } if (message.editedAt) { // only updates last message if it was edited (skip rest of callback) if (settings.get('Store_Last_Message') && (!room.lastMessage || room.lastMessage._id === message._id)) { Rooms.setLastMessageById(message.rid, message); diff --git a/app/lib/server/lib/passwordPolicy.js b/app/lib/server/lib/passwordPolicy.js index a190e8cb5d3c71335ec1e9f5015c2d1293fa50e1..c426fbd4cc11e5c583e7827a4e06d05a034a1858 100644 --- a/app/lib/server/lib/passwordPolicy.js +++ b/app/lib/server/lib/passwordPolicy.js @@ -1,14 +1,14 @@ -import { settings } from '../../../settings'; import PasswordPolicy from './PasswordPolicyClass'; +import { settings } from '../../../settings'; export const passwordPolicy = new PasswordPolicy(); -settings.get('Accounts_Password_Policy_Enabled', (key, value) => passwordPolicy.enabled = value); -settings.get('Accounts_Password_Policy_MinLength', (key, value) => passwordPolicy.minLength = value); -settings.get('Accounts_Password_Policy_MaxLength', (key, value) => passwordPolicy.maxLength = value); -settings.get('Accounts_Password_Policy_ForbidRepeatingCharacters', (key, value) => passwordPolicy.forbidRepeatingCharacters = value); -settings.get('Accounts_Password_Policy_ForbidRepeatingCharactersCount', (key, value) => passwordPolicy.forbidRepeatingCharactersCount = value); -settings.get('Accounts_Password_Policy_AtLeastOneLowercase', (key, value) => passwordPolicy.mustContainAtLeastOneLowercase = value); -settings.get('Accounts_Password_Policy_AtLeastOneUppercase', (key, value) => passwordPolicy.mustContainAtLeastOneUppercase = value); -settings.get('Accounts_Password_Policy_AtLeastOneNumber', (key, value) => passwordPolicy.mustContainAtLeastOneNumber = value); -settings.get('Accounts_Password_Policy_AtLeastOneSpecialCharacter', (key, value) => passwordPolicy.mustContainAtLeastOneSpecialCharacter = value); +settings.get('Accounts_Password_Policy_Enabled', (key, value) => { passwordPolicy.enabled = value; }); +settings.get('Accounts_Password_Policy_MinLength', (key, value) => { passwordPolicy.minLength = value; }); +settings.get('Accounts_Password_Policy_MaxLength', (key, value) => { passwordPolicy.maxLength = value; }); +settings.get('Accounts_Password_Policy_ForbidRepeatingCharacters', (key, value) => { passwordPolicy.forbidRepeatingCharacters = value; }); +settings.get('Accounts_Password_Policy_ForbidRepeatingCharactersCount', (key, value) => { passwordPolicy.forbidRepeatingCharactersCount = value; }); +settings.get('Accounts_Password_Policy_AtLeastOneLowercase', (key, value) => { passwordPolicy.mustContainAtLeastOneLowercase = value; }); +settings.get('Accounts_Password_Policy_AtLeastOneUppercase', (key, value) => { passwordPolicy.mustContainAtLeastOneUppercase = value; }); +settings.get('Accounts_Password_Policy_AtLeastOneNumber', (key, value) => { passwordPolicy.mustContainAtLeastOneNumber = value; }); +settings.get('Accounts_Password_Policy_AtLeastOneSpecialCharacter', (key, value) => { passwordPolicy.mustContainAtLeastOneSpecialCharacter = value; }); diff --git a/app/lib/server/lib/processDirectEmail.js b/app/lib/server/lib/processDirectEmail.js index fa751e32aee541c4086123b9f41198acce1d41ca..f9394dbd2c11ae2d443b65cb5664f36b233f557a 100644 --- a/app/lib/server/lib/processDirectEmail.js +++ b/app/lib/server/lib/processDirectEmail.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import { EmailReplyParser as reply } from 'emailreplyparser'; +import moment from 'moment'; + import { settings } from '../../../settings'; import { Rooms, Messages, Users, Subscriptions } from '../../../models'; import { metrics } from '../../../metrics'; -import { EmailReplyParser as reply } from 'emailreplyparser'; import { sendMessage as _sendMessage } from '../functions'; -import moment from 'moment'; export const processDirectEmail = function(email) { function sendMessage(email) { diff --git a/app/lib/server/lib/sendNotificationsOnMessage.js b/app/lib/server/lib/sendNotificationsOnMessage.js index 23cb99c0acaca9d81e82f2b93a2f0aa9bd66a788..db544f058509aa08a4e27f03435a8bb17fcf2262 100644 --- a/app/lib/server/lib/sendNotificationsOnMessage.js +++ b/app/lib/server/lib/sendNotificationsOnMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import moment from 'moment'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; @@ -23,7 +24,6 @@ export const sendNotification = async ({ mentionIds, disableAllMessageNotifications, }) => { - // don't notify the sender if (subscription.u._id === sender._id) { return; @@ -213,7 +213,7 @@ export async function sendMessageNotifications(message, room, usersInThread = [] disableNotifications: { $ne: true }, $or: [ { 'userHighlights.0': { $exists: 1 } }, - ...(usersInThread.length > 0 ? [{ 'u._id': { $in: usersInThread } }] : []), + ...usersInThread.length > 0 ? [{ 'u._id': { $in: usersInThread } }] : [], ], }; diff --git a/app/lib/server/lib/validateEmailDomain.js b/app/lib/server/lib/validateEmailDomain.js index cce61e2f6423779d6159722ef606d800066c788e..953847537180d1b0a72500a10a8449f7894e60d6 100644 --- a/app/lib/server/lib/validateEmailDomain.js +++ b/app/lib/server/lib/validateEmailDomain.js @@ -1,8 +1,10 @@ +import dns from 'dns'; + import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; -import { emailDomainDefaultBlackList } from './defaultBlockedDomainsList'; import _ from 'underscore'; -import dns from 'dns'; + +import { emailDomainDefaultBlackList } from './defaultBlockedDomainsList'; +import { settings } from '../../../settings'; let emailDomainBlackList = []; let emailDomainWhiteList = []; diff --git a/app/lib/server/methods/addOAuthService.js b/app/lib/server/methods/addOAuthService.js index e86ad045d30b212ebf16e612524c31dd9da52511..109c0b8732e9896e759ecfa2d649122a6340ccd4 100644 --- a/app/lib/server/methods/addOAuthService.js +++ b/app/lib/server/methods/addOAuthService.js @@ -2,13 +2,13 @@ /* eslint comma-spacing: 0 */ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import s from 'underscore.string'; + import { settings } from '../../../settings'; import { hasPermission } from '../../../authorization'; -import s from 'underscore.string'; Meteor.methods({ addOAuthService(name) { - check(name, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/addUsersToRoom.js b/app/lib/server/methods/addUsersToRoom.js index a3a2c6c9af4396d9718c98ffa9c9c91bbbef16cd..98e2e7fea5e1e5f972154ac9df9ae49a93d7a183 100644 --- a/app/lib/server/methods/addUsersToRoom.js +++ b/app/lib/server/methods/addUsersToRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; + import { Rooms, Subscriptions, Users } from '../../../models'; import { hasPermission } from '../../../authorization'; import { addUserToRoom } from '../functions'; diff --git a/app/lib/server/methods/archiveRoom.js b/app/lib/server/methods/archiveRoom.js index fc939a11000c9d74465ee2d71d42dad80a6455af..3bc7ee6634b18fe7cd687c7b03a758ae1a361527 100644 --- a/app/lib/server/methods/archiveRoom.js +++ b/app/lib/server/methods/archiveRoom.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms } from '../../../models'; import { hasPermission } from '../../../authorization'; import { archiveRoom } from '../functions'; Meteor.methods({ archiveRoom(rid) { - check(rid, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/blockUser.js b/app/lib/server/methods/blockUser.js index 102bbaead7c1dfdc8e9ddf526e008538dcc3c305..aeb622e65694548b485c1edb5d8686e2c7e05758 100644 --- a/app/lib/server/methods/blockUser.js +++ b/app/lib/server/methods/blockUser.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../../models'; Meteor.methods({ blockUser({ rid, blocked }) { - check(rid, String); check(blocked, String); diff --git a/app/lib/server/methods/checkRegistrationSecretURL.js b/app/lib/server/methods/checkRegistrationSecretURL.js index 1c142a4672a414ac7c907a763469db0d140804dc..ab411be95d1a54d481656464539b9fc17e24a644 100644 --- a/app/lib/server/methods/checkRegistrationSecretURL.js +++ b/app/lib/server/methods/checkRegistrationSecretURL.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { settings } from '../../../settings'; Meteor.methods({ checkRegistrationSecretURL(hash) { - check(hash, String); return hash === settings.get('Accounts_RegistrationForm_SecretURL'); diff --git a/app/lib/server/methods/checkUsernameAvailability.js b/app/lib/server/methods/checkUsernameAvailability.js index 994d71a3abc7efb5de0020f8d7dbcb091f2bfc67..caaa899e7b1ba73887624882ad01629d98aeacdd 100644 --- a/app/lib/server/methods/checkUsernameAvailability.js +++ b/app/lib/server/methods/checkUsernameAvailability.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { settings } from '../../../settings'; import { checkUsernameAvailability } from '../functions'; import { RateLimiter } from '../lib'; diff --git a/app/lib/server/methods/cleanRoomHistory.js b/app/lib/server/methods/cleanRoomHistory.js index 6d937f265a31aa79c17691b0fd787974ed8b052b..37dfb105c0ec6071af3092c0550e6c895986ec7a 100644 --- a/app/lib/server/methods/cleanRoomHistory.js +++ b/app/lib/server/methods/cleanRoomHistory.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { cleanRoomHistory } from '../functions'; diff --git a/app/lib/server/methods/createChannel.js b/app/lib/server/methods/createChannel.js index 53d442b2f55e7d2230f29509c199520fc369ea49..5b4628c13cd84f3abf809803e5fc54754cb9cb2b 100644 --- a/app/lib/server/methods/createChannel.js +++ b/app/lib/server/methods/createChannel.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { createRoom } from '../functions'; diff --git a/app/lib/server/methods/createPrivateGroup.js b/app/lib/server/methods/createPrivateGroup.js index f99f8e8c3609b27ec6791ef99263142b2ecd73e5..6ed5a8638f35d9c73af17b7fb566501b885e75dc 100644 --- a/app/lib/server/methods/createPrivateGroup.js +++ b/app/lib/server/methods/createPrivateGroup.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { createRoom } from '../functions'; diff --git a/app/lib/server/methods/createToken.js b/app/lib/server/methods/createToken.js index 881f2055a2a58028498c39045f504d8b15b066a6..de562cb4d22731672e6653c108a986b6ca0d7cd0 100644 --- a/app/lib/server/methods/createToken.js +++ b/app/lib/server/methods/createToken.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ diff --git a/app/lib/server/methods/deleteMessage.js b/app/lib/server/methods/deleteMessage.js index 28d0149e168431983c82aa7d08966eb22608fff2..9d8878b8d2b752499e2db9ba1db7ba3ccda25108 100644 --- a/app/lib/server/methods/deleteMessage.js +++ b/app/lib/server/methods/deleteMessage.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import moment from 'moment'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import { Messages } from '../../../models'; import { deleteMessage } from '../functions'; -import moment from 'moment'; Meteor.methods({ deleteMessage(message) { @@ -34,7 +35,7 @@ Meteor.methods({ const _hasPermission = hasPermission(Meteor.userId(), 'delete-message', originalMessage.rid); const deleteAllowed = settings.get('Message_AllowDeleting'); const deleteOwn = originalMessage && originalMessage.u && originalMessage.u._id === Meteor.userId(); - if (!(_hasPermission || (deleteAllowed && deleteOwn)) && !(forceDelete)) { + if (!(_hasPermission || (deleteAllowed && deleteOwn)) && !forceDelete) { throw new Meteor.Error('error-action-not-allowed', 'Not allowed', { method: 'deleteMessage', action: 'Delete_message', diff --git a/app/lib/server/methods/deleteUserOwnAccount.js b/app/lib/server/methods/deleteUserOwnAccount.js index b6d5692042d9684f7a92cd2df00c7769d880bcf0..62c27450c3a88253e4cc658f13715ca0d7339b9e 100644 --- a/app/lib/server/methods/deleteUserOwnAccount.js +++ b/app/lib/server/methods/deleteUserOwnAccount.js @@ -1,14 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; +import s from 'underscore.string'; + import { settings } from '../../../settings'; import { Users } from '../../../models'; import { deleteUser } from '../functions'; -import s from 'underscore.string'; Meteor.methods({ deleteUserOwnAccount(password) { - check(password, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/executeSlashCommandPreview.js b/app/lib/server/methods/executeSlashCommandPreview.js index 7baaad79fdd1562fdc9d3e6190d03976b65fd8b6..887721dcfb1134cd7a6eb8f899b98cb17ce609db 100644 --- a/app/lib/server/methods/executeSlashCommandPreview.js +++ b/app/lib/server/methods/executeSlashCommandPreview.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../../utils'; Meteor.methods({ diff --git a/app/lib/server/methods/filterATAllTag.js b/app/lib/server/methods/filterATAllTag.js index c1721cb54e5087b61e3d9b3ac4ed64729fd2aad2..3966a5c90bd72f185227d87fd6ef6e152b694e42 100644 --- a/app/lib/server/methods/filterATAllTag.js +++ b/app/lib/server/methods/filterATAllTag.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import moment from 'moment'; + import { hasPermission } from '../../../authorization'; import { callbacks } from '../../../callbacks'; import { Notifications } from '../../../notifications'; import { Users } from '../../../models'; -import _ from 'underscore'; -import moment from 'moment'; callbacks.add('beforeSaveMessage', function(message) { // If the message was edited, or is older than 60 seconds (imported) @@ -16,12 +17,10 @@ callbacks.add('beforeSaveMessage', function(message) { } // Test if the message mentions include @all. - if (message.mentions != null && - _.pluck(message.mentions, '_id').some((item) => item === 'all')) { - + if (message.mentions != null + && _.pluck(message.mentions, '_id').some((item) => item === 'all')) { // Check if the user has permissions to use @all in both global and room scopes. if (!hasPermission(message.u._id, 'mention-all') && !hasPermission(message.u._id, 'mention-all', message.rid)) { - // Get the language of the user for the error notification. const { language } = Users.findOneById(message.u._id); const action = TAPi18n.__('Notify_all_in_this_room', {}, language); @@ -31,7 +30,7 @@ callbacks.add('beforeSaveMessage', function(message) { Notifications.notifyUser(message.u._id, 'message', { _id: Random.id(), rid: message.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('error-action-not-allowed', { action }, language), }); @@ -44,5 +43,4 @@ callbacks.add('beforeSaveMessage', function(message) { } return message; - }, 1, 'filterATAllTag'); diff --git a/app/lib/server/methods/filterATHereTag.js b/app/lib/server/methods/filterATHereTag.js index 9b917bc8b0817f621238f5a0b2701b1d85519d0c..e105a8d76aad2d325047be0a94c5a0761a62af38 100644 --- a/app/lib/server/methods/filterATHereTag.js +++ b/app/lib/server/methods/filterATHereTag.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import moment from 'moment'; + import { hasPermission } from '../../../authorization'; import { callbacks } from '../../../callbacks'; import { Notifications } from '../../../notifications'; import { Users } from '../../../models'; -import _ from 'underscore'; -import moment from 'moment'; callbacks.add('beforeSaveMessage', function(message) { // If the message was edited, or is older than 60 seconds (imported) @@ -17,10 +18,8 @@ callbacks.add('beforeSaveMessage', function(message) { // Test if the message mentions include @here. if (message.mentions != null && _.pluck(message.mentions, '_id').some((item) => item === 'here')) { - // Check if the user has permissions to use @here in both global and room scopes. if (!hasPermission(message.u._id, 'mention-here') && !hasPermission(message.u._id, 'mention-here', message.rid)) { - // Get the language of the user for the error notification. const { language } = Users.findOneById(message.u._id); const action = TAPi18n.__('Notify_active_in_this_room', {}, language); @@ -30,7 +29,7 @@ callbacks.add('beforeSaveMessage', function(message) { Notifications.notifyUser(message.u._id, 'message', { _id: Random.id(), rid: message.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('error-action-not-allowed', { action }, language), }); @@ -43,5 +42,4 @@ callbacks.add('beforeSaveMessage', function(message) { } return message; - }, 1, 'filterATHereTag'); diff --git a/app/lib/server/methods/filterBadWords.js b/app/lib/server/methods/filterBadWords.js index f7c4b6f594ec3226860b63b2f9d553796f7fad4b..e7bb44642826883103e06f1a3a13418ea29375b2 100644 --- a/app/lib/server/methods/filterBadWords.js +++ b/app/lib/server/methods/filterBadWords.js @@ -1,9 +1,9 @@ import Filter from 'bad-words'; + import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; callbacks.add('beforeSaveMessage', function(message) { - if (settings.get('Message_AllowBadWordsFilter')) { const badWordsList = settings.get('Message_BadWordsFilterList'); let options; @@ -19,5 +19,4 @@ callbacks.add('beforeSaveMessage', function(message) { } return message; - }, 1, 'filterBadWords'); diff --git a/app/lib/server/methods/getChannelHistory.js b/app/lib/server/methods/getChannelHistory.js index c55579d63ed132458f785f25bceaad46d9c5a7b0..f506686d1f89b1cd12725f90d11361cdeab89ee8 100644 --- a/app/lib/server/methods/getChannelHistory.js +++ b/app/lib/server/methods/getChannelHistory.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import _ from 'underscore'; + import { hasPermission } from '../../../authorization'; import { Subscriptions, Messages } from '../../../models'; import { settings } from '../../../settings'; import { normalizeMessagesForUser } from '../../../utils/server/lib/normalizeMessagesForUser'; -import _ from 'underscore'; Meteor.methods({ getChannelHistory({ rid, latest, oldest, inclusive, offset = 0, count = 20, unreads }) { diff --git a/app/lib/server/methods/getFullUserData.js b/app/lib/server/methods/getFullUserData.js index 9661f032b108692d30e5ae83228f2e43edf79418..07ae554acb4e3e3525fe7db77ad5a22b875e5d5e 100644 --- a/app/lib/server/methods/getFullUserData.js +++ b/app/lib/server/methods/getFullUserData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getFullUserData } from '../functions'; Meteor.methods({ diff --git a/app/lib/server/methods/getMessages.js b/app/lib/server/methods/getMessages.js index 6f950748a1ae8d833bbf2e656f9a0cef2bd7e3eb..e9e24d31d43d263c2a7db1308b0d8eb883373be4 100644 --- a/app/lib/server/methods/getMessages.js +++ b/app/lib/server/methods/getMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages } from '../../../models'; Meteor.methods({ diff --git a/app/lib/server/methods/getRoomJoinCode.js b/app/lib/server/methods/getRoomJoinCode.js index adc4fa7cc830ad3c2161a5c3b3e221a6562135b9..da58b6b86e83425af9ac362e4af26a76898f5c52 100644 --- a/app/lib/server/methods/getRoomJoinCode.js +++ b/app/lib/server/methods/getRoomJoinCode.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; diff --git a/app/lib/server/methods/getRoomRoles.js b/app/lib/server/methods/getRoomRoles.js index fc92f5a1a4a5f66f594a8892a41ebe16fe49b846..779ae94215fc6f62b6542285c1ce7788db4240b6 100644 --- a/app/lib/server/methods/getRoomRoles.js +++ b/app/lib/server/methods/getRoomRoles.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { Subscriptions, Users, Roles } from '../../../models'; -import _ from 'underscore'; Meteor.methods({ getRoomRoles(rid) { @@ -32,12 +33,11 @@ Meteor.methods({ if (!UI_Use_Real_Name) { return subscriptions; - } else { - return subscriptions.map((subscription) => { - const user = Users.findOneById(subscription.u._id); - subscription.u.name = user && user.name; - return subscription; - }); } + return subscriptions.map((subscription) => { + const user = Users.findOneById(subscription.u._id); + subscription.u.name = user && user.name; + return subscription; + }); }, }); diff --git a/app/lib/server/methods/getServerInfo.js b/app/lib/server/methods/getServerInfo.js index 97aa99eb7b4c5df4ba6ad7e487af2fa3b07cf165..2c76421adb5a4d4b97808cf6731424b13a3e1c92 100644 --- a/app/lib/server/methods/getServerInfo.js +++ b/app/lib/server/methods/getServerInfo.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Info } from '../../../utils'; Meteor.methods({ diff --git a/app/lib/server/methods/getSingleMessage.js b/app/lib/server/methods/getSingleMessage.js index 74625cf76f9acf0aa07e8299b5a59b93710a07b6..ac8ee4f23b152d027f1f159f61f0280d7160f9d7 100644 --- a/app/lib/server/methods/getSingleMessage.js +++ b/app/lib/server/methods/getSingleMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages } from '../../../models'; Meteor.methods({ diff --git a/app/lib/server/methods/getSlashCommandPreviews.js b/app/lib/server/methods/getSlashCommandPreviews.js index 6052720c20b683e972030b1f6df99a4c60c24496..a6435932173547eaef805fa983048a9303af4af6 100644 --- a/app/lib/server/methods/getSlashCommandPreviews.js +++ b/app/lib/server/methods/getSlashCommandPreviews.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../../utils'; Meteor.methods({ diff --git a/app/lib/server/methods/getUserRoles.js b/app/lib/server/methods/getUserRoles.js index 1bd48b9bf97f3c3850b21b3a859f70791dfc67a9..b6b190a73b35e48f97ae2c52664ce4cd28d12297 100644 --- a/app/lib/server/methods/getUserRoles.js +++ b/app/lib/server/methods/getUserRoles.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { Roles, Users } from '../../../models'; import _ from 'underscore'; +import { Roles, Users } from '../../../models'; + Meteor.methods({ getUserRoles() { - if (!Meteor.userId()) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getUserRoles' }); } diff --git a/app/lib/server/methods/getUsernameSuggestion.js b/app/lib/server/methods/getUsernameSuggestion.js index 1e736489136c5dad2050e11524475c420eddc029..c4da7a7188a6d783d6f7dbd0fb022c28561c480f 100644 --- a/app/lib/server/methods/getUsernameSuggestion.js +++ b/app/lib/server/methods/getUsernameSuggestion.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { generateUsernameSuggestion } from '../functions'; Meteor.methods({ diff --git a/app/lib/server/methods/insertOrUpdateUser.js b/app/lib/server/methods/insertOrUpdateUser.js index aba6e0bc648526252163f05b70d13e2aa73bab01..5ef24412641242b9c21697cd64d075122709887d 100644 --- a/app/lib/server/methods/insertOrUpdateUser.js +++ b/app/lib/server/methods/insertOrUpdateUser.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { saveUser } from '../functions'; Meteor.methods({ insertOrUpdateUser(userData) { - check(userData, Object); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/joinDefaultChannels.js b/app/lib/server/methods/joinDefaultChannels.js index 2f1cdbdf24bef1503f9fa7985b88282635ca8073..f0e3dae60ffb4115be5af67041b6cd7a893484ef 100644 --- a/app/lib/server/methods/joinDefaultChannels.js +++ b/app/lib/server/methods/joinDefaultChannels.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { addUserToDefaultChannels } from '../functions'; Meteor.methods({ diff --git a/app/lib/server/methods/joinRoom.js b/app/lib/server/methods/joinRoom.js index 3d8a72e3cab113d2825f454172ec3fa60641d187..a82773b6dfeef9f2bd41c97b2ea4d1f2469ba57f 100644 --- a/app/lib/server/methods/joinRoom.js +++ b/app/lib/server/methods/joinRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission, canAccessRoom } from '../../../authorization'; import { Rooms } from '../../../models'; import { Tokenpass, updateUserTokenpassBalances } from '../../../tokenpass/server'; diff --git a/app/lib/server/methods/leaveRoom.js b/app/lib/server/methods/leaveRoom.js index 1140b2065b2e5ee4c01a9a1e8a5744820f1430ed..cdd6210d88abfc32a141875a4e48b8601c19f181 100644 --- a/app/lib/server/methods/leaveRoom.js +++ b/app/lib/server/methods/leaveRoom.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission, hasRole, getUsersInRole } from '../../../authorization'; import { Subscriptions, Rooms } from '../../../models'; import { removeUserFromRoom } from '../functions'; Meteor.methods({ leaveRoom(rid) { - check(rid, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/refreshOAuthService.js b/app/lib/server/methods/refreshOAuthService.js index 59eced263e5a725789f3422c267516c15607e8a4..234c5f377dfd5f28b39df537ccc866f5d3904a30 100644 --- a/app/lib/server/methods/refreshOAuthService.js +++ b/app/lib/server/methods/refreshOAuthService.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { ServiceConfiguration } from 'meteor/service-configuration'; + import { hasPermission } from '../../../authorization'; import { Settings } from '../../../models'; @@ -15,6 +16,6 @@ Meteor.methods({ ServiceConfiguration.configurations.remove({}); - Settings.update({ _id: /^Accounts_OAuth_.+/ }, { $set: { _updatedAt: new Date } }, { multi: true }); + Settings.update({ _id: /^Accounts_OAuth_.+/ }, { $set: { _updatedAt: new Date() } }, { multi: true }); }, }); diff --git a/app/lib/server/methods/removeOAuthService.js b/app/lib/server/methods/removeOAuthService.js index f4ab2eaf5eec9d97bc7306c9df3e511481b73ea5..228f0128663e3ea4d88208d3414cee1686b1333a 100644 --- a/app/lib/server/methods/removeOAuthService.js +++ b/app/lib/server/methods/removeOAuthService.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import s from 'underscore.string'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; -import s from 'underscore.string'; Meteor.methods({ removeOAuthService(name) { - check(name, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/restartServer.js b/app/lib/server/methods/restartServer.js index 0a84437791f3b20dc4b0ce00ed8ce6f324e7ac63..d694b833f746f102063a0fb2d4ba4a7c48b69dfa 100644 --- a/app/lib/server/methods/restartServer.js +++ b/app/lib/server/methods/restartServer.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasRole } from '../../../authorization'; Meteor.methods({ diff --git a/app/lib/server/methods/robotMethods.js b/app/lib/server/methods/robotMethods.js index dffe2f0468200df13d57e1792a2ee0fd90d4236a..d93d3fa57bf3556110ca31d97f4ff11378ba94bd 100644 --- a/app/lib/server/methods/robotMethods.js +++ b/app/lib/server/methods/robotMethods.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import _ from 'underscore'; + import { hasRole } from '../../../authorization'; import * as Models from '../../../models'; -import _ from 'underscore'; Meteor.methods({ 'robot.modelCall'(model, method, args) { diff --git a/app/lib/server/methods/saveSetting.js b/app/lib/server/methods/saveSetting.js index cb6b1a603804cebbfe9220a3d4852ca2d5d76c48..5eedf7e4c0e65354d0a2ac9530128ece86a4456c 100644 --- a/app/lib/server/methods/saveSetting.js +++ b/app/lib/server/methods/saveSetting.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import { Settings } from '../../../models'; diff --git a/app/lib/server/methods/saveSettings.js b/app/lib/server/methods/saveSettings.js index e1028b995ceeedc1a6b25194714b14fcc3681f5d..7446f76f4c3c586a2164f8aa726501d336b49d37 100644 --- a/app/lib/server/methods/saveSettings.js +++ b/app/lib/server/methods/saveSettings.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import { Settings } from '../../../models'; diff --git a/app/lib/server/methods/sendInvitationEmail.js b/app/lib/server/methods/sendInvitationEmail.js index efe8e86773b11a4197b7d06412be8c7eeb36697a..a8f8e21c827c54ce29f146c2a30484e094dc5d59 100644 --- a/app/lib/server/methods/sendInvitationEmail.js +++ b/app/lib/server/methods/sendInvitationEmail.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import * as Mailer from '../../../mailer'; import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; diff --git a/app/lib/server/methods/sendMessage.js b/app/lib/server/methods/sendMessage.js index cbc50c642e759db4243a8ac5f7761f225179c062..67b20c05327c790d60fd485ae716f5ce753a6e84 100644 --- a/app/lib/server/methods/sendMessage.js +++ b/app/lib/server/methods/sendMessage.js @@ -2,7 +2,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; - import moment from 'moment'; import { hasPermission } from '../../../authorization'; @@ -61,7 +60,7 @@ Meteor.methods({ const user = Users.findOneById(uid, { fields: { username: 1, - ...(!!settings.get('Message_SetNameToAliasEnabled') && { name: 1 }), + ...!!settings.get('Message_SetNameToAliasEnabled') && { name: 1 }, }, }); let { rid } = message; @@ -85,7 +84,6 @@ Meteor.methods({ metrics.messagesSent.inc(); // TODO This line needs to be moved to it's proper place. See the comments on: https://github.com/RocketChat/Rocket.Chat/pull/5736 return sendMessage(user, message, room); - } catch (error) { if (error === 'error-not-allowed') { throw new Meteor.Error('error-not-allowed'); @@ -96,7 +94,7 @@ Meteor.methods({ Notifications.notifyUser(uid, 'message', { _id: Random.id(), rid: message.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__(error, {}, user.language), }); } diff --git a/app/lib/server/methods/sendSMTPTestEmail.js b/app/lib/server/methods/sendSMTPTestEmail.js index 0da49f5fa5f9a7207187fb1c4916ac95c15ae472..8d9ef7cde0d66097ed59661695cca5d8ba4df566 100644 --- a/app/lib/server/methods/sendSMTPTestEmail.js +++ b/app/lib/server/methods/sendSMTPTestEmail.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import * as Mailer from '../../../mailer'; import { settings } from '../../../settings'; diff --git a/app/lib/server/methods/setAdminStatus.js b/app/lib/server/methods/setAdminStatus.js index a3bdea0306a7d4531161ed966a119f324d78fe5f..9ea6d5259d3151d852da879781641b9697d1f825 100644 --- a/app/lib/server/methods/setAdminStatus.js +++ b/app/lib/server/methods/setAdminStatus.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; Meteor.methods({ setAdminStatus(userId, admin) { - check(userId, String); check(admin, Match.Optional(Boolean)); @@ -20,8 +20,7 @@ Meteor.methods({ if (admin) { return Meteor.call('authorization:addUserToRole', 'admin', user.username); - } else { - return Meteor.call('authorization:removeUserFromRole', 'admin', user.username); } + return Meteor.call('authorization:removeUserFromRole', 'admin', user.username); }, }); diff --git a/app/lib/server/methods/setEmail.js b/app/lib/server/methods/setEmail.js index 2a6e99cad538fb67f4ba506e63d109733091c314..e7ccd00c29b1a328f486c26c156e357e629afde6 100644 --- a/app/lib/server/methods/setEmail.js +++ b/app/lib/server/methods/setEmail.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { settings } from '../../../settings'; import { setEmail } from '../functions'; import { RateLimiter } from '../lib'; Meteor.methods({ setEmail(email) { - - check (email, String); + check(email, String); if (!Meteor.userId()) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'setEmail' }); diff --git a/app/lib/server/methods/setRealName.js b/app/lib/server/methods/setRealName.js index 4deb66420df39a5c9bbf2ef42ee195f10234a0d0..9969f25a151f81a79a635906b7f09d3050362b41 100644 --- a/app/lib/server/methods/setRealName.js +++ b/app/lib/server/methods/setRealName.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { settings } from '../../../settings'; import { setRealName } from '../functions'; import { RateLimiter } from '../lib'; Meteor.methods({ setRealName(name) { - check(name, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/setUsername.js b/app/lib/server/methods/setUsername.js index 2047f51ccc434a0c216bda930b7adef542e3f2f5..5a8ed788d8fa64f7279e7f8fd834580b28d720fb 100644 --- a/app/lib/server/methods/setUsername.js +++ b/app/lib/server/methods/setUsername.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { Users } from '../../../models'; import { callbacks } from '../../../callbacks'; import { setUsername, checkUsernameAvailability } from '../functions'; import { RateLimiter } from '../lib'; -import _ from 'underscore'; Meteor.methods({ setUsername(username, param = {}) { diff --git a/app/lib/server/methods/unarchiveRoom.js b/app/lib/server/methods/unarchiveRoom.js index 3399c150428758eb6a2585907cd2da08d006160a..e584ce1044d3cccf72b0f10828a7d228cf3df2ce 100644 --- a/app/lib/server/methods/unarchiveRoom.js +++ b/app/lib/server/methods/unarchiveRoom.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; import { unarchiveRoom } from '../functions'; Meteor.methods({ unarchiveRoom(rid) { - check(rid, String); if (!Meteor.userId()) { diff --git a/app/lib/server/methods/unblockUser.js b/app/lib/server/methods/unblockUser.js index b06c3cc0b8a0829d6cf77229f65120c5799ff29b..3b3522feebd8924716843c2d63dee71cdac3bbb7 100644 --- a/app/lib/server/methods/unblockUser.js +++ b/app/lib/server/methods/unblockUser.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../../models'; Meteor.methods({ unblockUser({ rid, blocked }) { - check(rid, String); check(blocked, String); diff --git a/app/lib/server/methods/updateMessage.js b/app/lib/server/methods/updateMessage.js index 7721dea7f3c7950d4a8cf5e4c91d46ed0ae6cc48..3b90cc484f7b12fd87b3e78a6cff88013afd97dc 100644 --- a/app/lib/server/methods/updateMessage.js +++ b/app/lib/server/methods/updateMessage.js @@ -1,15 +1,15 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import moment from 'moment'; + import { Messages } from '../../../models'; import { settings } from '../../../settings'; import { hasPermission } from '../../../authorization'; -import moment from 'moment'; import { updateMessage } from '../functions'; Meteor.methods({ updateMessage(message) { - - check(message, Match.ObjectIncluding({ _id:String })); + check(message, Match.ObjectIncluding({ _id: String })); if (!Meteor.userId()) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'updateMessage' }); diff --git a/app/lib/server/oauth/facebook.js b/app/lib/server/oauth/facebook.js index a86468b55d783b2c9e47ba762e2ba06b63b4bec3..f19aa01c622ba2023c7d9c0a1f769d5d7e355999 100644 --- a/app/lib/server/oauth/facebook.js +++ b/app/lib/server/oauth/facebook.js @@ -1,10 +1,12 @@ +import crypto from 'crypto'; + import { Match, check } from 'meteor/check'; import _ from 'underscore'; import { OAuth } from 'meteor/oauth'; import { HTTP } from 'meteor/http'; + import { registerAccessTokenService } from './oauth'; -import crypto from 'crypto'; const whitelisted = [ 'id', @@ -50,7 +52,7 @@ registerAccessTokenService('facebook', function(options) { const serviceData = { accessToken: options.accessToken, - expiresAt: (+new Date) + (1000 * parseInt(options.expiresIn, 10)), + expiresAt: +new Date() + (1000 * parseInt(options.expiresIn, 10)), }; const fields = _.pick(identity, whitelisted); @@ -65,4 +67,3 @@ registerAccessTokenService('facebook', function(options) { }, }; }); - diff --git a/app/lib/server/oauth/google.js b/app/lib/server/oauth/google.js index 7bccf948776171d4dd25a900d7ab96926cd7dbe2..848aa1c1c1b04ad86cf72e8523b5fdf469b51eaf 100644 --- a/app/lib/server/oauth/google.js +++ b/app/lib/server/oauth/google.js @@ -2,6 +2,7 @@ import { Match, check } from 'meteor/check'; import _ from 'underscore'; import { HTTP } from 'meteor/http'; import { Google } from 'meteor/google-oauth'; + import { registerAccessTokenService } from './oauth'; function getIdentity(accessToken) { @@ -39,7 +40,7 @@ registerAccessTokenService('google', function(options) { const serviceData = { accessToken: options.accessToken, idToken: options.idToken, - expiresAt: (+new Date) + (1000 * parseInt(options.expiresIn, 10)), + expiresAt: +new Date() + (1000 * parseInt(options.expiresIn, 10)), scope: options.scopes || getScopes(options.accessToken), }; diff --git a/app/lib/server/oauth/oauth.js b/app/lib/server/oauth/oauth.js index be9b128407049cdcacc93afe49010ede57a82e52..5b83b4239d924c2e7c1912a91e78482cbbeb5d04 100644 --- a/app/lib/server/oauth/oauth.js +++ b/app/lib/server/oauth/oauth.js @@ -53,5 +53,3 @@ Accounts.registerLoginHandler(function(options) { return Accounts.updateOrCreateUserFromExternalService(service.serviceName, oauthResult.serviceData, oauthResult.options); }); - - diff --git a/app/lib/server/oauth/proxy.js b/app/lib/server/oauth/proxy.js index 0a022b4ec48e9d6a7ea61554bf3985aa9e2ac9e7..35517df1915b0978c4a22ca272524bd0e1a93e5b 100644 --- a/app/lib/server/oauth/proxy.js +++ b/app/lib/server/oauth/proxy.js @@ -1,13 +1,12 @@ import _ from 'underscore'; import { OAuth } from 'meteor/oauth'; + import { settings } from '../../../settings'; OAuth._redirectUri = _.wrap(OAuth._redirectUri, function(func, serviceName, ...args) { const proxy = settings.get('Accounts_OAuth_Proxy_services').replace(/\s/g, '').split(','); if (proxy.includes(serviceName)) { return `${ settings.get('Accounts_OAuth_Proxy_host') }/oauth_redirect`; - } else { - return func(serviceName, ...args); } - + return func(serviceName, ...args); }); diff --git a/app/lib/server/oauth/twitter.js b/app/lib/server/oauth/twitter.js index 67ebca490495b737b5f6f124ff6a16f7c268792a..d93499fb57f8ff4ea1cfad65ce9a21260f13de22 100644 --- a/app/lib/server/oauth/twitter.js +++ b/app/lib/server/oauth/twitter.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; -import { registerAccessTokenService } from './oauth'; import Twit from 'twit'; import _ from 'underscore'; +import { registerAccessTokenService } from './oauth'; + const whitelistedFields = [ 'id', 'name', @@ -44,7 +45,7 @@ registerAccessTokenService('twitter', function(options) { const serviceData = { accessToken: options.accessToken, - expiresAt: (+new Date) + (1000 * parseInt(options.expiresIn, 10)), + expiresAt: +new Date() + (1000 * parseInt(options.expiresIn, 10)), }; const fields = _.pick(identity, whitelistedFields); diff --git a/app/lib/server/publications/settings.js b/app/lib/server/publications/settings.js index ffdc31a45748df73752365366bd3c0a698e8bc08..dec4c0a6d4ae5683895b8d896b923e0cfe0a1efa 100644 --- a/app/lib/server/publications/settings.js +++ b/app/lib/server/publications/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Settings } from '../../../models'; import { hasPermission } from '../../../authorization'; import { Notifications } from '../../../notifications'; diff --git a/app/lib/server/startup/email.js b/app/lib/server/startup/email.js index c86347a4b3dd2895aa69be2f3c07c60e003e05f8..7b891f44ac7b7ab4569fcb730cadb4b0d9bc4a1e 100644 --- a/app/lib/server/startup/email.js +++ b/app/lib/server/startup/email.js @@ -2,7 +2,6 @@ import { settings } from '../../../settings'; settings.addGroup('Email', function() { this.section('Style', function() { - this.add('email_style', `html, body, .body { font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Helvetica Neue','Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Meiryo UI',Arial,sans-serif; } body, .body { diff --git a/app/lib/server/startup/oAuthServicesUpdate.js b/app/lib/server/startup/oAuthServicesUpdate.js index 3e4081386089dd4ca6d7fc2517026a9f7d0d96d4..e5ff4455f7161bd205568500d155e7fb50f045ac 100644 --- a/app/lib/server/startup/oAuthServicesUpdate.js +++ b/app/lib/server/startup/oAuthServicesUpdate.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import _ from 'underscore'; + import { CustomOAuth } from '../../../custom-oauth'; import { Logger } from '../../../logger'; import { settings } from '../../../settings'; -import _ from 'underscore'; const logger = new Logger('rocketchat:lib', { methods: { diff --git a/app/lib/server/startup/rateLimiter.js b/app/lib/server/startup/rateLimiter.js index e4ff5076011f458911f12020a8d963d4b00f9072..826e25000b360944592fbbdcf8181f6d6f005f0a 100644 --- a/app/lib/server/startup/rateLimiter.js +++ b/app/lib/server/startup/rateLimiter.js @@ -2,6 +2,7 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { RateLimiter } from 'meteor/rate-limit'; + import { settings } from '../../../settings'; import { metrics } from '../../../metrics'; diff --git a/app/lib/server/startup/robots.js b/app/lib/server/startup/robots.js index db6ff94a948e5aff9db759cccf834cd387ede77a..9969166ab5deb3d55fdee509fb51036edda7366b 100644 --- a/app/lib/server/startup/robots.js +++ b/app/lib/server/startup/robots.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; + import { settings } from '../../../settings'; Meteor.startup(function() { diff --git a/app/lib/server/startup/settings.js b/app/lib/server/startup/settings.js index 66f25ffc185ae80fb907bf918b4adb30f08a638a..9287ff71b870581d6797c41814784359c2822283 100644 --- a/app/lib/server/startup/settings.js +++ b/app/lib/server/startup/settings.js @@ -1,4 +1,5 @@ import { Random } from 'meteor/random'; + import { settings } from '../../../settings'; import './email'; @@ -255,16 +256,16 @@ settings.addGroup('Accounts', function() { type: 'select', values: [ { - key : 'all', - i18nLabel : 'All_messages', + key: 'all', + i18nLabel: 'All_messages', }, { - key : 'mentions', - i18nLabel : 'Mentions', + key: 'mentions', + i18nLabel: 'Mentions', }, { - key : 'nothing', - i18nLabel : 'Nothing', + key: 'nothing', + i18nLabel: 'Nothing', }, ], public: true, diff --git a/app/lib/server/startup/settingsOnLoadCdnPrefix.js b/app/lib/server/startup/settingsOnLoadCdnPrefix.js index 820eabbd9d435c78bde6666eb5b7d8e6e25643c5..3c3e62bb356e8ebb5c3ec5878b24a1f5d4247872 100644 --- a/app/lib/server/startup/settingsOnLoadCdnPrefix.js +++ b/app/lib/server/startup/settingsOnLoadCdnPrefix.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { WebAppInternals } from 'meteor/webapp'; -import { settings } from '../../../settings'; import _ from 'underscore'; +import { settings } from '../../../settings'; + function testWebAppInternals(fn) { typeof WebAppInternals !== 'undefined' && fn(WebAppInternals); } @@ -27,7 +28,7 @@ Meteor.startup(function() { if (_.isString(cdnValue) && cdnValue.trim()) { if (useForAll) { return testWebAppInternals((WebAppInternals) => WebAppInternals.setBundledJsCssPrefix(cdnValue)); - } else if (_.isString(cdnJsCss) && cdnJsCss.trim()) { + } if (_.isString(cdnJsCss) && cdnJsCss.trim()) { return testWebAppInternals((WebAppInternals) => WebAppInternals.setBundledJsCssPrefix(cdnJsCss)); } } diff --git a/app/lib/server/startup/settingsOnLoadDirectReply.js b/app/lib/server/startup/settingsOnLoadDirectReply.js index 884e3aaa169a02a315d76680ccef60b5b8c0efa8..73675065cb5bfcd0d7ca86da31520ec17e1d6f53 100644 --- a/app/lib/server/startup/settingsOnLoadDirectReply.js +++ b/app/lib/server/startup/settingsOnLoadDirectReply.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import _ from 'underscore'; + +import { settings } from '../../../settings'; import { IMAPIntercepter, POP3Helper, POP3 } from '../lib/interceptDirectReplyEmails.js'; diff --git a/app/lib/server/startup/settingsOnLoadSMTP.js b/app/lib/server/startup/settingsOnLoadSMTP.js index 2beef6a6f76163a3295c9adb0b20479eb2d3d682..4ad9b806933d55fc6a2ae0b19ba9056d62838b39 100644 --- a/app/lib/server/startup/settingsOnLoadSMTP.js +++ b/app/lib/server/startup/settingsOnLoadSMTP.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import _ from 'underscore'; +import { settings } from '../../../settings'; + const buildMailURL = _.debounce(function() { console.log('Updating process.env.MAIL_URL'); diff --git a/app/lib/tests/server.tests.js b/app/lib/tests/server.tests.js index 87f18fb2a21faf4b32b424df649bd9721512ec04..fab781ed66713e2be6c2094d8f161dca8fd83124 100644 --- a/app/lib/tests/server.tests.js +++ b/app/lib/tests/server.tests.js @@ -58,8 +58,8 @@ describe('PasswordPolicyClass', () => { assert.equal(passwordPolice.validate(), false); assert.equal(passwordPolice.validate(1), false); assert.equal(passwordPolice.validate(true), false); - assert.equal(passwordPolice.validate(new Date), false); - assert.equal(passwordPolice.validate(new Function), false); + assert.equal(passwordPolice.validate(new Date()), false); + assert.equal(passwordPolice.validate(new Function()), false); assert.equal(passwordPolice.validate(''), false); }); diff --git a/app/livechat/client/lib/dataHandler.js b/app/livechat/client/lib/dataHandler.js index 76ea2eb097b5d1459a62ffa5d05c916f2f84227e..abba76521c574ac2fd13f598bb73e4b01e99dbec 100644 --- a/app/livechat/client/lib/dataHandler.js +++ b/app/livechat/client/lib/dataHandler.js @@ -18,7 +18,7 @@ const calculateResponseTimings = (dbCursor) => { } }); - const avgArt = (count) ? art / count : 0; + const avgArt = count ? art / count : 0; return { avg: Math.round(avgArt * 100) / 100, @@ -44,7 +44,7 @@ const calculateReactionTimings = (dbCursor) => { } }); - const avgArnt = (count) ? arnt / count : 0; + const avgArnt = count ? arnt / count : 0; return { avg: Math.round(avgArnt * 100) / 100, @@ -70,7 +70,7 @@ const calculateDurationData = (dbCursor) => { } }); - const avgCD = (count) ? total / count : 0; + const avgCD = count ? total / count : 0; return { avg: Math.round(avgCD * 100) / 100, @@ -163,10 +163,10 @@ export const getConversationsOverviewData = (dbCursor) => { return [{ title: 'Total_conversations', - value: (total) ? total : 0, + value: total || 0, }, { title: 'Total_messages', - value: (totalMessages) ? totalMessages : 0, + value: totalMessages || 0, }]; }; @@ -191,9 +191,9 @@ export const getTimingsOverviewData = (dbCursor) => { return [{ title: 'Avg_response_time', - value: (total) ? secondsToHHMMSS((totalReactionTime / total).toFixed(2)) : '-', + value: total ? secondsToHHMMSS((totalReactionTime / total).toFixed(2)) : '-', }, { title: 'Avg_reaction_time', - value: (total) ? secondsToHHMMSS((totalResponseTime / total).toFixed(2)) : '-', + value: total ? secondsToHHMMSS((totalResponseTime / total).toFixed(2)) : '-', }]; }; diff --git a/app/livechat/client/lib/dateHandler.js b/app/livechat/client/lib/dateHandler.js index e6ebc21324680a431b2f5be1ee6456148f53b415..ac7d4167aa53f5c3bdbb1655781d76c609082a55 100644 --- a/app/livechat/client/lib/dateHandler.js +++ b/app/livechat/client/lib/dateHandler.js @@ -1,6 +1,7 @@ -import { handleError } from '../../../utils'; import moment from 'moment'; +import { handleError } from '../../../utils'; + /** * Check if given daterange matches any of pre-defined options @@ -51,13 +52,12 @@ export const setDateRange = (value, from, to) => { from: moment(from).format('MMM D YYYY'), to: moment(to).format('MMM D YYYY'), }; - } else { - return { - value: 'this-week', - from: moment().startOf('week').format('MMM D YYYY'), - to: moment().endOf('week').format('MMM D YYYY'), - }; } + return { + value: 'this-week', + from: moment().startOf('week').format('MMM D YYYY'), + to: moment().endOf('week').format('MMM D YYYY'), + }; }; /** @@ -76,11 +76,11 @@ export const updateDateRange = (currentDaterange, order) => { return setDateRange('day', moment(currentDaterange.from, 'MMM D YYYY').add(1, 'days').startOf('day'), moment(currentDaterange.to, 'MMM D YYYY').add(1, 'days').startOf('day')); - } else { - return setDateRange('day', - moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'days').startOf('day'), - moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'days').startOf('day')); } + return setDateRange('day', + moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'days').startOf('day'), + moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'days').startOf('day')); + // break; case 'this-week': case 'prev-week': @@ -89,11 +89,11 @@ export const updateDateRange = (currentDaterange, order) => { return setDateRange('week', moment(currentDaterange.from, 'MMM D YYYY').add(1, 'weeks').startOf('week'), moment(currentDaterange.to, 'MMM D YYYY').add(1, 'weeks').endOf('week')); - } else { - return setDateRange('week', - moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'weeks').startOf('week'), - moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'weeks').endOf('week')); } + return setDateRange('week', + moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'weeks').startOf('week'), + moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'weeks').endOf('week')); + // break; case 'this-month': case 'prev-month': @@ -102,11 +102,11 @@ export const updateDateRange = (currentDaterange, order) => { return setDateRange('month', moment(currentDaterange.from, 'MMM D YYYY').add(1, 'months').startOf('month'), moment(currentDaterange.to, 'MMM D YYYY').add(1, 'months').endOf('month')); - } else { - return setDateRange('month', - moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'months').startOf('month'), - moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'months').endOf('month')); } + return setDateRange('month', + moment(currentDaterange.from, 'MMM D YYYY').subtract(1, 'months').startOf('month'), + moment(currentDaterange.to, 'MMM D YYYY').subtract(1, 'months').endOf('month')); + // break; case 'custom': handleError({ details: { errorTitle: 'Navigation_didnot_work' }, error: 'You_have_selected_custom_dates' }); diff --git a/app/livechat/client/route.js b/app/livechat/client/route.js index fa0eb1167a482034a0d29395c40b02c31704314f..18cacc6c1bf577682fe0a94cad537c97ac8fcf01 100644 --- a/app/livechat/client/route.js +++ b/app/livechat/client/route.js @@ -1,4 +1,5 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; + import { AccountBox } from '../../ui-utils'; import './views/app/livechatDashboard.html'; diff --git a/app/livechat/client/startup/notifyUnreadRooms.js b/app/livechat/client/startup/notifyUnreadRooms.js index e2256129ccf1cb4d6ef1595d10017cf41cef747c..ce0c05d5245631c6adb9747b0e622bad136a44c7 100644 --- a/app/livechat/client/startup/notifyUnreadRooms.js +++ b/app/livechat/client/startup/notifyUnreadRooms.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { getUserPreference } from '../../../utils'; import { Subscriptions, Users } from '../../../models'; @@ -23,13 +24,12 @@ const play = (audio) => { Meteor.startup(function() { Tracker.autorun(function() { - if (!settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { stop(audio); return; } - const subs = Subscriptions.find({ t: 'l', ls : { $exists: 0 }, open: true }).count(); + const subs = Subscriptions.find({ t: 'l', ls: { $exists: 0 }, open: true }).count(); if (subs === 0) { stop(audio); return; @@ -45,6 +45,5 @@ Meteor.startup(function() { [audio] = $(`#${ newRoomNotification }`); play(audio); - }); }); diff --git a/app/livechat/client/views/app/analytics/livechatAnalytics.js b/app/livechat/client/views/app/analytics/livechatAnalytics.js index 0071f8d3b13279ef065bb48a165dc3b3cd35e19e..894b9940c4c7a24302b7551fe97525c78aedc875 100644 --- a/app/livechat/client/views/app/analytics/livechatAnalytics.js +++ b/app/livechat/client/views/app/analytics/livechatAnalytics.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; +import moment from 'moment'; + import { handleError } from '../../../../../utils'; import { popover } from '../../../../../ui-utils'; -import moment from 'moment'; import { drawLineChart } from '../../../lib/chartHandler'; import { setDateRange, updateDateRange } from '../../../lib/dateHandler'; import './livechatAnalytics.html'; @@ -172,9 +173,7 @@ Template.livechatAnalytics.onRendered(() => { updateAnalyticsOverview(); updateAnalyticsChart(); } - }); - }); Template.livechatAnalytics.events({ diff --git a/app/livechat/client/views/app/analytics/livechatAnalyticsCustomDaterange.js b/app/livechat/client/views/app/analytics/livechatAnalyticsCustomDaterange.js index 040c55811a08588a1f85a5770a92b02dbb5997e8..d2c11e9cc449f93778b09b66299e3d12ebe108ee 100644 --- a/app/livechat/client/views/app/analytics/livechatAnalyticsCustomDaterange.js +++ b/app/livechat/client/views/app/analytics/livechatAnalyticsCustomDaterange.js @@ -1,7 +1,8 @@ import { Template } from 'meteor/templating'; +import moment from 'moment'; + import { handleError } from '../../../../../utils'; import { popover } from '../../../../../ui-utils'; -import moment from 'moment'; import { setDateRange } from '../../../lib/dateHandler'; import './livechatAnalyticsCustomDaterange.html'; diff --git a/app/livechat/client/views/app/analytics/livechatAnalyticsDaterange.js b/app/livechat/client/views/app/analytics/livechatAnalyticsDaterange.js index 115cc813fea4c75a817d6bb7eb4ee87348658dd1..fa0f851a357e6cac2f8daa5a512db8afef2d35d5 100644 --- a/app/livechat/client/views/app/analytics/livechatAnalyticsDaterange.js +++ b/app/livechat/client/views/app/analytics/livechatAnalyticsDaterange.js @@ -1,12 +1,13 @@ import { Template } from 'meteor/templating'; -import { popover } from '../../../../../ui-utils'; import moment from 'moment'; + +import { popover } from '../../../../../ui-utils'; import { setDateRange } from '../../../lib/dateHandler'; import './livechatAnalyticsDaterange.html'; Template.livechatAnalyticsDaterange.helpers({ bold(prop) { - return (prop === Template.currentData().daterange.get().value) ? 'rc-popover__item--bold' : ''; + return prop === Template.currentData().daterange.get().value ? 'rc-popover__item--bold' : ''; }, }); diff --git a/app/livechat/client/views/app/analytics/livechatRealTimeMonitoring.js b/app/livechat/client/views/app/analytics/livechatRealTimeMonitoring.js index 1f2b448cc5cfde7549edafe24f06e78d5f682741..d45da0d4c100e02904a22216cf1a8aba7114bdbf 100644 --- a/app/livechat/client/views/app/analytics/livechatRealTimeMonitoring.js +++ b/app/livechat/client/views/app/analytics/livechatRealTimeMonitoring.js @@ -2,6 +2,7 @@ import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; import moment from 'moment'; import { ReactiveVar } from 'meteor/reactive-var'; + import { drawLineChart, drawDoughnutChart, updateChart } from '../../../lib/chartHandler'; import { getTimingsChartData, getAgentStatusData, getConversationsOverviewData, getTimingsOverviewData } from '../../../lib/dataHandler'; import { LivechatMonitoring } from '../../../collections/LivechatMonitoring'; @@ -197,7 +198,7 @@ const updateTimingsOverview = () => { const displayDepartmentChart = (val) => { const elem = document.getElementsByClassName('lc-chats-per-dept-chart-section')[0]; - elem.style.display = (val) ? 'block' : 'none'; + elem.style.display = val ? 'block' : 'none'; }; const updateVisitorsCount = () => { diff --git a/app/livechat/client/views/app/integrations/livechatIntegrationFacebook.js b/app/livechat/client/views/app/integrations/livechatIntegrationFacebook.js index abd9eea03dde77a9019fe452b8228028e590351b..f76f0733cc1fc446665eebae2418d22db39fe1fb 100644 --- a/app/livechat/client/views/app/integrations/livechatIntegrationFacebook.js +++ b/app/livechat/client/views/app/integrations/livechatIntegrationFacebook.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { modal } from '../../../../../ui-utils'; import { t, handleError } from '../../../../../utils'; import './livechatIntegrationFacebook.html'; diff --git a/app/livechat/client/views/app/integrations/livechatIntegrationWebhook.js b/app/livechat/client/views/app/integrations/livechatIntegrationWebhook.js index 26ba9f57cb99a793e6e8a14615008ef9ec8e3f89..c1470419aca994db5b92828cc83a12e751e75377 100644 --- a/app/livechat/client/views/app/integrations/livechatIntegrationWebhook.js +++ b/app/livechat/client/views/app/integrations/livechatIntegrationWebhook.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; -import { modal } from '../../../../../ui-utils'; -import { t, handleError } from '../../../../../utils'; -import { LivechatIntegration } from '../../../collections/LivechatIntegration'; import _ from 'underscore'; import s from 'underscore.string'; import toastr from 'toastr'; + +import { modal } from '../../../../../ui-utils'; +import { t, handleError } from '../../../../../utils'; +import { LivechatIntegration } from '../../../collections/LivechatIntegration'; import './livechatIntegrationWebhook.html'; Template.livechatIntegrationWebhook.helpers({ diff --git a/app/livechat/client/views/app/livechatAppearance.js b/app/livechat/client/views/app/livechatAppearance.js index f19b3d1e9f52e0b55e697fdba09bf6ef87d04027..307abd3f30a771dbd70d4ca2b2eed3002a541095 100644 --- a/app/livechat/client/views/app/livechatAppearance.js +++ b/app/livechat/client/views/app/livechatAppearance.js @@ -4,10 +4,11 @@ import { Mongo } from 'meteor/mongo'; import { ReactiveVar } from 'meteor/reactive-var'; import { Random } from 'meteor/random'; import { Template } from 'meteor/templating'; -import { t, handleError } from '../../../../utils'; import s from 'underscore.string'; import moment from 'moment'; import toastr from 'toastr'; + +import { t, handleError } from '../../../../utils'; import './livechatAppearance.html'; const LivechatAppearance = new Mongo.Collection('livechatAppearance'); @@ -109,16 +110,14 @@ Template.livechatAppearance.helpers({ sampleColor() { if (Template.instance().previewState.get().indexOf('offline') !== -1) { return Template.instance().colorOffline.get(); - } else { - return Template.instance().color.get(); } + return Template.instance().color.get(); }, sampleTitle() { if (Template.instance().previewState.get().indexOf('offline') !== -1) { return Template.instance().titleOffline.get(); - } else { - return Template.instance().title.get(); } + return Template.instance().title.get(); }, sampleData() { return { @@ -330,7 +329,6 @@ Template.livechatAppearance.events({ const settingRegistrationFormMessage = LivechatAppearance.findOne('Livechat_registration_form_message'); instance.registrationFormMessage.set(settingRegistrationFormMessage && settingRegistrationFormMessage.value); - }, 'submit .rocket-form'(e, instance) { e.preventDefault(); diff --git a/app/livechat/client/views/app/livechatCurrentChats.js b/app/livechat/client/views/app/livechatCurrentChats.js index 7bf92b3e52df5ba96a998947862e18a7edfb133c..4190b37b7548f7dcb12f951a3434a30da1d80463 100644 --- a/app/livechat/client/views/app/livechatCurrentChats.js +++ b/app/livechat/client/views/app/livechatCurrentChats.js @@ -5,6 +5,7 @@ import { Mongo } from 'meteor/mongo'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { modal } from '../../../../ui-utils/client'; import { t, handleError } from '../../../../utils/client'; import './livechatCurrentChats.html'; @@ -129,7 +130,7 @@ Template.livechatCurrentChats.events({ Template.livechatCurrentChats.onCreated(function() { this.limit = new ReactiveVar(20); this.filter = new ReactiveVar({}); - this.selectedAgent = new ReactiveVar; + this.selectedAgent = new ReactiveVar(); this.autorun(() => { this.subscribe('livechat:rooms', this.filter.get(), 0, this.limit.get()); }); diff --git a/app/livechat/client/views/app/livechatCustomFieldForm.js b/app/livechat/client/views/app/livechatCustomFieldForm.js index 38ef0b3d9916853db57cfd4a677826c685d3c3f5..c3ac8eb67b16647440702d1c4fffc01aebab1382 100644 --- a/app/livechat/client/views/app/livechatCustomFieldForm.js +++ b/app/livechat/client/views/app/livechatCustomFieldForm.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { t, handleError } from '../../../../utils'; import { LivechatCustomField } from '../../collections/LivechatCustomField'; -import toastr from 'toastr'; import './livechatCustomFieldForm.html'; Template.livechatCustomFieldForm.helpers({ diff --git a/app/livechat/client/views/app/livechatCustomFields.js b/app/livechat/client/views/app/livechatCustomFields.js index 7c393e86ca4f00354f07c46c2ec6f70659c1f465..7d23b002c84e3b20947b827e95b097979fabe9de 100644 --- a/app/livechat/client/views/app/livechatCustomFields.js +++ b/app/livechat/client/views/app/livechatCustomFields.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { modal } from '../../../../ui-utils'; import { t, handleError } from '../../../../utils'; import { LivechatCustomField } from '../../collections/LivechatCustomField'; diff --git a/app/livechat/client/views/app/livechatDepartmentForm.js b/app/livechat/client/views/app/livechatDepartmentForm.js index 5a807d3c10d1151741d1f81ddcbe5095d1b3ecfc..a319d728e7c9ac5c5f333a6d8e4680af0e96d4fd 100644 --- a/app/livechat/client/views/app/livechatDepartmentForm.js +++ b/app/livechat/client/views/app/livechatDepartmentForm.js @@ -2,12 +2,13 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import _ from 'underscore'; +import toastr from 'toastr'; + import { t, handleError } from '../../../../utils'; import { AgentUsers } from '../../collections/AgentUsers'; import { LivechatDepartment } from '../../collections/LivechatDepartment'; import { LivechatDepartmentAgents } from '../../collections/LivechatDepartmentAgents'; -import _ from 'underscore'; -import toastr from 'toastr'; import './livechatDepartmentForm.html'; Template.livechatDepartmentForm.helpers({ diff --git a/app/livechat/client/views/app/livechatDepartments.js b/app/livechat/client/views/app/livechatDepartments.js index 49400dd8bd3433d6081fa70a6fcb4ab2376aeed1..b984e565063cca85bf0b2c2591fc1f8a93bbc670 100644 --- a/app/livechat/client/views/app/livechatDepartments.js +++ b/app/livechat/client/views/app/livechatDepartments.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { modal } from '../../../../ui-utils'; import { t, handleError } from '../../../../utils'; import { LivechatDepartment } from '../../collections/LivechatDepartment'; diff --git a/app/livechat/client/views/app/livechatInstallation.js b/app/livechat/client/views/app/livechatInstallation.js index 2e468c95f1d895f4c4c5c43c9b32f3de3fe53eb1..45aea09287d1e37022359a0f570b2ecebab67869 100644 --- a/app/livechat/client/views/app/livechatInstallation.js +++ b/app/livechat/client/views/app/livechatInstallation.js @@ -1,6 +1,7 @@ import { Template } from 'meteor/templating'; -import { settings } from '../../../../settings'; import s from 'underscore.string'; + +import { settings } from '../../../../settings'; import './livechatInstallation.html'; const latestVersion = '1.0.0'; diff --git a/app/livechat/client/views/app/livechatOfficeHours.js b/app/livechat/client/views/app/livechatOfficeHours.js index 04844d35e897bb37234f96102843792b9a2df8e2..34de2ee6d02ad89dbd89973dc905ab467e8eca51 100644 --- a/app/livechat/client/views/app/livechatOfficeHours.js +++ b/app/livechat/client/views/app/livechatOfficeHours.js @@ -2,11 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; +import moment from 'moment'; + import { t, handleError } from '../../../../utils'; import { settings } from '../../../../settings'; import { LivechatOfficeHour } from '../../collections/livechatOfficeHour'; -import toastr from 'toastr'; -import moment from 'moment'; import './livechatOfficeHours.html'; Template.livechatOfficeHours.helpers({ @@ -27,7 +28,6 @@ Template.livechatOfficeHours.helpers({ }, finish(day) { return Template.instance().dayVars[day.day].finish.get(); - }, name(day) { return TAPi18n.__(day.day); diff --git a/app/livechat/client/views/app/livechatQueue.js b/app/livechat/client/views/app/livechatQueue.js index 7050de8e0b1e26ed481ccb2372c1aa22d945c73d..873bcc07bb92647bf2be391cffcc02c0967a2176 100644 --- a/app/livechat/client/views/app/livechatQueue.js +++ b/app/livechat/client/views/app/livechatQueue.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { settings } from '../../../../settings'; import { hasRole } from '../../../../authorization'; import { Users } from '../../../../models'; diff --git a/app/livechat/client/views/app/livechatReadOnly.js b/app/livechat/client/views/app/livechatReadOnly.js index 7f1cf2403fd9fe273599c251aac96cd2c0b74ac7..ec74925be8c6d371193661a8ed979fd96bcd8749 100644 --- a/app/livechat/client/views/app/livechatReadOnly.js +++ b/app/livechat/client/views/app/livechatReadOnly.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; + import { ChatRoom } from '../../../../models'; import { LivechatInquiry } from '../../../lib/LivechatInquiry'; import { call } from '../../../../ui-utils/client'; @@ -52,5 +53,4 @@ Template.livechatReadOnly.onCreated(function() { this.autorun(() => { this.room.set(ChatRoom.findOne({ _id: Template.currentData().rid }, { fields: { open: 1 } })); }); - }); diff --git a/app/livechat/client/views/app/livechatTriggers.js b/app/livechat/client/views/app/livechatTriggers.js index 0b690001e5581e6a78b88a44ebe0755a7ce5d67f..0cde3fd54790933df87ab4a7de802405eb2bbaea 100644 --- a/app/livechat/client/views/app/livechatTriggers.js +++ b/app/livechat/client/views/app/livechatTriggers.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { modal } from '../../../../ui-utils'; import { t, handleError } from '../../../../utils'; import { LivechatTrigger } from '../../collections/LivechatTrigger'; diff --git a/app/livechat/client/views/app/livechatTriggersForm.js b/app/livechat/client/views/app/livechatTriggersForm.js index fbd4a5ebeb1fa60d2448d30c94aebe7da08016f2..d8e34be287152ca4280141fedf393267ac2fe393 100644 --- a/app/livechat/client/views/app/livechatTriggersForm.js +++ b/app/livechat/client/views/app/livechatTriggersForm.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { t, handleError } from '../../../../utils'; import { LivechatTrigger } from '../../collections/LivechatTrigger'; -import toastr from 'toastr'; import './livechatTriggersForm.html'; Template.livechatTriggersForm.helpers({ diff --git a/app/livechat/client/views/app/livechatUsers.js b/app/livechat/client/views/app/livechatUsers.js index df35acd776c2e814bf582e0ec29fc224466c8e70..2843ecd6d807e8166de210dfaa9cbca3003d47fd 100644 --- a/app/livechat/client/views/app/livechatUsers.js +++ b/app/livechat/client/views/app/livechatUsers.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; +import _ from 'underscore'; +import toastr from 'toastr'; + import { modal } from '../../../../ui-utils'; import { t, handleError } from '../../../../utils'; import { AgentUsers } from '../../collections/AgentUsers'; -import _ from 'underscore'; -import toastr from 'toastr'; import './livechatUsers.html'; let ManagerUsers; diff --git a/app/livechat/client/views/app/tabbar/externalSearch.js b/app/livechat/client/views/app/tabbar/externalSearch.js index 75b844e6ade5fc638dcb3642015f0c9c225d6abd..e98b788f622349405215c01b6fe240fdbee78d3e 100644 --- a/app/livechat/client/views/app/tabbar/externalSearch.js +++ b/app/livechat/client/views/app/tabbar/externalSearch.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { LivechatExternalMessage } from '../../../../lib/LivechatExternalMessage'; import './externalSearch.html'; diff --git a/app/livechat/client/views/app/tabbar/visitorEdit.js b/app/livechat/client/views/app/tabbar/visitorEdit.js index 55acc81f09cbe0667434ffa07e132da61e4332b5..e417b833910f952a071c3c607568315bbdd55289 100644 --- a/app/livechat/client/views/app/tabbar/visitorEdit.js +++ b/app/livechat/client/views/app/tabbar/visitorEdit.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { ChatRoom } from '../../../../../models'; import { t } from '../../../../../utils'; import { LivechatVisitor } from '../../../collections/LivechatVisitor'; -import toastr from 'toastr'; import './visitorEdit.html'; Template.visitorEdit.helpers({ diff --git a/app/livechat/client/views/app/tabbar/visitorForward.js b/app/livechat/client/views/app/tabbar/visitorForward.js index 3b8dda292e00b5c213c9eabaea424a33f1496c84..ab7a6cf0d8485da2626b76e0f4e7f6188409f359 100644 --- a/app/livechat/client/views/app/tabbar/visitorForward.js +++ b/app/livechat/client/views/app/tabbar/visitorForward.js @@ -2,11 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { ChatRoom } from '../../../../../models'; import { t } from '../../../../../utils'; import { LivechatDepartment } from '../../../collections/LivechatDepartment'; import { AgentUsers } from '../../../collections/AgentUsers'; -import toastr from 'toastr'; import './visitorForward.html'; Template.visitorForward.helpers({ diff --git a/app/livechat/client/views/app/tabbar/visitorHistory.js b/app/livechat/client/views/app/tabbar/visitorHistory.js index cb7760a6a872cf335d3c43410ad02d86049e0440..1767d3b0cf59b18e03c251167caa0da13b8939a9 100644 --- a/app/livechat/client/views/app/tabbar/visitorHistory.js +++ b/app/livechat/client/views/app/tabbar/visitorHistory.js @@ -1,8 +1,9 @@ -import { ChatRoom } from '../../../../../models'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { Mongo } from 'meteor/mongo'; import moment from 'moment'; + +import { ChatRoom } from '../../../../../models'; import './visitorHistory.html'; const visitorHistory = new Mongo.Collection('visitor_history'); diff --git a/app/livechat/client/views/app/tabbar/visitorInfo.js b/app/livechat/client/views/app/tabbar/visitorInfo.js index c3edee3358ba7aa3427ffd273a79cc244a966831..50bfcaddd6b4f75a126644e8974f4a009f3013c6 100644 --- a/app/livechat/client/views/app/tabbar/visitorInfo.js +++ b/app/livechat/client/views/app/tabbar/visitorInfo.js @@ -4,6 +4,11 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import s from 'underscore.string'; +import moment from 'moment'; +import UAParser from 'ua-parser-js'; + import { modal } from '../../../../../ui-utils'; import { ChatRoom, Rooms, Subscriptions } from '../../../../../models'; import { settings } from '../../../../../settings'; @@ -11,10 +16,6 @@ import { t, handleError, roomTypes } from '../../../../../utils'; import { hasRole } from '../../../../../authorization'; import { LivechatVisitor } from '../../../collections/LivechatVisitor'; import { LivechatDepartment } from '../../../collections/LivechatDepartment'; -import _ from 'underscore'; -import s from 'underscore.string'; -import moment from 'moment'; -import UAParser from 'ua-parser-js'; import './visitorInfo.html'; Template.visitorInfo.helpers({ @@ -210,7 +211,6 @@ Template.visitorInfo.events({ } return closeRoom(inputValue); - }); }, diff --git a/app/livechat/client/views/app/tabbar/visitorNavigation.js b/app/livechat/client/views/app/tabbar/visitorNavigation.js index c0c8a59d134cdc81af84c1459ec0c48b1b68c84c..9c8360c4be20d21a32079dd9d9cef0832b3963ad 100644 --- a/app/livechat/client/views/app/tabbar/visitorNavigation.js +++ b/app/livechat/client/views/app/tabbar/visitorNavigation.js @@ -1,8 +1,9 @@ import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; +import moment from 'moment'; + import { ChatRoom } from '../../../../../models'; import { t } from '../../../../../utils'; -import moment from 'moment'; import './visitorNavigation.html'; const visitorNavigationHistory = new Mongo.Collection('visitor_navigation_history'); diff --git a/app/livechat/client/views/app/triggers/livechatTriggerAction.js b/app/livechat/client/views/app/triggers/livechatTriggerAction.js index 527a2ed9011b50febc5c08f36cefa7b1d7de024c..c68add9710103202490d9849399455c25da954fb 100644 --- a/app/livechat/client/views/app/triggers/livechatTriggerAction.js +++ b/app/livechat/client/views/app/triggers/livechatTriggerAction.js @@ -1,5 +1,6 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { settings } from '../../../../../settings'; import './livechatTriggerAction.html'; @@ -8,7 +9,7 @@ Template.livechatTriggerAction.helpers({ if (this.name === undefined && Template.instance().firstAction) { Template.instance().firstAction = false; return ''; - } else if (this.name !== current) { + } if (this.name !== current) { return 'hidden'; } }, diff --git a/app/livechat/client/views/app/triggers/livechatTriggerCondition.js b/app/livechat/client/views/app/triggers/livechatTriggerCondition.js index 6a6490853ce7bc61ec66e551071cea3853d14572..02c8ce64a449cca383cf319daecbcd65a51d55b2 100644 --- a/app/livechat/client/views/app/triggers/livechatTriggerCondition.js +++ b/app/livechat/client/views/app/triggers/livechatTriggerCondition.js @@ -6,7 +6,7 @@ Template.livechatTriggerCondition.helpers({ if (this.name === undefined && Template.instance().firstCondition) { Template.instance().firstCondition = false; return ''; - } else if (this.name !== current) { + } if (this.name !== current) { return 'hidden'; } }, diff --git a/app/livechat/client/views/sideNav/livechat.js b/app/livechat/client/views/sideNav/livechat.js index a49ed44d59529c1ddb3629abb156d54ec44cc29d..8e2056f58e304090227f15f1cc5f607d0d44b104 100644 --- a/app/livechat/client/views/sideNav/livechat.js +++ b/app/livechat/client/views/sideNav/livechat.js @@ -3,6 +3,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { ChatSubscription, Users } from '../../../../models'; import { KonchatNotification } from '../../../../ui'; import { settings } from '../../../../settings'; diff --git a/app/livechat/client/views/sideNav/livechatFlex.js b/app/livechat/client/views/sideNav/livechatFlex.js index 6848f07f931632704eab78fb7edc03142cfc7c7b..f8692b40284eb3114ad1786bdaa3eed04cdc3673 100644 --- a/app/livechat/client/views/sideNav/livechatFlex.js +++ b/app/livechat/client/views/sideNav/livechatFlex.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { SideNav, Layout } from '../../../../ui-utils'; import { t } from '../../../../utils'; import './livechatFlex.html'; diff --git a/app/livechat/imports/server/rest/departments.js b/app/livechat/imports/server/rest/departments.js index 337c4d523ed3246fd46ab9f4b5231bfafe4c041d..2c6b0b85e7f992aa991aa0f996b68f7e997a68c2 100644 --- a/app/livechat/imports/server/rest/departments.js +++ b/app/livechat/imports/server/rest/departments.js @@ -1,4 +1,5 @@ import { check } from 'meteor/check'; + import { API } from '../../../../api'; import { hasPermission } from '../../../../authorization'; import { LivechatDepartment, LivechatDepartmentAgents } from '../../../../models'; diff --git a/app/livechat/imports/server/rest/facebook.js b/app/livechat/imports/server/rest/facebook.js index 9637f38695222d0811c1134ecaefdbf43b32fc14..ab2283a51e02df1b2d6c9e5e8c0588d489f3c7aa 100644 --- a/app/livechat/imports/server/rest/facebook.js +++ b/app/livechat/imports/server/rest/facebook.js @@ -1,5 +1,7 @@ import crypto from 'crypto'; + import { Random } from 'meteor/random'; + import { API } from '../../../../api'; import { Rooms, Users, LivechatVisitors } from '../../../../models'; import { settings } from '../../../../settings'; diff --git a/app/livechat/imports/server/rest/sms.js b/app/livechat/imports/server/rest/sms.js index 5eec0dd39b5e4cb16cfd403e22888fb7b3404b8d..c0f6f9f1804d2f7d5b7533cf4c5c6e3329de3327 100644 --- a/app/livechat/imports/server/rest/sms.js +++ b/app/livechat/imports/server/rest/sms.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { Rooms, LivechatVisitors } from '../../../../models'; import { API } from '../../../../api'; import { SMS } from '../../../../sms'; diff --git a/app/livechat/imports/server/rest/upload.js b/app/livechat/imports/server/rest/upload.js index 6ec96c1d494b2388d0e469ced08c324b69a89a28..fc0b4ca433827966ca00aa418a049740c4a975f1 100644 --- a/app/livechat/imports/server/rest/upload.js +++ b/app/livechat/imports/server/rest/upload.js @@ -1,11 +1,13 @@ import { Meteor } from 'meteor/meteor'; +import Busboy from 'busboy'; +import filesize from 'filesize'; + import { settings } from '../../../../settings'; import { Settings, Rooms, LivechatVisitors } from '../../../../models'; import { fileUploadIsValidContentType } from '../../../../utils'; import { FileUpload } from '../../../../file-upload'; import { API } from '../../../../api'; -import Busboy from 'busboy'; -import filesize from 'filesize'; + let maxFileSize; settings.get('FileUpload_MaxFileSize', function(key, value) { @@ -52,7 +54,7 @@ API.v1.addRoute('livechat/upload/:rid', { }); }); - busboy.on('field', (fieldname, value) => fields[fieldname] = value); + busboy.on('field', (fieldname, value) => { fields[fieldname] = value; }); busboy.on('finish', Meteor.bindEnvironment(() => callback())); diff --git a/app/livechat/imports/server/rest/users.js b/app/livechat/imports/server/rest/users.js index 6da74562a86f96d389a08f6f44025e82a7761b51..5730b46f228900f77eddd6f3c41e65aa070e302a 100644 --- a/app/livechat/imports/server/rest/users.js +++ b/app/livechat/imports/server/rest/users.js @@ -1,9 +1,10 @@ import { check } from 'meteor/check'; +import _ from 'underscore'; + import { hasPermission, getUsersInRole } from '../../../../authorization'; import { API } from '../../../../api'; import { Users } from '../../../../models'; import { Livechat } from '../../../server/lib/Livechat'; -import _ from 'underscore'; API.v1.addRoute('livechat/users/:type', { authRequired: true }, { get() { @@ -22,7 +23,7 @@ API.v1.addRoute('livechat/users/:type', { authRequired: true }, { } else if (this.urlParams.type === 'manager') { role = 'livechat-manager'; } else { - throw 'Invalid type'; + throw new Error('Invalid type'); } const users = getUsersInRole(role); @@ -58,7 +59,7 @@ API.v1.addRoute('livechat/users/:type', { authRequired: true }, { return API.v1.success({ user }); } } else { - throw 'Invalid type'; + throw new Error('Invalid type'); } return API.v1.failure(); @@ -93,7 +94,7 @@ API.v1.addRoute('livechat/users/:type/:_id', { authRequired: true }, { } else if (this.urlParams.type === 'manager') { role = 'livechat-manager'; } else { - throw 'Invalid type'; + throw new Error('Invalid type'); } if (user.roles.indexOf(role) !== -1) { @@ -135,7 +136,7 @@ API.v1.addRoute('livechat/users/:type/:_id', { authRequired: true }, { return API.v1.success(); } } else { - throw 'Invalid type'; + throw new Error('Invalid type'); } return API.v1.failure(); diff --git a/app/livechat/lib/LivechatExternalMessage.js b/app/livechat/lib/LivechatExternalMessage.js index b391143680a93a9ce14f98f3edcb52f78e01b816..cf8eedae67c9d8f49b35b13dce82c6423bb80a54 100644 --- a/app/livechat/lib/LivechatExternalMessage.js +++ b/app/livechat/lib/LivechatExternalMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Base } from '../../models'; class LivechatExternalMessageClass extends Base { diff --git a/app/livechat/lib/LivechatInquiry.js b/app/livechat/lib/LivechatInquiry.js index 9da291e925efa39265aa4fae5e1cbe9f97780396..bce2b7aa4d3df92c5b3290980f603404d3901ba9 100644 --- a/app/livechat/lib/LivechatInquiry.js +++ b/app/livechat/lib/LivechatInquiry.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { Base } from '../../models'; import { Mongo } from 'meteor/mongo'; +import { Base } from '../../models'; + export let LivechatInquiry; if (Meteor.isClient) { diff --git a/app/livechat/lib/LivechatRoomType.js b/app/livechat/lib/LivechatRoomType.js index 3bcf75289988ad54850b24a08f7dd43ea158be7d..7a2a17defa4cd25a317dd61c2f15a92639887be8 100644 --- a/app/livechat/lib/LivechatRoomType.js +++ b/app/livechat/lib/LivechatRoomType.js @@ -1,10 +1,11 @@ import { Session } from 'meteor/session'; + +import { LivechatInquiry } from './LivechatInquiry'; import { ChatRoom } from '../../models'; import { settings } from '../../settings'; import { hasPermission } from '../../authorization'; import { openRoom } from '../../ui-utils'; import { RoomSettingsEnum, UiTextContext, RoomTypeRouteConfig, RoomTypeConfig } from '../../utils'; -import { LivechatInquiry } from './LivechatInquiry'; import { getAvatarURL } from '../../utils/lib/getAvatarURL'; class LivechatRoomRoute extends RoomTypeRouteConfig { diff --git a/app/livechat/lib/messageTypes.js b/app/livechat/lib/messageTypes.js index aeb53a6d5ae547a086c9e05a96ea332ea4de4f04..6bef53f4d6fa5be34232bc26708503aa3b972793 100644 --- a/app/livechat/lib/messageTypes.js +++ b/app/livechat/lib/messageTypes.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import { Livechat } from 'meteor/rocketchat:livechat'; + import { MessageTypes } from '../../ui-utils'; import { actionLinks } from '../../action-links'; import { Notifications } from '../../notifications'; import { Messages, Rooms } from '../../models'; import { settings } from '../../settings'; -import { Livechat } from 'meteor/rocketchat:livechat'; MessageTypes.registerType({ id: 'livechat_navigation_history', diff --git a/app/livechat/server/agentStatus.js b/app/livechat/server/agentStatus.js index f9e499ffa47b6d21b5adc877984ea54f4549bd4a..aea4ed012841b35ff9198ce9c61506766c8a0d07 100644 --- a/app/livechat/server/agentStatus.js +++ b/app/livechat/server/agentStatus.js @@ -1,6 +1,7 @@ -import { hasRole } from '../../authorization'; import { UserPresenceMonitor } from 'meteor/konecty:user-presence'; + import { Livechat } from './lib/Livechat'; +import { hasRole } from '../../authorization'; UserPresenceMonitor.onSetUserStatus((user, status) => { if (hasRole(user._id, 'livechat-manager') || hasRole(user._id, 'livechat-agent')) { diff --git a/app/livechat/server/api/lib/livechat.js b/app/livechat/server/api/lib/livechat.js index 5c98328ae44d04b50e40bd6de45f6306dc609bab..67239db91bd983f510a831f5fd594f856a6340cf 100644 --- a/app/livechat/server/api/lib/livechat.js +++ b/app/livechat/server/api/lib/livechat.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; -import { Users, Rooms, LivechatVisitors, LivechatDepartment, LivechatTrigger } from '../../../../models'; import _ from 'underscore'; + +import { Users, Rooms, LivechatVisitors, LivechatDepartment, LivechatTrigger } from '../../../../models'; import { Livechat } from '../../lib/Livechat'; import { settings as rcSettings } from '../../../../settings'; @@ -140,5 +141,3 @@ export function settings() { }, }; } - - diff --git a/app/livechat/server/api/v1/agent.js b/app/livechat/server/api/v1/agent.js index ec091fa43b32f4cf4c8a81671050f75bda763155..a0cc1678c35a95c5342a19cd54c3e0003b7d3726 100644 --- a/app/livechat/server/api/v1/agent.js +++ b/app/livechat/server/api/v1/agent.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { API } from '../../../../api'; import { findRoom, findGuest, findAgent, findOpenRoom } from '../lib/livechat'; import { Livechat } from '../../lib/Livechat'; diff --git a/app/livechat/server/api/v1/config.js b/app/livechat/server/api/v1/config.js index 23ef0330f101c69890f0c52a9a7620e96b42235f..76951c755605627931d4a457ec22846e8a76c2f6 100644 --- a/app/livechat/server/api/v1/config.js +++ b/app/livechat/server/api/v1/config.js @@ -1,7 +1,8 @@ +import { Match, check } from 'meteor/check'; + import { Users } from '../../../../models'; import { API } from '../../../../api'; import { findGuest, settings, online, findOpenRoom } from '../lib/livechat'; -import { Match, check } from 'meteor/check'; API.v1.addRoute('livechat/config', { get() { diff --git a/app/livechat/server/api/v1/customField.js b/app/livechat/server/api/v1/customField.js index d210a0913cce955d50adc711fd21df29df04327d..bcdb1dd7899b6d933f0a3fc377b39d118fc14c75 100644 --- a/app/livechat/server/api/v1/customField.js +++ b/app/livechat/server/api/v1/customField.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { API } from '../../../../api'; import { findGuest } from '../lib/livechat'; import { Livechat } from '../../lib/Livechat'; @@ -63,4 +64,3 @@ API.v1.addRoute('livechat/custom.fields', { return API.v1.success({ fields }); }, }); - diff --git a/app/livechat/server/api/v1/message.js b/app/livechat/server/api/v1/message.js index d3f1c8ed0a9f6e1fbd3953339c133a45a97f5b33..4ed05a8f619ca78ef9d2fdd0a303b7f97762045b 100644 --- a/app/livechat/server/api/v1/message.js +++ b/app/livechat/server/api/v1/message.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; + import { Messages, Rooms, LivechatVisitors } from '../../../../models'; import { hasPermission } from '../../../../authorization'; import { API } from '../../../../api'; @@ -95,7 +96,6 @@ API.v1.addRoute('livechat/message/:_id', { } return API.v1.success({ message }); - } catch (e) { return API.v1.failure(e.error); } diff --git a/app/livechat/server/api/v1/offlineMessage.js b/app/livechat/server/api/v1/offlineMessage.js index 8f97520933d0708075e05462f4a4373cf8f9cfe5..26e8794a7c341d42d3d21ad7c30705ceeb85b00e 100644 --- a/app/livechat/server/api/v1/offlineMessage.js +++ b/app/livechat/server/api/v1/offlineMessage.js @@ -1,5 +1,6 @@ import { Match, check } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; + import { API } from '../../../../api'; import { Livechat } from '../../lib/Livechat'; diff --git a/app/livechat/server/api/v1/pageVisited.js b/app/livechat/server/api/v1/pageVisited.js index 1182717e28b7b74bab031050777097e3856e8abe..4b35cd3adb6e5d4298465f81616c59ed02f31f74 100644 --- a/app/livechat/server/api/v1/pageVisited.js +++ b/app/livechat/server/api/v1/pageVisited.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; -import { API } from '../../../../api'; import _ from 'underscore'; + +import { API } from '../../../../api'; import { findGuest, findRoom } from '../lib/livechat'; import { Livechat } from '../../lib/Livechat'; diff --git a/app/livechat/server/api/v1/room.js b/app/livechat/server/api/v1/room.js index 707d619d7150778978f3577316a7a7aa3aa70d80..a024d52078f2f62d07b9cea11cd83bb6b733380e 100644 --- a/app/livechat/server/api/v1/room.js +++ b/app/livechat/server/api/v1/room.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings as rcSettings } from '../../../../settings'; import { Messages, Rooms } from '../../../../models'; import { API } from '../../../../api'; diff --git a/app/livechat/server/api/v1/transcript.js b/app/livechat/server/api/v1/transcript.js index c517d546a4e46b55490112cb0fc6473cc8da4c8c..b93fd3b93ed851c30ce8ecd6e20aabe7c37e6d4e 100644 --- a/app/livechat/server/api/v1/transcript.js +++ b/app/livechat/server/api/v1/transcript.js @@ -1,5 +1,6 @@ import { check } from 'meteor/check'; import { TAPi18n } from 'meteor/tap:i18n'; + import { API } from '../../../../api'; import { Livechat } from '../../lib/Livechat'; diff --git a/app/livechat/server/api/v1/videoCall.js b/app/livechat/server/api/v1/videoCall.js index 7845b4ffe26f1131e5e06b74e223cccd5d800cda..0aaa231da6545278087800e12dae26c9318e0aa2 100644 --- a/app/livechat/server/api/v1/videoCall.js +++ b/app/livechat/server/api/v1/videoCall.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; + import { Messages } from '../../../../models'; import { settings as rcSettings } from '../../../../settings'; import { API } from '../../../../api'; diff --git a/app/livechat/server/api/v1/visitor.js b/app/livechat/server/api/v1/visitor.js index f7adf1550db253e6cfe5c8a3b79be1f138e82f88..6dcfd98da68ba81aa233a5922ec7a4e30c3d761c 100644 --- a/app/livechat/server/api/v1/visitor.js +++ b/app/livechat/server/api/v1/visitor.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Rooms, LivechatVisitors, LivechatCustomField } from '../../../../models'; import { hasPermission } from '../../../../authorization'; import { API } from '../../../../api'; diff --git a/app/livechat/server/config.js b/app/livechat/server/config.js index 193ad780edce7149cf665563872ff21768d16f58..ec72d838583257728dfb380087510e2abbccd00f 100644 --- a/app/livechat/server/config.js +++ b/app/livechat/server/config.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { @@ -426,5 +427,4 @@ Meteor.startup(function() { i18nDescription: 'Data_processing_consent_text_description', enableQuery: { _id: 'Livechat_force_accept_data_processing_consent', value: true }, }); - }); diff --git a/app/livechat/server/hooks/RDStation.js b/app/livechat/server/hooks/RDStation.js index 5254ae3487713b16097a43cd36f28ed896ccfdc9..bc60b1c1c9efedc7eb92d70dbdd786a4981a9997 100644 --- a/app/livechat/server/hooks/RDStation.js +++ b/app/livechat/server/hooks/RDStation.js @@ -1,4 +1,5 @@ import { HTTP } from 'meteor/http'; + import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/hooks/externalMessage.js b/app/livechat/server/hooks/externalMessage.js index 2597deaeeaa2808a914b5fb170e550d203bd5191..91b9448be491e6d69b92b6c03d966b18fb4c7386 100644 --- a/app/livechat/server/hooks/externalMessage.js +++ b/app/livechat/server/hooks/externalMessage.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import { HTTP } from 'meteor/http'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { SystemLogger } from '../../../logger'; -import { HTTP } from 'meteor/http'; import { LivechatExternalMessage } from '../../lib/LivechatExternalMessage'; -import _ from 'underscore'; let knowledgeEnabled = false; let apiaiKey = ''; diff --git a/app/livechat/server/hooks/markRoomResponded.js b/app/livechat/server/hooks/markRoomResponded.js index 7a4c2a9a62150893fee141977010d91c74ebc701..4f629f901aaf47189234515b839f143ec82ec734 100644 --- a/app/livechat/server/hooks/markRoomResponded.js +++ b/app/livechat/server/hooks/markRoomResponded.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { callbacks } from '../../../callbacks'; import { Rooms } from '../../../models'; diff --git a/app/livechat/server/hooks/saveAnalyticsData.js b/app/livechat/server/hooks/saveAnalyticsData.js index 28654284748660f191c85c2b817acb158ceedbc4..582fa0d9cc37c73e1bf0c51a24fe0669300932d4 100644 --- a/app/livechat/server/hooks/saveAnalyticsData.js +++ b/app/livechat/server/hooks/saveAnalyticsData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { callbacks } from '../../../callbacks'; import { Rooms } from '../../../models'; @@ -19,9 +20,9 @@ callbacks.add('afterSaveMessage', function(message, room) { // if the message has a token, it was sent by the visitor if (!message.token) { - const visitorLastQuery = (room.metrics && room.metrics.v) ? room.metrics.v.lq : room.ts; - const agentLastReply = (room.metrics && room.metrics.servedBy) ? room.metrics.servedBy.lr : room.ts; - const agentJoinTime = (room.servedBy && room.servedBy.ts) ? room.servedBy.ts : room.ts; + const visitorLastQuery = room.metrics && room.metrics.v ? room.metrics.v.lq : room.ts; + const agentLastReply = room.metrics && room.metrics.servedBy ? room.metrics.servedBy.lr : room.ts; + const agentJoinTime = room.servedBy && room.servedBy.ts ? room.servedBy.ts : room.ts; const isResponseTt = room.metrics && room.metrics.response && room.metrics.response.tt; const isResponseTotal = room.metrics && room.metrics.response && room.metrics.response.total; @@ -30,7 +31,7 @@ callbacks.add('afterSaveMessage', function(message, room) { const firstResponseDate = now; const firstResponseTime = (now.getTime() - visitorLastQuery) / 1000; const responseTime = (now.getTime() - visitorLastQuery) / 1000; - const avgResponseTime = (((isResponseTt) ? room.metrics.response.tt : 0) + responseTime) / (((isResponseTotal) ? room.metrics.response.total : 0) + 1); + const avgResponseTime = ((isResponseTt ? room.metrics.response.tt : 0) + responseTime) / ((isResponseTotal ? room.metrics.response.total : 0) + 1); const firstReactionDate = now; const firstReactionTime = (now.getTime() - agentJoinTime) / 1000; @@ -47,7 +48,7 @@ callbacks.add('afterSaveMessage', function(message, room) { }; } else if (visitorLastQuery > agentLastReply) { // response, not first const responseTime = (now.getTime() - visitorLastQuery) / 1000; - const avgResponseTime = (((isResponseTt) ? room.metrics.response.tt : 0) + responseTime) / (((isResponseTotal) ? room.metrics.response.total : 0) + 1); + const avgResponseTime = ((isResponseTt ? room.metrics.response.tt : 0) + responseTime) / ((isResponseTotal ? room.metrics.response.total : 0) + 1); const reactionTime = (now.getTime() - visitorLastQuery) / 1000; diff --git a/app/livechat/server/hooks/sendToFacebook.js b/app/livechat/server/hooks/sendToFacebook.js index 1977dffe270b87c50e7a4b7d52c932da4200516d..30cafd9859a156a9d6c61c87df52fad0043e4439 100644 --- a/app/livechat/server/hooks/sendToFacebook.js +++ b/app/livechat/server/hooks/sendToFacebook.js @@ -34,5 +34,4 @@ callbacks.add('afterSaveMessage', function(message, room) { }); return message; - }, callbacks.priority.LOW, 'sendMessageToFacebook'); diff --git a/app/livechat/server/index.js b/app/livechat/server/index.js index 3458109384d3740e41471794432cbd4b6049659a..a81a5274b7821fd6914db65378a7524ccaaf09bc 100644 --- a/app/livechat/server/index.js +++ b/app/livechat/server/index.js @@ -62,7 +62,6 @@ import './methods/sendTranscript'; import './methods/getFirstRoomMessage'; import '../lib/LivechatExternalMessage'; import '../lib/LivechatInquiry'; -export { Livechat } from './lib/Livechat'; import './lib/Analytics'; import './lib/QueueMethods'; import './lib/OfficeClock'; @@ -88,3 +87,5 @@ import './publications/livechatInquiries'; import './publications/livechatOfficeHours'; import './api'; import './api/rest'; + +export { Livechat } from './lib/Livechat'; diff --git a/app/livechat/server/lib/Analytics.js b/app/livechat/server/lib/Analytics.js index 4e9e5b88d78162f8e3390dd282fa46d5b0230994..d5e5f7abf808a514cc736ecd38576f3e9ae95206 100644 --- a/app/livechat/server/lib/Analytics.js +++ b/app/livechat/server/lib/Analytics.js @@ -1,6 +1,7 @@ -import { Rooms } from '../../../models'; import moment from 'moment'; +import { Rooms } from '../../../models'; + /** * return readable time format from seconds * @param {Double} sec seconds @@ -133,7 +134,7 @@ export const Analytics = { } }); - const avgCD = (count) ? total / count : 0; + const avgCD = count ? total / count : 0; return Math.round(avgCD * 100) / 100; }, @@ -165,7 +166,7 @@ export const Analytics = { } }); - const avgFrt = (count) ? frt / count : 0; + const avgFrt = count ? frt / count : 0; return Math.round(avgFrt * 100) / 100; }, @@ -180,7 +181,7 @@ export const Analytics = { Rooms.getAnalyticsMetricsBetweenDate('l', date).forEach(({ metrics }) => { if (metrics && metrics.response && metrics.response.ft) { - maxFrt = (maxFrt) ? Math.min(maxFrt, metrics.response.ft) : metrics.response.ft; + maxFrt = maxFrt ? Math.min(maxFrt, metrics.response.ft) : metrics.response.ft; } }); @@ -205,7 +206,7 @@ export const Analytics = { } }); - const avgArt = (count) ? art / count : 0; + const avgArt = count ? art / count : 0; return Math.round(avgArt * 100) / 100; }, @@ -226,7 +227,7 @@ export const Analytics = { } }); - const avgArnt = (count) ? arnt / count : 0; + const avgArnt = count ? arnt / count : 0; return Math.round(avgArnt * 100) / 100; }, @@ -275,7 +276,7 @@ export const Analytics = { totalMessages += msgs; const weekday = m.format('dddd'); // @string: Monday, Tuesday ... - totalMessagesOnWeekday.set(weekday, (totalMessagesOnWeekday.has(weekday)) ? (totalMessagesOnWeekday.get(weekday) + msgs) : msgs); + totalMessagesOnWeekday.set(weekday, totalMessagesOnWeekday.has(weekday) ? totalMessagesOnWeekday.get(weekday) + msgs : msgs); }; for (let m = moment(from); m.diff(to, 'days') <= 0; m.add(1, 'days')) { @@ -306,7 +307,7 @@ export const Analytics = { msgs, }) => { const dayHour = h.format('H'); // @int : 0, 1, ... 23 - totalMessagesInHour.set(dayHour, (totalMessagesInHour.has(dayHour)) ? (totalMessagesInHour.get(dayHour) + msgs) : msgs); + totalMessagesInHour.set(dayHour, totalMessagesInHour.has(dayHour) ? totalMessagesInHour.get(dayHour) + msgs : msgs); }); } } @@ -330,7 +331,7 @@ export const Analytics = { value: (totalConversations / days).toFixed(2), }, { title: 'Busiest_time', - value: (busiestHour > 0) ? `${ moment(busiestHour, ['H']).format('hA') }-${ moment((parseInt(busiestHour) + 1) % 24, ['H']).format('hA') }` : '-', + value: busiestHour > 0 ? `${ moment(busiestHour, ['H']).format('hA') }-${ moment((parseInt(busiestHour) + 1) % 24, ['H']).format('hA') }` : '-', }]; return data; @@ -392,7 +393,7 @@ export const Analytics = { * */ updateMap(map, key, value) { - map.set(key, map.has(key) ? (map.get(key) + value) : value); + map.set(key, map.has(key) ? map.get(key) + value : value); }, /** @@ -403,10 +404,10 @@ export const Analytics = { sortByValue(data, inv = false) { data.sort(function(a, b) { // sort array if (parseFloat(a.value) > parseFloat(b.value)) { - return (inv) ? -1 : 1; // if inv, reverse sort + return inv ? -1 : 1; // if inv, reverse sort } if (parseFloat(a.value) < parseFloat(b.value)) { - return (inv) ? 1 : -1; + return inv ? 1 : -1; } return 0; }); diff --git a/app/livechat/server/lib/Livechat.js b/app/livechat/server/lib/Livechat.js index c716b84ee3266e54e44f8948b9a20bc8b31fe942..78cc92c317d093edc16b7ff43e0b474e221d049f 100644 --- a/app/livechat/server/lib/Livechat.js +++ b/app/livechat/server/lib/Livechat.js @@ -1,23 +1,25 @@ +import dns from 'dns'; + import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; import { HTTP } from 'meteor/http'; +import _ from 'underscore'; +import s from 'underscore.string'; +import moment from 'moment'; +import UAParser from 'ua-parser-js'; + +import { QueueMethods } from './QueueMethods'; +import { Analytics } from './Analytics'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { Users, Rooms, Messages, Subscriptions, Settings, LivechatDepartmentAgents, LivechatDepartment, LivechatCustomField, LivechatVisitors } from '../../../models'; import { Logger } from '../../../logger'; import { sendMessage, deleteMessage, updateMessage } from '../../../lib'; import { addUserRoles, removeUserFromRoles } from '../../../authorization'; -import _ from 'underscore'; -import s from 'underscore.string'; -import moment from 'moment'; -import dns from 'dns'; -import UAParser from 'ua-parser-js'; import * as Mailer from '../../../mailer'; import { LivechatInquiry } from '../../lib/LivechatInquiry'; -import { QueueMethods } from './QueueMethods'; -import { Analytics } from './Analytics'; export const Livechat = { Analytics, @@ -205,7 +207,6 @@ export const Livechat = { }; if (settings.get('Livechat_Allow_collect_and_store_HTTP_header_informations')) { - const connection = this.connection || connectionData; if (connection && connection.httpHeaders) { userData.userAgent = connection.httpHeaders['user-agent']; @@ -348,9 +349,8 @@ export const Livechat = { if (customField.scope === 'room') { return Rooms.updateLivechatDataByToken(token, key, value, overwrite); - } else { - return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite); } + return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite); }, getInitSettings() { @@ -424,7 +424,6 @@ export const Livechat = { savePageHistory(token, roomId, pageInfo) { if (pageInfo.change === Livechat.historyMonitorType) { - const user = Users.findOneById('rocket.cat'); const pageTitle = pageInfo.title; @@ -448,8 +447,6 @@ export const Livechat = { return Messages.createNavigationHistoryWithRoomIdMessageAndUser(roomId, `${ pageTitle } - ${ pageUrl }`, user, extraData); } - - return; }, transfer(room, guest, transferData) { @@ -630,8 +627,8 @@ export const Livechat = { phone: null, department: visitor.department, ip: visitor.ip, - os: ua.getOS().name && (`${ ua.getOS().name } ${ ua.getOS().version }`), - browser: ua.getBrowser().name && (`${ ua.getBrowser().name } ${ ua.getBrowser().version }`), + os: ua.getOS().name && `${ ua.getOS().name } ${ ua.getOS().version }`, + browser: ua.getBrowser().name && `${ ua.getBrowser().name } ${ ua.getBrowser().version }`, customFields: visitor.livechatData, }, }; @@ -845,7 +842,7 @@ export const Livechat = { <p><strong>${ author }</strong> <em>${ datetime }</em></p> <p>${ message.msg }</p> `; - html = html + singleMessage; + html += singleMessage; }); html = `${ html }</div>`; @@ -879,7 +876,7 @@ export const Livechat = { return false; } - const message = (`${ data.message }`).replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2'); + const message = `${ data.message }`.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br>$2'); const html = ` <h1>New livechat message</h1> @@ -913,7 +910,7 @@ export const Livechat = { const from = `${ data.name } - ${ data.email } <${ fromEmail }>`; const replyTo = `${ data.name } <${ data.email }>`; - const subject = `Livechat offline message from ${ data.name }: ${ (`${ data.message }`).substring(0, 20) }`; + const subject = `Livechat offline message from ${ data.name }: ${ `${ data.message }`.substring(0, 20) }`; this.sendEmail(from, emailTo, replyTo, subject, html); diff --git a/app/livechat/server/lib/OfficeClock.js b/app/livechat/server/lib/OfficeClock.js index 8c5c96d2ea35dcf640bf9c8366d536defebedfd8..03a6e352f8b0bba07103c87ce5d3cc2fb64c7201 100644 --- a/app/livechat/server/lib/OfficeClock.js +++ b/app/livechat/server/lib/OfficeClock.js @@ -1,5 +1,6 @@ // Every minute check if office closed import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { Users, LivechatOfficeHour } from '../../../models'; diff --git a/app/livechat/server/lib/OmniChannel.js b/app/livechat/server/lib/OmniChannel.js index b1eb1139b0dc751ff533ce9a78002be3e80ed0cc..fae27bb1e02307fb97496825da450c161f6cb916 100644 --- a/app/livechat/server/lib/OmniChannel.js +++ b/app/livechat/server/lib/OmniChannel.js @@ -1,4 +1,5 @@ import { HTTP } from 'meteor/http'; + import { settings } from '../../../settings'; const gatewayURL = 'https://omni.rocket.chat'; diff --git a/app/livechat/server/lib/QueueMethods.js b/app/livechat/server/lib/QueueMethods.js index aed907b4f6f9ec277de6be171cb056b37c5dd5ef..3dc0b51af626ebfb5387374af9d2da90bca4d532 100644 --- a/app/livechat/server/lib/QueueMethods.js +++ b/app/livechat/server/lib/QueueMethods.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; + +import { Livechat } from './Livechat'; import { Rooms, Subscriptions, Users } from '../../../models'; import { settings } from '../../../settings'; -import _ from 'underscore'; import { sendNotification } from '../../../lib'; import { LivechatInquiry } from '../../lib/LivechatInquiry'; -import { Livechat } from './Livechat'; export const QueueMethods = { /* Least Amount Queuing method: @@ -167,7 +168,7 @@ export const QueueMethods = { // fake a subscription in order to make use of the function defined above subscription: { rid: room._id, - t : room.t, + t: room.t, u: { _id, }, diff --git a/app/livechat/server/livechat.js b/app/livechat/server/livechat.js index 84b6edc7beb48fccc6aee188f4a3c391d7759f79..b23ec41b3735448a7db4afb52a2c40842dfb3712 100644 --- a/app/livechat/server/livechat.js +++ b/app/livechat/server/livechat.js @@ -1,6 +1,6 @@ -import _ from 'underscore'; import url from 'url'; +import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; diff --git a/app/livechat/server/methods/addAgent.js b/app/livechat/server/methods/addAgent.js index 21b6884ffe64ef5f7d242bdbec4c74e38b8f543c..14b5467e303df0f5b044220c2689dfd3a82d34cd 100644 --- a/app/livechat/server/methods/addAgent.js +++ b/app/livechat/server/methods/addAgent.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/addManager.js b/app/livechat/server/methods/addManager.js index dc4cb052de05db5ff46eda9e9efea3d366ccf0ef..38b60240646726a93ff7f5cbe64abc3a9af7dc04 100644 --- a/app/livechat/server/methods/addManager.js +++ b/app/livechat/server/methods/addManager.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/changeLivechatStatus.js b/app/livechat/server/methods/changeLivechatStatus.js index 31a302e139b1ee279fa248d6b920b936392bf146..e612508303600793542f64805a3b067289664c49 100644 --- a/app/livechat/server/methods/changeLivechatStatus.js +++ b/app/livechat/server/methods/changeLivechatStatus.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; Meteor.methods({ diff --git a/app/livechat/server/methods/closeByVisitor.js b/app/livechat/server/methods/closeByVisitor.js index c3829f232b2c57fcf1771920b2881ab79337a73e..bd9354bb837cf61331ccfd8de6659d4d3c2757be 100644 --- a/app/livechat/server/methods/closeByVisitor.js +++ b/app/livechat/server/methods/closeByVisitor.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../../settings'; import { Rooms, LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/closeRoom.js b/app/livechat/server/methods/closeRoom.js index 7d49719a0465b1f37691f8dfccc2b768d5a31d2b..f24e678350a65844ab3ea391d17594a7f88d37fd 100644 --- a/app/livechat/server/methods/closeRoom.js +++ b/app/livechat/server/methods/closeRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Subscriptions, Rooms } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/facebook.js b/app/livechat/server/methods/facebook.js index 075165f3bf74491d407a69d97cf76cad5e39ae07..7d17161fe938403c185bdfd8e6c6de03f258a6cb 100644 --- a/app/livechat/server/methods/facebook.js +++ b/app/livechat/server/methods/facebook.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import OmniChannel from '../lib/OmniChannel'; diff --git a/app/livechat/server/methods/getAgentData.js b/app/livechat/server/methods/getAgentData.js index 77bdf81adbdea4481b98e1905b5669c728297714..4e4c2d171af943943c7bddadfaf29b05e71938a2 100644 --- a/app/livechat/server/methods/getAgentData.js +++ b/app/livechat/server/methods/getAgentData.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Users, Rooms, LivechatVisitors } from '../../../models'; Meteor.methods({ diff --git a/app/livechat/server/methods/getAgentOverviewData.js b/app/livechat/server/methods/getAgentOverviewData.js index e6c325a9195a3d3d22b9d414aa8406e462299df9..7722de1bacb3c4d5c4b3afc2babeec9e831a51db 100644 --- a/app/livechat/server/methods/getAgentOverviewData.js +++ b/app/livechat/server/methods/getAgentOverviewData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/getAnalyticsChartData.js b/app/livechat/server/methods/getAnalyticsChartData.js index 918ff200d1ad3b5244e51a2d17893e526135d319..efe2a8529052f06404336b0618d472c607d6473f 100644 --- a/app/livechat/server/methods/getAnalyticsChartData.js +++ b/app/livechat/server/methods/getAnalyticsChartData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/getAnalyticsOverviewData.js b/app/livechat/server/methods/getAnalyticsOverviewData.js index 0958c80850170daf06e0cc22796a1e1782c1709a..4f41291d804a65ddfe105bf6c6af3e4184595101 100644 --- a/app/livechat/server/methods/getAnalyticsOverviewData.js +++ b/app/livechat/server/methods/getAnalyticsOverviewData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/getCustomFields.js b/app/livechat/server/methods/getCustomFields.js index 8d20205204818c1a87c265b6f888313fa158602c..df39364bcceecdaac5eb305107482dda0842f442 100644 --- a/app/livechat/server/methods/getCustomFields.js +++ b/app/livechat/server/methods/getCustomFields.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { LivechatCustomField } from '../../../models'; Meteor.methods({ diff --git a/app/livechat/server/methods/getFirstRoomMessage.js b/app/livechat/server/methods/getFirstRoomMessage.js index 2bac3b053b4f8a11067d9a41d2397fa466f5adf8..7ff74d6da0965c78ff1f8d2d9043058c61fe5f67 100644 --- a/app/livechat/server/methods/getFirstRoomMessage.js +++ b/app/livechat/server/methods/getFirstRoomMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms, Messages } from '../../../models'; import { hasPermission } from '../../../authorization'; diff --git a/app/livechat/server/methods/getInitialData.js b/app/livechat/server/methods/getInitialData.js index 4099074a86add6d17c6a1436f4442a0db34ae73c..67c6798ac49e71f7c05b3e4fc43ed84ac5ea3c0f 100644 --- a/app/livechat/server/methods/getInitialData.js +++ b/app/livechat/server/methods/getInitialData.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Users, LivechatDepartment, LivechatTrigger, LivechatVisitors } from '../../../models'; import _ from 'underscore'; + +import { Rooms, Users, LivechatDepartment, LivechatTrigger, LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; Meteor.methods({ @@ -42,7 +43,7 @@ Meteor.methods({ departmentId: 1, }, }; - const room = (departmentId) ? Rooms.findOpenByVisitorTokenAndDepartmentId(visitorToken, departmentId, options).fetch() : Rooms.findOpenByVisitorToken(visitorToken, options).fetch(); + const room = departmentId ? Rooms.findOpenByVisitorTokenAndDepartmentId(visitorToken, departmentId, options).fetch() : Rooms.findOpenByVisitorToken(visitorToken, options).fetch(); if (room && room.length > 0) { info.room = room[0]; } diff --git a/app/livechat/server/methods/getNextAgent.js b/app/livechat/server/methods/getNextAgent.js index 6946c01d00395de0c12bbac391afe29e661d1512..3776f85cf636ea8e5da2457ee248180cc85a947d 100644 --- a/app/livechat/server/methods/getNextAgent.js +++ b/app/livechat/server/methods/getNextAgent.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms, Users } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/loadHistory.js b/app/livechat/server/methods/loadHistory.js index 060a5c6b549f93aea330d33c67a285d023aa26ed..395ea3ea5a94d6d2c9da0cd5c192ff065a404c71 100644 --- a/app/livechat/server/methods/loadHistory.js +++ b/app/livechat/server/methods/loadHistory.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { loadMessageHistory } from '../../../lib'; import { LivechatVisitors } from '../../../models'; diff --git a/app/livechat/server/methods/loginByToken.js b/app/livechat/server/methods/loginByToken.js index 18bbad251dd73c13f89598b6f8479f2e9c817aac..9320b1f424d613fbe6f60e133862dd103874e537 100644 --- a/app/livechat/server/methods/loginByToken.js +++ b/app/livechat/server/methods/loginByToken.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { LivechatVisitors } from '../../../models'; Meteor.methods({ diff --git a/app/livechat/server/methods/pageVisited.js b/app/livechat/server/methods/pageVisited.js index 114108f87fc5edf6630dc7f801f1c1700c43a84f..c9c88e95ddc599a3972b9214ebcacbc6607516b5 100644 --- a/app/livechat/server/methods/pageVisited.js +++ b/app/livechat/server/methods/pageVisited.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Livechat } from '../lib/Livechat'; Meteor.methods({ diff --git a/app/livechat/server/methods/registerGuest.js b/app/livechat/server/methods/registerGuest.js index 46995a549319cdafb3088e970f6e8047fd5c1933..7622747f434b7f8d4feb7c952ede7bcb8410d39c 100644 --- a/app/livechat/server/methods/registerGuest.js +++ b/app/livechat/server/methods/registerGuest.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages, Rooms, LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/removeAgent.js b/app/livechat/server/methods/removeAgent.js index e6bc9fcf0cc2f284b7ed5237ae883930ede7f9dc..ade5412cb7eb504412bb4f1305812d78bbe81af9 100644 --- a/app/livechat/server/methods/removeAgent.js +++ b/app/livechat/server/methods/removeAgent.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/removeCustomField.js b/app/livechat/server/methods/removeCustomField.js index a53efa59ee0cf2b63e0f9f9d72398cc0bbd8c003..98018741bf7fb98b4e4216c088fd70414910882d 100644 --- a/app/livechat/server/methods/removeCustomField.js +++ b/app/livechat/server/methods/removeCustomField.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { LivechatCustomField } from '../../../models'; diff --git a/app/livechat/server/methods/removeDepartment.js b/app/livechat/server/methods/removeDepartment.js index d08fee8534014208420a7fe13bc7f3f12070ec7b..2dd1515f30cbc1344ab85bdd18d0eb3fdb2e4a87 100644 --- a/app/livechat/server/methods/removeDepartment.js +++ b/app/livechat/server/methods/removeDepartment.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/removeManager.js b/app/livechat/server/methods/removeManager.js index 9fa635e7d6bd1b699d736874b7f0bf77607ac312..b479d867803b984a70cff9d3692cc432ef6404ee 100644 --- a/app/livechat/server/methods/removeManager.js +++ b/app/livechat/server/methods/removeManager.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/removeRoom.js b/app/livechat/server/methods/removeRoom.js index 13ef3aa62d028e2465ab32a6512fe35f6ee789e4..f060d91dcad38d36dfb86d827dd8a954a05c27d2 100644 --- a/app/livechat/server/methods/removeRoom.js +++ b/app/livechat/server/methods/removeRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Rooms, Messages, Subscriptions } from '../../../models'; diff --git a/app/livechat/server/methods/removeTrigger.js b/app/livechat/server/methods/removeTrigger.js index 164f0f56b4fc5bf89292f3047edca65d32a02842..f39431b578b0dd80a71da168c590d65f9fc26f22 100644 --- a/app/livechat/server/methods/removeTrigger.js +++ b/app/livechat/server/methods/removeTrigger.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { LivechatTrigger } from '../../../models'; diff --git a/app/livechat/server/methods/returnAsInquiry.js b/app/livechat/server/methods/returnAsInquiry.js index 2a7c5971bb4eac37610ba98d978c49e72714641f..6dae070a1d9f7a0fe24a5dc6d4be3610e9adbbe5 100644 --- a/app/livechat/server/methods/returnAsInquiry.js +++ b/app/livechat/server/methods/returnAsInquiry.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/saveAppearance.js b/app/livechat/server/methods/saveAppearance.js index 18ac479061a775c71b818980dd22c00bdb3ccc67..34eecd65e462c0a4700878a566a26562ad91e75d 100644 --- a/app/livechat/server/methods/saveAppearance.js +++ b/app/livechat/server/methods/saveAppearance.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { settings as rcSettings } from '../../../settings'; @@ -35,7 +36,5 @@ Meteor.methods({ settings.forEach((setting) => { rcSettings.updateById(setting._id, setting.value); }); - - return; }, }); diff --git a/app/livechat/server/methods/saveCustomField.js b/app/livechat/server/methods/saveCustomField.js index 8a41b25e1dc1367486d09fb8b8c8509046c4ec87..9f6520b4d567502a418d6c9bc4e5c9d7fbd4a9de 100644 --- a/app/livechat/server/methods/saveCustomField.js +++ b/app/livechat/server/methods/saveCustomField.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { LivechatCustomField } from '../../../models'; diff --git a/app/livechat/server/methods/saveDepartment.js b/app/livechat/server/methods/saveDepartment.js index 067f49592aefbfa73789a7fc53d9a2f89beef95e..95c9e87e5e0faad854b0f5cf168f186daaa5814d 100644 --- a/app/livechat/server/methods/saveDepartment.js +++ b/app/livechat/server/methods/saveDepartment.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/saveInfo.js b/app/livechat/server/methods/saveInfo.js index 4318fd163c7d9b0f018e794d79d936a24400e562..08e74ce364a7c01c1f368b0ed907a9c83147da79 100644 --- a/app/livechat/server/methods/saveInfo.js +++ b/app/livechat/server/methods/saveInfo.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; import { callbacks } from '../../../callbacks'; diff --git a/app/livechat/server/methods/saveIntegration.js b/app/livechat/server/methods/saveIntegration.js index b4097b76e5348f551aa9271c9908ac8011bbb458..521b01e9dac4e93522811d9919db6985db5e7b37 100644 --- a/app/livechat/server/methods/saveIntegration.js +++ b/app/livechat/server/methods/saveIntegration.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; -import s from 'underscore.string'; Meteor.methods({ 'livechat:saveIntegration'(values) { @@ -32,7 +33,5 @@ Meteor.methods({ if (typeof values.Livechat_webhook_on_agent_message !== 'undefined') { settings.updateById('Livechat_webhook_on_agent_message', !!values.Livechat_webhook_on_agent_message); } - - return; }, }); diff --git a/app/livechat/server/methods/saveOfficeHours.js b/app/livechat/server/methods/saveOfficeHours.js index 874777929071fb792c04721c88cd8d78daef3164..0c41d7190350e533df6c1b411645656976236423 100644 --- a/app/livechat/server/methods/saveOfficeHours.js +++ b/app/livechat/server/methods/saveOfficeHours.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { LivechatOfficeHour } from '../../../models'; Meteor.methods({ diff --git a/app/livechat/server/methods/saveSurveyFeedback.js b/app/livechat/server/methods/saveSurveyFeedback.js index 5b5a571178dc1151c73193a0905440b12ae6524c..47167e9c96c20104c0858c1b488f3cf6a62684a4 100644 --- a/app/livechat/server/methods/saveSurveyFeedback.js +++ b/app/livechat/server/methods/saveSurveyFeedback.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; -import { Rooms, LivechatVisitors } from '../../../models'; import _ from 'underscore'; +import { Rooms, LivechatVisitors } from '../../../models'; + Meteor.methods({ 'livechat:saveSurveyFeedback'(visitorToken, visitorRoom, formData) { check(visitorToken, String); diff --git a/app/livechat/server/methods/saveTrigger.js b/app/livechat/server/methods/saveTrigger.js index 8452a42ea9d4dcc3b828733d4ea580e2eb514907..6be81479badc5ea6b37c733e3c7fb0420cb4a7b5 100644 --- a/app/livechat/server/methods/saveTrigger.js +++ b/app/livechat/server/methods/saveTrigger.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { LivechatTrigger } from '../../../models'; @@ -21,8 +22,7 @@ Meteor.methods({ if (trigger._id) { return LivechatTrigger.updateById(trigger._id, trigger); - } else { - return LivechatTrigger.insert(trigger); } + return LivechatTrigger.insert(trigger); }, }); diff --git a/app/livechat/server/methods/searchAgent.js b/app/livechat/server/methods/searchAgent.js index c5fec0a236d0a6cb08177deb1361cb0cdde00325..8fe28ebd3a09b63c53661194be10eaa71abb3aef 100644 --- a/app/livechat/server/methods/searchAgent.js +++ b/app/livechat/server/methods/searchAgent.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { hasPermission } from '../../../authorization'; import { Users } from '../../../models'; -import _ from 'underscore'; Meteor.methods({ 'livechat:searchAgent'(username) { diff --git a/app/livechat/server/methods/sendFileLivechatMessage.js b/app/livechat/server/methods/sendFileLivechatMessage.js index 9095d2971b4cf5b34920e1c6eb37cfdf2094ecaf..e0724d7e318803f596dceacb8092d0982607c7b3 100644 --- a/app/livechat/server/methods/sendFileLivechatMessage.js +++ b/app/livechat/server/methods/sendFileLivechatMessage.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Random } from 'meteor/random'; + import { Rooms, LivechatVisitors } from '../../../models'; import { FileUpload } from '../../../file-upload'; diff --git a/app/livechat/server/methods/sendMessageLivechat.js b/app/livechat/server/methods/sendMessageLivechat.js index e3b7e7b567219e783c5a5995da1eef58c93da3cd..47c2dad856cdd9b69c1cbf241bd52e9fcea9fb99 100644 --- a/app/livechat/server/methods/sendMessageLivechat.js +++ b/app/livechat/server/methods/sendMessageLivechat.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/sendOfflineMessage.js b/app/livechat/server/methods/sendOfflineMessage.js index d9dde597fedb9506fee180e329a8fcaeb00e9f4a..e390785d2e4559687b9ebc0d8ad0ce06ec6b58a8 100644 --- a/app/livechat/server/methods/sendOfflineMessage.js +++ b/app/livechat/server/methods/sendOfflineMessage.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { Livechat } from '../lib/Livechat'; Meteor.methods({ diff --git a/app/livechat/server/methods/sendTranscript.js b/app/livechat/server/methods/sendTranscript.js index 2ba0aa49343d1cef3f3eadd00321dfbbf8220cb6..3bc83b95aa15ff5edec66dec3b2a6f6dbe5ec846 100644 --- a/app/livechat/server/methods/sendTranscript.js +++ b/app/livechat/server/methods/sendTranscript.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { Livechat } from '../lib/Livechat'; Meteor.methods({ diff --git a/app/livechat/server/methods/setCustomField.js b/app/livechat/server/methods/setCustomField.js index 1e840732e3c87fb999990e3f6c56cb33f12bef60..b1d0ddb6eb3500e0af4de6916ef743aacfc14918 100644 --- a/app/livechat/server/methods/setCustomField.js +++ b/app/livechat/server/methods/setCustomField.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms, LivechatVisitors, LivechatCustomField } from '../../../models'; Meteor.methods({ @@ -7,10 +8,9 @@ Meteor.methods({ if (customField) { if (customField.scope === 'room') { return Rooms.updateLivechatDataByToken(token, key, value, overwrite); - } else { - // Save in user - return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite); } + // Save in user + return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite); } return true; diff --git a/app/livechat/server/methods/setDepartmentForVisitor.js b/app/livechat/server/methods/setDepartmentForVisitor.js index 3ba3690b43162b4154be1f29854465a212344fbd..4578338f07b0a734a723b077ec97ea7123bf534a 100644 --- a/app/livechat/server/methods/setDepartmentForVisitor.js +++ b/app/livechat/server/methods/setDepartmentForVisitor.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms, Messages, LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/setUpConnection.js b/app/livechat/server/methods/setUpConnection.js index bb040ff62131fe7ba658e2805fd9508f5a71deed..21dd64263ef9bc8a3aced3c9aa030f6fb1f39eb7 100644 --- a/app/livechat/server/methods/setUpConnection.js +++ b/app/livechat/server/methods/setUpConnection.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Livechat } from '../lib/Livechat'; Meteor.methods({ 'livechat:setUpConnection'(data) { - check(data, { token: String, }); diff --git a/app/livechat/server/methods/startFileUploadRoom.js b/app/livechat/server/methods/startFileUploadRoom.js index 6d70dbf158439d436c1f125e369014092d6c920e..2779af23d2bb412808d7e5f6b93abf501d28a5ec 100644 --- a/app/livechat/server/methods/startFileUploadRoom.js +++ b/app/livechat/server/methods/startFileUploadRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/startVideoCall.js b/app/livechat/server/methods/startVideoCall.js index 45c636ce9126c952166e88e2b5ceafd02bc08a6e..5b91fce6e32951d6c3c812b5696d59a150368804 100644 --- a/app/livechat/server/methods/startVideoCall.js +++ b/app/livechat/server/methods/startVideoCall.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { Messages } from '../../../models'; import { settings } from '../../../settings'; import { Livechat } from '../lib/Livechat'; @@ -36,4 +37,3 @@ Meteor.methods({ }; }, }); - diff --git a/app/livechat/server/methods/takeInquiry.js b/app/livechat/server/methods/takeInquiry.js index 0ad662b1a87f8c7aa5dfa7dbf3766b1c6c13cc16..ad4935ec605e73abf996e7aedd47a1398213217c 100644 --- a/app/livechat/server/methods/takeInquiry.js +++ b/app/livechat/server/methods/takeInquiry.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Users, Rooms, Subscriptions, Messages } from '../../../models'; import { LivechatInquiry } from '../../lib/LivechatInquiry'; diff --git a/app/livechat/server/methods/transfer.js b/app/livechat/server/methods/transfer.js index 1b08e5a64066ce4d31b8d787e02db6c8f849e96a..8c2952ce3b5affd48c490cdaf789c66775def7a3 100644 --- a/app/livechat/server/methods/transfer.js +++ b/app/livechat/server/methods/transfer.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission, hasRole } from '../../../authorization'; import { Rooms, Subscriptions, LivechatVisitors } from '../../../models'; import { Livechat } from '../lib/Livechat'; diff --git a/app/livechat/server/methods/webhookTest.js b/app/livechat/server/methods/webhookTest.js index 7f88b722c928aadf3c8530654a60b2ca00225767..45a642a66176545d15c8f4e4909bf3f58374c181 100644 --- a/app/livechat/server/methods/webhookTest.js +++ b/app/livechat/server/methods/webhookTest.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import { HTTP } from 'meteor/http'; +import { settings } from '../../../settings'; + const postCatchError = Meteor.wrapAsync(function(url, options, resolve) { HTTP.post(url, options, function(err, res) { if (err) { @@ -76,9 +77,7 @@ Meteor.methods({ if (response && response.statusCode && response.statusCode === 200) { return true; - } else { - throw new Meteor.Error('error-invalid-webhook-response'); } + throw new Meteor.Error('error-invalid-webhook-response'); }, }); - diff --git a/app/livechat/server/permissions.js b/app/livechat/server/permissions.js index d8e9153549dd98fb48064d1059575c2a9b8f227b..1539136195261fa24a8f4ee253a6b1b8b6f88fe1 100644 --- a/app/livechat/server/permissions.js +++ b/app/livechat/server/permissions.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { Roles, Permissions } from '../../models'; import _ from 'underscore'; +import { Roles, Permissions } from '../../models'; + Meteor.startup(() => { const roles = _.pluck(Roles.find().fetch(), 'name'); if (roles.indexOf('livechat-agent') === -1) { diff --git a/app/livechat/server/publications/customFields.js b/app/livechat/server/publications/customFields.js index 95283a4f4f36e92f594f510cb8cbdd0aaecc023f..255ff58e143e4d0a16d399cec58f472f62904929 100644 --- a/app/livechat/server/publications/customFields.js +++ b/app/livechat/server/publications/customFields.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import s from 'underscore.string'; + import { hasPermission } from '../../../authorization'; import { LivechatCustomField } from '../../../models'; -import s from 'underscore.string'; Meteor.publish('livechat:customFields', function(_id) { if (!this.userId) { @@ -17,5 +18,4 @@ Meteor.publish('livechat:customFields', function(_id) { } return LivechatCustomField.find(); - }); diff --git a/app/livechat/server/publications/departmentAgents.js b/app/livechat/server/publications/departmentAgents.js index f55b2b214916f6ed06f2a163d180ef5c00db374d..1631e6af59f4591f4ee81bf1fd022608466907b9 100644 --- a/app/livechat/server/publications/departmentAgents.js +++ b/app/livechat/server/publications/departmentAgents.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatDepartmentAgents } from '../../../models'; diff --git a/app/livechat/server/publications/externalMessages.js b/app/livechat/server/publications/externalMessages.js index 106962b81da21019aad0104782df1c6776b9c971..ac4af8a5a8416c3c4b0585a5667c6e2e45af9bb9 100644 --- a/app/livechat/server/publications/externalMessages.js +++ b/app/livechat/server/publications/externalMessages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { LivechatExternalMessage } from '../../lib/LivechatExternalMessage'; Meteor.publish('livechat:externalMessages', function(roomId) { diff --git a/app/livechat/server/publications/livechatAgents.js b/app/livechat/server/publications/livechatAgents.js index 874b35af4e189416b6d1402c2c1ea9161ddc4e06..b2048e3ad8e57a2f335ae6426856ed403b469df9 100644 --- a/app/livechat/server/publications/livechatAgents.js +++ b/app/livechat/server/publications/livechatAgents.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission, getUsersInRole } from '../../../authorization'; Meteor.publish('livechat:agents', function() { diff --git a/app/livechat/server/publications/livechatAppearance.js b/app/livechat/server/publications/livechatAppearance.js index 1d304d1696b58f8bb8041ad5671ee07878d84a5e..285d3cfefd0b9387f2a6c162481a5283180c0193 100644 --- a/app/livechat/server/publications/livechatAppearance.js +++ b/app/livechat/server/publications/livechatAppearance.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Settings } from '../../../models'; diff --git a/app/livechat/server/publications/livechatDepartments.js b/app/livechat/server/publications/livechatDepartments.js index c89de01ce7493df8cbb0a48abe79ea1a9a46dd1c..98619d3964210499b69cf8d680725928a5d54ae2 100644 --- a/app/livechat/server/publications/livechatDepartments.js +++ b/app/livechat/server/publications/livechatDepartments.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatDepartment } from '../../../models'; @@ -13,8 +14,6 @@ Meteor.publish('livechat:departments', function(_id) { if (_id !== undefined) { return LivechatDepartment.findByDepartmentId(_id); - } else { - return LivechatDepartment.find(); } - + return LivechatDepartment.find(); }); diff --git a/app/livechat/server/publications/livechatInquiries.js b/app/livechat/server/publications/livechatInquiries.js index 356e1364f7e6f16693564c69ed38297c77601059..2ca276089326aa1faa173866a622bd31421fb8bb 100644 --- a/app/livechat/server/publications/livechatInquiries.js +++ b/app/livechat/server/publications/livechatInquiries.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatInquiry } from '../../lib/LivechatInquiry'; @@ -16,7 +17,7 @@ Meteor.publish('livechat:inquiry', function(_id) { const cursorHandle = LivechatInquiry.find({ agents: this.userId, status: 'open', - ...(_id && { _id }), + ..._id && { _id }, }).observeChanges({ added(_id, record) { return publication.added('rocketchat_livechat_inquiry', _id, record); @@ -33,5 +34,4 @@ Meteor.publish('livechat:inquiry', function(_id) { return this.onStop(function() { return cursorHandle.stop(); }); - }); diff --git a/app/livechat/server/publications/livechatIntegration.js b/app/livechat/server/publications/livechatIntegration.js index d9d80fd3caf7f9336a4a527cd74f4837afcdf71d..45df6fa6e5afbe7aa6288c2b1e9bce56660d1703 100644 --- a/app/livechat/server/publications/livechatIntegration.js +++ b/app/livechat/server/publications/livechatIntegration.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Settings } from '../../../models'; diff --git a/app/livechat/server/publications/livechatManagers.js b/app/livechat/server/publications/livechatManagers.js index eefcf21f1d566d7905b1e5c589f43e61c6bccce7..9a064efcb4d0bbbe1c2e31b58a3154a00efca52b 100644 --- a/app/livechat/server/publications/livechatManagers.js +++ b/app/livechat/server/publications/livechatManagers.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission, getUsersInRole } from '../../../authorization'; Meteor.publish('livechat:managers', function() { diff --git a/app/livechat/server/publications/livechatMonitoring.js b/app/livechat/server/publications/livechatMonitoring.js index 7257184e4fbd40629b196913979d9197adec8fa9..85eba2622a56bfbc71914af9555f311d09805eaf 100644 --- a/app/livechat/server/publications/livechatMonitoring.js +++ b/app/livechat/server/publications/livechatMonitoring.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; diff --git a/app/livechat/server/publications/livechatOfficeHours.js b/app/livechat/server/publications/livechatOfficeHours.js index 6962b7898d4e2c7c14b786c620e38689e2c8fbe5..42b964eeadab4484adf33d8419547863c511bbb4 100644 --- a/app/livechat/server/publications/livechatOfficeHours.js +++ b/app/livechat/server/publications/livechatOfficeHours.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatOfficeHour } from '../../../models'; diff --git a/app/livechat/server/publications/livechatQueue.js b/app/livechat/server/publications/livechatQueue.js index 2940473890cc76af5acd50890b06afd93f35b1c2..92a4e7fae5eb2dca312af2da625f0c4be359d6f4 100644 --- a/app/livechat/server/publications/livechatQueue.js +++ b/app/livechat/server/publications/livechatQueue.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatDepartmentAgents } from '../../../models'; diff --git a/app/livechat/server/publications/livechatRooms.js b/app/livechat/server/publications/livechatRooms.js index 37eaebf30f3fcdd82d287714b6a738186df64f66..bba937e12a017079e27c1be8ba74ea675de69382 100644 --- a/app/livechat/server/publications/livechatRooms.js +++ b/app/livechat/server/publications/livechatRooms.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { Rooms } from '../../../models'; diff --git a/app/livechat/server/publications/livechatTriggers.js b/app/livechat/server/publications/livechatTriggers.js index 185dd444d2c2a2facba6baed951de6c20fdf29fd..21c3c824f9ec7dc8a2b260ef1f3316c731b27410 100644 --- a/app/livechat/server/publications/livechatTriggers.js +++ b/app/livechat/server/publications/livechatTriggers.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { LivechatTrigger } from '../../../models'; @@ -13,7 +14,6 @@ Meteor.publish('livechat:triggers', function(_id) { if (_id !== undefined) { return LivechatTrigger.findById(_id); - } else { - return LivechatTrigger.find(); } + return LivechatTrigger.find(); }); diff --git a/app/livechat/server/publications/livechatVisitors.js b/app/livechat/server/publications/livechatVisitors.js index 5521d96a32f20d442136a2621a47948033a749ff..8803da19962c0dc76ad695fdc4eedff045527a6c 100644 --- a/app/livechat/server/publications/livechatVisitors.js +++ b/app/livechat/server/publications/livechatVisitors.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../../authorization'; import { LivechatVisitors } from '../../../models'; diff --git a/app/livechat/server/publications/visitorHistory.js b/app/livechat/server/publications/visitorHistory.js index 2309a1697929baf266a39bbbe9df354ceb8a8c17..4a7159196d4c09e3a0928034db383a72e841ad0b 100644 --- a/app/livechat/server/publications/visitorHistory.js +++ b/app/livechat/server/publications/visitorHistory.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Rooms, Subscriptions } from '../../../models'; diff --git a/app/livechat/server/publications/visitorInfo.js b/app/livechat/server/publications/visitorInfo.js index 054eb358d47675c3f319202fcb42437683c8ccbf..197832f081939e6b82b781f2a22f8896122e66cc 100644 --- a/app/livechat/server/publications/visitorInfo.js +++ b/app/livechat/server/publications/visitorInfo.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Rooms, LivechatVisitors } from '../../../models'; @@ -15,7 +16,6 @@ Meteor.publish('livechat:visitorInfo', function({ rid: roomId }) { if (room && room.v && room.v._id) { return LivechatVisitors.findById(room.v._id); - } else { - return this.ready(); } + return this.ready(); }); diff --git a/app/livechat/server/publications/visitorPageVisited.js b/app/livechat/server/publications/visitorPageVisited.js index ae875b6f8f3f5708bb14d17f1e52403a1b7222ee..062d370aad103b6d1764ab2e563dabde55a223ad 100644 --- a/app/livechat/server/publications/visitorPageVisited.js +++ b/app/livechat/server/publications/visitorPageVisited.js @@ -1,9 +1,9 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Rooms, Messages } from '../../../models'; Meteor.publish('livechat:visitorPageVisited', function({ rid: roomId }) { - if (!this.userId) { return this.error(new Meteor.Error('error-not-authorized', 'Not authorized', { publish: 'livechat:visitorPageVisited' })); } diff --git a/app/livechat/server/sendMessageBySMS.js b/app/livechat/server/sendMessageBySMS.js index 551c2263cdef0806e34407c4c8e913aefe022316..1715cd6e1330926dd36532d9802b3c7592fb7c9c 100644 --- a/app/livechat/server/sendMessageBySMS.js +++ b/app/livechat/server/sendMessageBySMS.js @@ -43,5 +43,4 @@ callbacks.add('afterSaveMessage', function(message, room) { SMSService.send(room.sms.from, visitor.phone[0].phoneNumber, message.msg); return message; - }, callbacks.priority.LOW, 'sendMessageBySms'); diff --git a/app/livechat/server/startup.js b/app/livechat/server/startup.js index 0c6bd346b87caade5de0021254922ba0baa3d473..c76325cb4e0422e7567e6aebe1b0cbbf9fe9439b 100644 --- a/app/livechat/server/startup.js +++ b/app/livechat/server/startup.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; + import { roomTypes } from '../../utils'; import { Rooms } from '../../models'; import { hasPermission, addRoomAccessValidator } from '../../authorization'; diff --git a/app/livechat/server/unclosedLivechats.js b/app/livechat/server/unclosedLivechats.js index 5c06a018f3e101e55dcb455f1ef0281d84c361dc..29c96b68e1beb198ff4d1ae11baa1b5067dc8e71 100644 --- a/app/livechat/server/unclosedLivechats.js +++ b/app/livechat/server/unclosedLivechats.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; -import { Users } from '../../models'; import { UserPresenceMonitor } from 'meteor/konecty:user-presence'; + import { Livechat } from './lib/Livechat'; +import { settings } from '../../settings'; +import { Users } from '../../models'; let agentsHandler; let monitorAgents = false; @@ -41,7 +42,7 @@ function runAgentLeaveAction(userId) { const action = settings.get('Livechat_agent_leave_action'); if (action === 'close') { return Livechat.closeOpenChats(userId, settings.get('Livechat_agent_leave_comment')); - } else if (action === 'forward') { + } if (action === 'forward') { return Livechat.forwardOpenChats(userId); } } diff --git a/app/livechat/server/visitorStatus.js b/app/livechat/server/visitorStatus.js index 18775e7da01bccef0a46dca8e76f0ff30436af5c..466d82c8efc4574da1189ab1db120483b5f2a0ba 100644 --- a/app/livechat/server/visitorStatus.js +++ b/app/livechat/server/visitorStatus.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { UserPresenceEvents } from 'meteor/konecty:user-presence'; + import { Livechat } from './lib/Livechat'; Meteor.startup(() => { diff --git a/app/livestream/client/oauth.js b/app/livestream/client/oauth.js index fa3ea4713e608b277f4bdac44885deadab4c6189..e81ff871387b67edaeab12ff8ccb00a773491747 100644 --- a/app/livestream/client/oauth.js +++ b/app/livestream/client/oauth.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; export const close = (popup) => new Promise(function(resolve) { @@ -12,5 +13,5 @@ export const close = (popup) => new Promise(function(resolve) { export const auth = async () => { const oauthWindow = window.open(`${ settings.get('Site_Url') }/api/v1/livestream/oauth?userId=${ Meteor.userId() }`, 'youtube-integration-oauth', 'width=400,height=600'); - return await close(oauthWindow); + return close(oauthWindow); }; diff --git a/app/livestream/client/tabBar.js b/app/livestream/client/tabBar.js index 640a7ecde7b3961e2022e4b2dc5019c189df2d73..1ebd068b271958d0294674a95716d22d38eade91 100644 --- a/app/livestream/client/tabBar.js +++ b/app/livestream/client/tabBar.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; + import { TabBar } from '../../ui-utils'; import { Rooms } from '../../models'; import { settings } from '../../settings'; @@ -9,7 +10,7 @@ Meteor.startup(function() { Tracker.autorun(function() { TabBar.removeButton('livestream'); if (settings.get('Livestream_enabled')) { - const live = Rooms.findOne({ _id: Session.get('openedRoom'), 'streamingOptions.type': 'livestream', 'streamingOptions.id': { $exists :1 } }, { fields: { streamingOptions: 1 } }); + const live = Rooms.findOne({ _id: Session.get('openedRoom'), 'streamingOptions.type': 'livestream', 'streamingOptions.id': { $exists: 1 } }, { fields: { streamingOptions: 1 } }); TabBar.size = live ? 5 : 4; return TabBar.addButton({ groups: ['channel', 'group'], diff --git a/app/livestream/client/views/broadcastView.js b/app/livestream/client/views/broadcastView.js index 4033c56856f73d87af2f620b7741ade3a9c2b9a0..4fbe6fc554fcd3415f64f16949310bf482c07b96 100644 --- a/app/livestream/client/views/broadcastView.js +++ b/app/livestream/client/views/broadcastView.js @@ -2,12 +2,13 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { handleError } from '../../../utils'; import { settings } from '../../../settings'; const getMedia = () => navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; const createAndConnect = (url) => { - if (!'WebSocket' in window) { // eslint-disable-line no-negated-in-lhs + if (!('WebSocket' in window)) { // eslint-disable-line no-negated-in-lhs return false; } @@ -35,11 +36,11 @@ const delay = (time) => new Promise((resolve) => setTimeout(resolve, time)); const waitForStreamStatus = async (id, status) => { const streamActive = new Promise(async (resolve) => { while (true) { // eslint-disable-line no-constant-condition - const currentStatus = await call('livestreamStreamStatus', { streamId: id }); + const currentStatus = await call('livestreamStreamStatus', { streamId: id }); // eslint-disable-line no-await-in-loop if (currentStatus === status) { return resolve(status); } - await delay(1500); + await delay(1500); // eslint-disable-line no-await-in-loop } }); await streamActive; @@ -47,11 +48,11 @@ const waitForStreamStatus = async (id, status) => { const waitForBroadcastStatus = async (id, status) => { const broadcastActive = new Promise(async (resolve) => { while (true) { // eslint-disable-line no-constant-condition - const currentStatus = await call('getBroadcastStatus', { broadcastId: id }); + const currentStatus = await call('getBroadcastStatus', { broadcastId: id }); // eslint-disable-line no-await-in-loop if (currentStatus === status) { return resolve(status); } - await delay(1500); + await delay(1500); // eslint-disable-line no-await-in-loop } }); await broadcastActive; @@ -71,10 +72,6 @@ Template.broadcastView.onCreated(async function() { this.mediaStream = new ReactiveVar(null); this.mediaRecorder = new ReactiveVar(null); this.connection = new ReactiveVar(connection); - - if (!connection) { - return; - } }); Template.broadcastView.onDestroyed(function() { if (this.connection.get()) { @@ -124,7 +121,6 @@ Template.broadcastView.onRendered(async function() { await call('setLivestreamStatus', { broadcastId: this.data.broadcast.id, status: 'testing' }); await waitForBroadcastStatus(this.data.broadcast.id, 'testing'); document.querySelector('.streaming-popup').dispatchEvent(new Event('broadcastStreamReady')); - } catch (e) { console.log(e); } diff --git a/app/livestream/client/views/liveStreamTab.js b/app/livestream/client/views/liveStreamTab.js index 0bb608f54cf6054e972497fe29ed67093c5d87bf..9722540a942883651e20bd1f3b05d18711acd99a 100644 --- a/app/livestream/client/views/liveStreamTab.js +++ b/app/livestream/client/views/liveStreamTab.js @@ -5,6 +5,7 @@ import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import toastr from 'toastr'; + import { auth } from '../oauth.js'; import { RocketChatAnnouncement } from '../../../lib'; import { popout } from '../../../ui-utils'; @@ -80,15 +81,13 @@ Template.liveStreamTab.helpers({ if (popout.context) { popoutSource = Blaze.getData(popout.context).data && Blaze.getData(popout.context).data.streamingSource; } - } catch (e) { - return false; - } finally { if (popoutSource != null && livestreamTabSource === popoutSource) { return true; - } else { - return false; } + } catch (e) { + return false; } + return false; }, isPopoutOpen() { return Template.instance().popoutOpen.get(); @@ -104,7 +103,7 @@ Template.liveStreamTab.onCreated(function() { this.popoutOpen = new ReactiveVar(popout.context != null); this.autorun(() => { - const room = Rooms.findOne(this.data.rid, { fields: { streamingOptions : 1 } }); + const room = Rooms.findOne(this.data.rid, { fields: { streamingOptions: 1 } }); this.streamingOptions.set(room.streamingOptions); }); }); @@ -192,7 +191,7 @@ Template.liveStreamTab.events({ streamingSource: i.streamingOptions.get().url, isAudioOnly: i.streamingOptions.get().isAudioOnly, showVideoControls: true, - streamingOptions: i.streamingOptions.get(), + streamingOptions: i.streamingOptions.get(), }, onCloseCallback: () => i.popoutOpen.set(false), }); @@ -238,7 +237,7 @@ Template.liveStreamTab.events({ streamingSource: i.streamingOptions.get().url, isAudioOnly: i.streamingOptions.get().isAudioOnly, showVideoControls: true, - streamingOptions: i.streamingOptions.get(), + streamingOptions: i.streamingOptions.get(), }, onCloseCallback: () => i.popoutOpen.set(false), }); @@ -262,7 +261,6 @@ Template.liveStreamTab.events({ }, onCloseCallback: () => i.popoutOpen.set(false), }); - } catch (e) { console.log(e); } finally { @@ -280,7 +278,7 @@ callbacks.add('openBroadcast', (rid) => { streamingSource: roomData.streamingOptions.url, isAudioOnly: roomData.streamingOptions.isAudioOnly, showVideoControls: true, - streamingOptions: roomData.streamingOptions, + streamingOptions: roomData.streamingOptions, }, }); }); diff --git a/app/livestream/server/functions/livestream.js b/app/livestream/server/functions/livestream.js index a5e6f8ab5f7ed8c40452468884159acda9dd7753..acd31e138669a1a1b8c6c470f29f05504d80dad2 100644 --- a/app/livestream/server/functions/livestream.js +++ b/app/livestream/server/functions/livestream.js @@ -1,4 +1,5 @@ import google from 'googleapis'; + const { OAuth2 } = google.auth; @@ -24,9 +25,9 @@ export const getBroadcastStatus = async ({ access_token, refresh_token, }); - const youtube = google.youtube({ version:'v3', auth }); + const youtube = google.youtube({ version: 'v3', auth }); const result = await p((resolve) => youtube.liveBroadcasts.list({ - part:'id,status', + part: 'id,status', id, }, resolve)); return result.items && result.items[0] && result.items[0].status.lifeCycleStatus; @@ -46,9 +47,9 @@ export const statusStreamLiveStream = async ({ refresh_token, }); - const youtube = google.youtube({ version:'v3', auth }); + const youtube = google.youtube({ version: 'v3', auth }); const result = await p((resolve) => youtube.liveStreams.list({ - part:'id,status', + part: 'id,status', id, }, resolve)); return result.items && result.items[0].status.streamStatus; @@ -69,10 +70,10 @@ export const statusLiveStream = ({ refresh_token, }); - const youtube = google.youtube({ version:'v3', auth }); + const youtube = google.youtube({ version: 'v3', auth }); return p((resolve) => youtube.liveBroadcasts.transition({ - part:'id,status', + part: 'id,status', id, broadcastStatus: status, }, resolve)); @@ -93,10 +94,10 @@ export const setBroadcastStatus = ({ refresh_token, }); - const youtube = google.youtube({ version:'v3', auth }); + const youtube = google.youtube({ version: 'v3', auth }); return p((resolve) => youtube.liveBroadcasts.transition({ - part:'id,status', + part: 'id,status', id, broadcastStatus: status, }, resolve)); @@ -114,7 +115,7 @@ export const createLiveStream = async ({ access_token, refresh_token, }); - const youtube = google.youtube({ version:'v3', auth }); + const youtube = google.youtube({ version: 'v3', auth }); const [stream, broadcast] = await Promise.all([p((resolve) => youtube.liveStreams.insert({ part: 'id,snippet,cdn,contentDetails,status', @@ -132,7 +133,7 @@ export const createLiveStream = async ({ resource: { snippet: { title: room.name || 'RocketChat Broadcast', - scheduledStartTime : new Date().toISOString(), + scheduledStartTime: new Date().toISOString(), }, status: { privacyStatus: 'unlisted', diff --git a/app/livestream/server/methods.js b/app/livestream/server/methods.js index ae8e6e62b25acfd2aa4e198af46ddded1f94dda9..c18e7c4ab9b6a39d5203903a1c464715b9c4fdec 100644 --- a/app/livestream/server/methods.js +++ b/app/livestream/server/methods.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; + +import { createLiveStream, statusLiveStream, statusStreamLiveStream, getBroadcastStatus, setBroadcastStatus } from './functions/livestream'; import { settings } from '../../settings'; import { Rooms } from '../../models'; -import { createLiveStream, statusLiveStream, statusStreamLiveStream, getBroadcastStatus, setBroadcastStatus } from './functions/livestream'; const selectLivestreamSettings = (user) => user && user.settings && user.settings.livestream; @@ -24,14 +25,13 @@ Meteor.methods({ const { access_token, refresh_token } = livestreamSettings; - return await statusStreamLiveStream({ + return statusStreamLiveStream({ id: streamId, access_token, refresh_token, clientId: settings.get('Broadcasting_client_id'), clientSecret: settings.get('Broadcasting_client_secret'), }); - }, async setLivestreamStatus({ broadcastId, status }) { if (!broadcastId) { @@ -50,7 +50,7 @@ Meteor.methods({ const { access_token, refresh_token } = livestreamSettings; - return await statusLiveStream({ + return statusLiveStream({ id: broadcastId, access_token, refresh_token, @@ -58,7 +58,6 @@ Meteor.methods({ clientId: settings.get('Broadcasting_client_id'), clientSecret: settings.get('Broadcasting_client_secret'), }); - }, async livestreamGet({ rid }) { const livestreamSettings = selectLivestreamSettings(Meteor.user()); @@ -79,14 +78,13 @@ Meteor.methods({ } const { access_token, refresh_token } = livestreamSettings; - return await createLiveStream({ + return createLiveStream({ room, access_token, refresh_token, clientId: settings.get('Broadcasting_client_id'), clientSecret: settings.get('Broadcasting_client_secret'), }); - }, async getBroadcastStatus({ broadcastId }) { if (!broadcastId) { @@ -105,7 +103,7 @@ Meteor.methods({ const { access_token, refresh_token } = livestreamSettings; - return await getBroadcastStatus({ + return getBroadcastStatus({ id: broadcastId, access_token, refresh_token, @@ -130,7 +128,7 @@ Meteor.methods({ const { access_token, refresh_token } = livestreamSettings; - return await setBroadcastStatus({ + return setBroadcastStatus({ id: broadcastId, access_token, refresh_token, @@ -138,6 +136,5 @@ Meteor.methods({ clientId: settings.get('Broadcasting_client_id'), clientSecret: settings.get('Broadcasting_client_secret'), }); - }, }); diff --git a/app/livestream/server/routes.js b/app/livestream/server/routes.js index cc860cd019f83e1b99653be348696f771d463c11..8668217d19a55d3910fe2d2f2b754b07d118ebd9 100644 --- a/app/livestream/server/routes.js +++ b/app/livestream/server/routes.js @@ -1,8 +1,10 @@ import { Meteor } from 'meteor/meteor'; +import google from 'googleapis'; + import { settings } from '../../settings'; import { Users } from '../../models'; import { API } from '../../api'; -import google from 'googleapis'; + const { OAuth2 } = google.auth; API.v1.addRoute('livestream/oauth', { @@ -21,7 +23,8 @@ API.v1.addRoute('livestream/oauth', { statusCode: 302, headers: { Location: url, - }, body: 'Oauth redirect', + }, + body: 'Oauth redirect', }; }, }); @@ -37,13 +40,14 @@ API.v1.addRoute('livestream/oauth/callback', { const ret = Meteor.wrapAsync(clientAuth.getToken.bind(clientAuth))(code); Users.update({ _id: userId }, { $set: { - 'settings.livestream' : ret, + 'settings.livestream': ret, } }); return { headers: { - 'content-type' : 'text/html', - }, body: '<script>window.close()</script>', + 'content-type': 'text/html', + }, + body: '<script>window.close()</script>', }; }, }); diff --git a/app/livestream/server/settings.js b/app/livestream/server/settings.js index 149cd4180852b3ea0e3c92d384bc8eb0f14ddc81..5fc796efa87d09aeeb7fbf19a9d668070d325e17 100644 --- a/app/livestream/server/settings.js +++ b/app/livestream/server/settings.js @@ -1,9 +1,9 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { settings.addGroup('LiveStream & Broadcasting', function() { - this.add('Livestream_enabled', false, { type: 'boolean', public: true, diff --git a/app/logger/client/ansispan.js b/app/logger/client/ansispan.js index 62340cd080dafbb0ebe2d8177ca0199a26d8513e..1ccf35296f78a7e2c294ee37bc82755f04e63e59 100644 --- a/app/logger/client/ansispan.js +++ b/app/logger/client/ansispan.js @@ -10,22 +10,19 @@ const foregroundColors = { }; export const ansispan = (str: string) => { - str = ( - str - .replace(/\s/g, ' ') - .replace(/(\\n|\n)/g, '<br>') - .replace(/>/g, '>') - .replace(/</g, '<') - .replace(/(.\d{8}-\d\d:\d\d:\d\d\.\d\d\d\(?.{0,2}\)?)/, '<span class="terminal-time">$1</span>') - .replace(/\033\[1m/g, '<strong>') - .replace(/\033\[22m/g, '</strong>') - .replace(/\033\[3m/g, '<em>') - .replace(/\033\[23m/g, '</em>') - .replace(/\033\[m/g, '</span>') - .replace(/\033\[0m/g, '</span>') - .replace(/\033\[39m/g, '</span>') - ); - + str = str + .replace(/\s/g, ' ') + .replace(/(\\n|\n)/g, '<br>') + .replace(/>/g, '>') + .replace(/</g, '<') + .replace(/(.\d{8}-\d\d:\d\d:\d\d\.\d\d\d\(?.{0,2}\)?)/, '<span class="terminal-time">$1</span>') + .replace(/\033\[1m/g, '<strong>') + .replace(/\033\[22m/g, '</strong>') + .replace(/\033\[3m/g, '<em>') + .replace(/\033\[23m/g, '</em>') + .replace(/\033\[m/g, '</span>') + .replace(/\033\[0m/g, '</span>') + .replace(/\033\[39m/g, '</span>'); return Object.entries(foregroundColors).reduce((str, [ansiCode, color]) => { const span = `<span style="color: ${ color }">`; return ( diff --git a/app/logger/client/logger.js b/app/logger/client/logger.js index 92556c3dc8742417bfc748b65e5438116e201aba..61eb0bf9c11d7b80d873327d865a3f5fbfe0327a 100644 --- a/app/logger/client/logger.js +++ b/app/logger/client/logger.js @@ -6,29 +6,27 @@ import { getConfig } from '../../ui-utils/client/config'; Template.log = !!(getConfig('debug') || getConfig('debug-template')); if (Template.log) { - Template.logMatch = /.*/; Template.enableLogs = function(log) { Template.logMatch = /.*/; if (log === false) { - return Template.log = false; - } else { - Template.log = true; - if (log instanceof RegExp) { - return Template.logMatch = log; - } + Template.log = false; + return false; + } + Template.log = true; + if (log instanceof RegExp) { + Template.logMatch = log; + return log; } }; const wrapHelpersAndEvents = function(original, prefix, color) { return function(dict) { - const template = this; const fn1 = function(name, fn) { if (fn instanceof Function) { - return dict[name] = function(...args) { - + dict[name] = function(...args) { const result = fn.apply(this, args); if (Template.log === true) { const completeName = `${ prefix }:${ template.viewName.replace('Template.', '') }.${ name }`; @@ -42,6 +40,7 @@ if (Template.log) { } return result; }; + return dict[name]; } }; _.each(name, (fn, name) => { @@ -74,9 +73,8 @@ if (Template.log) { return result; }; return original.call(template, wrap); - } else { - return original.call(template, fn); } + return original.call(template, fn); }; }; diff --git a/app/logger/client/viewLogs.js b/app/logger/client/viewLogs.js index 8185bf6a6f0f55e1ecada98fbddad1fb146f4767..112a947fc70b67e99058ce55fc5fde9118a2fa60 100644 --- a/app/logger/client/viewLogs.js +++ b/app/logger/client/viewLogs.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { AdminBox } from '../../ui-utils'; import { hasAllPermission } from '../../authorization'; import { t } from '../../utils'; diff --git a/app/logger/client/views/viewLogs.js b/app/logger/client/views/viewLogs.js index feecd66d7c1998ee360df200e7e16284da2543c2..82382c1ada0df8452c4b9934271ac9efa8bbe004 100644 --- a/app/logger/client/views/viewLogs.js +++ b/app/logger/client/views/viewLogs.js @@ -2,6 +2,7 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { ansispan } from '../ansispan'; import { stdout } from '../viewLogs'; import { readMessage } from '../../../ui-utils'; @@ -12,7 +13,7 @@ import './viewLogs.css'; Template.viewLogs.onCreated(function() { this.subscribe('stdout'); - return this.atBottom = true; + this.atBottom = true; }); Template.viewLogs.helpers({ @@ -65,9 +66,9 @@ Template.viewLogs.onRendered(function() { this.sendToBottomIfNecessary = () => { if (this.atBottom === true && this.isAtBottom() !== true) { - return this.sendToBottom(); + this.sendToBottom(); } else if (this.atBottom === false) { - return newLogs.className = 'new-logs'; + newLogs.className = 'new-logs'; } }; diff --git a/app/logger/server/server.js b/app/logger/server/server.js index d7750a2d6064f6b64bb03fe3a37ddbf2c0267cf6..8e9bc460dc35276b3a8e2f9f6db9416c5836da0d 100644 --- a/app/logger/server/server.js +++ b/app/logger/server/server.js @@ -1,13 +1,15 @@ +import { EventEmitter } from 'events'; + import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { EJSON } from 'meteor/ejson'; import { Log } from 'meteor/logging'; -import { EventEmitter } from 'events'; -import { settings } from '../../settings'; -import { hasPermission } from '../../authorization'; import _ from 'underscore'; import s from 'underscore.string'; +import { settings } from '../../settings'; +import { hasPermission } from '../../authorization'; + let Logger; const LoggerManager = new class extends EventEmitter { @@ -20,22 +22,26 @@ const LoggerManager = new class extends EventEmitter { this.showFileAndLine = false; this.logLevel = 0; } + register(logger) { - if (!logger instanceof Logger) { + if (!(logger instanceof Logger)) { return; } this.loggers[logger.name] = logger; this.emit('register', logger); } + addToQueue(logger, args) { this.queue.push({ logger, args, }); } + dispatchQueue() { _.each(this.queue, (item) => item.logger._log.apply(item.logger, item.args)); this.clearQueue(); } + clearQueue() { this.queue = []; } @@ -46,9 +52,9 @@ const LoggerManager = new class extends EventEmitter { enable(dispatchQueue = false) { this.enabled = true; - return (dispatchQueue === true) ? this.dispatchQueue() : this.clearQueue(); + return dispatchQueue === true ? this.dispatchQueue() : this.clearQueue(); } -}; +}(); const defaultTypes = { debug: { @@ -160,6 +166,7 @@ class _Logger { LoggerManager.register(this); } + getPrefix(options) { let prefix = `${ this.name } ➔ ${ options.method }`; if (options.section) { @@ -191,6 +198,7 @@ class _Logger { } return prefix; } + _getCallerDetails() { const getStack = () => { // We do NOT use Error.prepareStackTrace here (a V8 extension that gets us a @@ -207,7 +215,7 @@ class _Logger { // looking for the first line outside the logging package (or an // eval if we find that first) let line = lines[0]; - for (let index = 0, len = lines.length; index < len, index++; line = lines[index]) { + for (let index = 0, len = lines.length; index < len; index++, line = lines[index]) { if (line.match(/^\s*at eval \(eval/)) { return { file: 'eval' }; } @@ -236,6 +244,7 @@ class _Logger { } return details; } + makeABox(message, title) { if (!_.isArray(message)) { message = message.split('\n'); @@ -293,7 +302,6 @@ class _Logger { box.forEach((line) => { console.log(subPrefix, color ? line[color] : line); }); - } else { options.arguments.unshift(prefix); console.log.apply(console, options.arguments); @@ -337,7 +345,7 @@ const StdOut = new class extends EventEmitter { this.queue = []; process.stdout.write = (...args) => { write.apply(process.stdout, args); - const date = new Date; + const date = new Date(); const string = processString(args[0], date); const item = { id: Random.id(), @@ -355,7 +363,7 @@ const StdOut = new class extends EventEmitter { this.emit('write', string, item); }; } -}; +}(); Meteor.publish('stdout', function() { diff --git a/app/mail-messages/client/views/mailer.js b/app/mail-messages/client/views/mailer.js index e21205cc319e4e0e9e12dc0de48c840a98392c9e..0f8f7e5669854c69a2d9b5ff06e26da53a553484 100644 --- a/app/mail-messages/client/views/mailer.js +++ b/app/mail-messages/client/views/mailer.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { settings } from '../../../settings'; import { handleError } from '../../../utils'; -import toastr from 'toastr'; import { SideNav } from '../../../ui-utils/client'; Template.mailer.helpers({ diff --git a/app/mail-messages/server/functions/sendMail.js b/app/mail-messages/server/functions/sendMail.js index 5e1db39d6d0f5b96a2033254bab1eaecb8e8e0d8..04bc2800831ff8d0249763adfdd7f803fee87ee6 100644 --- a/app/mail-messages/server/functions/sendMail.js +++ b/app/mail-messages/server/functions/sendMail.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { EJSON } from 'meteor/ejson'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { placeholders } from '../../../utils'; import s from 'underscore.string'; + +import { placeholders } from '../../../utils'; import * as Mailer from '../../../mailer'; export const sendMail = function(from, subject, body, dryrun, query) { diff --git a/app/mail-messages/server/methods/sendMail.js b/app/mail-messages/server/methods/sendMail.js index 5dcc9b729aebe4d5b3053c94031cb8dcfb368325..9fef15299682d424c00529edeeeb80a815c50ac0 100644 --- a/app/mail-messages/server/methods/sendMail.js +++ b/app/mail-messages/server/methods/sendMail.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Mailer } from '../lib/Mailer'; import { hasRole } from '../../../authorization'; diff --git a/app/mail-messages/server/methods/unsubscribe.js b/app/mail-messages/server/methods/unsubscribe.js index c5bb3e8c9d5fa8527fc61d223169981c44f79721..180b3652b001bb4d3f3a145a67e632fd38b13ca0 100644 --- a/app/mail-messages/server/methods/unsubscribe.js +++ b/app/mail-messages/server/methods/unsubscribe.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { Mailer } from '../lib/Mailer'; Meteor.methods({ diff --git a/app/mail-messages/server/startup.js b/app/mail-messages/server/startup.js index ed0993fcad500fff95ad637406b649101edced54..10dd89d2b8c00be91dd19ea96902d34df4fed342 100644 --- a/app/mail-messages/server/startup.js +++ b/app/mail-messages/server/startup.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Permissions } from '../../models'; Meteor.startup(function() { diff --git a/app/mailer/server/api.js b/app/mailer/server/api.js index c8044be64766de35940c773db6e6a9baf9a51210..d47ae99e890857b8d2c13ca22224af321c62749e 100644 --- a/app/mailer/server/api.js +++ b/app/mailer/server/api.js @@ -1,10 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Email } from 'meteor/email'; import { TAPi18n } from 'meteor/tap:i18n'; -import { settings } from '../../settings'; import _ from 'underscore'; import s from 'underscore.string'; import juice from 'juice'; + +import { settings } from '../../settings'; + let contentHeader; let contentFooter; @@ -30,10 +32,10 @@ export const replace = function replace(str, data = {}) { Site_Name: Settings.get('Site_Name'), Site_URL: Settings.get('Site_Url'), Site_URL_Slash: Settings.get('Site_Url').replace(/\/?$/, '/'), - ...(data.name && { + ...data.name && { fname: s.strLeft(data.name, ' '), lname: s.strRightBack(data.name, ' '), - }), + }, ...data, }; return Object.entries(options).reduce((ret, [key, value]) => replacekey(ret, key, value), translate(str)); diff --git a/app/mapview/client/mapview.js b/app/mapview/client/mapview.js index a1695c1aaac6bd7cf3e3887ed749eb6ac637dec0..d12382a36908d4c33cdfe69856e02798ce787ba7 100644 --- a/app/mapview/client/mapview.js +++ b/app/mapview/client/mapview.js @@ -1,4 +1,5 @@ import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; /* @@ -7,12 +8,10 @@ import { callbacks } from '../../callbacks'; */ function MapView(message) { - // get MapView settings const mv_googlekey = settings.get('MapView_GMapsAPIKey'); if (message.location) { - // GeoJSON is reversed - ie. [lng, lat] const [longitude, latitude] = message.location.coordinates; diff --git a/app/mapview/server/settings.js b/app/mapview/server/settings.js index 0fb4ea239ac5b6f574a4640dc06f2fc79b6f6360..f009c15f87226a68bd2b83aafc97761103fc9bb2 100644 --- a/app/mapview/server/settings.js +++ b/app/mapview/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/markdown/lib/markdown.js b/app/markdown/lib/markdown.js index 5881a5f1bec549b68ec6888b2fa672965255336d..eb97f46442724f0385c565657b2a3e7bed8ec94e 100644 --- a/app/markdown/lib/markdown.js +++ b/app/markdown/lib/markdown.js @@ -5,12 +5,12 @@ import s from 'underscore.string'; import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; -import { settings } from '../../settings'; -import { callbacks } from '../../callbacks'; + import { marked } from './parser/marked/marked.js'; import { original } from './parser/original/original.js'; - import { code } from './parser/original/code.js'; +import { callbacks } from '../../callbacks'; +import { settings } from '../../settings'; const parsers = { original, @@ -78,7 +78,7 @@ class MarkdownClass { } } -export const Markdown = new MarkdownClass; +export const Markdown = new MarkdownClass(); // renderMessage already did html escape const MarkdownMessage = (message) => { diff --git a/app/markdown/lib/parser/marked/marked.js b/app/markdown/lib/parser/marked/marked.js index 08577708a07635604a539990b9721b28dbf42775..b61e681a0e580d2f2a5af7f0c998fa074725faa3 100644 --- a/app/markdown/lib/parser/marked/marked.js +++ b/app/markdown/lib/parser/marked/marked.js @@ -1,10 +1,11 @@ -import { settings } from '../../../../settings'; import { Random } from 'meteor/random'; import _ from 'underscore'; import s from 'underscore.string'; import hljs from 'highlight.js'; import _marked from 'marked'; +import { settings } from '../../../../settings'; + const renderer = new _marked.Renderer(); let msg = null; diff --git a/app/markdown/lib/parser/original/code.js b/app/markdown/lib/parser/original/code.js index 8a7903364767a9738c81970b8855e21f4e972c9f..7a061858055f3637642b3f4c6f949e522c79f2d3 100644 --- a/app/markdown/lib/parser/original/code.js +++ b/app/markdown/lib/parser/original/code.js @@ -6,7 +6,7 @@ import { Random } from 'meteor/random'; import s from 'underscore.string'; import hljs from 'highlight.js'; -const inlinecode = (message) => +const inlinecode = (message) => { // Support `text` message.html = message.html.replace(/\`([^`\r\n]+)\`([<_*~]|\B|\b|$)/gm, (match, p1, p2) => { const token = `=!=${ Random.id() }=!=`; @@ -18,15 +18,14 @@ const inlinecode = (message) => }); return token; - }) -; + }); +}; const codeblocks = (message) => { // Count occurencies of ``` const count = (message.html.match(/```/g) || []).length; if (count) { - // Check if we need to add a final ``` if ((count % 2) > 0) { message.html = `${ message.html }\n\`\`\``; @@ -48,7 +47,7 @@ const codeblocks = (message) => { const emptyLanguage = lang === '' ? s.unescapeHTML(codeMatch[1] + codeMatch[2]) : s.unescapeHTML(codeMatch[2]); const code = singleLine ? s.unescapeHTML(codeMatch[1]) : emptyLanguage; - const result = lang === '' ? hljs.highlightAuto((lang + code)) : hljs.highlight(lang, code); + const result = lang === '' ? hljs.highlightAuto(lang + code) : hljs.highlight(lang, code); const token = `=!=${ Random.id() }=!=`; message.tokens.push({ @@ -65,7 +64,7 @@ const codeblocks = (message) => { } // Re-mount message - return message.html = msgParts.join(''); + message.html = msgParts.join(''); } }; diff --git a/app/markdown/lib/parser/original/markdown.js b/app/markdown/lib/parser/original/markdown.js index 7ac8f4f20647d088752b2d68a0834c705bb17ecd..09517cd6fd4e0275ac82c5e272f05ea1d66ab5b9 100644 --- a/app/markdown/lib/parser/original/markdown.js +++ b/app/markdown/lib/parser/original/markdown.js @@ -4,9 +4,10 @@ */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; -import { settings } from '../../../../settings'; import s from 'underscore.string'; +import { settings } from '../../../../settings'; + const parseNotEscaped = function(msg, message) { if (message && message.tokens == null) { message.tokens = []; diff --git a/app/markdown/server/index.js b/app/markdown/server/index.js index f4d1855ab52a773f2b714eac50f8baf004d0890d..03cdcc2fdd649ad08ada7a91812977ca01022872 100644 --- a/app/markdown/server/index.js +++ b/app/markdown/server/index.js @@ -1,2 +1,3 @@ import './settings'; + export { Markdown } from '../lib/markdown'; diff --git a/app/markdown/server/settings.js b/app/markdown/server/settings.js index 14d16c7e774627fd7d3629fbc2168b2f100ea173..71f3dc02c7f6a13a1f239cf7e4d64902a27cd285 100644 --- a/app/markdown/server/settings.js +++ b/app/markdown/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(() => { diff --git a/app/markdown/tests/client.mocks.js b/app/markdown/tests/client.mocks.js index 4977638737956e8b9a9da3a6a06e874a4b75682a..6838ac521620ff0b3cd255d75736cae9820e7671 100644 --- a/app/markdown/tests/client.mocks.js +++ b/app/markdown/tests/client.mocks.js @@ -1,6 +1,7 @@ import mock from 'mock-require'; import _ from 'underscore'; import s from 'underscore.string'; + _.mixin(s.exports()); mock('meteor/meteor', { diff --git a/app/markdown/tests/client.tests.js b/app/markdown/tests/client.tests.js index f6f5a2495c3f209cbb659c9a28068ddfe4ac9b34..dcbe7f9a90e741c51e20cb7e82123b07fbc8a2f0 100644 --- a/app/markdown/tests/client.tests.js +++ b/app/markdown/tests/client.tests.js @@ -1,7 +1,9 @@ /* eslint-env mocha */ import 'babel-polyfill'; import assert from 'assert'; + import s from 'underscore.string'; + import './client.mocks.js'; import { original } from '../lib/parser/original/original'; import { Markdown } from '../lib/markdown'; diff --git a/app/mentions-flextab/client/actionButton.js b/app/mentions-flextab/client/actionButton.js index 63eca8abccb6df1a7041746cd6da71eafe0d71a4..1e68f74d7ed50b83f6355d6d31bd8cb09c8e1580 100644 --- a/app/mentions-flextab/client/actionButton.js +++ b/app/mentions-flextab/client/actionButton.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { MessageAction, RoomHistoryManager } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; diff --git a/app/mentions-flextab/client/tabBar.js b/app/mentions-flextab/client/tabBar.js index 07bd5de84803d403dba1b1c3c19e72a773e4d849..afad4b9d86e2f689ad345f5262a7a0bdcefa9970 100644 --- a/app/mentions-flextab/client/tabBar.js +++ b/app/mentions-flextab/client/tabBar.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { TabBar } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/mentions-flextab/client/views/mentionsFlexTab.js b/app/mentions-flextab/client/views/mentionsFlexTab.js index 37ae334f14349b94b1917c7d97a0394cec699efd..ed3fad676e9f7a4f1571814b3435bb75bebafc02 100644 --- a/app/mentions-flextab/client/views/mentionsFlexTab.js +++ b/app/mentions-flextab/client/views/mentionsFlexTab.js @@ -1,8 +1,10 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { MentionedMessage } from '../lib/MentionedMessage'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; + Template.mentionsFlexTab.helpers({ hasMessages() { return Template.instance().cursor.count() > 0; diff --git a/app/mentions-flextab/server/publications/mentionedMessages.js b/app/mentions-flextab/server/publications/mentionedMessages.js index fcf047545e7bc0a3411cf02f8477dff459713704..8eaa292347e005bd515f1b0d240878d23a9b01cb 100644 --- a/app/mentions-flextab/server/publications/mentionedMessages.js +++ b/app/mentions-flextab/server/publications/mentionedMessages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Messages } from '../../../models'; Meteor.publish('mentionedMessages', function(rid, limit = 50) { diff --git a/app/mentions/client/client.js b/app/mentions/client/client.js index 7030dcdf18a4c9ccb217de0ce98958e8352bada3..910c8a1f2f026343912b67845c7c9444b111367b 100644 --- a/app/mentions/client/client.js +++ b/app/mentions/client/client.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { callbacks } from '../../callbacks'; import { settings } from '../../settings'; import { Users } from '../../models/client'; diff --git a/app/mentions/lib/MentionsParser.js b/app/mentions/lib/MentionsParser.js index 0921f66e2b3bde1bcc76235b6c8747b4b699164d..f82ec3f0aef4e135602102c75392830bd7fe59f7 100644 --- a/app/mentions/lib/MentionsParser.js +++ b/app/mentions/lib/MentionsParser.js @@ -62,9 +62,9 @@ export class MentionsParser { return `${ prefix }<a class="${ className }" data-group="${ mention }">${ mention }</a>`; } - const label = temp ? - mention && s.escapeHTML(mention) : - (mentions || []) + const label = temp + ? mention && s.escapeHTML(mention) + : (mentions || []) .filter(({ username }) => username === mention) .map(({ name, username }) => (this.useRealName ? name : username)) .map((label) => label && s.escapeHTML(label))[0]; diff --git a/app/mentions/server/Mentions.js b/app/mentions/server/Mentions.js index 0d03dfdcc01cd9496988df15f511c84a7a35b621..e604af6fa9bbf6b47514171ca42d8a4f94534212 100644 --- a/app/mentions/server/Mentions.js +++ b/app/mentions/server/Mentions.js @@ -15,30 +15,39 @@ export default class MentionsServer extends MentionsParser { this.getTotalChannelMembers = args.getTotalChannelMembers; this.onMaxRoomMembersExceeded = args.onMaxRoomMembersExceeded || (() => {}); } + set getUsers(m) { this._getUsers = m; } + get getUsers() { return typeof this._getUsers === 'function' ? this._getUsers : () => this._getUsers; } + set getChannels(m) { this._getChannels = m; } + get getChannels() { return typeof this._getChannels === 'function' ? this._getChannels : () => this._getChannels; } + set getChannel(m) { this._getChannel = m; } + get getChannel() { return typeof this._getChannel === 'function' ? this._getChannel : () => this._getChannel; } + set messageMaxAll(m) { this._messageMaxAll = m; } + get messageMaxAll() { return typeof this._messageMaxAll === 'function' ? this._messageMaxAll() : this._messageMaxAll; } + getUsersByMentions({ msg, rid, u: sender }) { let mentions = this.getUserMentions(msg); const mentionsAll = []; @@ -60,10 +69,12 @@ export default class MentionsServer extends MentionsParser { mentions = userMentions.length ? this.getUsers(userMentions) : []; return [...mentionsAll, ...mentions]; } + getChannelbyMentions({ msg }) { const channels = this.getChannelMentions(msg); return this.getChannels(channels.map((c) => c.trim().substr(1))); } + execute(message) { const mentionsAll = this.getUsersByMentions(message); const channels = this.getChannelbyMentions(message); diff --git a/app/mentions/server/methods/getUserMentionsByChannel.js b/app/mentions/server/methods/getUserMentionsByChannel.js index d648ed811d05419b979acd5267c498a09765eba6..bdcc52527901646a34ef3579ecb24a3dd96e3098 100644 --- a/app/mentions/server/methods/getUserMentionsByChannel.js +++ b/app/mentions/server/methods/getUserMentionsByChannel.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms, Users, Messages } from '../../../models'; Meteor.methods({ diff --git a/app/mentions/server/server.js b/app/mentions/server/server.js index 3012b300379a0fd8daa09cd43028084e2ef25f2e..bd6109787856ad01f44b0f6cd4af60eead583666 100644 --- a/app/mentions/server/server.js +++ b/app/mentions/server/server.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; + +import MentionsServer from './Mentions'; import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { Notifications } from '../../notifications'; import { Users, Subscriptions, Rooms } from '../../models'; -import _ from 'underscore'; -import MentionsServer from './Mentions'; const mention = new MentionsServer({ pattern: () => settings.get('UTF8_Names_Validation'), @@ -23,7 +24,7 @@ const mention = new MentionsServer({ Notifications.notifyUser(sender._id, 'message', { _id: Random.id(), rid, - ts: new Date, + ts: new Date(), msg, groupable: false, }); diff --git a/app/mentions/tests/client.tests.js b/app/mentions/tests/client.tests.js index d3af918771ada06a0792579f8f74dc0958c992bd..5854ec14ba6abb21567ee7355de659d236d234a3 100644 --- a/app/mentions/tests/client.tests.js +++ b/app/mentions/tests/client.tests.js @@ -1,6 +1,7 @@ /* eslint-env mocha */ import 'babel-polyfill'; import assert from 'assert'; + import { MentionsParser } from '../lib/MentionsParser'; let mentionsParser; @@ -14,7 +15,7 @@ beforeEach(function functionName() { describe('Mention', function() { describe('get pattern', () => { const regexp = '[0-9a-zA-Z-_.]+'; - beforeEach(() => mentionsParser.pattern = () => regexp); + beforeEach(() => { mentionsParser.pattern = () => regexp; }); describe('by function', function functionName() { it(`should be equal to ${ regexp }`, () => { @@ -30,7 +31,7 @@ describe('Mention', function() { }); describe('get useRealName', () => { - beforeEach(() => mentionsParser.useRealName = () => true); + beforeEach(() => { mentionsParser.useRealName = () => true; }); describe('by function', function functionName() { it('should be true', () => { @@ -49,7 +50,7 @@ describe('Mention', function() { const me = 'me'; describe('by function', function functionName() { - beforeEach(() => mentionsParser.me = () => me); + beforeEach(() => { mentionsParser.me = () => me; }); it(`should be equal to ${ me }`, () => { assert.equal(me, mentionsParser.me); @@ -57,7 +58,7 @@ describe('Mention', function() { }); describe('by const', function functionName() { - beforeEach(() => mentionsParser.me = me); + beforeEach(() => { mentionsParser.me = me; }); it(`should be equal to ${ me }`, () => { assert.equal(me, mentionsParser.me); diff --git a/app/mentions/tests/server.tests.js b/app/mentions/tests/server.tests.js index 675fa273eacf0d630f8968965f54e42d9526bb43..30bc0756498409a0df271269bead5a0b6cdb5f65 100644 --- a/app/mentions/tests/server.tests.js +++ b/app/mentions/tests/server.tests.js @@ -50,16 +50,15 @@ describe('Mention Server', () => { beforeEach(() => { mention.getChannel = () => ({ - usernames:[{ + usernames: [{ _id: 1, username: 'rocket.cat', }, { _id: 2, username: 'jon', }], - }) - // Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true }}).fetch(); - ; + }); + // Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true }}).fetch(); }); it('should return "all"', () => { const message = { @@ -154,7 +153,6 @@ describe('Mention Server', () => { assert.deepEqual(expected, result); }); }); - }); describe('getChannelbyMentions', () => { it('should return the channel "general"', () => { diff --git a/app/message-attachments/client/index.js b/app/message-attachments/client/index.js index f3cd8f6e320f7ab165c0a50ba4dcde41f6ed4848..c0f9e1f52948588b26a8b3db5e024d9b22c07763 100644 --- a/app/message-attachments/client/index.js +++ b/app/message-attachments/client/index.js @@ -4,7 +4,6 @@ import './renderField.html'; import { registerFieldTemplate } from './renderField'; - export { registerFieldTemplate, }; diff --git a/app/message-attachments/client/messageAttachment.js b/app/message-attachments/client/messageAttachment.js index 7caf9b5bd1ac198190a633b345a74d103af31049..edda441cfe365df41deb26cb9ccabb592f431f5f 100644 --- a/app/message-attachments/client/messageAttachment.js +++ b/app/message-attachments/client/messageAttachment.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { DateFormat } from '../../lib'; import { Template } from 'meteor/templating'; + +import { DateFormat } from '../../lib'; import { getUserPreference, getURL } from '../../utils/client'; import { Users } from '../../models'; import { renderMessageBody } from '../../ui-utils'; @@ -27,7 +28,7 @@ Template.messageAttachment.helpers({ }, loadImage() { if (this.downloadImages !== true) { - const user = Users.findOne({ _id: Meteor.userId() }, { fields: { 'settings.autoImageLoad' : 1 } }); + const user = Users.findOne({ _id: Meteor.userId() }, { fields: { 'settings.autoImageLoad': 1 } }); if (getUserPreference(user, 'autoImageLoad') === false) { return false; } @@ -52,9 +53,8 @@ Template.messageAttachment.helpers({ mediaCollapsed() { if (this.collapsed != null) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, time() { const messageDate = new Date(this.ts); diff --git a/app/message-mark-as-unread/client/actionButton.js b/app/message-mark-as-unread/client/actionButton.js index 620e97abec65e80e8474c3c2aea26e4a918187d1..43a40fa8d3e4bcdb73d94d66ee2c61bb3736a2e5 100644 --- a/app/message-mark-as-unread/client/actionButton.js +++ b/app/message-mark-as-unread/client/actionButton.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; + import { RoomManager, MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import { handleError } from '../../utils'; diff --git a/app/message-mark-as-unread/server/unreadMessages.js b/app/message-mark-as-unread/server/unreadMessages.js index f5f0421f2bae3f535a9a5c16afcead037d49dd22..4eee05fd230d4a40178998b5f17ca6a615309bb5 100644 --- a/app/message-mark-as-unread/server/unreadMessages.js +++ b/app/message-mark-as-unread/server/unreadMessages.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { Messages, Subscriptions } from '../../models'; + import logger from './logger'; +import { Messages, Subscriptions } from '../../models'; Meteor.methods({ unreadMessages(firstUnreadMessage, room) { diff --git a/app/message-pin/client/actionButton.js b/app/message-pin/client/actionButton.js index 9f17bd36f8901bca643cdabe838ab2f87cc82908..1d10fdea1a48dc3a8ca747f4baae12e8c6bfa6f2 100644 --- a/app/message-pin/client/actionButton.js +++ b/app/message-pin/client/actionButton.js @@ -1,13 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { RoomHistoryManager, MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import { handleError } from '../../utils'; import { settings } from '../../settings'; import { Subscriptions } from '../../models'; import { hasAtLeastOnePermission } from '../../authorization'; -import toastr from 'toastr'; Meteor.startup(function() { MessageAction.addButton({ diff --git a/app/message-pin/client/messageType.js b/app/message-pin/client/messageType.js index a178d84f46eaa4a6244299ff0d0829c6ff784c4c..29effe5e839638cd896f745a4dea83a0a7ad6b85 100644 --- a/app/message-pin/client/messageType.js +++ b/app/message-pin/client/messageType.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { MessageTypes } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/message-pin/client/pinMessage.js b/app/message-pin/client/pinMessage.js index 4fe5ead345df1f2f7cd250ef72759fc9d1e62301..7822c2875a2d0d36ca7d870c996001d68ee9923d 100644 --- a/app/message-pin/client/pinMessage.js +++ b/app/message-pin/client/pinMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { ChatMessage, Subscriptions } from '../../models'; diff --git a/app/message-pin/client/tabBar.js b/app/message-pin/client/tabBar.js index 11c121f4f1556e2033cedf87c8c2dd563670567c..2830549a1fe04ebc8a823cb2b8cbe88d480d3957 100644 --- a/app/message-pin/client/tabBar.js +++ b/app/message-pin/client/tabBar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { TabBar } from '../../ui-utils'; diff --git a/app/message-pin/client/views/pinnedMessages.js b/app/message-pin/client/views/pinnedMessages.js index dc4bc2ee11c17a342df8486047257d47511f6973..2a1d13ee349b259370458cba0945f271548dfe09 100644 --- a/app/message-pin/client/views/pinnedMessages.js +++ b/app/message-pin/client/views/pinnedMessages.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { PinnedMessage } from '../lib/PinnedMessage'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; diff --git a/app/message-pin/server/pinMessage.js b/app/message-pin/server/pinMessage.js index 19b59cb6fe6d467262f50278390eb86f7529eead..8af0fbe99b97f8504ea1b95e25801bc1876291b0 100644 --- a/app/message-pin/server/pinMessage.js +++ b/app/message-pin/server/pinMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { isTheLastMessage } from '../../lib'; diff --git a/app/message-pin/server/publications/pinnedMessages.js b/app/message-pin/server/publications/pinnedMessages.js index 8d41d8fe750d833644eb6103ad2303add7fa5daf..7dce895eb76e98d97de156ec0f46f3eb97bcf943 100644 --- a/app/message-pin/server/publications/pinnedMessages.js +++ b/app/message-pin/server/publications/pinnedMessages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Messages } from '../../../models'; Meteor.publish('pinnedMessages', function(rid, limit = 50) { diff --git a/app/message-pin/server/settings.js b/app/message-pin/server/settings.js index e5ee9ac276ad572ae7a13bfdb1782c7f3758e87b..c2af7eaf276137bb94ef15767d72f1ec3c189289 100644 --- a/app/message-pin/server/settings.js +++ b/app/message-pin/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { Permissions } from '../../models'; diff --git a/app/message-pin/server/startup/indexes.js b/app/message-pin/server/startup/indexes.js index 96e78ad44d2245deeebf21bc89f323cd909a3b37..2036ca0b294cd0eaf8dbf18bfa9d4034d52d7fb0 100644 --- a/app/message-pin/server/startup/indexes.js +++ b/app/message-pin/server/startup/indexes.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages } from '../../../models'; Meteor.startup(function() { diff --git a/app/message-snippet/client/messageType.js b/app/message-snippet/client/messageType.js index f96968f1e5488693fb99cbcc9c7bfc9cac121be3..7c5240ac38580034a1f02ac856c425d238a3d04a 100644 --- a/app/message-snippet/client/messageType.js +++ b/app/message-snippet/client/messageType.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { MessageTypes } from '../../ui-utils'; import s from 'underscore.string'; +import { MessageTypes } from '../../ui-utils'; + Meteor.startup(function() { MessageTypes.registerType({ id: 'message_snippeted', diff --git a/app/message-snippet/client/page/snippetPage.js b/app/message-snippet/client/page/snippetPage.js index 05a5f96dffa0ef2743b35749c4c383df81b36cfe..208b8e5b38cf20cc4a9c5620bfc9430136aa6ce4 100644 --- a/app/message-snippet/client/page/snippetPage.js +++ b/app/message-snippet/client/page/snippetPage.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; -import { DateFormat } from '../../../lib'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import moment from 'moment'; + +import { DateFormat } from '../../../lib'; import { settings } from '../../../settings'; import { Markdown } from '../../../markdown/client'; import { SnippetedMessages } from '../lib/collections'; -import moment from 'moment'; Template.snippetPage.helpers({ snippet() { diff --git a/app/message-snippet/client/router.js b/app/message-snippet/client/router.js index b982e9e9eb3b4065d05be2af6f9bd566353a8b1e..a93b559308827ff68867d2fc3a24af8cebd5ab81 100644 --- a/app/message-snippet/client/router.js +++ b/app/message-snippet/client/router.js @@ -1,5 +1,6 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { TabBar } from '../../ui-utils'; FlowRouter.route('/snippet/:snippetId/:snippetName', { diff --git a/app/message-snippet/client/snippetMessage.js b/app/message-snippet/client/snippetMessage.js index c8c75a16c7fd94fcf49442724e25aa7dc9197ab1..6a7f0a10702aaeb13f1ea52cebf4cf86f88fac0e 100644 --- a/app/message-snippet/client/snippetMessage.js +++ b/app/message-snippet/client/snippetMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { ChatMessage, Subscriptions } from '../../models'; @@ -7,9 +8,9 @@ Meteor.methods({ if (typeof Meteor.userId() === 'undefined' || Meteor.userId() === null) { return false; } - if ((typeof settings.get('Message_AllowSnippeting') === 'undefined') || - (settings.get('Message_AllowSnippeting') === null) || - (settings.get('Message_AllowSnippeting') === false)) { + if ((typeof settings.get('Message_AllowSnippeting') === 'undefined') + || (settings.get('Message_AllowSnippeting') === null) + || (settings.get('Message_AllowSnippeting') === false)) { return false; } diff --git a/app/message-snippet/client/tabBar/tabBar.js b/app/message-snippet/client/tabBar/tabBar.js index 4a5c46062743330e2f4ef35b344ebfba30a53ffa..465518bd424422d511e30c57d9ca31c9fd20209b 100644 --- a/app/message-snippet/client/tabBar/tabBar.js +++ b/app/message-snippet/client/tabBar/tabBar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { TabBar } from '../../../ui-utils'; diff --git a/app/message-snippet/client/tabBar/views/snippetedMessages.js b/app/message-snippet/client/tabBar/views/snippetedMessages.js index 660c08769f960744552538e84c41b16b9d71ebe5..a463f8f237d61443c2d150735b31018832ebaa7a 100644 --- a/app/message-snippet/client/tabBar/views/snippetedMessages.js +++ b/app/message-snippet/client/tabBar/views/snippetedMessages.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { SnippetedMessages } from '../../lib/collections'; import { messageContext } from '../../../../ui-utils/client/lib/messageContext'; @@ -22,7 +23,7 @@ Template.snippetedMessages.helpers({ Template.snippetedMessages.onCreated(function() { this.rid = this.data.rid; - this.cursor = SnippetedMessages.find({ snippeted:true, rid: this.data.rid }, { sort: { ts: -1 } }); + this.cursor = SnippetedMessages.find({ snippeted: true, rid: this.data.rid }, { sort: { ts: -1 } }); this.hasMore = new ReactiveVar(true); this.limit = new ReactiveVar(50); this.autorun(() => { diff --git a/app/message-snippet/server/methods/snippetMessage.js b/app/message-snippet/server/methods/snippetMessage.js index 351aed9da5f3551797ff394b991e05d8046d7be0..f33d59cfe687dbe1ffaca5410fc4ca4fe35e3933 100644 --- a/app/message-snippet/server/methods/snippetMessage.js +++ b/app/message-snippet/server/methods/snippetMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions, Messages, Users, Rooms } from '../../../models'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; diff --git a/app/message-snippet/server/publications/snippetedMessage.js b/app/message-snippet/server/publications/snippetedMessage.js index 6a5fe838cd99dca8bebc2ec78cb62c3938b59c89..968d7e84401ed8502a327cffbaa322bd1985a5f4 100644 --- a/app/message-snippet/server/publications/snippetedMessage.js +++ b/app/message-snippet/server/publications/snippetedMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages, Users, Rooms } from '../../../models'; Meteor.publish('snippetedMessage', function(_id) { diff --git a/app/message-snippet/server/publications/snippetedMessagesByRoom.js b/app/message-snippet/server/publications/snippetedMessagesByRoom.js index 9dd0073c0720b18b00463e33bc02162e75cbadb0..a9caf315de4efbf67d79cdb637759a4d9787b39a 100644 --- a/app/message-snippet/server/publications/snippetedMessagesByRoom.js +++ b/app/message-snippet/server/publications/snippetedMessagesByRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Messages } from '../../../models'; Meteor.publish('snippetedMessages', function(rid, limit = 50) { diff --git a/app/message-snippet/server/requests.js b/app/message-snippet/server/requests.js index 2e4048178494a2903327fa70e2fc8e0ab1b0cdde..19cc7c47005d56b7f81a0a2f67d74b6584bddd10 100644 --- a/app/message-snippet/server/requests.js +++ b/app/message-snippet/server/requests.js @@ -1,5 +1,6 @@ import { WebApp } from 'meteor/webapp'; import { Cookies } from 'meteor/ostrio:cookies'; + import { Users, Rooms, Messages } from '../../models'; WebApp.connectHandlers.use('/snippet/download', function(req, res) { @@ -61,5 +62,4 @@ WebApp.connectHandlers.use('/snippet/download', function(req, res) { res.writeHead(404); res.end(); - return; }); diff --git a/app/message-snippet/server/startup/settings.js b/app/message-snippet/server/startup/settings.js index 1293ed4f166cd997343379b011eb872c04e373bf..04047eb56bfc573ffae74b254c2f6431d7f2a87a 100644 --- a/app/message-snippet/server/startup/settings.js +++ b/app/message-snippet/server/startup/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../../settings'; import { Permissions } from '../../../models'; @@ -14,4 +15,3 @@ Meteor.startup(function() { }, }); }); - diff --git a/app/message-star/client/actionButton.js b/app/message-star/client/actionButton.js index 229a2a8037b40923afa4735bde47d4dc8c39b4f6..5056679433036c1d130902523fa9a8e4335e2cd5 100644 --- a/app/message-star/client/actionButton.js +++ b/app/message-star/client/actionButton.js @@ -1,12 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { handleError } from '../../utils'; import { Subscriptions } from '../../models'; import { settings } from '../../settings'; import { RoomHistoryManager, MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; -import toastr from 'toastr'; + Meteor.startup(function() { MessageAction.addButton({ id: 'star-message', diff --git a/app/message-star/client/starMessage.js b/app/message-star/client/starMessage.js index 04d15d194cb762953498c52d9d46c00bb16e7cac..03c52935f9119fc2d38a6678189959ec324f90d0 100644 --- a/app/message-star/client/starMessage.js +++ b/app/message-star/client/starMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { ChatMessage, Subscriptions } from '../../models'; diff --git a/app/message-star/client/tabBar.js b/app/message-star/client/tabBar.js index 2e915e48c7da6ac94f2eb50864f9fa4d4b942c51..dbf6af6c4b890d42d74104637e67a14384d227c0 100644 --- a/app/message-star/client/tabBar.js +++ b/app/message-star/client/tabBar.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { TabBar } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/message-star/client/views/starredMessages.js b/app/message-star/client/views/starredMessages.js index 0326db20f72c5b96f3dff40fca494134ee23caf3..75858a9fbc99adb4af244011d93441e9669bc29f 100644 --- a/app/message-star/client/views/starredMessages.js +++ b/app/message-star/client/views/starredMessages.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { StarredMessage } from '../lib/StarredMessage'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; diff --git a/app/message-star/server/publications/starredMessages.js b/app/message-star/server/publications/starredMessages.js index 9973adbf94c136f4d1b680704ea42ca256fb2014..f02411e1b10c1095128a0eadd59272fab35be676 100644 --- a/app/message-star/server/publications/starredMessages.js +++ b/app/message-star/server/publications/starredMessages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Messages } from '../../../models'; Meteor.publish('starredMessages', function(rid, limit = 50) { diff --git a/app/message-star/server/settings.js b/app/message-star/server/settings.js index 05ec4f0f1d62b54fd9a81840c82e7a7e5bd5effa..a951d82fc2733cfe41767e35223329fc0c3460ca 100644 --- a/app/message-star/server/settings.js +++ b/app/message-star/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/message-star/server/starMessage.js b/app/message-star/server/starMessage.js index 7b063d012d6d132e46ca3c33ded8c5e964ffe18e..9ec8893d3280c2d2af70e3083f4936d78f68dab0 100644 --- a/app/message-star/server/starMessage.js +++ b/app/message-star/server/starMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; import { isTheLastMessage } from '../../lib'; import { Subscriptions, Rooms, Messages } from '../../models'; diff --git a/app/message-star/server/startup/indexes.js b/app/message-star/server/startup/indexes.js index 464dbc661808f7bdca733a1da8f99e977b2152a0..b4ade9b0dd05277def25b51550a9a9e6512b0ead 100644 --- a/app/message-star/server/startup/indexes.js +++ b/app/message-star/server/startup/indexes.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages } from '../../../models'; Meteor.startup(function() { diff --git a/app/meteor-accounts-saml/client/saml_client.js b/app/meteor-accounts-saml/client/saml_client.js index c4d1e44ebb37f063f4b9dc75d57cdfc49759d846..6c95bb8a8f3374e0628f35ec322a7fa1d81e79ce 100644 --- a/app/meteor-accounts-saml/client/saml_client.js +++ b/app/meteor-accounts-saml/client/saml_client.js @@ -47,15 +47,15 @@ const openCenteredPopup = function(url, width, height) { const screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft; const screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop; const outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth; - const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22); + const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : document.body.clientHeight - 22; // XXX what is the 22? // Use `outerWidth - width` and `outerHeight - height` for help in // positioning the popup centered relative to the current window const left = screenX + (outerWidth - width) / 2; const top = screenY + (outerHeight - height) / 2; - const features = (`width=${ width },height=${ height - },left=${ left },top=${ top },scrollbars=yes`); + const features = `width=${ width },height=${ height + },left=${ left },top=${ top },scrollbars=yes`; const newwindow = window.open(url, 'Login', features); if (newwindow.focus) { diff --git a/app/meteor-accounts-saml/server/saml_rocketchat.js b/app/meteor-accounts-saml/server/saml_rocketchat.js index 2ee0e2fe05643b4db24a532b68653a5f0ea721df..771e74635587d95914c8378dae02b0980972eada 100644 --- a/app/meteor-accounts-saml/server/saml_rocketchat.js +++ b/app/meteor-accounts-saml/server/saml_rocketchat.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; -import { Logger } from '../../logger'; import { ServiceConfiguration } from 'meteor/service-configuration'; + +import { Logger } from '../../logger'; import { settings } from '../../settings'; const logger = new Logger('steffo:meteor-accounts-saml', { @@ -98,15 +99,15 @@ Meteor.methods({ i18nLabel: 'SAML_Custom_Debug', }); settings.add(`SAML_Custom_${ name }_name_overwrite`, false, { - type : 'boolean', - group : 'SAML', - section : name, + type: 'boolean', + group: 'SAML', + section: name, i18nLabel: 'SAML_Custom_name_overwrite', }); settings.add(`SAML_Custom_${ name }_mail_overwrite`, false, { - type : 'boolean', - group : 'SAML', - section : name, + type: 'boolean', + group: 'SAML', + section: name, i18nLabel: 'SAML_Custom_mail_overwrite', }); settings.add(`SAML_Custom_${ name }_logout_behaviour`, 'SAML', { @@ -115,8 +116,8 @@ Meteor.methods({ { key: 'SAML', i18nLabel: 'SAML_Custom_Logout_Behaviour_Terminate_SAML_Session' }, { key: 'Local', i18nLabel: 'SAML_Custom_Logout_Behaviour_End_Only_RocketChat' }, ], - group : 'SAML', - section : name, + group: 'SAML', + section: name, i18nLabel: 'SAML_Custom_Logout_Behaviour', }); }, @@ -142,8 +143,8 @@ const getSamlConfigs = function(service) { idpSLORedirectURL: settings.get(`${ service.key }_idp_slo_redirect_url`), generateUsername: settings.get(`${ service.key }_generate_username`), debug: settings.get(`${ service.key }_debug`), - nameOverwrite : settings.get(`${ service.key }_name_overwrite`), - mailOverwrite : settings.get(`${ service.key }_mail_overwrite`), + nameOverwrite: settings.get(`${ service.key }_name_overwrite`), + mailOverwrite: settings.get(`${ service.key }_mail_overwrite`), issuer: settings.get(`${ service.key }_issuer`), logoutBehaviour: settings.get(`${ service.key }_logout_behaviour`), secret: { @@ -161,7 +162,8 @@ const debounce = (fn, delay) => { if (timer != null) { Meteor.clearTimeout(timer); } - return timer = Meteor.setTimeout(fn, delay); + timer = Meteor.setTimeout(fn, delay); + return timer; }; }; const serviceName = 'saml'; @@ -182,11 +184,11 @@ const configureSamlService = function(samlConfigs) { Accounts.saml.settings.debug = samlConfigs.debug; return { - provider : samlConfigs.clientConfig.provider, - entryPoint : samlConfigs.entryPoint, + provider: samlConfigs.clientConfig.provider, + entryPoint: samlConfigs.entryPoint, idpSLORedirectURL: samlConfigs.idpSLORedirectURL, - issuer : samlConfigs.issuer, - cert : samlConfigs.secret.cert, + issuer: samlConfigs.issuer, + cert: samlConfigs.secret.cert, privateCert, privateKey, }; diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index db5699fe334ece666e0e0b5369efa15ac9a4a096..f212f5afb5a2548a41628b36ff3e64365e80f979 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -3,13 +3,14 @@ import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; import { WebApp } from 'meteor/webapp'; import { RoutePolicy } from 'meteor/routepolicy'; -import { CredentialTokens } from '../../models'; -import { generateUsernameSuggestion } from '../../lib'; -import { SAML } from './saml_utils'; import bodyParser from 'body-parser'; import fiber from 'fibers'; import _ from 'underscore'; +import { SAML } from './saml_utils'; +import { CredentialTokens } from '../../models'; +import { generateUsernameSuggestion } from '../../lib'; + if (!Accounts.saml) { Accounts.saml = { settings: { @@ -34,7 +35,7 @@ function getSamlProviderConfig(provider) { { method: 'getSamlProviderConfig' }); } const samlProvider = function(element) { - return (element.provider === provider); + return element.provider === provider; }; return Accounts.saml.settings.providers.filter(samlProvider)[0]; } @@ -227,10 +228,8 @@ Accounts.registerLoginHandler(function(loginRequest) { }; return result; - - } else { - throw new Error('SAML Profile did not contain an email address'); } + throw new Error('SAML Profile did not contain an email address'); }); Accounts.saml.hasCredential = function(credentialToken) { @@ -365,7 +364,6 @@ const middleware = function(req, res, next) { if (loggedOutUser.length === 1) { logoutRemoveTokens(loggedOutUser[0]._id); } - }; fiber(function() { @@ -387,9 +385,7 @@ const middleware = function(req, res, next) { Location: url, }); res.end(); - }); - }); } else { _saml.validateLogoutResponse(req.query.SAMLResponse, function(err, result) { @@ -475,7 +471,6 @@ const middleware = function(req, res, next) { break; default: throw new Error(`Unexpected SAML action ${ samlObject.actionName }`); - } } catch (err) { closePopup(res, err); diff --git a/app/meteor-accounts-saml/server/saml_utils.js b/app/meteor-accounts-saml/server/saml_utils.js index bda6ec72e6f98afd618a4f8b6512a85c3cd0877a..b910ff6c15d5e2a5601cda47e39d6d8168c158d8 100644 --- a/app/meteor-accounts-saml/server/saml_utils.js +++ b/app/meteor-accounts-saml/server/saml_utils.js @@ -1,9 +1,10 @@ -import { Meteor } from 'meteor/meteor'; import zlib from 'zlib'; -import xmlCrypto from 'xml-crypto'; import crypto from 'crypto'; -import xmldom from 'xmldom'; import querystring from 'querystring'; + +import { Meteor } from 'meteor/meteor'; +import xmlCrypto from 'xml-crypto'; +import xmldom from 'xmldom'; import xmlbuilder from 'xmlbuilder'; import array2string from 'arraybuffer-to-string'; import xmlenc from 'xml-encryption'; @@ -56,7 +57,7 @@ SAML.prototype.generateUniqueID = function() { const chars = 'abcdef0123456789'; let uniqueID = 'id-'; for (let i = 0; i < 20; i++) { - uniqueID += chars.substr(Math.floor((Math.random() * 15)), 1); + uniqueID += chars.substr(Math.floor(Math.random() * 15), 1); } return uniqueID; }; @@ -87,19 +88,18 @@ SAML.prototype.generateAuthorizeRequest = function(req) { id = this.options.id; } - let request = - `<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="${ id }" Version="2.0" IssueInstant="${ instant }" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="${ callbackUrl }" Destination="${ - this.options.entryPoint }">` + - `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>\n`; + let request = `<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="${ id }" Version="2.0" IssueInstant="${ instant }" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="${ callbackUrl }" Destination="${ + this.options.entryPoint }">` + + `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>\n`; if (this.options.identifierFormat) { request += `<samlp:NameIDPolicy xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Format="${ this.options.identifierFormat }" AllowCreate="true"></samlp:NameIDPolicy>\n`; } - request += - '<samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">' + - '<saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext>\n' + - '</samlp:AuthnRequest>'; + request + += '<samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">' + + '<saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext>\n' + + '</samlp:AuthnRequest>'; return request; }; @@ -109,15 +109,15 @@ SAML.prototype.generateLogoutResponse = function() { const instant = this.generateInstant(); - const response = `${ '<samlp:LogoutResponse xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ' + - 'ID="' }${ id }" ` + - 'Version="2.0" ' + - `IssueInstant="${ instant }" ` + - `Destination="${ this.options.idpSLORedirectURL }" ` + - '>' + - `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>` + - '<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>' + - '</samlp:LogoutResponse>'; + const response = `${ '<samlp:LogoutResponse xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ' + + 'ID="' }${ id }" ` + + 'Version="2.0" ' + + `IssueInstant="${ instant }" ` + + `Destination="${ this.options.idpSLORedirectURL }" ` + + '>' + + `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>` + + '<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>' + + '</samlp:LogoutResponse>'; debugLog('------- SAML Logout response -----------'); debugLog(response); @@ -126,7 +126,6 @@ SAML.prototype.generateLogoutResponse = function() { response, id, }; - }; SAML.prototype.generateLogoutRequest = function(options) { @@ -138,20 +137,20 @@ SAML.prototype.generateLogoutRequest = function(options) { const id = `_${ this.generateUniqueID() }`; const instant = this.generateInstant(); - const request = `${ '<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ' + - 'ID="' }${ id }" ` + - 'Version="2.0" ' + - `IssueInstant="${ instant }" ` + - `Destination="${ this.options.idpSLORedirectURL }" ` + - '>' + - `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>` + - '<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ' + - 'NameQualifier="http://id.init8.net:8080/openam" ' + - `SPNameQualifier="${ this.options.issuer }" ` + - `Format="${ this.options.identifierFormat }">${ - options.nameID }</saml:NameID>` + - `<samlp:SessionIndex xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">${ options.sessionIndex }</samlp:SessionIndex>` + - '</samlp:LogoutRequest>'; + const request = `${ '<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ' + + 'ID="' }${ id }" ` + + 'Version="2.0" ' + + `IssueInstant="${ instant }" ` + + `Destination="${ this.options.idpSLORedirectURL }" ` + + '>' + + `<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">${ this.options.issuer }</saml:Issuer>` + + '<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ' + + 'NameQualifier="http://id.init8.net:8080/openam" ' + + `SPNameQualifier="${ this.options.issuer }" ` + + `Format="${ this.options.identifierFormat }">${ + options.nameID }</saml:NameID>` + + `<samlp:SessionIndex xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">${ options.sessionIndex }</samlp:SessionIndex>` + + '</samlp:LogoutRequest>'; debugLog('------- SAML Logout request -----------'); debugLog(request); @@ -246,10 +245,8 @@ SAML.prototype.requestToUrl = function(request, operation, callback) { if (operation === 'logout') { // in case of logout we want to be redirected back to the Meteor app. return callback(null, target); - - } else { - callback(null, target); } + callback(null, target); }); }; @@ -290,7 +287,6 @@ SAML.prototype.validateStatus = function(doc) { const statusNodes = doc.getElementsByTagNameNS('urn:oasis:names:tc:SAML:2.0:protocol', 'StatusCode'); if (statusNodes.length) { - const statusNode = statusNodes[0]; const statusMessage = doc.getElementsByTagNameNS('urn:oasis:names:tc:SAML:2.0:protocol', 'StatusMessage')[0]; @@ -360,7 +356,6 @@ SAML.prototype.validateLogoutRequest = function(samlRequest, callback) { const nameID = nameIdNode.childNodes[0].nodeValue; return callback(null, { idpSession, nameID }); - } catch (e) { debugLog(`Caught error: ${ e }`); @@ -424,7 +419,7 @@ SAML.prototype.mapAttributes = function(attributeStatement, profile) { value = values[0].textContent; } else { value = []; - for (let j = 0;j < values.length;j++) { + for (let j = 0; j < values.length; j++) { value.push(values[j].textContent); } } @@ -553,7 +548,6 @@ SAML.prototype.validateResponse = function(samlResponse, relayState, callback) { if (authnStatement) { if (authnStatement.hasAttribute('SessionIndex')) { - profile.sessionIndex = authnStatement.getAttribute('SessionIndex'); debugLog(`Session Index: ${ profile.sessionIndex }`); } else { @@ -590,7 +584,6 @@ SAML.prototype.validateResponse = function(samlResponse, relayState, callback) { let decryptionCert; SAML.prototype.generateServiceProviderMetadata = function(callbackUrl) { - if (!decryptionCert) { decryptionCert = this.options.privateCert; } diff --git a/app/metrics/server/callbacksMetrics.js b/app/metrics/server/callbacksMetrics.js index 4d9e2f0d0d20ee8ab60e26d64398983a10cedad7..8402f6fa9f8efa9caef42694cf6d7347f4d25188 100644 --- a/app/metrics/server/callbacksMetrics.js +++ b/app/metrics/server/callbacksMetrics.js @@ -1,7 +1,7 @@ -import { callbacks } from '../../callbacks'; import { metrics } from './lib/metrics'; import StatsTracker from './lib/statsTracker'; +import { callbacks } from '../../callbacks'; const { run: originalRun, @@ -23,7 +23,7 @@ callbacks.runItem = function({ callback, result, constant, hook, time }) { const newResult = originalRunItem({ callback, result, constant }); - StatsTracker.timing('callbacks.time', (Date.now() - time), [`hook:${ hook }`, `callback:${ callback.id }`]); + StatsTracker.timing('callbacks.time', Date.now() - time, [`hook:${ hook }`, `callback:${ callback.id }`]); rocketchatCallbacksEnd(); diff --git a/app/metrics/server/lib/metrics.js b/app/metrics/server/lib/metrics.js index 9d93284faedb2003cb2208678c7fc5c54be07400..6ce3cf53df7b19b9a96f6fccf3dbc4603a48409e 100644 --- a/app/metrics/server/lib/metrics.js +++ b/app/metrics/server/lib/metrics.js @@ -1,8 +1,10 @@ +import http from 'http'; + import client from 'prom-client'; import connect from 'connect'; -import http from 'http'; import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; + import { Info } from '../../../utils'; import { Migrations } from '../../../migrations'; import { settings } from '../../../settings'; diff --git a/app/metrics/server/lib/statsTracker.js b/app/metrics/server/lib/statsTracker.js index 5073e303bf65db9bcd9e0bd733b80e74214b6e0c..5ef117991f4497e8bb00c37ed16e6dd883ec132e 100644 --- a/app/metrics/server/lib/statsTracker.js +++ b/app/metrics/server/lib/statsTracker.js @@ -12,7 +12,7 @@ export class StatsTracker { now() { const hrtime = process.hrtime(); - return (hrtime[0] * 1000000 + hrtime[1] / 1000); + return hrtime[0] * 1000000 + hrtime[1] / 1000; } timing(stats, time, tags) { @@ -45,4 +45,3 @@ export class StatsTracker { } export default new StatsTracker(); - diff --git a/app/migrations/server/migrations.js b/app/migrations/server/migrations.js index 04cd0eaa949a0f6edd7c30f9a1374a4fef023a4a..a797c1aeed29fc9119edc13ecc27064f2e8e2c5b 100644 --- a/app/migrations/server/migrations.js +++ b/app/migrations/server/migrations.js @@ -3,10 +3,11 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Mongo } from 'meteor/mongo'; import { Log } from 'meteor/logging'; -import { Info } from '../../utils'; import _ from 'underscore'; import s from 'underscore.string'; import moment from 'moment'; + +import { Info } from '../../utils'; /* Adds migration capabilities. Migrations are defined like: @@ -79,10 +80,10 @@ function makeABox(message, color = 'red') { const len = _(message).reduce(function(memo, msg) { return Math.max(memo, msg.length); }, 0) + 4; - const text = message.map((msg) => '|' [color] + s.lrpad(msg, len)[color] + '|' [color]).join('\n'); - const topLine = '+' [color] + s.pad('', len, '-')[color] + '+' [color]; - const separator = '|' [color] + s.pad('', len, '') + '|' [color]; - const bottomLine = '+' [color] + s.pad('', len, '-')[color] + '+' [color]; + const text = message.map((msg) => '|'[color] + s.lrpad(msg, len)[color] + '|'[color]).join('\n'); + const topLine = '+'[color] + s.pad('', len, '-')[color] + '+'[color]; + const separator = '|'[color] + s.pad('', len, '') + '|'[color]; + const bottomLine = '+'[color] + s.pad('', len, '-')[color] + '+'[color]; return `\n${ topLine }\n${ separator }\n${ text }\n${ separator }\n${ bottomLine }\n`; } @@ -110,13 +111,11 @@ function createLogger(prefix) { const logger = Migrations.options && Migrations.options.logger; if (logger && _.isFunction(logger)) { - logger({ level, message, tag: prefix, }); - } else { Log[level]({ message: `${ prefix }: ${ message }`, @@ -179,7 +178,7 @@ Migrations.migrateTo = function(command) { if (version === 'latest') { migrated = this._migrateTo(_.last(this._list).version); } else { - migrated = this._migrateTo(parseInt(version), (subcommands.includes('rerun'))); + migrated = this._migrateTo(parseInt(version), subcommands.includes('rerun')); } if (migrated) { break; diff --git a/app/models/client/index.js b/app/models/client/index.js index a990bd5fc08298035e2c54277325f0360cc2cee6..8f5c7cf75a321958f5ae4a8e073a5bfe722c8ac9 100644 --- a/app/models/client/index.js +++ b/app/models/client/index.js @@ -1,4 +1,6 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Base } from './models/_Base'; import Avatars from './models/Avatars'; import Uploads from './models/Uploads'; @@ -20,7 +22,6 @@ import { AuthzCachedCollection, ChatPermissions } from './models/ChatPermissions import { WebdavAccounts } from './models/WebdavAccounts'; import CustomSounds from './models/CustomSounds'; import EmojiCustom from './models/EmojiCustom'; -import _ from 'underscore'; const Users = _.extend({}, users, Meteor.users); const Subscriptions = _.extend({}, subscriptions, ChatSubscription); diff --git a/app/models/client/models/Roles.js b/app/models/client/models/Roles.js index 7b52f72f5f38e5e8771691cccd39c4f7c3bd861c..0d720ac90f93e9d3a9880cdfcd5c2155dc33ffd9 100644 --- a/app/models/client/models/Roles.js +++ b/app/models/client/models/Roles.js @@ -1,4 +1,5 @@ import { Mongo } from 'meteor/mongo'; + import * as Models from '..'; const Roles = new Mongo.Collection('rocketchat_roles'); diff --git a/app/models/client/models/Subscriptions.js b/app/models/client/models/Subscriptions.js index 5d2f9198daf0394489f5cc7f88439b0eae72079f..661aa004920e330f267446116c3dadbb6647e4ac 100644 --- a/app/models/client/models/Subscriptions.js +++ b/app/models/client/models/Subscriptions.js @@ -1,4 +1,5 @@ import { Users } from '..'; + import _ from 'underscore'; import mem from 'mem'; @@ -33,7 +34,7 @@ Object.assign(Subscriptions, { const subscriptions = this.find(query).fetch(); const users = _.compact(_.map(subscriptions, function(subscription) { - if ('undefined' !== typeof subscription.u && 'undefined' !== typeof subscription.u._id) { + if (typeof subscription.u !== 'undefined' && typeof subscription.u._id !== 'undefined') { return subscription.u._id; } })); diff --git a/app/models/client/models/_Base.js b/app/models/client/models/_Base.js index c8f9f0eafb82f9512da025c9f0e5bb6052d4822b..4c81d84ae863454de6a68ff897ca269d24a54da1 100644 --- a/app/models/client/models/_Base.js +++ b/app/models/client/models/_Base.js @@ -2,14 +2,14 @@ import { check } from 'meteor/check'; import { Mongo } from 'meteor/mongo'; export class Base { - _baseName() { return 'rocketchat_'; } _initModel(name) { check(name, String); - return this.model = new Mongo.Collection(this._baseName() + name); + this.model = new Mongo.Collection(this._baseName() + name); + return this.model; } find(...args) { @@ -51,5 +51,4 @@ export class Base { tryEnsureIndex() {} tryDropIndex() {} - } diff --git a/app/models/server/models/Avatars.js b/app/models/server/models/Avatars.js index 1859f3d29a6d4087f4b5bb077c947fe839906848..d1dcecdcc97d244be17477a3e32d1049166e3b42 100644 --- a/app/models/server/models/Avatars.js +++ b/app/models/server/models/Avatars.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import s from 'underscore.string'; import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; + import { Base } from './_Base'; export class Avatars extends Base { @@ -54,9 +55,8 @@ export class Avatars extends Base { if (this.model.direct && this.model.direct.update) { return this.model.direct.update(filter, update); - } else { - return this.update(filter, update); } + return this.update(filter, update); } findOneByName(name) { @@ -72,9 +72,8 @@ export class Avatars extends Base { }; if (this.model.direct && this.model.direct.update) { return this.model.direct.update(filter, update); - } else { - return this.update(filter, update); } + return this.update(filter, update); } // @TODO deprecated @@ -99,17 +98,15 @@ export class Avatars extends Base { if (this.model.direct && this.model.direct.update) { return this.model.direct.update(filter, update); - } else { - return this.update(filter, update); } + return this.update(filter, update); } deleteFile(fileId) { if (this.model.direct && this.model.direct.remove) { return this.model.direct.remove({ _id: fileId }); - } else { - return this.remove({ _id: fileId }); } + return this.remove({ _id: fileId }); } } diff --git a/app/models/server/models/ExportOperations.js b/app/models/server/models/ExportOperations.js index 5a0d1dc60f6a9091f928d1f4674af80580208a7e..a72fdc486e201cf7997df73c8217cbef6b0ec84c 100644 --- a/app/models/server/models/ExportOperations.js +++ b/app/models/server/models/ExportOperations.js @@ -1,6 +1,7 @@ -import { Base } from './_Base'; import _ from 'underscore'; +import { Base } from './_Base'; + export class ExportOperations extends Base { constructor() { super('export_operations'); @@ -22,7 +23,7 @@ export class ExportOperations extends Base { fullExport, }; - options.sort = { createdAt : -1 }; + options.sort = { createdAt: -1 }; return this.findOne(query, options); } @@ -63,7 +64,7 @@ export class ExportOperations extends Base { // INSERT create(data) { const exportOperation = { - createdAt: new Date, + createdAt: new Date(), }; _.extend(exportOperation, data); diff --git a/app/models/server/models/FederationEvents.js b/app/models/server/models/FederationEvents.js index b0955f82029a3f1c27d89a07b90cfd71a17f8387..82a09247c0e6af9186fd4cf8c7115cb2e70d0fa8 100644 --- a/app/models/server/models/FederationEvents.js +++ b/app/models/server/models/FederationEvents.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Base } from './_Base'; const normalizePeers = (basePeers, options) => { diff --git a/app/models/server/models/FederationPeers.js b/app/models/server/models/FederationPeers.js index e2d712ce6ee90f333bc8c81fb8fd12052e204ac6..75acdcd44e77cbcf91649fd77a3950dd025f3c85 100644 --- a/app/models/server/models/FederationPeers.js +++ b/app/models/server/models/FederationPeers.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Base } from './_Base'; + import { Users } from '..'; class FederationPeersModel extends Base { diff --git a/app/models/server/models/IntegrationHistory.js b/app/models/server/models/IntegrationHistory.js index bda9b16c538878a09df5995cbb4fadbdd1ae4112..817deae0d789a025f4074eb1a62071cfbe70944f 100644 --- a/app/models/server/models/IntegrationHistory.js +++ b/app/models/server/models/IntegrationHistory.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Base } from './_Base'; export class IntegrationHistory extends Base { @@ -40,4 +41,3 @@ export class IntegrationHistory extends Base { } export default new IntegrationHistory(); - diff --git a/app/models/server/models/Integrations.js b/app/models/server/models/Integrations.js index 2d9128c99cd7387791c03931aa042d0eda50a273..0db8901b9594b976eaf4477f6f54c631f3682342 100644 --- a/app/models/server/models/Integrations.js +++ b/app/models/server/models/Integrations.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Base } from './_Base'; export class Integrations extends Base { diff --git a/app/models/server/models/LivechatCustomField.js b/app/models/server/models/LivechatCustomField.js index cf0ae022ee2d0470a834842504ad63e2cb3fc545..10414f1aa61ddf33a0991d13510ba62035cbd25c 100644 --- a/app/models/server/models/LivechatCustomField.js +++ b/app/models/server/models/LivechatCustomField.js @@ -1,6 +1,7 @@ -import { Base } from './_Base'; import _ from 'underscore'; +import { Base } from './_Base'; + /** * Livechat Custom Fields model */ diff --git a/app/models/server/models/LivechatDepartment.js b/app/models/server/models/LivechatDepartment.js index 120813aab43e2b615903a6e1df75dc190a880f36..984107ba3cc633b1d2dbdd1009ce095e3269e96a 100644 --- a/app/models/server/models/LivechatDepartment.js +++ b/app/models/server/models/LivechatDepartment.js @@ -1,6 +1,7 @@ +import _ from 'underscore'; + import { Base } from './_Base'; import LivechatDepartmentAgents from './LivechatDepartmentAgents'; -import _ from 'underscore'; /** * Livechat Department model */ diff --git a/app/models/server/models/LivechatDepartmentAgents.js b/app/models/server/models/LivechatDepartmentAgents.js index f590ab954d02f4b1ea899b6c724043a609ef7eee..7899b6500c985e02ed3422d1d8b96024caa1d19e 100644 --- a/app/models/server/models/LivechatDepartmentAgents.js +++ b/app/models/server/models/LivechatDepartmentAgents.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Base } from './_Base'; import Users from './Users'; -import _ from 'underscore'; /** * Livechat Department model */ @@ -69,9 +70,8 @@ export class LivechatDepartmentAgents extends Base { agentId: agent.value.agentId, username: agent.value.username, }; - } else { - return null; } + return null; } getOnlineForDepartment(departmentId) { diff --git a/app/models/server/models/LivechatOfficeHour.js b/app/models/server/models/LivechatOfficeHour.js index 45a5ef8d4dedbfc3fa702cc83acaafbe3ae6a67e..ceb24ca79dce374e718a6b7785b3902bd3d6edd0 100644 --- a/app/models/server/models/LivechatOfficeHour.js +++ b/app/models/server/models/LivechatOfficeHour.js @@ -1,6 +1,7 @@ -import { Base } from './_Base'; import moment from 'moment'; +import { Base } from './_Base'; + export class LivechatOfficeHour extends Base { constructor() { super('livechat_office_hour'); @@ -12,13 +13,13 @@ export class LivechatOfficeHour extends Base { // if there is nothing in the collection, add defaults if (this.find().count() === 0) { - this.insert({ day : 'Monday', start : '08:00', finish : '20:00', code : 1, open : true }); - this.insert({ day : 'Tuesday', start : '08:00', finish : '20:00', code : 2, open : true }); - this.insert({ day : 'Wednesday', start : '08:00', finish : '20:00', code : 3, open : true }); - this.insert({ day : 'Thursday', start : '08:00', finish : '20:00', code : 4, open : true }); - this.insert({ day : 'Friday', start : '08:00', finish : '20:00', code : 5, open : true }); - this.insert({ day : 'Saturday', start : '08:00', finish : '20:00', code : 6, open : false }); - this.insert({ day : 'Sunday', start : '08:00', finish : '20:00', code : 0, open : false }); + this.insert({ day: 'Monday', start: '08:00', finish: '20:00', code: 1, open: true }); + this.insert({ day: 'Tuesday', start: '08:00', finish: '20:00', code: 2, open: true }); + this.insert({ day: 'Wednesday', start: '08:00', finish: '20:00', code: 3, open: true }); + this.insert({ day: 'Thursday', start: '08:00', finish: '20:00', code: 4, open: true }); + this.insert({ day: 'Friday', start: '08:00', finish: '20:00', code: 5, open: true }); + this.insert({ day: 'Saturday', start: '08:00', finish: '20:00', code: 6, open: false }); + this.insert({ day: 'Sunday', start: '08:00', finish: '20:00', code: 0, open: false }); } } diff --git a/app/models/server/models/LivechatPageVisited.js b/app/models/server/models/LivechatPageVisited.js index f6668e7e938047bbd3d42953767b1389f27001f7..6b6e3bf7d70f01491c10742fadac30494e1050c7 100644 --- a/app/models/server/models/LivechatPageVisited.js +++ b/app/models/server/models/LivechatPageVisited.js @@ -27,7 +27,7 @@ class LivechatPageVisited extends Base { } findByToken(token) { - return this.find({ token }, { sort : { ts: -1 }, limit: 20 }); + return this.find({ token }, { sort: { ts: -1 }, limit: 20 }); } keepHistoryForToken(token) { diff --git a/app/models/server/models/LivechatVisitors.js b/app/models/server/models/LivechatVisitors.js index c34f73c7b4ddb7193b915520f957ada62f89d2cf..1c185600fc192bd10a714cb821f46eadb0428582 100644 --- a/app/models/server/models/LivechatVisitors.js +++ b/app/models/server/models/LivechatVisitors.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { Base } from './_Base'; -import Settings from './Settings'; import _ from 'underscore'; import s from 'underscore.string'; +import { Base } from './_Base'; +import Settings from './Settings'; + export class LivechatVisitors extends Base { constructor() { super('livechat_visitor'); diff --git a/app/models/server/models/Messages.js b/app/models/server/models/Messages.js index 4e1169271d9451f229cc6271631b9d8158c37baa..77bd5dba99a2bc936798b1cd013313d67774115b 100644 --- a/app/models/server/models/Messages.js +++ b/app/models/server/models/Messages.js @@ -1,9 +1,10 @@ import { Match } from 'meteor/check'; +import _ from 'underscore'; + import { Base } from './_Base'; import Rooms from './Rooms'; import { settings } from '../../../settings/server/functions/settings'; import { FileUpload } from '../../../file-upload/server/lib/FileUpload'; -import _ from 'underscore'; export class Messages extends Base { constructor() { @@ -30,7 +31,6 @@ export class Messages extends Base { // threads this.tryEnsureIndex({ tmid: 1 }, { sparse: true }); this.tryEnsureIndex({ tcount: 1, tlm: 1 }, { sparse: true }); - } setReactions(messageId, reactions) { @@ -239,8 +239,7 @@ export class Messages extends Base { }; if (Match.test(types, [String]) && (types.length > 0)) { - query.t = - { $nin: types }; + query.t = { $nin: types }; } return this.find(query, options); @@ -352,8 +351,7 @@ export class Messages extends Base { }; if (Match.test(types, [String]) && (types.length > 0)) { - query.t = - { $nin: types }; + query.t = { $nin: types }; } return this.find(query, options); @@ -372,8 +370,7 @@ export class Messages extends Base { }; if (Match.test(types, [String]) && (types.length > 0)) { - query.t = - { $nin: types }; + query.t = { $nin: types }; } return this.find(query, options); @@ -507,7 +504,7 @@ export class Messages extends Base { const record = this.findOneById(_id); record._hidden = true; record.parent = record._id; - record.editedAt = new Date; + record.editedAt = new Date(); record.editedBy = { _id: user._id, username: user.username, @@ -560,7 +557,7 @@ export class Messages extends Base { const update = { $set: { pinned, - pinnedAt: pinnedAt || new Date, + pinnedAt: pinnedAt || new Date(), pinnedBy, }, }; @@ -579,7 +576,7 @@ export class Messages extends Base { $set: { msg, snippeted, - snippetedAt: snippetedAt || new Date, + snippetedAt: snippetedAt || new Date(), snippetedBy, snippetName, }, @@ -707,8 +704,8 @@ export class Messages extends Base { $set: { alias: newNameAlias, 'u._id': newUserId, - 'u.username' : newUsername, - 'u.name' : undefined, + 'u.username': newUsername, + 'u.name': undefined, }, }; @@ -724,7 +721,7 @@ export class Messages extends Base { const record = { t: type, rid: roomId, - ts: new Date, + ts: new Date(), msg: message, u: { _id: user._id, @@ -753,7 +750,7 @@ export class Messages extends Base { const record = { t: type, rid: roomId, - ts: new Date, + ts: new Date(), msg: message, u: { _id: user._id, diff --git a/app/models/server/models/OEmbedCache.js b/app/models/server/models/OEmbedCache.js index 444d30b1c63f8f4ee0539f6302868fff503949fb..db4383b9cd34cab007407ea846b77597c813529d 100644 --- a/app/models/server/models/OEmbedCache.js +++ b/app/models/server/models/OEmbedCache.js @@ -19,7 +19,7 @@ export class OEmbedCache extends Base { const record = { _id, data, - updatedAt: new Date, + updatedAt: new Date(), }; record._id = this.insert(record); return record; diff --git a/app/models/server/models/Permissions.js b/app/models/server/models/Permissions.js index 216893605b1f5bcc0cc39a23a3c98cee33b8d5c4..defeabe5b5932255ae0b4627ab1ff6ca85ff2605 100644 --- a/app/models/server/models/Permissions.js +++ b/app/models/server/models/Permissions.js @@ -1,10 +1,6 @@ import { Base } from './_Base'; export class Permissions extends Base { - constructor(...args) { - super(...args); - } - // FIND findByRole(role, options) { const query = { diff --git a/app/models/server/models/Reports.js b/app/models/server/models/Reports.js index 09fd9dc6da980e2c701c895add950862555e3570..4d2ab019f19b7ef5957c3e962abb77481aae88c9 100644 --- a/app/models/server/models/Reports.js +++ b/app/models/server/models/Reports.js @@ -1,10 +1,12 @@ -import { Base } from './_Base'; import _ from 'underscore'; +import { Base } from './_Base'; + export class Reports extends Base { constructor() { super('reports'); } + createWithMessageDescriptionAndUserId(message, description, userId, extraData) { const record = { message, diff --git a/app/models/server/models/Roles.js b/app/models/server/models/Roles.js index 474f1db9f35da6386829dfcff39a000015fd5501..579d157208806bcd23781b7b721b6c0f89af3aae 100644 --- a/app/models/server/models/Roles.js +++ b/app/models/server/models/Roles.js @@ -1,4 +1,5 @@ import * as Models from '..'; + import { Base } from './_Base'; export class Roles extends Base { diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 5023f36e14c9fa92a0089c4b6ca441d111305939..fee61378f8b8826148e1844a5ab28ac9790a4552 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { Base } from './_Base'; import Messages from './Messages'; import Subscriptions from './Subscriptions'; import Settings from './Settings'; -import _ from 'underscore'; -import s from 'underscore.string'; export class Rooms extends Base { constructor(...args) { @@ -242,8 +243,8 @@ export class Rooms extends Base { } // livechat analytics : update last message timestamps - const visitorLastQuery = (room.metrics && room.metrics.v) ? room.metrics.v.lq : room.ts; - const agentLastReply = (room.metrics && room.metrics.servedBy) ? room.metrics.servedBy.lr : room.ts; + const visitorLastQuery = room.metrics && room.metrics.v ? room.metrics.v.lq : room.ts; + const agentLastReply = room.metrics && room.metrics.servedBy ? room.metrics.servedBy.lr : room.ts; if (message.token) { // update visitor timestamp, only if its new inquiry and not continuing message if (agentLastReply >= visitorLastQuery) { // if first query, not continuing query from visitor @@ -475,7 +476,7 @@ export class Rooms extends Base { $set: { 'lastMessage.msg': msg, 'lastMessage.snippeted': snippeted, - 'lastMessage.snippetedAt': snippetedAt || new Date, + 'lastMessage.snippetedAt': snippetedAt || new Date(), 'lastMessage.snippetedBy': snippetedBy, 'lastMessage.snippetName': snippetName, }, @@ -490,7 +491,7 @@ export class Rooms extends Base { const update = { $set: { 'lastMessage.pinned': pinned, - 'lastMessage.pinnedAt': pinnedAt || new Date, + 'lastMessage.pinnedAt': pinnedAt || new Date(), 'lastMessage.pinnedBy': pinnedBy, }, }; diff --git a/app/models/server/models/Sessions.js b/app/models/server/models/Sessions.js index 8b3b30c50e64df05a9db356f18e8c306d63a6c37..10e3d1cc71bd9568ae0d0328fcd2fe28a9bf4cc4 100644 --- a/app/models/server/models/Sessions.js +++ b/app/models/server/models/Sessions.js @@ -237,9 +237,9 @@ export const aggregates = { }, { $group: { _id: { - type : '$devices.device.type', - name : '$devices.device.name', - version : '$devices.device.version', + type: '$devices.device.type', + name: '$devices.device.name', + version: '$devices.device.version', }, count: { $sum: '$devices.sessions', @@ -273,9 +273,9 @@ export const aggregates = { }, { $group: { _id: { - type : '$devices.device.type', - name : '$devices.device.name', - version : '$devices.device.version', + type: '$devices.device.type', + name: '$devices.device.name', + version: '$devices.device.version', }, count: { $sum: '$devices.sessions', @@ -310,8 +310,8 @@ export const aggregates = { }, { $group: { _id: { - name : '$devices.device.os.name', - version : '$devices.device.os.version', + name: '$devices.device.os.name', + version: '$devices.device.os.version', }, count: { $sum: '$devices.sessions', @@ -347,8 +347,8 @@ export const aggregates = { }, { $group: { _id: { - name : '$devices.device.os.name', - version : '$devices.device.os.version', + name: '$devices.device.os.name', + version: '$devices.device.os.version', }, count: { $sum: '$devices.sessions', @@ -484,7 +484,7 @@ export class Sessions extends Base { return; } - const now = new Date; + const now = new Date(); return this.upsert({ instanceId, sessionId, year, month, day }, { $set: data, diff --git a/app/models/server/models/Sessions.tests.js b/app/models/server/models/Sessions.tests.js index a90f707536962e23ad6138af3baaf31fd74b6f3a..e1c9c590dfaf35c502ee03d11e7495e2f305b648 100644 --- a/app/models/server/models/Sessions.tests.js +++ b/app/models/server/models/Sessions.tests.js @@ -1,9 +1,12 @@ /* eslint-env mocha */ import assert from 'assert'; + import './Sessions.mocks.js'; + const mongoUnit = require('mongo-unit'); const { MongoClient } = require('mongodb'); + const { aggregates } = require('./Sessions'); const sessions_dates = []; @@ -21,210 +24,210 @@ for (let index = 0; index < 365; index++) { const DATA = { sessions: [{ - _id : 'fNFyFcjszvoN6Grip2', - day : 30, - instanceId : 'HvbqxukP8E65LAGMY', - month : 4, - sessionId : 'kiA4xX33AyzPgpBNs2', - year : 2019, - _updatedAt : new Date('2019-04-30T16:33:24.311Z'), - createdAt : new Date('2019-04-30T00:11:34.047Z'), - device : { - type : 'browser', - name : 'Firefox', - longVersion : '66.0.3', - os : { - name : 'Linux', - version : '12', + _id: 'fNFyFcjszvoN6Grip2', + day: 30, + instanceId: 'HvbqxukP8E65LAGMY', + month: 4, + sessionId: 'kiA4xX33AyzPgpBNs2', + year: 2019, + _updatedAt: new Date('2019-04-30T16:33:24.311Z'), + createdAt: new Date('2019-04-30T00:11:34.047Z'), + device: { + type: 'browser', + name: 'Firefox', + longVersion: '66.0.3', + os: { + name: 'Linux', + version: '12', }, - version : '66.0.3', + version: '66.0.3', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-04-30T00:11:34.047Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - lastActivityAt : new Date('2019-04-30T00:16:20.349Z'), - closedAt : new Date('2019-04-30T00:16:20.349Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-04-30T00:11:34.047Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + lastActivityAt: new Date('2019-04-30T00:16:20.349Z'), + closedAt: new Date('2019-04-30T00:16:20.349Z'), }, { - _id : 'fNFyFcjszvoN6Grip', - day : 2, - instanceId : 'HvbqxukP8E65LAGMY', - month : 5, - sessionId : 'kiA4xX33AyzPgpBNs', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T00:11:34.047Z'), - device : { - type : 'browser', - name : 'Firefox', - longVersion : '66.0.3', - os : { - name : 'Linux', - version : '12', + _id: 'fNFyFcjszvoN6Grip', + day: 2, + instanceId: 'HvbqxukP8E65LAGMY', + month: 5, + sessionId: 'kiA4xX33AyzPgpBNs', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T00:11:34.047Z'), + device: { + type: 'browser', + name: 'Firefox', + longVersion: '66.0.3', + os: { + name: 'Linux', + version: '12', }, - version : '66.0.3', + version: '66.0.3', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T00:11:34.047Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - lastActivityAt : new Date('2019-05-03T00:16:20.349Z'), - closedAt : new Date('2019-05-03T00:16:20.349Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T00:11:34.047Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + lastActivityAt: new Date('2019-05-03T00:16:20.349Z'), + closedAt: new Date('2019-05-03T00:16:20.349Z'), }, { - _id : 'oZMkfR3gFB6kuKDK2', - day : 2, - instanceId : 'HvbqxukP8E65LAGMY', - month : 5, - sessionId : 'i8uJFekr9np4x88kS', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T00:16:21.847Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 'oZMkfR3gFB6kuKDK2', + day: 2, + instanceId: 'HvbqxukP8E65LAGMY', + month: 5, + sessionId: 'i8uJFekr9np4x88kS', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T00:16:21.847Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T00:16:21.846Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - lastActivityAt : new Date('2019-05-03T00:17:21.081Z'), - closedAt : new Date('2019-05-03T00:17:21.081Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T00:16:21.846Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + lastActivityAt: new Date('2019-05-03T00:17:21.081Z'), + closedAt: new Date('2019-05-03T00:17:21.081Z'), }, { - _id : 'ABXKoXKTZpPpzLjKd', - day : 2, - instanceId : 'HvbqxukP8E65LAGMY', - month : 5, - sessionId : 'T8MB28cpx2ZjfEDXr', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T00:17:22.375Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 'ABXKoXKTZpPpzLjKd', + day: 2, + instanceId: 'HvbqxukP8E65LAGMY', + month: 5, + sessionId: 'T8MB28cpx2ZjfEDXr', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T00:17:22.375Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T00:17:22.375Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - lastActivityAt : new Date('2019-05-03T01:48:31.695Z'), - closedAt : new Date('2019-05-03T01:48:31.695Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T00:17:22.375Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + lastActivityAt: new Date('2019-05-03T01:48:31.695Z'), + closedAt: new Date('2019-05-03T01:48:31.695Z'), }, { - _id : 's4ucvvcfBjnTEtYEb', - day : 2, - instanceId : 'HvbqxukP8E65LAGMY', - month : 5, - sessionId : '8mHbJJypgeRG27TYF', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T01:48:43.521Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 's4ucvvcfBjnTEtYEb', + day: 2, + instanceId: 'HvbqxukP8E65LAGMY', + month: 5, + sessionId: '8mHbJJypgeRG27TYF', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T01:48:43.521Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T01:48:43.521Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - closedAt : new Date('2019-05-03T01:48:43.761Z'), - lastActivityAt : new Date('2019-05-03T01:48:43.761Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T01:48:43.521Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + closedAt: new Date('2019-05-03T01:48:43.761Z'), + lastActivityAt: new Date('2019-05-03T01:48:43.761Z'), }, { - _id : 'MDs9SzQKmwaDmXL8s', - day : 2, - instanceId : 'HvbqxukP8E65LAGMY', - month : 5, - sessionId : 'GmoBDPKy9RW2eXdCG', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T01:48:45.064Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 'MDs9SzQKmwaDmXL8s', + day: 2, + instanceId: 'HvbqxukP8E65LAGMY', + month: 5, + sessionId: 'GmoBDPKy9RW2eXdCG', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T01:48:45.064Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T01:48:45.064Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T01:48:45.064Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', }, { - _id : 'CJwfxASo62FHDgqog', - day : 2, - instanceId : 'Nmwo2ttFeWZSrowNh', - month : 5, - sessionId : 'LMrrL4sbpNMLWYomA', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T01:50:31.098Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 'CJwfxASo62FHDgqog', + day: 2, + instanceId: 'Nmwo2ttFeWZSrowNh', + month: 5, + sessionId: 'LMrrL4sbpNMLWYomA', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T01:50:31.098Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T01:50:31.092Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse', - closedAt : new Date('2019-05-03T01:50:31.355Z'), - lastActivityAt : new Date('2019-05-03T01:50:31.355Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T01:50:31.092Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse', + closedAt: new Date('2019-05-03T01:50:31.355Z'), + lastActivityAt: new Date('2019-05-03T01:50:31.355Z'), }, { - _id : 'iGAcPobWfTQtN6s4K', - day : 1, - instanceId : 'Nmwo2ttFeWZSrowNh', - month : 5, - sessionId : 'AsbjZRLNQMqfbyYFS', - year : 2019, - _updatedAt : new Date('2019-05-06T16:33:24.311Z'), - createdAt : new Date('2019-05-03T01:50:32.765Z'), - device : { - type : 'browser', - name : 'Chrome', - longVersion : '73.0.3683.103', - os : { - name : 'Mac OS', - version : '10.14.1', + _id: 'iGAcPobWfTQtN6s4K', + day: 1, + instanceId: 'Nmwo2ttFeWZSrowNh', + month: 5, + sessionId: 'AsbjZRLNQMqfbyYFS', + year: 2019, + _updatedAt: new Date('2019-05-06T16:33:24.311Z'), + createdAt: new Date('2019-05-03T01:50:32.765Z'), + device: { + type: 'browser', + name: 'Chrome', + longVersion: '73.0.3683.103', + os: { + name: 'Mac OS', + version: '10.14.1', }, - version : '73.0.3683', + version: '73.0.3683', }, - host : 'localhost:3000', - ip : '127.0.0.1', - loginAt : new Date('2019-05-03T01:50:32.765Z'), - type : 'session', - userId : 'xPZXw9xqM3kKshsse2', - lastActivityAt : new Date('2019-05-03T02:59:59.999Z'), + host: 'localhost:3000', + ip: '127.0.0.1', + loginAt: new Date('2019-05-03T01:50:32.765Z'), + type: 'session', + userId: 'xPZXw9xqM3kKshsse2', + lastActivityAt: new Date('2019-05-03T02:59:59.999Z'), }], sessions_dates, }; // require('./fixtures/testData.json') @@ -236,7 +239,7 @@ describe.only('Sessions Aggregates', () => { before(function() { this.timeout(120000); return mongoUnit.start({ version: '3.2.22' }) - .then((testMongoUrl) => process.env.MONGO_URL = testMongoUrl); + .then((testMongoUrl) => { process.env.MONGO_URL = testMongoUrl; }); }); after(() => { mongoUnit.stop(); }); @@ -244,7 +247,7 @@ describe.only('Sessions Aggregates', () => { before(function() { return MongoClient.connect(process.env.MONGO_URL) - .then((client) => db = client.db('test')); + .then((client) => { db = client.db('test'); }); }); before(() => db.dropDatabase().then(() => { diff --git a/app/models/server/models/Settings.js b/app/models/server/models/Settings.js index 84103918784f53536e9aa34a732dd49acd0f21e7..fcf605c4b740fd2363a74b116f07aa88d203c069 100644 --- a/app/models/server/models/Settings.js +++ b/app/models/server/models/Settings.js @@ -55,8 +55,7 @@ export class Settings extends Base { }; if (ids.length > 0) { - filter._id = - { $in: ids }; + filter._id = { $in: ids }; } return this.find(filter, { fields: { _id: 1, value: 1 } }); @@ -172,7 +171,7 @@ export class Settings extends Base { const record = { _id, value, - _createdAt: new Date, + _createdAt: new Date(), }; return this.insert(record); diff --git a/app/models/server/models/Subscriptions.js b/app/models/server/models/Subscriptions.js index 9b915999d28c6e8ebb988713f73a57021620bd39..93813847b88a47152af7d48fa525621df806536b 100644 --- a/app/models/server/models/Subscriptions.js +++ b/app/models/server/models/Subscriptions.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { Base } from './_Base'; import { Match } from 'meteor/check'; +import _ from 'underscore'; + +import { Base } from './_Base'; import Rooms from './Rooms'; import Users from './Users'; import { getDefaultSubscriptionPref } from '../../../utils/lib/getDefaultSubscriptionPref'; -import _ from 'underscore'; export class Subscriptions extends Base { constructor(...args) { @@ -350,7 +351,6 @@ export class Subscriptions extends Base { } findNotificationPreferencesByRoom(query/* { roomId: rid, desktopFilter: desktopNotifications, mobileFilter: mobilePushNotifications, emailFilter: emailNotifications }*/) { - return this._db.find(query, { fields: { @@ -445,7 +445,7 @@ export class Subscriptions extends Base { const subscriptions = this.find(query).fetch(); const users = _.compact(_.map(subscriptions, function(subscription) { - if ('undefined' !== typeof subscription.u && 'undefined' !== typeof subscription.u._id) { + if (typeof subscription.u !== 'undefined' && typeof subscription.u._id !== 'undefined') { return subscription.u._id; } })); @@ -483,8 +483,7 @@ export class Subscriptions extends Base { // FIND findByUserId(userId, options) { - const query = - { 'u._id': userId }; + const query = { 'u._id': userId }; return this.find(query, options); } @@ -550,8 +549,7 @@ export class Subscriptions extends Base { } findByRoomId(roomId, options) { - const query = - { rid: roomId }; + const query = { rid: roomId }; return this.find(query, options); } @@ -658,8 +656,7 @@ export class Subscriptions extends Base { // UPDATE archiveByRoomId(roomId) { - const query = - { rid: roomId }; + const query = { rid: roomId }; const update = { $set: { @@ -673,8 +670,7 @@ export class Subscriptions extends Base { } unarchiveByRoomId(roomId) { - const query = - { rid: roomId }; + const query = { rid: roomId }; const update = { $set: { @@ -731,7 +727,7 @@ export class Subscriptions extends Base { unread: 0, userMentions: 0, groupMentions: 0, - ls: new Date, + ls: new Date(), }, }; @@ -785,8 +781,7 @@ export class Subscriptions extends Base { } updateNameAndAlertByRoomId(roomId, name, fname) { - const query = - { rid: roomId }; + const query = { rid: roomId }; const update = { $set: { @@ -800,8 +795,7 @@ export class Subscriptions extends Base { } updateDisplayNameByRoomId(roomId, fname) { - const query = - { rid: roomId }; + const query = { rid: roomId }; const update = { $set: { @@ -814,8 +808,7 @@ export class Subscriptions extends Base { } setUserUsernameByUserId(userId, username) { - const query = - { 'u._id': userId }; + const query = { 'u._id': userId }; const update = { $set: { @@ -909,7 +902,7 @@ export class Subscriptions extends Base { return this.update(query, update, { multi: true }); } - ignoreUser({ _id, ignoredUser : ignored, ignore = true }) { + ignoreUser({ _id, ignoredUser: ignored, ignore = true }) { const query = { _id, }; @@ -1023,8 +1016,7 @@ export class Subscriptions extends Base { } updateTypeByRoomId(roomId, type) { - const query = - { rid: roomId }; + const query = { rid: roomId }; const update = { $set: { @@ -1036,8 +1028,7 @@ export class Subscriptions extends Base { } addRoleById(_id, role) { - const query = - { _id }; + const query = { _id }; const update = { $addToSet: { @@ -1049,8 +1040,7 @@ export class Subscriptions extends Base { } removeRoleById(_id, role) { - const query = - { _id }; + const query = { _id }; const update = { $pull: { diff --git a/app/models/server/models/Uploads.js b/app/models/server/models/Uploads.js index 12f45b373b83d7841a65208308c00452aeb7d916..f9fa5fe4879d7bb09606e68a925d596c5b168240 100644 --- a/app/models/server/models/Uploads.js +++ b/app/models/server/models/Uploads.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import s from 'underscore.string'; import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; + import { Base } from './_Base'; export class Uploads extends Base { @@ -104,9 +105,8 @@ export class Uploads extends Base { deleteFile(fileId) { if (this.model.direct && this.model.direct.remove != null) { return this.model.direct.remove({ _id: fileId }); - } else { - return this.remove({ _id: fileId }); } + return this.remove({ _id: fileId }); } } diff --git a/app/models/server/models/UserDataFiles.js b/app/models/server/models/UserDataFiles.js index 7fe3a2b49504f5b23658ebd847af4f699d105083..a877188ff03bcae4eb410f11091a969560eff0b9 100644 --- a/app/models/server/models/UserDataFiles.js +++ b/app/models/server/models/UserDataFiles.js @@ -1,6 +1,7 @@ -import { Base } from './_Base'; import _ from 'underscore'; +import { Base } from './_Base'; + export class UserDataFiles extends Base { constructor() { super('user_data_files'); @@ -19,14 +20,14 @@ export class UserDataFiles extends Base { userId, }; - options.sort = { _updatedAt : -1 }; + options.sort = { _updatedAt: -1 }; return this.findOne(query, options); } // INSERT create(data) { const userDataFile = { - createdAt: new Date, + createdAt: new Date(), }; _.extend(userDataFile, data); diff --git a/app/models/server/models/Users.js b/app/models/server/models/Users.js index 38046d55b312368d37f4a76455c20865a2e76104..b5372c23d7ae25a61a1cb15a7bb2f47080b71ede 100644 --- a/app/models/server/models/Users.js +++ b/app/models/server/models/Users.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { Base } from './_Base'; import Subscriptions from './Subscriptions'; import { settings } from '../../../settings/server/functions/settings'; -import _ from 'underscore'; -import s from 'underscore.string'; export class Users extends Base { constructor(...args) { @@ -165,9 +166,8 @@ export class Users extends Base { agentId: user.value._id, username: user.value.username, }; - } else { - return null; } + return null; } setLivechatStatus(userId, status) { @@ -395,7 +395,7 @@ export class Users extends Base { findOneByIdAndLoginToken(_id, token, options) { const query = { _id, - 'services.resume.loginTokens.hashedToken' : Accounts._hashLoginToken(token), + 'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(token), }; return this.findOne(query, options); @@ -673,7 +673,7 @@ export class Users extends Base { updateLastLoginById(_id) { const update = { $set: { - lastLogin: new Date, + lastLogin: new Date(), }, }; @@ -681,8 +681,7 @@ export class Users extends Base { } setServiceId(_id, serviceName, serviceId) { - const update = - { $set: {} }; + const update = { $set: {} }; const serviceIdKey = `services.${ serviceName }.id`; update.$set[serviceIdKey] = serviceId; @@ -691,8 +690,7 @@ export class Users extends Base { } setUsername(_id, username) { - const update = - { $set: { username } }; + const update = { $set: { username } }; return this.update(_id, update); } @@ -806,7 +804,7 @@ export class Users extends Base { unsetLoginTokens(_id) { const update = { $set: { - 'services.resume.loginTokens' : [], + 'services.resume.loginTokens': [], }, }; @@ -816,8 +814,8 @@ export class Users extends Base { unsetRequirePasswordChange(_id) { const update = { $unset: { - requirePasswordChange : true, - requirePasswordChangeReason : true, + requirePasswordChange: true, + requirePasswordChangeReason: true, }, }; @@ -1028,7 +1026,7 @@ export class Users extends Base { // INSERT create(data) { const user = { - createdAt: new Date, + createdAt: new Date(), avatarOrigin: 'none', }; diff --git a/app/models/server/models/WebdavAccounts.js b/app/models/server/models/WebdavAccounts.js index f1ce436cdd58130297333fc49c0938aaf4373ee8..b3d8f4875bf666da387b8dd88ec63a6cd8c9ecde 100644 --- a/app/models/server/models/WebdavAccounts.js +++ b/app/models/server/models/WebdavAccounts.js @@ -22,7 +22,6 @@ export class WebdavAccounts extends Base { removeById(_id) { return this.remove({ _id }); } - } export default new WebdavAccounts(); diff --git a/app/models/server/models/_Base.js b/app/models/server/models/_Base.js index 3dc855cb546ae9ca87426b87ee52ebc58d8306d7..87abf5aed68482d02db270ac4816d6e7c38e72d6 100644 --- a/app/models/server/models/_Base.js +++ b/app/models/server/models/_Base.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; -import { BaseDb } from './_BaseDb'; import objectPath from 'object-path'; import _ from 'underscore'; +import { BaseDb } from './_BaseDb'; + export class Base { constructor(nameOrModel) { this._db = new BaseDb(nameOrModel, this); @@ -22,7 +23,7 @@ export class Base { } roleBaseQuery() { - return; + } findRolesByUserId(userId) { @@ -326,5 +327,4 @@ export class Base { // remove: this.dinamicTrashFindAfter(method, updatedAt, ...args).fetch() // }; // } - } diff --git a/app/models/server/models/_BaseDb.js b/app/models/server/models/_BaseDb.js index c5c79c8fbc5a549cae0ca38b10871c2f37e6e797..cd774981ffb67e13923a7f4042e243345c52e2cd 100644 --- a/app/models/server/models/_BaseDb.js +++ b/app/models/server/models/_BaseDb.js @@ -1,7 +1,8 @@ +import { EventEmitter } from 'events'; + import { Match } from 'meteor/check'; import { Mongo, MongoInternals } from 'meteor/mongo'; import _ from 'underscore'; -import { EventEmitter } from 'events'; const baseName = 'rocketchat_'; @@ -60,7 +61,6 @@ export class BaseDb extends EventEmitter { } setUpdatedAt(record = {}) { - // TODO: Check if this can be deleted, Rodrigo does not rememebr WHY he added it. So he removed it to fix issue #5541 // setUpdatedAt(record = {}, checkQuery = false, query) { // if (checkQuery === true) { @@ -71,9 +71,9 @@ export class BaseDb extends EventEmitter { if (/(^|,)\$/.test(Object.keys(record).join(','))) { record.$set = record.$set || {}; - record.$set._updatedAt = new Date; + record.$set._updatedAt = new Date(); } else { - record._updatedAt = new Date; + record._updatedAt = new Date(); } return record; @@ -190,7 +190,6 @@ export class BaseDb extends EventEmitter { id: action.id, oplog: true, }); - return; } } @@ -223,7 +222,7 @@ export class BaseDb extends EventEmitter { for (const record of records) { ids.push(record._id); - record._deletedAt = new Date; + record._deletedAt = new Date(); record.__collection__ = this.name; trash.upsert({ _id: record._id }, _.omit(record, '_id')); @@ -244,9 +243,8 @@ export class BaseDb extends EventEmitter { this.upsert(...args); return _id; - } else { - return this.insert(...args); } + return this.insert(...args); } allow(...args) { diff --git a/app/notifications/client/lib/Notifications.js b/app/notifications/client/lib/Notifications.js index e9dd1853189db53cc14321a2e19ac98db2233dab..feb3bfd468063de79ac955fd84c5fd9b5049ec95 100644 --- a/app/notifications/client/lib/Notifications.js +++ b/app/notifications/client/lib/Notifications.js @@ -9,7 +9,7 @@ class Notifications { if (Meteor.userId() !== null && this.logged === false) { this.loginCb.forEach((cb) => cb()); } - return this.logged = Meteor.userId() !== null; + this.logged = Meteor.userId() !== null; }); this.debug = false; this.streamAll = new Meteor.Streamer('notify-all'); @@ -33,6 +33,7 @@ class Notifications { return cb(); } } + notifyRoom(room, eventName, ...args) { if (this.debug === true) { console.log('RocketChat.Notifications: notifyRoom', [room, eventName, ...args]); @@ -40,6 +41,7 @@ class Notifications { args.unshift(`${ room }/${ eventName }`); return this.streamRoom.emit.apply(this.streamRoom, args); } + notifyUser(userId, eventName, ...args) { if (this.debug === true) { console.log('RocketChat.Notifications: notifyUser', [userId, eventName, ...args]); @@ -47,6 +49,7 @@ class Notifications { args.unshift(`${ userId }/${ eventName }`); return this.streamUser.emit.apply(this.streamUser, args); } + notifyUsersOfRoom(room, eventName, ...args) { if (this.debug === true) { console.log('RocketChat.Notifications: notifyUsersOfRoom', [room, eventName, ...args]); @@ -54,12 +57,15 @@ class Notifications { args.unshift(`${ room }/${ eventName }`); return this.streamRoomUsers.emit.apply(this.streamRoomUsers, args); } + onAll(eventName, callback) { return this.streamAll.on(eventName, callback); } + onLogged(eventName, callback) { return this.onLogin(() => this.streamLogged.on(eventName, callback)); } + onRoom(room, eventName, callback) { if (this.debug === true) { this.streamRoom.on(room, function() { @@ -68,18 +74,23 @@ class Notifications { } return this.streamRoom.on(`${ room }/${ eventName }`, callback); } + onUser(eventName, callback) { return this.streamUser.on(`${ Meteor.userId() }/${ eventName }`, callback); } + unAll(callback) { return this.streamAll.removeListener('notify', callback); } + unLogged(callback) { return this.streamLogged.removeListener('notify', callback); } + unRoom(room, eventName, callback) { return this.streamRoom.removeListener(`${ room }/${ eventName }`, callback); } + unUser(eventName, callback) { return this.streamUser.removeListener(`${ Meteor.userId() }/${ eventName }`, callback); } diff --git a/app/notifications/server/lib/Notifications.js b/app/notifications/server/lib/Notifications.js index ab9ff5d8531c37cdf917acde8f549d81df354e0b..8dfd97b2d3cbaa85b8fb90fa97d3c90373c41dc0 100644 --- a/app/notifications/server/lib/Notifications.js +++ b/app/notifications/server/lib/Notifications.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { DDPCommon } from 'meteor/ddp-common'; + import { Subscriptions, Rooms } from '../../../models'; import { settings } from '../../../settings'; diff --git a/app/nrr/client/nrr.js b/app/nrr/client/nrr.js index 00c1cdba2d9545eb18c68514b43142243cb1e9ab..80feb407d92bf92c9ce65f96e721e8da49e1e820 100644 --- a/app/nrr/client/nrr.js +++ b/app/nrr/client/nrr.js @@ -18,7 +18,6 @@ const makeCursorReactive = function(obj) { }; Blaze.toHTMLWithDataNonReactive = function(content, data) { - makeCursorReactive(data); if (data instanceof Spacebars.kw && Object.keys(data.hash).length > 0) { diff --git a/app/oauth2-server-config/client/admin/route.js b/app/oauth2-server-config/client/admin/route.js index 229074dfd0af90198cb9875f561d818789f050bc..df568f2bca603c62f58f201bc757f144ed0e5d0a 100644 --- a/app/oauth2-server-config/client/admin/route.js +++ b/app/oauth2-server-config/client/admin/route.js @@ -1,5 +1,6 @@ -import { FlowRouter } from 'meteor/kadira:flow-router' ; +import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { t } from '../../../utils'; FlowRouter.route('/admin/oauth-apps', { diff --git a/app/oauth2-server-config/client/admin/views/oauthApp.js b/app/oauth2-server-config/client/admin/views/oauthApp.js index 3b59a9bfcfa9a66a4f4226513281b3ad75008ec7..1ef9f76d3287abc02021b90512ecba8cdabbe296 100644 --- a/app/oauth2-server-config/client/admin/views/oauthApp.js +++ b/app/oauth2-server-config/client/admin/views/oauthApp.js @@ -4,11 +4,12 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; +import toastr from 'toastr'; + import { hasAllPermission } from '../../../../authorization'; import { modal, SideNav } from '../../../../ui-utils/client'; import { t, handleError } from '../../../../utils'; import { ChatOAuthApps } from '../collection'; -import toastr from 'toastr'; Template.oauthApp.onCreated(function() { this.subscribe('oauthApps'); @@ -108,4 +109,3 @@ Template.oauthApp.onRendered(() => { SideNav.openFlex(); }); }); - diff --git a/app/oauth2-server-config/client/admin/views/oauthApps.js b/app/oauth2-server-config/client/admin/views/oauthApps.js index 701367de936413b23c1dc979dec8f8875571c391..75ac3a749b30855fcdd1a30f16fc519aa9f135bb 100644 --- a/app/oauth2-server-config/client/admin/views/oauthApps.js +++ b/app/oauth2-server-config/client/admin/views/oauthApps.js @@ -1,8 +1,9 @@ import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; +import moment from 'moment'; + import { hasAllPermission } from '../../../../authorization'; import { ChatOAuthApps } from '../collection'; -import moment from 'moment'; import { SideNav } from '../../../../ui-utils/client'; Template.oauthApps.onCreated(function() { @@ -27,4 +28,3 @@ Template.oauthApps.onRendered(() => { SideNav.openFlex(); }); }); - diff --git a/app/oauth2-server-config/client/oauth/oauth2-client.js b/app/oauth2-server-config/client/oauth/oauth2-client.js index f1d82952a8a1065b7af6830440267ed43b2eea92..c763233e57e76d9d504ce66bf60d1b9ee9658c36 100644 --- a/app/oauth2-server-config/client/oauth/oauth2-client.js +++ b/app/oauth2-server-config/client/oauth/oauth2-client.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { FlowRouter } from 'meteor/kadira:flow-router' ; +import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Template } from 'meteor/templating'; -import { ChatOAuthApps } from '../admin/collection'; import { Accounts } from 'meteor/accounts-base'; +import { ChatOAuthApps } from '../admin/collection'; + FlowRouter.route('/oauth/authorize', { action(params, queryParams) { BlazeLayout.render('main', { diff --git a/app/oauth2-server-config/server/admin/methods/addOAuthApp.js b/app/oauth2-server-config/server/admin/methods/addOAuthApp.js index 3a3614dbaf1a20a54a88b1e82723f9cb69d9c062..a5ef900f34bd92114e535b1031b4fadca1b45aed 100644 --- a/app/oauth2-server-config/server/admin/methods/addOAuthApp.js +++ b/app/oauth2-server-config/server/admin/methods/addOAuthApp.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; +import _ from 'underscore'; + import { hasPermission } from '../../../../authorization'; import { Users, OAuthApps } from '../../../../models'; -import _ from 'underscore'; Meteor.methods({ addOAuthApp(application) { @@ -20,7 +21,7 @@ Meteor.methods({ } application.clientId = Random.id(); application.clientSecret = Random.secret(); - application._createdAt = new Date; + application._createdAt = new Date(); application._createdBy = Users.findOne(this.userId, { fields: { username: 1 } }); application._id = OAuthApps.insert(application); return application; diff --git a/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.js b/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.js index e08bbfdfb15d8ec866f1a5833396205d866865c6..6c0b1e665de643f3933de6cf24d6d3fb0988a122 100644 --- a/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.js +++ b/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { OAuthApps } from '../../../../models'; diff --git a/app/oauth2-server-config/server/admin/methods/updateOAuthApp.js b/app/oauth2-server-config/server/admin/methods/updateOAuthApp.js index 50292d4bc06e246cf004c3763ec03aa74dd20751..6043a34a23f0a3e987348250fd594e43a86831ce 100644 --- a/app/oauth2-server-config/server/admin/methods/updateOAuthApp.js +++ b/app/oauth2-server-config/server/admin/methods/updateOAuthApp.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { hasPermission } from '../../../../authorization'; import { OAuthApps, Users } from '../../../../models'; -import _ from 'underscore'; Meteor.methods({ updateOAuthApp(applicationId, application) { @@ -26,7 +27,7 @@ Meteor.methods({ name: application.name, active: application.active, redirectUri: application.redirectUri, - _updatedAt: new Date, + _updatedAt: new Date(), _updatedBy: Users.findOne(this.userId, { fields: { username: 1, diff --git a/app/oauth2-server-config/server/admin/publications/oauthApps.js b/app/oauth2-server-config/server/admin/publications/oauthApps.js index 498155b1e279c5dd17b2d43843c073dbdd2b4c87..e6f105c7e9ebdba68ad63f6a90b151259ac24fcb 100644 --- a/app/oauth2-server-config/server/admin/publications/oauthApps.js +++ b/app/oauth2-server-config/server/admin/publications/oauthApps.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../authorization'; import { OAuthApps } from '../../../../models'; diff --git a/app/oauth2-server-config/server/oauth/default-services.js b/app/oauth2-server-config/server/oauth/default-services.js index 4925ed314caee9fe7923768f750e48f4f7884e64..d39489c9ec850060bdc11c267ddcc50007097f83 100644 --- a/app/oauth2-server-config/server/oauth/default-services.js +++ b/app/oauth2-server-config/server/oauth/default-services.js @@ -8,7 +8,7 @@ if (!OAuthApps.findOne('zapier')) { clientId: 'zapier', clientSecret: 'RTK6TlndaCIolhQhZ7_KHIGOKj41RnlaOq_o-7JKwLr', redirectUri: 'https://zapier.com/dashboard/auth/oauth/return/RocketChatDevAPI/', - _createdAt: new Date, + _createdAt: new Date(), _createdBy: { _id: 'system', username: 'system', diff --git a/app/oauth2-server-config/server/oauth/oauth2-server.js b/app/oauth2-server-config/server/oauth/oauth2-server.js index fbc6fed4e63d29d612bcd5e8693cc9c8ab78f919..7f0480c1c83562c3ddc42f226aa51b0d7646e0e3 100644 --- a/app/oauth2-server-config/server/oauth/oauth2-server.js +++ b/app/oauth2-server-config/server/oauth/oauth2-server.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; -import { OAuthApps, Users } from '../../../models'; import { OAuth2Server } from 'meteor/rocketchat:oauth2-server'; + +import { OAuthApps, Users } from '../../../models'; import { API } from '../../../api'; const oauth2server = new OAuth2Server({ diff --git a/app/oembed/client/oembedAudioWidget.js b/app/oembed/client/oembedAudioWidget.js index f1eae8cada3d3a70e87ecabf1e65bd294efad5d2..f5c5cc8902feec2e899684c81c2f52d7fa41c1d4 100644 --- a/app/oembed/client/oembedAudioWidget.js +++ b/app/oembed/client/oembedAudioWidget.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { getUserPreference } from '../../utils'; Template.oembedAudioWidget.helpers({ collapsed() { if (this.collapsed) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/client/oembedFrameWidget.js b/app/oembed/client/oembedFrameWidget.js index dee89ca5ef801aeeb48d6314f9beb0b9250c0c50..e92989976fd378b1649e519ef365865fb1cdd3fa 100644 --- a/app/oembed/client/oembedFrameWidget.js +++ b/app/oembed/client/oembedFrameWidget.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { getUserPreference } from '../../utils'; Template.oembedFrameWidget.helpers({ collapsed() { if (this.collapsed) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/client/oembedImageWidget.js b/app/oembed/client/oembedImageWidget.js index fc7dcdd1d20d71cd323d926dc828e629c268a2e9..b292a56e2bbbf869c8999b3e6a7503078e7b0da7 100644 --- a/app/oembed/client/oembedImageWidget.js +++ b/app/oembed/client/oembedImageWidget.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { getUserPreference } from '../../utils'; Template.oembedImageWidget.helpers({ @@ -15,8 +16,7 @@ Template.oembedImageWidget.helpers({ collapsed() { if (this.collapsed != null) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/client/oembedUrlWidget.js b/app/oembed/client/oembedUrlWidget.js index 943d33b44a309b4b09013389c78dec3f8894f0d1..2f2f8a4b4faf9e8c0c9279dc4cec37ed9c9d40bf 100644 --- a/app/oembed/client/oembedUrlWidget.js +++ b/app/oembed/client/oembedUrlWidget.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; -import { getUserPreference } from '../../utils'; import _ from 'underscore'; +import { getUserPreference } from '../../utils'; + const getTitle = function(self) { if (self.meta == null) { return; @@ -65,8 +66,7 @@ Template.oembedUrlWidget.helpers({ collapsed() { if (this.collapsed != null) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/client/oembedVideoWidget.js b/app/oembed/client/oembedVideoWidget.js index be7764b451042a3a3555391659934513fa2666ac..4b7c4d4864cf3c57c95fb452043cd32706775f65 100644 --- a/app/oembed/client/oembedVideoWidget.js +++ b/app/oembed/client/oembedVideoWidget.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { getUserPreference } from '../../utils'; const getTitle = function(self) { @@ -13,14 +14,14 @@ Template.oembedVideoWidget.helpers({ url() { if (this.meta && this.meta.twitterPlayerStream) { return this.meta.twitterPlayerStream; - } else if (this.url) { + } if (this.url) { return this.url; } }, contentType() { if (this.meta && this.meta.twitterPlayerStreamContentType) { return this.meta.twitterPlayerStreamContentType; - } else if (this.headers && this.headers.contentType) { + } if (this.headers && this.headers.contentType) { return this.headers.contentType; } }, @@ -30,9 +31,8 @@ Template.oembedVideoWidget.helpers({ collapsed() { if (this.collapsed) { return this.collapsed; - } else { - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; } + return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/client/oembedYoutubeWidget.js b/app/oembed/client/oembedYoutubeWidget.js index 2e8d2557c62080fa781945dcb069bc95230bad4b..041ab2753e4cb3844caa573aac7c1336a6a8c0f3 100644 --- a/app/oembed/client/oembedYoutubeWidget.js +++ b/app/oembed/client/oembedYoutubeWidget.js @@ -1,14 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { getUserPreference } from '../../utils'; Template.oembedYoutubeWidget.helpers({ collapsed() { if (this.collapsed) { return this.collapsed; - } else { - const user = Meteor.user(); - return getUserPreference(user, 'collapseMediaByDefault') === true; } + const user = Meteor.user(); + return getUserPreference(user, 'collapseMediaByDefault') === true; }, }); diff --git a/app/oembed/server/jumpToMessage.js b/app/oembed/server/jumpToMessage.js index 5158913cd4b4e76f358f51ddaef78b7e2af9c856..4c14414f339b5f47c5c96fd8120df251b655339f 100644 --- a/app/oembed/server/jumpToMessage.js +++ b/app/oembed/server/jumpToMessage.js @@ -1,18 +1,20 @@ +import URL from 'url'; +import QueryString from 'querystring'; + import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Messages } from '../../models'; import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { getUserAvatarURL } from '../../utils/lib/getUserAvatarURL'; -import _ from 'underscore'; -import URL from 'url'; -import QueryString from 'querystring'; const recursiveRemove = (message, deep = 1) => { if (message) { if ('attachments' in message && message.attachments !== null && deep < settings.get('Message_QuoteChainLimit')) { message.attachments.map((msg) => recursiveRemove(msg, deep + 1)); } else { - delete(message.attachments); + delete message.attachments; } } return message; diff --git a/app/oembed/server/providers.js b/app/oembed/server/providers.js index b5cacfd5305ae47c991b8c1f5e41199bcdfc3c4b..7a25e77103233c2ca8d2d6e7c36093a05fcd6bc4 100644 --- a/app/oembed/server/providers.js +++ b/app/oembed/server/providers.js @@ -1,9 +1,11 @@ -import { changeCase } from 'meteor/konecty:change-case'; -import { callbacks } from '../../callbacks'; -import _ from 'underscore'; import URL from 'url'; import QueryString from 'querystring'; +import { changeCase } from 'meteor/konecty:change-case'; +import _ from 'underscore'; + +import { callbacks } from '../../callbacks'; + class Providers { constructor() { this.providers = []; @@ -104,7 +106,7 @@ callbacks.add('oembed:afterParseContent', function(data) { const metas = JSON.parse(data.content.body); _.each(metas, function(value, key) { if (_.isString(value)) { - return data.meta[changeCase.camelCase(`oembed_${ key }`)] = value; + data.meta[changeCase.camelCase(`oembed_${ key }`)] = value; } }); data.meta.oembedUrl = url; diff --git a/app/oembed/server/server.js b/app/oembed/server/server.js index 37a3c4deaf1cc65fcd35a7a05871ce09c4dff756..0d5a68917da7e79dc069511d7aaa9abe837df035 100644 --- a/app/oembed/server/server.js +++ b/app/oembed/server/server.js @@ -1,16 +1,18 @@ +import URL from 'url'; +import querystring from 'querystring'; + import { Meteor } from 'meteor/meteor'; import { HTTPInternals } from 'meteor/http'; import { changeCase } from 'meteor/konecty:change-case'; -import { settings } from '../../settings'; -import { callbacks } from '../../callbacks'; -import { OEmbedCache, Messages } from '../../models'; import _ from 'underscore'; -import URL from 'url'; -import querystring from 'querystring'; import iconv from 'iconv-lite'; import ipRangeCheck from 'ip-range-check'; import he from 'he'; import jschardet from 'jschardet'; + +import { OEmbedCache, Messages } from '../../models'; +import { callbacks } from '../../callbacks'; +import { settings } from '../../settings'; import { isURL } from '../../utils/lib/isURL'; const request = HTTPInternals.NpmModules.request.module; @@ -59,7 +61,6 @@ const toUtf8 = function(contentType, body) { }; const getUrlContent = function(urlObj, redirectCount = 5, callback) { - if (_.isString(urlObj)) { urlObj = URL.parse(urlObj); } @@ -71,7 +72,7 @@ const getUrlContent = function(urlObj, redirectCount = 5, callback) { } const safePorts = settings.get('API_EmbedSafePorts').replace(/\s/g, '').split(',') || []; - if (parsedUrl.port && safePorts.length > 0 && (!safePorts.includes(parsedUrl.port))) { + if (parsedUrl.port && safePorts.length > 0 && !safePorts.includes(parsedUrl.port)) { return callback(); } @@ -128,7 +129,7 @@ const getUrlContent = function(urlObj, redirectCount = 5, callback) { }); })); return stream.on('error', function(err) { - return error = err; + error = err; }); }; @@ -156,24 +157,24 @@ OEmbed.getUrlMeta = function(url, withFragment) { let metas = undefined; if (content && content.body) { metas = {}; + const escapeMeta = (name, value) => { + metas[name] = metas[name] || he.unescape(value); + return metas[name]; + }; content.body.replace(/<title[^>]*>([^<]*)<\/title>/gmi, function(meta, title) { - return metas.pageTitle != null ? metas.pageTitle : metas.pageTitle = he.unescape(title); + return escapeMeta('pageTitle', title); }); content.body.replace(/<meta[^>]*(?:name|property)=[']([^']*)['][^>]*\scontent=[']([^']*)['][^>]*>/gmi, function(meta, name, value) { - let name1; - return metas[name1 = changeCase.camelCase(name)] != null ? metas[name1] : metas[name1] = he.unescape(value); + return escapeMeta(changeCase.camelCase(name), value); }); content.body.replace(/<meta[^>]*(?:name|property)=["]([^"]*)["][^>]*\scontent=["]([^"]*)["][^>]*>/gmi, function(meta, name, value) { - let name1; - return metas[name1 = changeCase.camelCase(name)] != null ? metas[name1] : metas[name1] = he.unescape(value); + return escapeMeta(changeCase.camelCase(name), value); }); content.body.replace(/<meta[^>]*\scontent=[']([^']*)['][^>]*(?:name|property)=[']([^']*)['][^>]*>/gmi, function(meta, value, name) { - let name1; - return metas[name1 = changeCase.camelCase(name)] != null ? metas[name1] : metas[name1] = he.unescape(value); + return escapeMeta(changeCase.camelCase(name), value); }); content.body.replace(/<meta[^>]*\scontent=["]([^"]*)["][^>]*(?:name|property)=["]([^"]*)["][^>]*>/gmi, function(meta, value, name) { - let name1; - return metas[name1 = changeCase.camelCase(name)] != null ? metas[name1] : metas[name1] = he.unescape(value); + return escapeMeta(changeCase.camelCase(name), value); }); if (metas.fragment === '!' && (withFragment == null)) { return OEmbed.getUrlMeta(url, true); @@ -261,17 +262,17 @@ OEmbed.rocketUrlParser = function(message) { const data = OEmbed.getUrlMetaWithCache(item.url); if (data != null) { if (data.attachments) { - return attachments = _.union(attachments, data.attachments); - } else { - if (data.meta != null) { - item.meta = getRelevantMetaTags(data.meta); - } - if (data.headers != null) { - item.headers = getRelevantHeaders(data.headers); - } - item.parsedUrl = data.parsedUrl; - return changed = true; + attachments = _.union(attachments, data.attachments); + return; + } + if (data.meta != null) { + item.meta = getRelevantMetaTags(data.meta); + } + if (data.headers != null) { + item.headers = getRelevantHeaders(data.headers); } + item.parsedUrl = data.parsedUrl; + changed = true; } }); if (attachments.length) { @@ -287,9 +288,8 @@ OEmbed.rocketUrlParser = function(message) { settings.get('API_Embed', function(key, value) { if (value) { return callbacks.add('afterSaveMessage', OEmbed.rocketUrlParser, callbacks.priority.LOW, 'API_Embed'); - } else { - return callbacks.remove('afterSaveMessage', 'API_Embed'); } + return callbacks.remove('afterSaveMessage', 'API_Embed'); }); export { OEmbed }; diff --git a/app/otr/client/rocketchat.otr.js b/app/otr/client/rocketchat.otr.js index 54d0882599765341b67f5672e71f6100b071ad61..e2f9645a2450742a41be2537dd764d685ebebffe 100644 --- a/app/otr/client/rocketchat.otr.js +++ b/app/otr/client/rocketchat.otr.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; + import { Subscriptions } from '../../models'; import { promises } from '../../promises/client'; import { Notifications } from '../../notifications'; @@ -46,9 +47,8 @@ Meteor.startup(function() { Notifications.onUser('otr', (type, data) => { if (!data.roomId || !data.userId || data.userId === Meteor.userId()) { return; - } else { - OTR.getInstanceByRoomId(data.roomId).onUserStream(type, data); } + OTR.getInstanceByRoomId(data.roomId).onUserStream(type, data); }); } }); @@ -61,9 +61,8 @@ Meteor.startup(function() { message.t = 'otr'; return message; }); - } else { - return Promise.resolve(message); } + return Promise.resolve(message); }, promises.priority.HIGH); promises.add('onClientMessageReceived', function(message) { @@ -71,42 +70,39 @@ Meteor.startup(function() { if (message.notification) { message.msg = t('Encrypted_message'); return Promise.resolve(message); - } else { - const otrRoom = OTR.getInstanceByRoomId(message.rid); - return otrRoom.decrypt(message.msg) - .then((data) => { - const { _id, text, ack } = data; - message._id = _id; - message.msg = text; + } + const otrRoom = OTR.getInstanceByRoomId(message.rid); + return otrRoom.decrypt(message.msg) + .then((data) => { + const { _id, text, ack } = data; + message._id = _id; + message.msg = text; - if (data.ts) { - message.ts = data.ts; - } + if (data.ts) { + message.ts = data.ts; + } - if (message.otrAck) { - return otrRoom.decrypt(message.otrAck) - .then((data) => { - if (ack === data.text) { - message.t = 'otr-ack'; - } - return message; - }); - } else if (data.userId !== Meteor.userId()) { - return otrRoom.encryptText(ack) - .then((ack) => { - Meteor.call('updateOTRAck', message._id, ack); - return message; - }); - } else { - return message; - } - }); - } - } else { - if (message.t === 'otr') { - message.msg = ''; - } - return Promise.resolve(message); + if (message.otrAck) { + return otrRoom.decrypt(message.otrAck) + .then((data) => { + if (ack === data.text) { + message.t = 'otr-ack'; + } + return message; + }); + } if (data.userId !== Meteor.userId()) { + return otrRoom.encryptText(ack) + .then((ack) => { + Meteor.call('updateOTRAck', message._id, ack); + return message; + }); + } + return message; + }); + } + if (message.t === 'otr') { + message.msg = ''; } + return Promise.resolve(message); }, promises.priority.HIGH); }); diff --git a/app/otr/client/rocketchat.otr.room.js b/app/otr/client/rocketchat.otr.room.js index 4383f1deb3a68e2e13bf07227e3602fff9d42afa..0a852d1eb638c6e65bfe0bd8d7d7da2be870b9a8 100644 --- a/app/otr/client/rocketchat.otr.room.js +++ b/app/otr/client/rocketchat.otr.room.js @@ -6,12 +6,13 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { TAPi18n } from 'meteor/tap:i18n'; import { TimeSync } from 'meteor/mizzao:timesync'; -import { Notifications } from '../../notifications'; -import { modal } from '../../ui-utils'; -import { OTR } from './rocketchat.otr'; import _ from 'underscore'; import toastr from 'toastr'; +import { OTR } from './rocketchat.otr'; +import { Notifications } from '../../notifications'; +import { modal } from '../../ui-utils'; + OTR.Room = class { constructor(userId, roomId) { this.userId = userId; diff --git a/app/otr/client/tabBar.js b/app/otr/client/tabBar.js index b5fa4bf30c80946e2a8543e454947f77837185c3..9df91860dd98079f60f6312798a1430aacc3b606 100644 --- a/app/otr/client/tabBar.js +++ b/app/otr/client/tabBar.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + +import { OTR } from './rocketchat.otr'; import { settings } from '../../settings'; import { TabBar } from '../../ui-utils'; -import { OTR } from './rocketchat.otr'; Meteor.startup(function() { Tracker.autorun(function() { diff --git a/app/otr/client/views/otrFlexTab.js b/app/otr/client/views/otrFlexTab.js index 09420e7ecccb6addb677c961df44b764ae1b48a7..f15f69e4b2048e121ac381f7f16254aa2c737875 100644 --- a/app/otr/client/views/otrFlexTab.js +++ b/app/otr/client/views/otrFlexTab.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { OTR } from '../rocketchat.otr'; import { modal } from '../../../ui-utils'; import { t } from '../../../utils'; diff --git a/app/otr/server/methods/deleteOldOTRMessages.js b/app/otr/server/methods/deleteOldOTRMessages.js index 6f560ba0fc06dfe318e3eb94f4efa83bcad08f8d..cce842e976ac3c9cd6664609e1ba4a2459f5af14 100644 --- a/app/otr/server/methods/deleteOldOTRMessages.js +++ b/app/otr/server/methods/deleteOldOTRMessages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions, Messages } from '../../../models'; Meteor.methods({ diff --git a/app/otr/server/methods/updateOTRAck.js b/app/otr/server/methods/updateOTRAck.js index fafb36fa3d248f9f6ee817ad8cd890b7b3d2c7ce..fc48adca642fd42e4c94d5aa2467424a4cd8d8d8 100644 --- a/app/otr/server/methods/updateOTRAck.js +++ b/app/otr/server/methods/updateOTRAck.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages } from '../../../models'; Meteor.methods({ diff --git a/app/push-notifications/client/tabBar.js b/app/push-notifications/client/tabBar.js index 41e728ac1a941fd655f6cb01a9434f267524e617..ed742ddb6857b734aeb959a427ead36031ac4c56 100644 --- a/app/push-notifications/client/tabBar.js +++ b/app/push-notifications/client/tabBar.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { TabBar } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/push-notifications/client/views/pushNotificationsFlexTab.js b/app/push-notifications/client/views/pushNotificationsFlexTab.js index f255ce84e67f821914b70feb7c76c21cdc43380c..ecae06e7c8446d0c39c91885f70cd186565c5c67 100644 --- a/app/push-notifications/client/views/pushNotificationsFlexTab.js +++ b/app/push-notifications/client/views/pushNotificationsFlexTab.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; import { getUserPreference, handleError, t } from '../../../utils'; import { popover } from '../../../ui-utils'; @@ -181,7 +182,6 @@ Template.pushNotificationsFlexTab.onCreated(function() { await call('saveNotificationSettings', rid, field, value); } this.original[field].set(this.form[field].get()); - }); }; }); @@ -323,7 +323,7 @@ Template.pushNotificationsFlexTab.events({ popoverClass: 'notifications-preferences', template: 'pushNotificationsPopover', data: { - change : (value) => instance.form[key].set(key === 'desktopNotificationDuration' ? parseInt(value) : value), + change: (value) => instance.form[key].set(key === 'desktopNotificationDuration' ? parseInt(value) : value), value: instance.form[key].get(), options, }, diff --git a/app/push-notifications/server/lib/PushNotification.js b/app/push-notifications/server/lib/PushNotification.js index c8195835ff55948bfd5f8f93fc26257bfa8175b7..fcc9b376d8859955abd0a8519ff143dcf48283d1 100644 --- a/app/push-notifications/server/lib/PushNotification.js +++ b/app/push-notifications/server/lib/PushNotification.js @@ -1,4 +1,5 @@ import { Push } from 'meteor/rocketchat:push'; + import { settings } from '../../../settings'; import { metrics } from '../../../metrics'; import { RocketChatAssets } from '../../../assets'; @@ -15,7 +16,7 @@ export class PushNotification { while (i) { hash = ((hash << 5) - hash) + str.charCodeAt(--i); - hash = hash & hash; // Convert to 32bit integer + hash &= hash; // Convert to 32bit integer } return hash; } diff --git a/app/push-notifications/server/methods/saveNotificationSettings.js b/app/push-notifications/server/methods/saveNotificationSettings.js index d63d9af941f31e9215d37e206a047b196cdc6335..3ddd80299e608e8cb5d77ea989f7c3ca7b601a5d 100644 --- a/app/push-notifications/server/methods/saveNotificationSettings.js +++ b/app/push-notifications/server/methods/saveNotificationSettings.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../../models'; import { getUserNotificationPreference } from '../../../utils'; diff --git a/app/reactions/client/init.js b/app/reactions/client/init.js index a896f59b2c9806890f8b024103dde1cfb6471fcb..942f61b80ff8fe6c990ca38e53fc83fa3369c12a 100644 --- a/app/reactions/client/init.js +++ b/app/reactions/client/init.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; + import { Rooms, Subscriptions } from '../../models'; import { MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; - import { EmojiPicker } from '../../emoji'; import { tooltip } from '../../tooltip'; @@ -13,7 +13,7 @@ Template.room.events({ event.preventDefault(); event.stopPropagation(); const data = Blaze.getData(event.currentTarget); - const { msg:{ rid, _id: mid } } = messageArgs(data); + const { msg: { rid, _id: mid } } = messageArgs(data); const user = Meteor.user(); const room = Rooms.findOne({ _id: rid }); @@ -30,7 +30,7 @@ Template.room.events({ event.preventDefault(); const data = Blaze.getData(event.currentTarget); - const { msg:{ _id: mid } } = messageArgs(data); + const { msg: { _id: mid } } = messageArgs(data); Meteor.call('setReaction', $(event.currentTarget).data('emoji'), mid, () => { tooltip.hide(); }); @@ -68,11 +68,11 @@ Meteor.startup(function() { if (!room) { return false; - } else if (Array.isArray(room.muted) && room.muted.indexOf(user.username) !== -1 && !room.reactWhenReadOnly) { + } if (Array.isArray(room.muted) && room.muted.indexOf(user.username) !== -1 && !room.reactWhenReadOnly) { return false; - } else if (!Subscriptions.findOne({ rid: message.rid })) { + } if (!Subscriptions.findOne({ rid: message.rid })) { return false; - } else if (message.private) { + } if (message.private) { return false; } diff --git a/app/reactions/client/methods/setReaction.js b/app/reactions/client/methods/setReaction.js index e411dcac92f0d0dc1f37377e87e5dadf46ff21c3..ea031039dafe614aab822d272e2d57aa3e6a0e91 100644 --- a/app/reactions/client/methods/setReaction.js +++ b/app/reactions/client/methods/setReaction.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Messages, Rooms, Subscriptions, EmojiCustom } from '../../../models'; import { callbacks } from '../../../callbacks'; import { emoji } from '../../../emoji'; -import _ from 'underscore'; Meteor.methods({ setReaction(reaction, messageId) { @@ -17,11 +18,11 @@ Meteor.methods({ if (Array.isArray(room.muted) && room.muted.indexOf(user.username) !== -1 && !room.reactWhenReadOnly) { return false; - } else if (!Subscriptions.findOne({ rid: message.rid })) { + } if (!Subscriptions.findOne({ rid: message.rid })) { return false; - } else if (message.private) { + } if (message.private) { return false; - } else if (!emoji.list[reaction] && EmojiCustom.findByNameOrAlias(reaction).count() === 0) { + } if (!emoji.list[reaction] && EmojiCustom.findByNameOrAlias(reaction).count() === 0) { return false; } @@ -54,7 +55,5 @@ Meteor.methods({ Messages.setReactions(messageId, message.reactions); callbacks.run('setReaction', messageId, reaction); } - - return; }, }); diff --git a/app/reactions/server/setReaction.js b/app/reactions/server/setReaction.js index 38cad11bc4bf4c1b6f6766da693c47dddb3a08e9..9a608de89345a0dc312479099da3f4477c496f3c 100644 --- a/app/reactions/server/setReaction.js +++ b/app/reactions/server/setReaction.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; + import { Messages, EmojiCustom, Subscriptions, Rooms } from '../../models'; import { Notifications } from '../../notifications'; import { callbacks } from '../../callbacks'; import { emoji } from '../../emoji'; import { isTheLastMessage, msgStream } from '../../lib'; -import _ from 'underscore'; const removeUserReaction = (message, reaction, username) => { message.reactions[reaction].usernames.splice(message.reactions[reaction].usernames.indexOf(username), 1); @@ -31,7 +32,7 @@ export function setReaction(room, user, message, reaction, shouldReact) { msg: TAPi18n.__('You_have_been_muted', {}, user.language), }); return false; - } else if (!Subscriptions.findOne({ rid: message.rid })) { + } if (!Subscriptions.findOne({ rid: message.rid })) { return false; } @@ -102,7 +103,5 @@ Meteor.methods({ } setReaction(room, user, message, reaction, shouldReact); - - return; }, }); diff --git a/app/retention-policy/server/cronPruneMessages.js b/app/retention-policy/server/cronPruneMessages.js index 3d057a6dd128c3dad81327ce295a0778b1cc1d0e..cccb3c1f52972f3a328ec96d27c83983a75c3526 100644 --- a/app/retention-policy/server/cronPruneMessages.js +++ b/app/retention-policy/server/cronPruneMessages.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; +import { SyncedCron } from 'meteor/littledata:synced-cron'; + import { settings } from '../../settings'; import { Rooms, Settings } from '../../models'; import { cleanRoomHistory } from '../../lib'; -import { SyncedCron } from 'meteor/littledata:synced-cron'; let types = []; @@ -36,7 +37,7 @@ function job() { { 'retention.enabled': { $exists: false } }, ], 'retention.overrideGlobal': { $ne: true }, - }, { fields : { _id: 1 } }).forEach(({ _id: rid }) => { + }, { fields: { _id: 1 } }).forEach(({ _id: rid }) => { cleanRoomHistory({ rid, latest, oldest, filesOnly, excludePinned, ignoreDiscussion }); }); }); diff --git a/app/retention-policy/server/startup/settings.js b/app/retention-policy/server/startup/settings.js index 2280709c4a42a6d5edb4db64c7c503ca59cd4396..b6b7946a6d6978f69ce9f09059bacb6e8319e25c 100644 --- a/app/retention-policy/server/startup/settings.js +++ b/app/retention-policy/server/startup/settings.js @@ -1,7 +1,6 @@ import { settings } from '../../../settings'; settings.addGroup('RetentionPolicy', function() { - this.add('RetentionPolicy_Enabled', false, { type: 'boolean', public: true, diff --git a/app/search/client/provider/result.js b/app/search/client/provider/result.js index 5a477adb179268a3dd577fefd00a4778751fca24..aa64d32da6bacc4039cf75d0b1947ce90f68f9ce 100644 --- a/app/search/client/provider/result.js +++ b/app/search/client/provider/result.js @@ -3,12 +3,11 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; +import _ from 'underscore'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; import { MessageAction, RoomHistoryManager } from '../../../ui-utils'; - import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; -import _ from 'underscore'; Meteor.startup(function() { MessageAction.addButton({ @@ -64,7 +63,6 @@ Template.DefaultSearchResultTemplate.events({ t.data.payload.limit = t.pageSize; t.data.result.set(undefined); t.data.search(); - }, 'scroll .rocket-default-search-results': _.throttle(function(e, t) { if (e.target.scrollTop >= (e.target.scrollHeight - e.target.clientHeight) && t.hasMore.get()) { diff --git a/app/search/client/search/search.js b/app/search/client/search/search.js index 22be63831ccc8364e57cd15780cd5d362e17b03c..7e1d475e78ba4e34b0babc99a5b4814fc6dd7eee 100644 --- a/app/search/client/search/search.js +++ b/app/search/client/search/search.js @@ -7,7 +7,6 @@ import toastr from 'toastr'; import _ from 'underscore'; Template.RocketSearch.onCreated(function() { - this.provider = new ReactiveVar(); this.isActive = new ReactiveVar(false); this.error = new ReactiveVar(); @@ -25,14 +24,12 @@ Template.RocketSearch.onCreated(function() { }); const _search = () => { - const _p = Object.assign({}, this.scope.parentPayload, this.scope.payload); if (this.scope.text.get()) { - this.scope.searching.set(true); - Meteor.call('rocketchatSearch.search', this.scope.text.get(), { rid:Session.get('openedRoom'), uid:Meteor.userId() }, _p, (err, result) => { + Meteor.call('rocketchatSearch.search', this.scope.text.get(), { rid: Session.get('openedRoom'), uid: Meteor.userId() }, _p, (err, result) => { if (err) { toastr.error(TAPi18n.__('Search_message_search_failed')); this.scope.searching.set(false); @@ -66,7 +63,7 @@ Template.RocketSearch.onCreated(function() { const _p = Object.assign({}, this.scope.parentPayload, this.scope.payload); - Meteor.call('rocketchatSearch.suggest', value, { rid:Session.get('openedRoom'), uid:Meteor.userId() }, this.scope.parentPayload, _p, (err, result) => { + Meteor.call('rocketchatSearch.suggest', value, { rid: Session.get('openedRoom'), uid: Meteor.userId() }, this.scope.parentPayload, _p, (err, result) => { if (err) { // TODO what should happen } else { @@ -77,7 +74,6 @@ Template.RocketSearch.onCreated(function() { } }); }; - }); Template.RocketSearch.events = { @@ -104,17 +100,15 @@ Template.RocketSearch.events = { const suggestionActive = t.suggestionActive.get(); if (evt.keyCode === 40 && suggestions) { - t.suggestionActive.set((suggestionActive !== undefined && suggestionActive < suggestions.length - 1) ? suggestionActive + 1 : 0); + t.suggestionActive.set(suggestionActive !== undefined && suggestionActive < suggestions.length - 1 ? suggestionActive + 1 : 0); return; } if (evt.keyCode === 38 && suggestions) { - t.suggestionActive.set((suggestionActive !== undefined && suggestionActive === 0) ? suggestions.length - 1 : suggestionActive - 1); - return; + t.suggestionActive.set(suggestionActive !== undefined && suggestionActive === 0 ? suggestions.length - 1 : suggestionActive - 1); } }, 'keyup #message-search': _.debounce(function(evt, t) { - if (evt.keyCode === 13) { return evt.preventDefault(); } @@ -130,7 +124,6 @@ Template.RocketSearch.events = { } else { t.suggest(value); } - return; }, 300), 'click .rocket-search-suggestion-item'(e, t) { if (this.action) { @@ -189,4 +182,3 @@ Template.RocketSearch.onRendered(function() { Template.RocketSearch.onDestroyed(function() { $(document).off(`click.suggestionclose.${ this.data.rid }`); }); - diff --git a/app/search/server/events/events.js b/app/search/server/events/events.js index b739b81ddf62ff3a1f362c63854c0c5a05676e63..82fac3527e87c55416382b224af59a21a98bf0e6 100644 --- a/app/search/server/events/events.js +++ b/app/search/server/events/events.js @@ -4,7 +4,6 @@ import { searchProviderService } from '../service/providerService'; import SearchLogger from '../logger/logger'; class EventService { - /* eslint no-unused-vars: [2, { "args": "none" }]*/ _pushError(name, value, payload) { // TODO implement a (performant) cache diff --git a/app/search/server/index.js b/app/search/server/index.js index 12edd159209c666935b74f3e01ac9ae244a54388..e0fd6273a183258f1138944c96458e990119b60f 100644 --- a/app/search/server/index.js +++ b/app/search/server/index.js @@ -5,7 +5,6 @@ import './events/events.js'; import './provider/defaultProvider.js'; - export { searchProviderService, SearchProvider, diff --git a/app/search/server/model/provider.js b/app/search/server/model/provider.js index 6e8c8716f91a37974cf2aabd0b27c95ad38d7835..84f5c85e4970581b6480e9d6458d285ccfbafe47 100644 --- a/app/search/server/model/provider.js +++ b/app/search/server/model/provider.js @@ -32,7 +32,6 @@ class Setting { if (this._value === undefined) { this._value = this.defaultValue; } } - } /** @@ -76,13 +75,11 @@ class Settings { } export default class SearchProvider { - /** * Create search provider, key must match /^[a-z0-9]+$/ * @param key */ constructor(key) { - if (!key.match(/^[A-z0-9]+$/)) { throw new Error(`cannot instantiate provider: ${ key } does not match key-pattern`); } SearchLogger.info(`create search provider ${ key }`); @@ -174,4 +171,3 @@ export default class SearchProvider { resolve(); } } - diff --git a/app/search/server/provider/defaultProvider.js b/app/search/server/provider/defaultProvider.js index 2b28cc6cbbc04a8a7e6fe545c3e74ce52e4db623..2a731bb86568cee40053101265bc9912ea202b16 100644 --- a/app/search/server/provider/defaultProvider.js +++ b/app/search/server/provider/defaultProvider.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { searchProviderService } from '../service/providerService'; import SearchProvider from '../model/provider'; @@ -6,7 +7,6 @@ import SearchProvider from '../model/provider'; * Implements the default provider (based on mongo db search) */ class DefaultProvider extends SearchProvider { - /** * Enable settings: GlobalSearchEnabled, PageSize */ @@ -34,13 +34,11 @@ class DefaultProvider extends SearchProvider { * Uses Meteor function 'messageSearch' */ search(text, context, payload = {}, callback) { - const _rid = payload.searchAll ? undefined : context.rid; const _limit = payload.limit || this._settings.get('PageSize'); Meteor.call('messageSearch', text, _rid, _limit, callback); - } } diff --git a/app/search/server/service/providerService.js b/app/search/server/service/providerService.js index 04ee935f8b8181e8280f99b8ae0a9fd5fe2b12bc..ac913f8cfb462ffbdbd58afea086e014fd01aed2 100644 --- a/app/search/server/service/providerService.js +++ b/app/search/server/service/providerService.js @@ -1,11 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; import _ from 'underscore'; + import { validationService } from './validationService'; +import { settings } from '../../../settings'; import SearchLogger from '../logger/logger'; class SearchProviderService { - constructor() { this.providers = {}; this.activeProvider = undefined; @@ -17,7 +17,6 @@ class SearchProviderService { * @param cb a possible callback if provider is active or not (currently not in use) */ use(id) { - return new Promise((resolve, reject) => { if (!this.providers[id]) { throw new Error(`provider ${ id } cannot be found`); } @@ -31,7 +30,6 @@ class SearchProviderService { const stopProvider = () => new Promise((resolve, reject) => { if (this.activeProvider) { - SearchLogger.debug(`Stopping provider '${ this.activeProvider.key }'`); this.activeProvider.stop(resolve, reject); @@ -46,19 +44,15 @@ class SearchProviderService { SearchLogger.debug(`Start provider '${ id }'`); try { - this.providers[id].run(reason).then(() => { this.activeProvider = this.providers[id]; resolve(); }, reject); - } catch (e) { reject(e); } }, reject); - }); - } /** @@ -79,7 +73,6 @@ class SearchProviderService { // add settings for admininistration settings.addGroup('Search', function() { - const self = this; self.add('Search.Provider', 'defaultProvider', { @@ -94,7 +87,6 @@ class SearchProviderService { .forEach(function(key) { self.section(providers[key].i18nLabel, function() { providers[key].settings.forEach((setting) => { - const _options = { type: setting.type, ...setting.options, @@ -120,12 +112,10 @@ class SearchProviderService { if (providerId) { this.use(providerId);// TODO do something with success and errors } - }), 1000); settings.get(/^Search\./, configProvider); } - } export const searchProviderService = new SearchProviderService(); @@ -144,13 +134,10 @@ Meteor.methods({ * @returns {*} */ 'rocketchatSearch.search'(text, context, payload) { - return new Promise((resolve, reject) => { - payload = payload !== null ? payload : undefined;// TODO is this cleanup necessary? try { - if (!searchProviderService.activeProvider) { throw new Error('Provider currently not active'); } @@ -170,12 +157,10 @@ Meteor.methods({ }); }, 'rocketchatSearch.suggest'(text, context, payload) { - return new Promise((resolve, reject) => { payload = payload !== null ? payload : undefined;// TODO is this cleanup necessary? try { - if (!searchProviderService.activeProvider) { throw new Error('Provider currently not active'); } SearchLogger.debug('suggest: ', `\n\tText:${ text }\n\tContext:${ JSON.stringify(context) }\n\tPayload:${ JSON.stringify(payload) }`); @@ -210,4 +195,3 @@ Meteor.methods({ }; }, }); - diff --git a/app/search/server/service/validationService.js b/app/search/server/service/validationService.js index a872eda5056ba1a49a452d92f701102202aab4e5..fb3c1dd4674652ecc5306876430379a70a610122 100644 --- a/app/search/server/service/validationService.js +++ b/app/search/server/service/validationService.js @@ -1,12 +1,10 @@ import { Meteor } from 'meteor/meteor'; + import SearchLogger from '../logger/logger'; import { Users } from '../../../models'; class ValidationService { - constructor() {} - validateSearchResult(result) { - const subscriptionCache = {}; const getSubscription = (rid, uid) => { @@ -34,7 +32,6 @@ class ValidationService { // get subscription for message if (result.message) { result.message.docs.forEach((msg) => { - const subscription = getSubscription(msg.rid, uid); if (subscription) { diff --git a/app/settings/client/lib/settings.js b/app/settings/client/lib/settings.js index 3e49f44a826113ab4df1c86f02004c19496a7466..2ad2d4954f2178b18b39a582c67c6cdf2173a017 100644 --- a/app/settings/client/lib/settings.js +++ b/app/settings/client/lib/settings.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveDict } from 'meteor/reactive-dict'; + import { CachedCollection } from '../../../ui-cached-collection'; import { settings } from '../../lib/settings'; diff --git a/app/settings/lib/settings.js b/app/settings/lib/settings.js index ee0bfe604e8699fa2b6e0a2a31cc7d18360a775b..ab5595f90ac93f966cc70e3f81546132e06fa3c2 100644 --- a/app/settings/lib/settings.js +++ b/app/settings/lib/settings.js @@ -4,7 +4,7 @@ import _ from 'underscore'; export const settings = { callbacks: {}, regexCallbacks: {}, - ts: new Date, + ts: new Date(), get(_id, callback) { if (callback != null) { settings.onload(_id, callback); @@ -27,24 +27,23 @@ export const settings = { }); } return Meteor.settings[_id] != null && callback(_id, Meteor.settings[_id]); - } else { - if (!Meteor.settings) { - return; - } - if (_.isRegExp(_id)) { - return Object.keys(Meteor.settings).reduce((items, key) => { - const value = Meteor.settings[key]; - if (_id.test(key)) { - items.push({ - key, - value, - }); - } - return items; - }, []); - } - return Meteor.settings && Meteor.settings[_id]; } + if (!Meteor.settings) { + return; + } + if (_.isRegExp(_id)) { + return Object.keys(Meteor.settings).reduce((items, key) => { + const value = Meteor.settings[key]; + if (_id.test(key)) { + items.push({ + key, + value, + }); + } + return items; + }, []); + } + return Meteor.settings && Meteor.settings[_id]; }, set(_id, value, callback) { return Meteor.call('saveSetting', _id, value, callback); diff --git a/app/settings/server/functions/settings.js b/app/settings/server/functions/settings.js index a0a53a69ceba2799d6391a8bfd18484b7c8e49e8..7fdebdcc58218a47275b0e4ed5de114371a7582d 100644 --- a/app/settings/server/functions/settings.js +++ b/app/settings/server/functions/settings.js @@ -1,17 +1,18 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { settings } from '../../lib/settings'; import Settings from '../../../models/server/models/Settings'; -import _ from 'underscore'; const blockedSettings = {}; if (process.env.SETTINGS_BLOCKED) { - process.env.SETTINGS_BLOCKED.split(',').forEach((settingId) => blockedSettings[settingId] = 1); + process.env.SETTINGS_BLOCKED.split(',').forEach((settingId) => { blockedSettings[settingId] = 1; }); } const hiddenSettings = {}; if (process.env.SETTINGS_HIDDEN) { - process.env.SETTINGS_HIDDEN.split(',').forEach((settingId) => hiddenSettings[settingId] = 1); + process.env.SETTINGS_HIDDEN.split(',').forEach((settingId) => { hiddenSettings[settingId] = 1; }); } settings._sorter = {}; @@ -98,7 +99,7 @@ settings.add = function(_id, value, options = {}) { const updateOperations = { $set: options, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }; if (options.editor != null) { @@ -130,7 +131,7 @@ settings.add = function(_id, value, options = {}) { delete updateOperations.$setOnInsert.editor; } } else { - updateOperations.$set.ts = new Date; + updateOperations.$set.ts = new Date(); } return Settings.upsert({ _id, @@ -157,7 +158,7 @@ settings.addGroup = function(_id, options = {}, cb) { if (options.i18nDescription == null) { options.i18nDescription = `${ _id }_Description`; } - options.ts = new Date; + options.ts = new Date(); options.blocked = false; options.hidden = false; if (blockedSettings[_id] != null) { @@ -172,7 +173,7 @@ settings.addGroup = function(_id, options = {}, cb) { $set: options, $setOnInsert: { type: 'group', - createdAt: new Date, + createdAt: new Date(), }, }); if (cb != null) { diff --git a/app/setup-wizard/client/final.js b/app/setup-wizard/client/final.js index a0de3155524c139c7a1b6d4a31a069666db0dd0e..24dacde539be33724a6ed092aeb1992e1cf9e0a2 100644 --- a/app/setup-wizard/client/final.js +++ b/app/setup-wizard/client/final.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { settings } from '../../settings'; import { Users } from '../../models'; import { hasRole } from '../../authorization'; @@ -32,7 +33,6 @@ Template.setupWizardFinal.onCreated(function() { const userIsLoggedButIsNotAdmin = userId && !hasRole(userId, 'admin'); if (isComplete || noUserLoggedInAndIsNotPending || userIsLoggedButIsNotAdmin) { FlowRouter.go('home'); - return; } }); }); diff --git a/app/setup-wizard/client/setupWizard.js b/app/setup-wizard/client/setupWizard.js index 0d6d8dd1e32b8949783c9aedff599d05e533bea4..9cebce0ebed94de88ae7c1a53de8c0be338adcd0 100644 --- a/app/setup-wizard/client/setupWizard.js +++ b/app/setup-wizard/client/setupWizard.js @@ -5,12 +5,13 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { settings } from '../../settings'; import { callbacks } from '../../callbacks'; import { hasRole } from '../../authorization'; import { Users } from '../../models'; import { t, handleError } from '../../utils'; -import toastr from 'toastr'; const cannotSetup = () => { const showSetupWizard = settings.get('Show_Setup_Wizard'); @@ -36,7 +37,7 @@ const cannotSetup = () => { const registerAdminUser = (state, callback) => { const registrationData = Object.entries(state) .filter(([key]) => /registration-/.test(key)) - .map(([key, value]) => ([key.replace('registration-', ''), value])) + .map(([key, value]) => [key.replace('registration-', ''), value]) .reduce((o, [key, value]) => ({ ...o, [key]: value }), {}); Meteor.call('registerUser', registrationData, (error) => { @@ -50,9 +51,8 @@ const registerAdminUser = (state, callback) => { if (error.error === 'error-invalid-email') { toastr.success(t('We_have_sent_registration_email')); return false; - } else { - return handleError(error); } + return handleError(error); } Session.set('forceLogin', false); @@ -344,19 +344,19 @@ Template.setupWizard.helpers({ label: i18nLabel, value: t.state.get(_id), options: ( - type === 'select' && - values && - values.map(({ i18nLabel, key }) => ({ optionLabel: i18nLabel, optionValue: key })) + type === 'select' + && values + && values.map(({ i18nLabel, key }) => ({ optionLabel: i18nLabel, optionValue: key })) ) || ( - type === 'language' && - ([{ + type === 'language' + && [{ optionLabel: 'Default', optionValue: '', }].concat( Object.entries(TAPi18n.getLanguages()) .map(([key, { name }]) => ({ optionLabel: name, optionValue: key })) .sort((a, b) => a.key - b.key) - )) + ) ), isValueSelected: (value) => value === t.state.get(_id), })), diff --git a/app/setup-wizard/server/getSetupWizardParameters.js b/app/setup-wizard/server/getSetupWizardParameters.js index 9124d6ed16d647a4c2f6a3f4202e1f4feec2747f..b2a178e4be3c777b9a4d52091835a7b178ecb7d6 100644 --- a/app/setup-wizard/server/getSetupWizardParameters.js +++ b/app/setup-wizard/server/getSetupWizardParameters.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasRole } from '../../authorization'; import { Settings } from '../../models'; diff --git a/app/slackbridge/server/RocketAdapter.js b/app/slackbridge/server/RocketAdapter.js index bb395160dd823d9b461ee5401449b86f79f7e76d..bc1d730663c419a910a63d222f6599ed732f1a00 100644 --- a/app/slackbridge/server/RocketAdapter.js +++ b/app/slackbridge/server/RocketAdapter.js @@ -1,13 +1,15 @@ -import _ from 'underscore'; import util from 'util'; + +import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; + +import { logger } from './logger'; import { callbacks } from '../../callbacks'; import { settings } from '../../settings'; import { Messages, Rooms, Users } from '../../models'; import { createRoom, sendMessage, setUserAvatar } from '../../lib'; -import { logger } from './logger'; export default class RocketAdapter { constructor(slackBridge) { @@ -84,7 +86,7 @@ export default class RocketAdapter { if (rocketMsg) { this.slackAdapters.forEach((slack) => { const slackChannel = slack.getSlackChannel(rocketMsg.rid); - if (null != slackChannel) { + if (slackChannel != null) { const slackTS = slack.getTimeStamp(rocketMsg); slack.postReactionAdded(reaction.replace(/:/g, ''), slackChannel.id, slackTS); } @@ -151,7 +153,6 @@ export default class RocketAdapter { // A new message from Rocket.Chat this.processSendMessage(rocketMessage, slack); - } catch (err) { logger.rocket.error('Unhandled error onMessage', err); } @@ -299,9 +300,8 @@ export default class RocketAdapter { // If first time trying to create channel fails, could be because of multiple messages received at the same time. Try again once after 1s. Meteor._sleepForMs(1000); return this.findChannel(slackChannelID) || this.addChannel(slackChannelID, true); - } else { - console.log(e.message); } + console.log(e.message); } const roomUpdate = { @@ -522,5 +522,4 @@ export default class RocketAdapter { } return slackMsgTxt; } - } diff --git a/app/slackbridge/server/SlackAPI.js b/app/slackbridge/server/SlackAPI.js index a4825cfd05aec12dc687e9732d335e9bf3d04316..a09af11c8e82e2720ece1ce5b8a6d0c50a3ec4fa 100644 --- a/app/slackbridge/server/SlackAPI.js +++ b/app/slackbridge/server/SlackAPI.js @@ -1,7 +1,6 @@ import { HTTP } from 'meteor/http'; export class SlackAPI { - constructor(apiToken) { this.apiToken = apiToken; } @@ -114,5 +113,4 @@ export class SlackAPI { }); return response && response.data && response.statusCode === 200 && response.data.ok && response.data.user; } - } diff --git a/app/slackbridge/server/SlackAdapter.js b/app/slackbridge/server/SlackAdapter.js index 46fa69f694c62511751fd77a168e7bd8d6fffacb..7874a780b69fcf3031aa53cb69fdae4fb50b2f54 100644 --- a/app/slackbridge/server/SlackAdapter.js +++ b/app/slackbridge/server/SlackAdapter.js @@ -1,8 +1,12 @@ import url from 'url'; import http from 'http'; import https from 'https'; + import { RTMClient } from '@slack/client'; import { Meteor } from 'meteor/meteor'; + +import { logger } from './logger'; +import { SlackAPI } from './SlackAPI'; import { getUserAvatarURL } from '../../utils/lib/getUserAvatarURL'; import { Messages, Rooms, Users } from '../../models'; import { settings } from '../../settings'; @@ -17,11 +21,8 @@ import { } from '../../lib'; import { saveRoomName, saveRoomTopic } from '../../channel-settings'; import { FileUpload } from '../../file-upload'; -import { logger } from './logger'; -import { SlackAPI } from './SlackAPI'; export default class SlackAdapter { - constructor(slackBridge) { logger.slack.debug('constructor'); this.slackBridge = slackBridge; @@ -200,8 +201,6 @@ export default class SlackAdapter { logger.slack.error('Unhandled error onChannelLeft', err); } } - - })); /** @@ -506,7 +505,7 @@ export default class SlackAdapter { */ addSlackChannel(rocketChID, slackChID) { const ch = this.getSlackChannel(rocketChID); - if (null == ch) { + if (ch == null) { this.slackChannelRocketBotMembershipMap.set(rocketChID, { id: slackChID, family: slackChID.charAt(0) === 'C' ? 'channels' : 'groups' }); } } @@ -711,7 +710,7 @@ export default class SlackAdapter { processChannelJoin(slackMessage) { logger.slack.debug('Channel join', slackMessage.channel.id); const rocketCh = this.rocket.addChannel(slackMessage.channel); - if (null != rocketCh) { + if (rocketCh != null) { this.addSlackChannel(rocketCh._id, slackMessage.channel); } } @@ -955,10 +954,10 @@ export default class SlackAdapter { username: rocketUser.username, }, attachments: [{ - text : this.rocket.convertSlackMsgTxtToRocketTxtFormat(slackMessage.attachments[0].text), - author_name : slackMessage.attachments[0].author_subname, - author_icon : getUserAvatarURL(slackMessage.attachments[0].author_subname), - ts : new Date(parseInt(slackMessage.attachments[0].ts.split('.')[0]) * 1000), + text: this.rocket.convertSlackMsgTxtToRocketTxtFormat(slackMessage.attachments[0].text), + author_name: slackMessage.attachments[0].author_subname, + author_icon: getUserAvatarURL(slackMessage.attachments[0].author_subname), + ts: new Date(parseInt(slackMessage.attachments[0].ts.split('.')[0]) * 1000), }], }; @@ -967,9 +966,8 @@ export default class SlackAdapter { } return rocketMsgObj; - } else { - logger.slack.error('Pinned item with no attachment'); } + logger.slack.error('Pinned item with no attachment'); } processSubtypedMessage(rocketChannel, rocketUser, slackMessage, isImporting) { @@ -1018,7 +1016,6 @@ export default class SlackAdapter { return this.processPinnedItemMessage(rocketChannel, rocketUser, slackMessage, isImporting); case 'unpinned_item': logger.slack.error('Unpinned item not implemented'); - return; } } @@ -1166,10 +1163,10 @@ export default class SlackAdapter { username: user.username, }, attachments: [{ - text : this.rocket.convertSlackMsgTxtToRocketTxtFormat(pin.message.text), - author_name : user.username, - author_icon : getUserAvatarURL(user.username), - ts : new Date(parseInt(pin.message.ts.split('.')[0]) * 1000), + text: this.rocket.convertSlackMsgTxtToRocketTxtFormat(pin.message.text), + author_name: user.username, + author_icon: getUserAvatarURL(user.username), + ts: new Date(parseInt(pin.message.ts.split('.')[0]) * 1000), }], }; @@ -1196,21 +1193,16 @@ export default class SlackAdapter { this.copyPins(rid, this.getSlackChannel(rid)); return callback(); - } else { - const slack_room = this.postFindChannel(rocketchat_room.name); - if (slack_room) { - this.addSlackChannel(rid, slack_room.id); - return this.importMessages(rid, callback); - } else { - logger.slack.error('Could not find Slack room with specified name', rocketchat_room.name); - return callback(new Meteor.Error('error-slack-room-not-found', 'Could not find Slack room with specified name')); - } } - } else { - logger.slack.error('Could not find Rocket.Chat room with specified id', rid); - return callback(new Meteor.Error('error-invalid-room', 'Invalid room')); + const slack_room = this.postFindChannel(rocketchat_room.name); + if (slack_room) { + this.addSlackChannel(rid, slack_room.id); + return this.importMessages(rid, callback); + } + logger.slack.error('Could not find Slack room with specified name', rocketchat_room.name); + return callback(new Meteor.Error('error-slack-room-not-found', 'Could not find Slack room with specified name')); } + logger.slack.error('Could not find Rocket.Chat room with specified id', rid); + return callback(new Meteor.Error('error-invalid-room', 'Invalid room')); } - } - diff --git a/app/slackbridge/server/settings.js b/app/slackbridge/server/settings.js index 06421b512631f7384cf4039d1aff30e234e51419..9a93cab2132e35efd201c2dfb49056e16a3daf3a 100644 --- a/app/slackbridge/server/settings.js +++ b/app/slackbridge/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/slackbridge/server/slackbridge.js b/app/slackbridge/server/slackbridge.js index 953453b874bec4b5999e9383290b448efa717f27..0c3e7b9e6d4239a7d508e9f429effbc5a6e05e6c 100644 --- a/app/slackbridge/server/slackbridge.js +++ b/app/slackbridge/server/slackbridge.js @@ -1,13 +1,12 @@ -import { settings } from '../../settings'; import SlackAdapter from './SlackAdapter.js'; import RocketAdapter from './RocketAdapter.js'; import { logger } from './logger'; +import { settings } from '../../settings'; /** * SlackBridge interfaces between this Rocket installation and a remote Slack installation. */ class SlackBridgeClass { - constructor() { this.slackAdapters = []; this.rocket = new RocketAdapter(this); @@ -105,4 +104,4 @@ class SlackBridgeClass { } } -export const SlackBridge = new SlackBridgeClass; +export const SlackBridge = new SlackBridgeClass(); diff --git a/app/slackbridge/server/slackbridge_import.server.js b/app/slackbridge/server/slackbridge_import.server.js index 5693839cfc5013da5547d948aa2bf9958587c20e..3c5e29f03ca9d14ca7dd075b6ddc21d82c029597 100644 --- a/app/slackbridge/server/slackbridge_import.server.js +++ b/app/slackbridge/server/slackbridge_import.server.js @@ -2,10 +2,11 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + +import { SlackBridge } from './slackbridge'; import { Rooms } from '../../models'; import { msgStream } from '../../lib'; import { slashCommands } from '../../utils'; -import { SlackBridge } from './slackbridge'; function SlackBridgeImport(command, params, item) { if (command !== 'slackbridge-import' || !Match.test(params, String)) { diff --git a/app/slashcommand-asciiarts/lib/gimme.js b/app/slashcommand-asciiarts/lib/gimme.js index 1b0ece10ed9426e784b5219d4da268bbf4edb59d..d37d2a60ddaaae96438673ab9700d02f3a01c2c6 100644 --- a/app/slashcommand-asciiarts/lib/gimme.js +++ b/app/slashcommand-asciiarts/lib/gimme.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../utils'; /* * Gimme is a named function that will replace /gimme commands diff --git a/app/slashcommand-asciiarts/lib/lenny.js b/app/slashcommand-asciiarts/lib/lenny.js index 59f39c8c756a7ba1cbc2ffeff11abd868ca15a5e..fc77875bf20a4efdfa5fe2a99b7b62e4d042df54 100644 --- a/app/slashcommand-asciiarts/lib/lenny.js +++ b/app/slashcommand-asciiarts/lib/lenny.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../utils'; /* * Lenny is a named function that will replace /lenny commands diff --git a/app/slashcommand-asciiarts/lib/shrug.js b/app/slashcommand-asciiarts/lib/shrug.js index 776f99577e3cbc7bea817ef612fdbd45ffc94778..6179f9e2f9b109de441a869946551fae0edea13d 100644 --- a/app/slashcommand-asciiarts/lib/shrug.js +++ b/app/slashcommand-asciiarts/lib/shrug.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../utils'; /* * Shrug is a named function that will replace /shrug commands diff --git a/app/slashcommand-asciiarts/lib/tableflip.js b/app/slashcommand-asciiarts/lib/tableflip.js index fc054e18b5889fdf61da9dc5bcd2b1fbb5a810e8..a41c416aab6d5429172d996524fa299b18f5d8c5 100644 --- a/app/slashcommand-asciiarts/lib/tableflip.js +++ b/app/slashcommand-asciiarts/lib/tableflip.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../utils'; /* * Tableflip is a named function that will replace /Tableflip commands diff --git a/app/slashcommand-asciiarts/lib/unflip.js b/app/slashcommand-asciiarts/lib/unflip.js index 0cc6c3c47e2f3c688e75799308b2904f6273cdd3..ceaec3c18cf8954ffa3126cdc52159f2c4173f76 100644 --- a/app/slashcommand-asciiarts/lib/unflip.js +++ b/app/slashcommand-asciiarts/lib/unflip.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { slashCommands } from '../../utils'; /* * Unflip is a named function that will replace /unflip commands diff --git a/app/slashcommands-archiveroom/server/server.js b/app/slashcommands-archiveroom/server/server.js index f4da898c8db8197bc8f1ed90f5603d3593665bd7..493c4a0d35d3b36694ebc443113f56c9be603abc 100644 --- a/app/slashcommands-archiveroom/server/server.js +++ b/app/slashcommands-archiveroom/server/server.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Messages } from '../../models'; import { slashCommands } from '../../utils'; import { Notifications } from '../../notifications'; diff --git a/app/slashcommands-create/server/server.js b/app/slashcommands-create/server/server.js index a3fb8fe3b713d9ee889f2929be4baa9d909152de..619a19f2f75af00209543e0ee9d2ee03579f03a4 100644 --- a/app/slashcommands-create/server/server.js +++ b/app/slashcommands-create/server/server.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../settings'; import { Notifications } from '../../notifications'; import { Rooms } from '../../models'; diff --git a/app/slashcommands-help/server/server.js b/app/slashcommands-help/server/server.js index a8773215e79ba72f65928967b9c0a5aee31d4ef6..85f9c55bd541b63289ea089c31ff80cff3c051d4 100644 --- a/app/slashcommands-help/server/server.js +++ b/app/slashcommands-help/server/server.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { slashCommands } from '../../utils'; import { Notifications } from '../../notifications'; @@ -41,14 +42,13 @@ slashCommands.add('help', function Help(command, params, item) { Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__(Object.keys(key)[0], { postProcess: 'sprintf', sprintf: [key[Object.keys(key)[0]]], }, user.language), }); }); - }, { description: 'Show_the_keyboard_shortcut_list', }); diff --git a/app/slashcommands-hide/server/hide.js b/app/slashcommands-hide/server/hide.js index 20940e37dcc4655a643fd2eda44c28cf12f32720..00e0ab82a9c917d30d48af570be439c5175b7092 100644 --- a/app/slashcommands-hide/server/hide.js +++ b/app/slashcommands-hide/server/hide.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Subscriptions } from '../../models'; import { Notifications } from '../../notifications'; import { slashCommands } from '../../utils'; @@ -31,7 +32,7 @@ function Hide(command, param, item) { return Notifications.notifyUser(user._id, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Channel_doesnt_exist', { postProcess: 'sprintf', sprintf: [room], @@ -43,7 +44,7 @@ function Hide(command, param, item) { return Notifications.notifyUser(user._id, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('error-logged-user-not-in-room', { postProcess: 'sprintf', sprintf: [room], @@ -58,7 +59,7 @@ function Hide(command, param, item) { return Notifications.notifyUser(user._id, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__(error, null, user.language), }); } diff --git a/app/slashcommands-invite/server/server.js b/app/slashcommands-invite/server/server.js index ceb5646264574da8d4c7a8e6332fd895ec90f7b3..cc68561dc3f094015abbbab39accd14b5fac2a4f 100644 --- a/app/slashcommands-invite/server/server.js +++ b/app/slashcommands-invite/server/server.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Notifications } from '../../notifications'; import { slashCommands } from '../../utils'; import { Subscriptions } from '../../models'; @@ -13,7 +14,6 @@ import { Subscriptions } from '../../models'; function Invite(command, params, item) { - if (command !== 'invite' || !Match.test(params, String)) { return; } @@ -33,7 +33,7 @@ function Invite(command, params, item) { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('User_doesnt_exist', { postProcess: 'sprintf', sprintf: [usernames.join(' @')], @@ -49,7 +49,7 @@ function Invite(command, params, item) { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_is_already_in_here', { postProcess: 'sprintf', sprintf: [user.username], @@ -59,7 +59,6 @@ function Invite(command, params, item) { }); users.forEach(function(user) { - try { return Meteor.call('addUserToRoom', { rid: item.rid, @@ -70,14 +69,14 @@ function Invite(command, params, item) { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Cannot_invite_users_to_direct_rooms', null, currentUser.language), }); } else { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__(error, null, currentUser.language), }); } diff --git a/app/slashcommands-inviteall/server/server.js b/app/slashcommands-inviteall/server/server.js index f6e3fa6076ba94462ac9b3b2e5d76de82ece2bc7..97a63d8fea28b6d389ca6d559c0360b784d66a67 100644 --- a/app/slashcommands-inviteall/server/server.js +++ b/app/slashcommands-inviteall/server/server.js @@ -6,6 +6,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Subscriptions } from '../../models'; import { slashCommands } from '../../utils'; import { settings } from '../../settings'; @@ -13,7 +14,6 @@ import { Notifications } from '../../notifications'; function inviteAll(type) { return function inviteAll(command, params, item) { - if (!/invite\-all-(to|from)/.test(command) || !Match.test(params, String)) { return; } diff --git a/app/slashcommands-join/server/server.js b/app/slashcommands-join/server/server.js index fb43c3cb0d369b32c90a35a839bf60e980425e8b..ef6bb96377cdd42b32302b158c30928fc6ca79e5 100644 --- a/app/slashcommands-join/server/server.js +++ b/app/slashcommands-join/server/server.js @@ -7,12 +7,12 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Subscriptions } from '../../models'; import { Notifications } from '../../notifications'; import { slashCommands } from '../../utils'; slashCommands.add('join', function Join(command, params, item) { - if (command !== 'join' || !Match.test(params, String)) { return; } @@ -27,7 +27,7 @@ slashCommands.add('join', function Join(command, params, item) { Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Channel_doesnt_exist', { postProcess: 'sprintf', sprintf: [channel], diff --git a/app/slashcommands-kick/server/server.js b/app/slashcommands-kick/server/server.js index d6e554fddf6e1f1aa8f6e3e55a98c56b843e019e..159503c23b6a20fee906bf01e916682e061265d4 100644 --- a/app/slashcommands-kick/server/server.js +++ b/app/slashcommands-kick/server/server.js @@ -4,6 +4,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Notifications } from '../../notifications'; import { Users, Subscriptions } from '../../models'; import { slashCommands } from '../../utils'; @@ -24,7 +25,7 @@ const Kick = function(command, params, { rid }) { return Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_doesnt_exist', { postProcess: 'sprintf', sprintf: [username], @@ -37,7 +38,7 @@ const Kick = function(command, params, { rid }) { return Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_is_not_in_this_room', { postProcess: 'sprintf', sprintf: [username], diff --git a/app/slashcommands-leave/server/leave.js b/app/slashcommands-leave/server/leave.js index 4e42e13d91749e4b5464766702e986ff6f27e7f3..5f21152fba2f149db8db797e4292bdc4c48faa50 100644 --- a/app/slashcommands-leave/server/leave.js +++ b/app/slashcommands-leave/server/leave.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Notifications } from '../../notifications'; import { slashCommands } from '../../utils'; @@ -19,7 +20,7 @@ function Leave(command, params, item) { Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__(error, null, Meteor.user().language), }); } diff --git a/app/slashcommands-me/server/me.js b/app/slashcommands-me/server/me.js index 15321e8ba0aea36187d57ff3624ca40be9547440..63aa554be6d175a553435a613a934175d6f12d26 100644 --- a/app/slashcommands-me/server/me.js +++ b/app/slashcommands-me/server/me.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { slashCommands } from '../../utils'; import s from 'underscore.string'; +import { slashCommands } from '../../utils'; + /* * Me is a named function that will replace /me commands * @param {Object} message - The message object diff --git a/app/slashcommands-msg/server/server.js b/app/slashcommands-msg/server/server.js index 937021a3710d50a9e91b51dad567f87446ceab7d..a00906699258103443fa329162a200c95f3fbe2a 100644 --- a/app/slashcommands-msg/server/server.js +++ b/app/slashcommands-msg/server/server.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { slashCommands } from '../../utils'; import { Notifications } from '../../notifications'; import { Users } from '../../models'; @@ -21,7 +22,7 @@ function Msg(command, params, item) { return Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_and_message_must_not_be_empty', null, user.language), }); } @@ -33,7 +34,7 @@ function Msg(command, params, item) { Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_doesnt_exist', { postProcess: 'sprintf', sprintf: [targetUsernameOrig], diff --git a/app/slashcommands-mute/server/mute.js b/app/slashcommands-mute/server/mute.js index 9dfcd272c20b19714ffb36121d8d053137fcfb12..3b577654231854fba1b0eb4ca52f6c3608cb3804 100644 --- a/app/slashcommands-mute/server/mute.js +++ b/app/slashcommands-mute/server/mute.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { slashCommands } from '../../utils'; import { Users, Subscriptions } from '../../models'; import { Notifications } from '../../notifications'; @@ -25,7 +26,7 @@ slashCommands.add('mute', function Mute(command, params, item) { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_doesnt_exist', { postProcess: 'sprintf', sprintf: [username], @@ -39,7 +40,7 @@ slashCommands.add('mute', function Mute(command, params, item) { Notifications.notifyUser(userId, 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_is_not_in_this_room', { postProcess: 'sprintf', sprintf: [username], diff --git a/app/slashcommands-mute/server/unmute.js b/app/slashcommands-mute/server/unmute.js index 2618890d36712c7b90804ab225bdd110c573b0af..25e79d6442de0c9a2a8c7e853c29e1d885517e67 100644 --- a/app/slashcommands-mute/server/unmute.js +++ b/app/slashcommands-mute/server/unmute.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { slashCommands } from '../../utils'; import { Users, Subscriptions } from '../../models'; import { Notifications } from '../../notifications'; @@ -11,7 +12,6 @@ import { Notifications } from '../../notifications'; */ slashCommands.add('unmute', function Unmute(command, params, item) { - if (command !== 'unmute' || !Match.test(params, String)) { return; } @@ -25,7 +25,7 @@ slashCommands.add('unmute', function Unmute(command, params, item) { return Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_doesnt_exist', { postProcess: 'sprintf', sprintf: [username], @@ -38,7 +38,7 @@ slashCommands.add('unmute', function Unmute(command, params, item) { return Notifications.notifyUser(Meteor.userId(), 'message', { _id: Random.id(), rid: item.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('Username_is_not_in_this_room', { postProcess: 'sprintf', sprintf: [username], diff --git a/app/slashcommands-open/client/client.js b/app/slashcommands-open/client/client.js index a31118ccc60df507953a74f7e460eb5a885c19a9..6f7482b89c1fe483c5d6d18e0444b23adb3692cc 100644 --- a/app/slashcommands-open/client/client.js +++ b/app/slashcommands-open/client/client.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { FlowRouter } from 'meteor/kadira:flow-router'; + import { slashCommands, roomTypes } from '../../utils'; import { ChatSubscription, Subscriptions } from '../../models'; @@ -44,7 +45,6 @@ function Open(command, params /* , item*/) { const subscription = Subscriptions.findOne(query); roomTypes.openRouteLink(subscription.t, subscription, FlowRouter.current().queryParams); }); - } slashCommands.add('open', Open, { diff --git a/app/slashcommands-topic/lib/topic.js b/app/slashcommands-topic/lib/topic.js index 07a8a941fd2faa90671e0e3124f40354ad672e6e..1bc495e8f2771757c97b65e59c4b8c9b21d443ca 100644 --- a/app/slashcommands-topic/lib/topic.js +++ b/app/slashcommands-topic/lib/topic.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { handleError, slashCommands } from '../../utils'; import { ChatRoom } from '../../models'; import { callbacks } from '../../callbacks'; @@ -15,9 +16,8 @@ function Topic(command, params, item) { if (err) { if (Meteor.isClient) { return handleError(err); - } else { - throw err; } + throw err; } if (Meteor.isClient) { diff --git a/app/slashcommands-unarchiveroom/server/server.js b/app/slashcommands-unarchiveroom/server/server.js index 6ddd880c6c918fd10f55147bcd2f4e951d2de27c..3d04f7b8b40f0a41a953ed4061afd8fe93f8a0b6 100644 --- a/app/slashcommands-unarchiveroom/server/server.js +++ b/app/slashcommands-unarchiveroom/server/server.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Rooms, Messages } from '../../models'; import { slashCommands } from '../../utils'; import { Notifications } from '../../notifications'; diff --git a/app/slider/client/rocketchat-slider.js b/app/slider/client/rocketchat-slider.js index 098146dac1d5fca39f3a88ac8ab475d17353d24d..ea7edb3000a2482202953475469de6b4af70b31a 100644 --- a/app/slider/client/rocketchat-slider.js +++ b/app/slider/client/rocketchat-slider.js @@ -4,7 +4,6 @@ Template.slider.onRendered(function() { const params = this.data; const rangeSlider = function() { - const range = $(`#${ params.id }`); const labelValue = $(`#${ params.id }_value`); diff --git a/app/smarsh-connector/server/functions/generateEml.js b/app/smarsh-connector/server/functions/generateEml.js index 105ec20b5b21fc9865c20aea13052ecbace44310..e60ae2de2b914c867f2d9f446078b9f17d89da03 100644 --- a/app/smarsh-connector/server/functions/generateEml.js +++ b/app/smarsh-connector/server/functions/generateEml.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import moment from 'moment'; + import { settings } from '../../../settings'; import { Rooms, Messages, Users, SmarshHistory } from '../../../models'; import { MessageTypes } from '../../../ui-utils'; import { smarsh } from '../lib/rocketchat'; -import _ from 'underscore'; -import moment from 'moment'; import 'moment-timezone'; const start = '<table style="width: 100%; border: 1px solid; border-collapse: collapse; table-layout: fixed; margin-top: 10px; font-size: 12px; word-break: break-word;"><tbody>'; @@ -21,9 +22,8 @@ function _getLink(attachment) { if (url.match(/^(https?:)?\/\//i)) { return url; - } else { - return Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + url; } + return Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + url; } smarsh.generateEml = () => { diff --git a/app/smarsh-connector/server/functions/sendEmail.js b/app/smarsh-connector/server/functions/sendEmail.js index 6c5b59e29ef454d5f06caba797e38307529651da..9b69b05b3ac1ea93657366794a12ada59ef6a533 100644 --- a/app/smarsh-connector/server/functions/sendEmail.js +++ b/app/smarsh-connector/server/functions/sendEmail.js @@ -5,10 +5,11 @@ // files: ['i3nc9l3mn'] // } import _ from 'underscore'; +import { UploadFS } from 'meteor/jalik:ufs'; + import * as Mailer from '../../../mailer'; import { Uploads } from '../../../models'; import { settings } from '../../../settings'; -import { UploadFS } from 'meteor/jalik:ufs'; import { smarsh } from '../lib/rocketchat'; smarsh.sendEmail = (data) => { diff --git a/app/smarsh-connector/server/settings.js b/app/smarsh-connector/server/settings.js index 2eac794cbb7cfb35936dda7ca519467575d3eb96..ae9379380a87b2285639a658f8819f5ad44d9d99 100644 --- a/app/smarsh-connector/server/settings.js +++ b/app/smarsh-connector/server/settings.js @@ -1,5 +1,6 @@ -import { settings } from '../../settings'; import moment from 'moment'; + +import { settings } from '../../settings'; import 'moment-timezone'; settings.addGroup('Smarsh', function addSettings() { diff --git a/app/smarsh-connector/server/startup.js b/app/smarsh-connector/server/startup.js index 763a4eb7a204612d5c99060109c3dc2c0f5d25e6..d0d356322da4e47fcbb3f66a2e4a98f10a5c7e98 100644 --- a/app/smarsh-connector/server/startup.js +++ b/app/smarsh-connector/server/startup.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; import { SyncedCron } from 'meteor/littledata:synced-cron'; -import { smarsh } from './lib/rocketchat'; import _ from 'underscore'; +import { smarsh } from './lib/rocketchat'; +import { settings } from '../../settings'; + const smarshJobName = 'Smarsh EML Connector'; const _addSmarshSyncedCronJob = _.debounce(Meteor.bindEnvironment(function __addSmarshSyncedCronJobDebounced() { diff --git a/app/sms/server/SMS.js b/app/sms/server/SMS.js index 0d4adbc91b8ca96462299553cd9f9bf68b2cbe20..a812307f5a4e2febf90fd10496cadcd8a9bd6ad2 100644 --- a/app/sms/server/SMS.js +++ b/app/sms/server/SMS.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; export const SMS = { diff --git a/app/sms/server/index.js b/app/sms/server/index.js index 2fbb08a89b765a9e93ec19ef65e4dd3cf90ab6db..9b8c02811d09de7458bfc8901a31c9ccc190743e 100644 --- a/app/sms/server/index.js +++ b/app/sms/server/index.js @@ -1,4 +1,5 @@ import './settings'; -export { SMS } from './SMS'; import './services/twilio'; import './services/voxtelesys'; + +export { SMS } from './SMS'; diff --git a/app/sms/server/services/twilio.js b/app/sms/server/services/twilio.js index 12d256cc7bb694d0552ac7bdc4d29e3eafe20fcb..b4221c2b2f455839e0d867a3ea8188968da50af5 100644 --- a/app/sms/server/services/twilio.js +++ b/app/sms/server/services/twilio.js @@ -1,12 +1,14 @@ +import twilio from 'twilio'; + import { settings } from '../../../settings'; import { SMS } from '../SMS'; -import twilio from 'twilio'; class Twilio { constructor() { this.accountSid = settings.get('SMS_Twilio_Account_SID'); this.authToken = settings.get('SMS_Twilio_authToken'); } + parse(data) { let numMedia = 0; @@ -55,6 +57,7 @@ class Twilio { return returnData; } + send(fromNumber, toNumber, message) { const client = twilio(this.accountSid, this.authToken); @@ -64,6 +67,7 @@ class Twilio { body: message, }); } + response(/* message */) { return { headers: { @@ -72,6 +76,7 @@ class Twilio { body: '<Response></Response>', }; } + error(error) { let message = ''; if (error.reason) { diff --git a/app/sms/server/services/voxtelesys.js b/app/sms/server/services/voxtelesys.js index 93adfcd37ad086d87244e879574e95eb67bceb7e..b0c55b8482ca5ef93c8ab1a7e2e321156347771a 100644 --- a/app/sms/server/services/voxtelesys.js +++ b/app/sms/server/services/voxtelesys.js @@ -1,7 +1,6 @@ import { HTTP } from 'meteor/http'; import { settings } from '../../../settings'; - import { SMS } from '../SMS'; class Voxtelesys { @@ -9,6 +8,7 @@ class Voxtelesys { this.authToken = settings.get('SMS_Voxtelesys_authToken'); this.URL = settings.get('SMS_Voxtelesys_URL'); } + parse(data) { const returnData = { from: data.from, @@ -24,6 +24,7 @@ class Voxtelesys { return returnData; } + send(fromNumber, toNumber, message) { const options = { timeout: 30000, @@ -50,6 +51,7 @@ class Voxtelesys { console.error(`Error connecting to Voxtelesys SMS API: ${ error }`); } } + response(/* message */) { return { headers: { @@ -60,6 +62,7 @@ class Voxtelesys { }, }; } + error(error) { let message = ''; if (error.reason) { diff --git a/app/sms/server/settings.js b/app/sms/server/settings.js index fdbb74fc5d3d0c52fa20deef626e51984785b342..49441fbcad7f274eda525551d79f71b7ab615af1 100644 --- a/app/sms/server/settings.js +++ b/app/sms/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { diff --git a/app/spotify/lib/client/widget.js b/app/spotify/lib/client/widget.js index d5678ed1e96ba7b678f6c04f1a3cc57fb46c5858..275afdb287d87dafe3311b781edbe62f9d197bd0 100644 --- a/app/spotify/lib/client/widget.js +++ b/app/spotify/lib/client/widget.js @@ -11,7 +11,6 @@ Template.registerHelper('match', (source, regex) => new RegExp(regex).test(sourc Template.oembedBaseWidget.onCreated(function() { if (this.data && (this.data.meta && /^(music\.song|music\.album)$/.test(this.data.meta.ogType)) && this.data.parsedUrl && this.data.parsedUrl.host === 'open.spotify.com') { - return this.data._overrideTemplate = 'oembedSpotifyWidget'; + this.data._overrideTemplate = 'oembedSpotifyWidget'; } }); - diff --git a/app/spotify/lib/spotify.js b/app/spotify/lib/spotify.js index 2e2bcea6d02b30b3c021067c08a783d4d7189bc4..33310ef25a677d7ec731843257dbf487bf5236f8 100644 --- a/app/spotify/lib/spotify.js +++ b/app/spotify/lib/spotify.js @@ -2,10 +2,11 @@ * Spotify a named function that will process Spotify links or syntaxes (ex: spotify:track:1q6IK1l4qpYykOaWaLJkWG) * @param {Object} message - The message object */ -import { callbacks } from '../../callbacks'; import _ from 'underscore'; import s from 'underscore.string'; +import { callbacks } from '../../callbacks'; + const process = function(message, source, callback) { if (s.trim(source)) { // Separate text in code blocks and non code blocks @@ -15,7 +16,7 @@ const process = function(message, source, callback) { // Verify if this part is code const part = msgParts[index]; - if (((part != null ? part.length > 0 : undefined) != null)) { + if ((part != null ? part.length > 0 : undefined) != null) { const codeMatch = part.match(/(?:```(\w*)[\n ]?([\s\S]*?)```+?)|(?:`(?:[^`]+)`)/); if (codeMatch == null) { callback(message, msgParts, index, part); @@ -37,14 +38,13 @@ class Spotify { const re = /(?:^|\s)spotify:([^:\s]+):([^:\s]+)(?::([^:\s]+))?(?::(\S+))?(?:\s|$)/g; let match; - while ((match = re.exec(part))) { + while ((match = re.exec(part)) != null) { const data = _.filter(match.slice(1), (value) => value != null); const path = _.map(data, (value) => _.escape(value)).join('/'); const url = `https://open.spotify.com/${ path }`; urls.push({ url, source: `spotify:${ data.join(':') }` }); changed = true; } - }); // Re-mount message @@ -65,7 +65,8 @@ class Spotify { msgParts[index] = part.replace(re, `$1<a href="${ item.url }" target="_blank">${ item.source }</a>$2`); } } - return message.html = msgParts.join(''); + message.html = msgParts.join(''); + return message.html; } }); diff --git a/app/statistics/server/functions/get.js b/app/statistics/server/functions/get.js index 96c1f02eb1c65f4edba43fdf04977feeea19f5ce..4b4898a2c9ac053864a1b27ee2d233da45c9cc94 100644 --- a/app/statistics/server/functions/get.js +++ b/app/statistics/server/functions/get.js @@ -1,6 +1,6 @@ -import _ from 'underscore'; import os from 'os'; +import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { InstanceStatus } from 'meteor/konecty:multiple-instances-status'; @@ -17,7 +17,6 @@ import { import { settings } from '../../../settings/server'; import { Info, getMongoInfo } from '../../../utils/server'; import { Migrations } from '../../../migrations/server'; - import { statistics } from '../statisticsNamespace'; const wizardFields = [ diff --git a/app/statistics/server/functions/save.js b/app/statistics/server/functions/save.js index 04bb113c7f09af553bc092e407658b7ed62e72a6..506dd61e3e127e2abe278d05140b2e0e18c1359d 100644 --- a/app/statistics/server/functions/save.js +++ b/app/statistics/server/functions/save.js @@ -3,7 +3,7 @@ import { statistics } from '../statisticsNamespace'; statistics.save = function() { const rcStatistics = statistics.get(); - rcStatistics.createdAt = new Date; + rcStatistics.createdAt = new Date(); Statistics.insert(rcStatistics); return rcStatistics; }; diff --git a/app/statistics/server/index.js b/app/statistics/server/index.js index d3ea6b2089ff52f85181c4b8d732772105989923..7d5d1f16ea38d178cf711538c509ff29887aa9aa 100644 --- a/app/statistics/server/index.js +++ b/app/statistics/server/index.js @@ -1,5 +1,6 @@ -export { statistics } from './statisticsNamespace'; import './functions/get'; import './functions/save'; import './methods/getStatistics'; import './startup/monitor'; + +export { statistics } from './statisticsNamespace'; diff --git a/app/statistics/server/lib/SAUMonitor.js b/app/statistics/server/lib/SAUMonitor.js index 338c4b923bdaa2666543e1613cac803c5074baed..88b983e1b9676d32b6e6f75e885985232c7d7a8d 100644 --- a/app/statistics/server/lib/SAUMonitor.js +++ b/app/statistics/server/lib/SAUMonitor.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import { SyncedCron } from 'meteor/littledata:synced-cron'; import UAParser from 'ua-parser-js'; + import { UAParserMobile, UAParserDesktop } from './UAParserCustom'; import { Sessions } from '../../../models/server'; import { Logger } from '../../../logger'; -import { SyncedCron } from 'meteor/littledata:synced-cron'; import { aggregates } from '../../../models/server/models/Sessions'; const getDateObj = (dateTime = new Date()) => ({ @@ -148,13 +149,13 @@ export class SAUMonitorClass { const beforeDateTime = new Date(this._today.year, this._today.month - 1, this._today.day, 23, 59, 59, 999); const nextDateTime = new Date(currentDay.year, currentDay.month - 1, currentDay.day); - const createSessions = ((objects, ids) => { + const createSessions = (objects, ids) => { Sessions.createBatch(objects); Meteor.defer(() => { Sessions.updateActiveSessionsByDateAndInstanceIdAndIds({ year, month, day }, this._instanceId, ids, { lastActivityAt: beforeDateTime }); }); - }); + }; this._applyAllServerSessionsBatch(createSessions, { createdAt: nextDateTime, lastActivityAt: nextDateTime, ...currentDay }); this._today = currentDay; return; diff --git a/app/statistics/server/lib/UAParserCustom.js b/app/statistics/server/lib/UAParserCustom.js index 6557fe73ca9c4b76ce83f7e5d64ddc14fddcf059..e3dff8b5a7a8c4b6c80b69633ced555a4dfd9dc1 100644 --- a/app/statistics/server/lib/UAParserCustom.js +++ b/app/statistics/server/lib/UAParserCustom.js @@ -1,6 +1,6 @@ import UAParser from 'ua-parser-js'; -const mergeDeep = ((target, source) => { +const mergeDeep = (target, source) => { if (!(typeof target === 'object' && typeof source === 'object')) { return target; } @@ -20,7 +20,7 @@ const mergeDeep = ((target, source) => { } return target; -}); +}; export const UAParserMobile = { appName: 'RC Mobile', @@ -138,4 +138,3 @@ export const UAParserDesktop = { }; }, }; - diff --git a/app/statistics/server/lib/UAParserCustom.tests.js b/app/statistics/server/lib/UAParserCustom.tests.js index e32c9263b1dfa31ef646e28e1ee46fa879dc208f..0d7b2da16f3d9fc720a056225d43b5d346a19906 100644 --- a/app/statistics/server/lib/UAParserCustom.tests.js +++ b/app/statistics/server/lib/UAParserCustom.tests.js @@ -1,6 +1,7 @@ /* eslint-env mocha */ import { expect } from 'chai'; + import { UAParserMobile, UAParserDesktop } from './UAParserCustom'; const UAMobile = 'RC Mobile; iOS 12.2; v3.4.0 (250)'; @@ -8,9 +9,7 @@ const UADesktop = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/5 const UAChrome = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'; describe('UAParserCustom', () => { - describe('UAParserMobile', () => { - it('should identify mobile UA', () => { expect(UAParserMobile.isMobileApp(UAMobile)).to.be.true; }); @@ -39,11 +38,9 @@ describe('UAParserCustom', () => { }, }); }); - }); describe('UAParserDesktop', () => { - it('should not identify mobile UA', () => { expect(UAParserDesktop.isDesktopApp(UAMobile)).to.be.false; }); @@ -71,7 +68,5 @@ describe('UAParserCustom', () => { }, }); }); - }); - }); diff --git a/app/statistics/server/methods/getStatistics.js b/app/statistics/server/methods/getStatistics.js index 58d99c7a8e6b3ffb4dc51703d0e60cda0e0ef626..e5bfbf6305e3fb5cd4395d7b2b16de4218021c7e 100644 --- a/app/statistics/server/methods/getStatistics.js +++ b/app/statistics/server/methods/getStatistics.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../authorization'; import { Statistics } from '../../../models'; import { statistics } from '../statisticsNamespace'; @@ -15,8 +16,7 @@ Meteor.methods({ if (refresh) { return statistics.save(); - } else { - return Statistics.findLast(); } + return Statistics.findLast(); }, }); diff --git a/app/theme/server/server.js b/app/theme/server/server.js index 7520ca248c36fbce490f33f75a472e854dd8817a..e6afc217f7a12887256969a92b71e5b12dc706a9 100644 --- a/app/theme/server/server.js +++ b/app/theme/server/server.js @@ -1,8 +1,8 @@ +import crypto from 'crypto'; + import _ from 'underscore'; import less from 'less'; import Autoprefixer from 'less-plugin-autoprefix'; -import crypto from 'crypto'; - import { WebApp } from 'meteor/webapp'; import { Meteor } from 'meteor/meteor'; import { Inject } from 'meteor/meteorhacks:inject-initial'; @@ -119,7 +119,6 @@ export const theme = new class { }; return settings.add(`theme-${ type }-${ name }`, value, config); } - } addPublicColor(name, value, section, editor = 'color', property) { @@ -152,7 +151,7 @@ export const theme = new class { getCss() { return settings.get('css') || ''; } -}; +}(); settings.get('css', (key, value = '') => { currentHash = crypto.createHash('sha1').update(value).digest('hex'); diff --git a/app/theme/server/variables.js b/app/theme/server/variables.js index 1214f7d7ddf7ec16048afa45590c980831a28818..afa654c04a3252432237af2dd82e11512a96d8d4 100644 --- a/app/theme/server/variables.js +++ b/app/theme/server/variables.js @@ -1,5 +1,5 @@ -import { settings } from '../../settings'; import { theme } from './server'; +import { settings } from '../../settings'; // TODO: Define registers/getters/setters for packages to work with established // heirarchy of colors instead of making duplicate definitions // TODO: Settings pages to show simple separation of major/minor/addon colors diff --git a/app/threads/client/flextab/thread.js b/app/threads/client/flextab/thread.js index d4549c1d4bdd0b55c83f3739dee5a67a1de9953c..015e2eea89ccf3c923ecc0e89079cb1a4b6ddf9f 100644 --- a/app/threads/client/flextab/thread.js +++ b/app/threads/client/flextab/thread.js @@ -1,5 +1,4 @@ import _ from 'underscore'; - import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; import { ReactiveDict } from 'meteor/reactive-dict'; @@ -57,7 +56,7 @@ Template.thread.helpers({ settings: { ...result.settings, showReplyButton: false, - showreply:false, + showreply: false, }, }; }, @@ -81,7 +80,7 @@ Template.thread.onRendered(function() { const rid = Tracker.nonreactive(() => this.state.get('rid')); const tmid = Tracker.nonreactive(() => this.state.get('tmid')); - this.chatMessages = new ChatMessages; + this.chatMessages = new ChatMessages(); this.chatMessages.initializeWrapper(this.find('.js-scroll-thread')); this.chatMessages.initializeInput(this.find('.js-input-message'), { rid, tmid }); @@ -165,8 +164,6 @@ Template.thread.onCreated(async function() { Tracker.afterFlush(() => { this.state.set('loading', false); }); - - }, 500); }); diff --git a/app/threads/client/flextab/threadlist.js b/app/threads/client/flextab/threadlist.js index 3a88fb8eed73efc461e3fe832298ff899aaaa9bb..64c0dc28d1a4cfd9c59e4817dd56234f2bc3f125 100644 --- a/app/threads/client/flextab/threadlist.js +++ b/app/threads/client/flextab/threadlist.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { TabBar } from '../../../ui-utils/client'; import { Subscriptions } from '../../../models/client'; diff --git a/app/threads/client/flextab/threads.js b/app/threads/client/flextab/threads.js index b9b5e1b5a9a782142f287f094fe1e76e1bdf9515..781933a6d32464300932f94fc83c28c88a7e6916 100644 --- a/app/threads/client/flextab/threads.js +++ b/app/threads/client/flextab/threads.js @@ -2,7 +2,6 @@ import { Mongo } from 'meteor/mongo'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; import { ReactiveDict } from 'meteor/reactive-dict'; - import _ from 'underscore'; import { lazyloadtick } from '../../../lazy-load'; @@ -11,7 +10,6 @@ import { Messages, Subscriptions } from '../../../models'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; import { getConfig } from '../../../ui-utils/client/config'; - import { upsert } from '../upsert'; import './threads.html'; @@ -77,7 +75,6 @@ Template.threads.onCreated(async function() { this.rid = rid; this.incLimit = () => { - const { rid, limit } = Tracker.nonreactive(() => this.state.all()); const count = this.Threads.find({ rid }).count(); @@ -102,7 +99,6 @@ Template.threads.onCreated(async function() { upsert(this.Threads, threads); // threads.forEach(({ _id, ...msg }) => this.Threads.upsert({ _id }, msg)); this.state.set('loading', false); - }, 500); Tracker.afterFlush(() => { diff --git a/app/threads/client/index.js b/app/threads/client/index.js index 5331d52fbc5e6aa728b6a25ca52332c64c62e2a4..0ed0f40c78e04df96e811def5d3903576706a0b0 100644 --- a/app/threads/client/index.js +++ b/app/threads/client/index.js @@ -5,4 +5,3 @@ import './threads.css'; import './messageAction/follow'; import './messageAction/unfollow'; import './messageAction/replyInThread'; - diff --git a/app/threads/server/hooks/afterdeletemessage.js b/app/threads/server/hooks/afterdeletemessage.js index e7d3ac93d037bee2250478cc12d2b79243ccc807..40d7c159f74bdc51b93f8236aef0f74270c8f15d 100644 --- a/app/threads/server/hooks/afterdeletemessage.js +++ b/app/threads/server/hooks/afterdeletemessage.js @@ -3,12 +3,10 @@ import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../callbacks/server'; import { settings } from '../../../settings/server'; import { Messages } from '../../../models/server'; - import { undoReply } from '../functions'; Meteor.startup(function() { const fn = function(message) { - // is a reply from a thread if (message.tmid) { undoReply(message); @@ -29,5 +27,4 @@ Meteor.startup(function() { } callbacks.add('afterDeleteMessage', fn, callbacks.priority.LOW, 'threads-after-delete-message'); }); - }); diff --git a/app/threads/server/hooks/aftersavemessage.js b/app/threads/server/hooks/aftersavemessage.js index b6c358424554752d535acb915a69575f8a9367e1..dd9bcf03c4688e3034c875693c84b6c7276ace1e 100644 --- a/app/threads/server/hooks/aftersavemessage.js +++ b/app/threads/server/hooks/aftersavemessage.js @@ -8,7 +8,6 @@ import { updateUsersSubscriptions } from '../../../lib/server/lib/notifyUsersOnM import { sendMessageNotifications } from '../../../lib/server/lib/sendNotificationsOnMessage'; function notifyUsersOnReply(message, replies, room) { - // skips this callback if the message was edited if (message.editedAt) { return message; @@ -26,7 +25,6 @@ const metaData = (message, parentMessage) => { }; const notification = (message, room, replies) => { - // skips this callback if the message was edited if (message.editedAt) { return message; @@ -50,7 +48,7 @@ const processThreads = (message, room) => { const replies = [ parentMessage.u._id, - ...(parentMessage.replies || []), + ...parentMessage.replies || [], ].filter((userId) => userId !== message.u._id); notifyUsersOnReply(message, replies, room); diff --git a/app/threads/server/methods/followMessage.js b/app/threads/server/methods/followMessage.js index f855babeabb7b7bfc8b91af8ea1f73fdb3b528f5..4ab2e59e29458459185f472bc06a64b4f0a264ac 100644 --- a/app/threads/server/methods/followMessage.js +++ b/app/threads/server/methods/followMessage.js @@ -4,7 +4,6 @@ import { check } from 'meteor/check'; import { Messages } from '../../../models/server'; import { RateLimiter } from '../../../lib/server'; import { settings } from '../../../settings/server'; - import { follow } from '../functions'; Meteor.methods({ diff --git a/app/threads/server/methods/getThreadMessages.js b/app/threads/server/methods/getThreadMessages.js index b2e2cb1c26fad4513d4b3db36125b8be2e759b3a..dda183388701be19a7b1cf73548959aefee4bd08 100644 --- a/app/threads/server/methods/getThreadMessages.js +++ b/app/threads/server/methods/getThreadMessages.js @@ -3,7 +3,6 @@ import { Meteor } from 'meteor/meteor'; import { Messages, Rooms } from '../../../models/server'; import { canAccessRoom } from '../../../authorization/server'; import { settings } from '../../../settings/server'; - import { readThread } from '../functions'; const MAX_LIMIT = 100; @@ -32,7 +31,7 @@ Meteor.methods({ readThread({ userId: user._id, rid: thread.rid, tmid }); - const result = Messages.findVisibleThreadByThreadId(tmid, { ...(skip && { skip }), ...(limit && { limit }), sort: { ts : -1 } }).fetch(); + const result = Messages.findVisibleThreadByThreadId(tmid, { ...skip && { skip }, ...limit && { limit }, sort: { ts: -1 } }).fetch(); return [thread, ...result]; }, diff --git a/app/threads/server/methods/getThreadsList.js b/app/threads/server/methods/getThreadsList.js index 61f2dd01e9d0a1f573668d069d10dc41cbcafa2c..f32b38887ca416333fe6162980390ff9605665dd 100644 --- a/app/threads/server/methods/getThreadsList.js +++ b/app/threads/server/methods/getThreadsList.js @@ -8,7 +8,6 @@ const MAX_LIMIT = 100; Meteor.methods({ getThreadsList({ rid, limit = 50, skip = 0 }) { - if (limit > MAX_LIMIT) { throw new Meteor.Error('error-not-allowed', `max limit: ${ MAX_LIMIT }`, { method: 'getThreadsList' }); } diff --git a/app/threads/server/methods/unfollowMessage.js b/app/threads/server/methods/unfollowMessage.js index 4e602747f5a54ca340ee598284fa6a180292bc93..743d9bd5e719514e1c85483290cc81a00c334350 100644 --- a/app/threads/server/methods/unfollowMessage.js +++ b/app/threads/server/methods/unfollowMessage.js @@ -4,7 +4,6 @@ import { check } from 'meteor/check'; import { Messages } from '../../../models/server'; import { RateLimiter } from '../../../lib/server'; import { settings } from '../../../settings/server'; - import { unfollow } from '../functions'; Meteor.methods({ diff --git a/app/threads/server/settings.js b/app/threads/server/settings.js index 644f9a33e88c39b8162b6e99d0464e91ab27e5a4..edc965aaca800e49d023f939e951a648dad2bcdb 100644 --- a/app/threads/server/settings.js +++ b/app/threads/server/settings.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(() => { diff --git a/app/tokenpass/client/roomType.js b/app/tokenpass/client/roomType.js index c58735e9ecac41703d60ee0396ae2dea8f3e2a2a..ba751ad6c83d199bef212aa189e74c4a8298ad60 100644 --- a/app/tokenpass/client/roomType.js +++ b/app/tokenpass/client/roomType.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { roomTypes, RoomTypeConfig } from '../../utils'; class TokenPassRoomType extends RoomTypeConfig { diff --git a/app/tokenpass/client/startup.js b/app/tokenpass/client/startup.js index 2167827595c69df4467e017f1eaadc6499fef599..1fb9b642e44fe9812c814c11918e3ee652136393 100644 --- a/app/tokenpass/client/startup.js +++ b/app/tokenpass/client/startup.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChannelSettings } from '../../channel-settings'; import { Rooms } from '../../models'; diff --git a/app/tokenpass/client/tokenChannelsList.js b/app/tokenpass/client/tokenChannelsList.js index 4c9cbf9545c6fc68667dc9b52608f6a2d0caac56..724bd6b966c48b5a4aa86743c18a1080fabfdf47 100644 --- a/app/tokenpass/client/tokenChannelsList.js +++ b/app/tokenpass/client/tokenChannelsList.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { Subscriptions } from '../../models'; Template.tokenChannelsList.helpers({ diff --git a/app/tokenpass/client/tokenpassChannelSettings.js b/app/tokenpass/client/tokenpassChannelSettings.js index da312c3bde798e533ae3c286adedf30334bf9f4e..541d45476aa4544ba1a5a058215635c6e63d2cc6 100644 --- a/app/tokenpass/client/tokenpassChannelSettings.js +++ b/app/tokenpass/client/tokenpassChannelSettings.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { t, handleError } from '../../utils'; import { ChatRoom } from '../../models'; -import toastr from 'toastr'; Template.channelSettings__tokenpass.helpers({ addDisabled() { @@ -36,7 +37,7 @@ Template.channelSettings__tokenpass.helpers({ }); Template.channelSettings__tokenpass.onCreated(function() { - const room = ChatRoom.findOne(this.data.rid, { fields: { tokenpass : 1 } }); + const room = ChatRoom.findOne(this.data.rid, { fields: { tokenpass: 1 } }); this.editing = new ReactiveVar(false); this.initial = room.tokenpass; @@ -60,10 +61,10 @@ Template.channelSettings__tokenpass.events({ e.preventDefault(); const instance = Template.instance(); const { balance, token, list } = instance; - list.set([...list.get().filter((t) => t.token !== token), { token:token.get(), balance: balance.get() }]); + list.set([...list.get().filter((t) => t.token !== token), { token: token.get(), balance: balance.get() }]); - [...i.findAll('input')].forEach((el) => el.value = ''); + [...i.findAll('input')].forEach((el) => { el.value = ''; }); return balance.set('') && token.set(''); }, 'click .js-remove'(e, instance) { @@ -74,7 +75,6 @@ Template.channelSettings__tokenpass.events({ return; } list.set(list.get().filter((t) => t.token !== this.token)); - }, 'click .js-save'(e, i) { e.preventDefault(); @@ -92,7 +92,7 @@ Template.channelSettings__tokenpass.events({ i.token.set(''); i.balance.set(''); i.initial = tokenpass; - [...i.findAll('input')].forEach((el) => el.value = ''); + [...i.findAll('input')].forEach((el) => { el.value = ''; }); return toastr.success(TAPi18n.__('Room_tokenpass_config_changed_successfully')); }); }, @@ -102,7 +102,7 @@ Template.channelSettings__tokenpass.events({ i.list.set(i.initial.tokens); i.token.set(''); i.balance.set(''); - [...i.findAll('input')].forEach((el) => el.value = ''); + [...i.findAll('input')].forEach((el) => { el.value = ''; }); }, 'change [name=requireAllTokens]'(e, instance) { instance.requireAll.set(e.currentTarget.checked); diff --git a/app/tokenpass/lib/common.js b/app/tokenpass/lib/common.js index a1820059f09214d5ae178e05b744d732cfaf024f..02d343207496a301df305169c69fd23561899a6d 100644 --- a/app/tokenpass/lib/common.js +++ b/app/tokenpass/lib/common.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../settings'; import { CustomOAuth } from '../../custom-oauth'; diff --git a/app/tokenpass/server/cronRemoveUsers.js b/app/tokenpass/server/cronRemoveUsers.js index 7edf7d1db60bfb5aa1ffbd570bce16371841267b..751308b6354cf1b4c283927391aae14be5891517 100644 --- a/app/tokenpass/server/cronRemoveUsers.js +++ b/app/tokenpass/server/cronRemoveUsers.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms, Subscriptions, Users } from '../../models'; import { SyncedCron } from 'meteor/littledata:synced-cron'; + import { updateUserTokenpassBalances } from './functions/updateUserTokenpassBalances'; import { Tokenpass } from './Tokenpass'; +import { Rooms, Subscriptions, Users } from '../../models'; import { removeUserFromRoom } from '../../lib/server/functions/removeUserFromRoom'; function removeUsersFromTokenChannels() { diff --git a/app/tokenpass/server/functions/getProtectedTokenpassBalances.js b/app/tokenpass/server/functions/getProtectedTokenpassBalances.js index 93c3c3a055b0c9bdba64d77cfec1bc9720875563..c5e0c478bf4b08ff82092ca100bcbfd0b7119191 100644 --- a/app/tokenpass/server/functions/getProtectedTokenpassBalances.js +++ b/app/tokenpass/server/functions/getProtectedTokenpassBalances.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; + import { settings } from '../../../settings'; let userAgent = 'Meteor'; diff --git a/app/tokenpass/server/functions/getPublicTokenpassBalances.js b/app/tokenpass/server/functions/getPublicTokenpassBalances.js index d3b3a94d032fa9c3d0dd4132635d8c0fec8475aa..427a8d13135a49858ce86d5d4b5470f6d22afbc3 100644 --- a/app/tokenpass/server/functions/getPublicTokenpassBalances.js +++ b/app/tokenpass/server/functions/getPublicTokenpassBalances.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; + import { settings } from '../../../settings'; let userAgent = 'Meteor'; diff --git a/app/tokenpass/server/functions/saveRoomTokensMinimumBalance.js b/app/tokenpass/server/functions/saveRoomTokensMinimumBalance.js index c0d31a2d7fa8acfd06501919ce589404f13ae287..e2067468114d839846960fd24d9e9e02903a6dc0 100644 --- a/app/tokenpass/server/functions/saveRoomTokensMinimumBalance.js +++ b/app/tokenpass/server/functions/saveRoomTokensMinimumBalance.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; -import { Rooms } from '../../../models'; import s from 'underscore.string'; +import { Rooms } from '../../../models'; + export const saveRoomTokensMinimumBalance = function(rid, roomTokensMinimumBalance) { if (!Match.test(rid, String)) { throw new Meteor.Error('invalid-room', 'Invalid room', { diff --git a/app/tokenpass/server/functions/updateUserTokenpassBalances.js b/app/tokenpass/server/functions/updateUserTokenpassBalances.js index 9fe7972e85299d6cc6f716b3df2b37f2b63c0489..3b76e88a42a16ae1baea8c6115bcb3756aeba0da 100644 --- a/app/tokenpass/server/functions/updateUserTokenpassBalances.js +++ b/app/tokenpass/server/functions/updateUserTokenpassBalances.js @@ -1,7 +1,8 @@ -import { Users } from '../../../models'; +import _ from 'underscore'; + import { getPublicTokenpassBalances } from './getPublicTokenpassBalances'; import { getProtectedTokenpassBalances } from './getProtectedTokenpassBalances'; -import _ from 'underscore'; +import { Users } from '../../../models'; export const updateUserTokenpassBalances = function(user) { if (user && user.services && user.services.tokenpass) { diff --git a/app/tokenpass/server/index.js b/app/tokenpass/server/index.js index 98577e23a0265fb550fc61c76abb0292e78ebc50..ba1cf78e09394dfcf02c2ea9b686542df22c011e 100644 --- a/app/tokenpass/server/index.js +++ b/app/tokenpass/server/index.js @@ -3,8 +3,9 @@ import './startup'; import './functions/getProtectedTokenpassBalances'; import './functions/getPublicTokenpassBalances'; import './functions/saveRoomTokensMinimumBalance'; -export { updateUserTokenpassBalances } from './functions/updateUserTokenpassBalances'; import './methods/findTokenChannels'; import './methods/getChannelTokenpass'; import './cronRemoveUsers'; + +export { updateUserTokenpassBalances } from './functions/updateUserTokenpassBalances'; export { Tokenpass } from './Tokenpass'; diff --git a/app/tokenpass/server/methods/findTokenChannels.js b/app/tokenpass/server/methods/findTokenChannels.js index 93039a49c420f04443b6f8d67778a61009370ed8..0a597f8df890e70d6356cb2b066ccb4868c6d98f 100644 --- a/app/tokenpass/server/methods/findTokenChannels.js +++ b/app/tokenpass/server/methods/findTokenChannels.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms } from '../../../models'; import { Tokenpass } from '../Tokenpass'; diff --git a/app/tokenpass/server/methods/getChannelTokenpass.js b/app/tokenpass/server/methods/getChannelTokenpass.js index bd446bfb80f8242acd8f2e7b7b7404cc64c2855c..baf277f42637177ece5e7d3b484b0fb2c04f8742 100644 --- a/app/tokenpass/server/methods/getChannelTokenpass.js +++ b/app/tokenpass/server/methods/getChannelTokenpass.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms } from '../../../models'; Meteor.methods({ diff --git a/app/tokenpass/server/startup.js b/app/tokenpass/server/startup.js index 6d5384f71ce4d077617c97562d1d0ef8ba70d5ec..459cac9111fa0915a0cee9ba162fdff62be3c1cc 100644 --- a/app/tokenpass/server/startup.js +++ b/app/tokenpass/server/startup.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; + +import { updateUserTokenpassBalances } from './functions/updateUserTokenpassBalances'; +import { Tokenpass } from './Tokenpass'; import { settings } from '../../settings'; import { addRoomAccessValidator } from '../../authorization'; import { Users } from '../../models'; import { callbacks } from '../../callbacks'; -import { updateUserTokenpassBalances } from './functions/updateUserTokenpassBalances'; -import { Tokenpass } from './Tokenpass'; settings.addGroup('OAuth', function() { this.section('Tokenpass', function() { diff --git a/app/tooltip/client/rocketchat-tooltip.js b/app/tooltip/client/rocketchat-tooltip.js index ac902791736ea6e086340ed12201a375ec98a6a6..412948a99c231ef08ce090c468fe11b5011fe0fe 100644 --- a/app/tooltip/client/rocketchat-tooltip.js +++ b/app/tooltip/client/rocketchat-tooltip.js @@ -34,7 +34,6 @@ export const tooltip = { this.opened = true; }, 300); - }, hide() { diff --git a/app/ui-account/client/account.js b/app/ui-account/client/account.js index 004a483693bafdbecf5be3ff636d3f0d1190863a..64fa7f578c1971060fcd4734f9030176aa11f39a 100644 --- a/app/ui-account/client/account.js +++ b/app/ui-account/client/account.js @@ -1,5 +1,6 @@ import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { SideNav } from '../../ui-utils'; Template.account.onRendered(function() { diff --git a/app/ui-account/client/accountFlex.js b/app/ui-account/client/accountFlex.js index 14dfd8fdfb2791d84038bf175deb9d00b7ce1811..0a47182934e7ded5350186bce72313b1e5322856 100644 --- a/app/ui-account/client/accountFlex.js +++ b/app/ui-account/client/accountFlex.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../settings'; import { hasAllPermission } from '../../authorization'; import { SideNav, Layout } from '../../ui-utils'; diff --git a/app/ui-account/client/accountIntegrations.js b/app/ui-account/client/accountIntegrations.js index c610e04b809e2ced88ba043a8ab25c5bfba38cff..a8d9d3916bcf25574353e17127e98a9ae8e979dc 100644 --- a/app/ui-account/client/accountIntegrations.js +++ b/app/ui-account/client/accountIntegrations.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { WebdavAccounts } from '../../models'; import { modal } from '../../ui-utils'; import { t } from '../../utils'; -import toastr from 'toastr'; Template.accountIntegrations.helpers({ webdavAccounts() { diff --git a/app/ui-account/client/accountPreferences.js b/app/ui-account/client/accountPreferences.js index 835f11d19dbd9faf44590966604102c877c40ff5..247fc0785179834d47b74e44c726f1cb6bfbdcf2 100644 --- a/app/ui-account/client/accountPreferences.js +++ b/app/ui-account/client/accountPreferences.js @@ -4,14 +4,15 @@ import { Tracker } from 'meteor/tracker'; import { Reload } from 'meteor/reload'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import s from 'underscore.string'; +import toastr from 'toastr'; + import { t, handleError, getUserPreference } from '../../utils'; import { modal, SideNav } from '../../ui-utils'; import { KonchatNotification } from '../../ui'; import { settings } from '../../settings'; import { CustomSounds } from '../../custom-sounds/client'; -import _ from 'underscore'; -import s from 'underscore.string'; -import toastr from 'toastr'; const notificationLabels = { all: 'All_messages', diff --git a/app/ui-account/client/accountProfile.js b/app/ui-account/client/accountProfile.js index d6ee828ea6219cea602ae668282f712b829a8bf4..6531672370429caa1c8e324a96ff32b64ba22b39 100644 --- a/app/ui-account/client/accountProfile.js +++ b/app/ui-account/client/accountProfile.js @@ -4,14 +4,15 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import _ from 'underscore'; +import s from 'underscore.string'; +import toastr from 'toastr'; + import { modal, SideNav } from '../../ui-utils'; import { t, handleError } from '../../utils'; import { settings } from '../../settings'; import { Notifications } from '../../notifications'; import { callbacks } from '../../callbacks'; -import _ from 'underscore'; -import s from 'underscore.string'; -import toastr from 'toastr'; const validateEmail = (email) => /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email); const validateUsername = (username) => { @@ -131,8 +132,6 @@ Template.accountProfile.helpers({ if (!validateEmail(email) || (!validateUsername(username) || usernameAvaliable !== true) || !validateName(realname)) { return ret; } - - return; }, allowDeleteOwnAccount() { return settings.get('Accounts_AllowDeleteOwnAccount'); @@ -178,14 +177,14 @@ Template.accountProfile.helpers({ Template.accountProfile.onCreated(function() { const self = this; const user = Meteor.user(); - self.dep = new Tracker.Dependency; + self.dep = new Tracker.Dependency(); self.realname = new ReactiveVar(user.name); self.email = new ReactiveVar(getUserEmailAddress(user)); self.username = new ReactiveVar(user.username); - self.password = new ReactiveVar; - self.confirmationPassword = new ReactiveVar; - self.suggestions = new ReactiveVar; - self.avatar = new ReactiveVar; + self.password = new ReactiveVar(); + self.confirmationPassword = new ReactiveVar(); + self.suggestions = new ReactiveVar(); + self.avatar = new ReactiveVar(); self.url = new ReactiveVar(''); self.usernameAvaliable = new ReactiveVar(true); @@ -209,11 +208,10 @@ Template.accountProfile.onCreated(function() { const instance = this; if (!newPassword) { return callback(); - } else if (!settings.get('Accounts_AllowPasswordChange')) { + } if (!settings.get('Accounts_AllowPasswordChange')) { toastr.remove(); toastr.error(t('Password_Change_Disabled')); instance.clearForm(); - return; } }; this.save = function(typedPassword, cb) { @@ -250,9 +248,8 @@ Template.accountProfile.onCreated(function() { toastr.error(t('RealName_Change_Disabled')); instance.clearForm(); return cb && cb(); - } else { - data.realname = s.trim(self.realname.get()); } + data.realname = s.trim(self.realname.get()); } if (s.trim(self.username.get()) !== user.username) { if (!settings.get('Accounts_AllowUsernameChange')) { @@ -260,9 +257,8 @@ Template.accountProfile.onCreated(function() { toastr.error(t('Username_Change_Disabled')); instance.clearForm(); return cb && cb(); - } else { - data.username = s.trim(self.username.get()); } + data.username = s.trim(self.username.get()); } if (s.trim(self.email.get()) !== getUserEmailAddress(user)) { if (!settings.get('Accounts_AllowEmailChange')) { @@ -270,9 +266,8 @@ Template.accountProfile.onCreated(function() { toastr.error(t('Email_Change_Disabled')); instance.clearForm(); return cb && cb(); - } else { - data.email = s.trim(self.email.get()); } + data.email = s.trim(self.email.get()); } const customFields = {}; $('[data-customfield=true]').each(function() { @@ -317,7 +312,7 @@ const checkAvailability = _.debounce((username, { usernameAvaliable }) => { }, 300); Template.accountProfile.events({ - 'change [data-customfield="true"], input [data-customfield="true"]':_.debounce((e, i) => { + 'change [data-customfield="true"], input [data-customfield="true"]': _.debounce((e, i) => { i.dep.changed(); }, 300), 'click .js-select-avatar-initials'() { @@ -432,7 +427,6 @@ Template.accountProfile.events({ } $(e.target).removeClass('loading'); - }, 1000); }); }, @@ -507,7 +501,7 @@ Template.accountProfile.events({ handleError(error); } e.currentTarget.innerHTML = e.currentTarget.innerHTML.replace(' ...', ''); - return e.currentTarget.disabled = false; + e.currentTarget.disabled = false; }); }, 'change .js-select-avatar-upload [type=file]'(event, template) { diff --git a/app/ui-account/client/avatar/avatar.js b/app/ui-account/client/avatar/avatar.js index b16e4e71f560b0813d3ac8083af035cb62d8d32f..c4b0a902829ab08dfade8266f0f03f7ef7384deb 100644 --- a/app/ui-account/client/avatar/avatar.js +++ b/app/ui-account/client/avatar/avatar.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { getUserAvatarURL } from '../../../utils/lib/getUserAvatarURL'; Template.avatar.helpers({ diff --git a/app/ui-account/client/avatar/prompt.js b/app/ui-account/client/avatar/prompt.js index 664253c818f4648c1d99f1394a1a61dd59fb166c..1d5d651e99177c77bf02c5c1a60bc59b945e6fd6 100644 --- a/app/ui-account/client/avatar/prompt.js +++ b/app/ui-account/client/avatar/prompt.js @@ -3,19 +3,20 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import s from 'underscore.string'; +import toastr from 'toastr'; + import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { SideNav } from '../../../ui-utils'; import { t } from '../../../utils'; import { mime } from '../../../utils/lib/mimeTypes'; import { fileUploadHandler } from '../../../file-upload'; -import s from 'underscore.string'; -import toastr from 'toastr'; Template.avatarPrompt.onCreated(function() { const self = this; - self.suggestions = new ReactiveVar; - self.upload = new ReactiveVar; + self.suggestions = new ReactiveVar(); + self.upload = new ReactiveVar(); self.getSuggestions = function() { self.suggestions.set(undefined); Meteor.call('getAvatarSuggestion', function(error, avatars) { diff --git a/app/ui-admin/client/admin.js b/app/ui-admin/client/admin.js index f2ad5770a400393ab1562099a67fadddbe300e42..0167a036e680f435356d8c220d0950fefcafdbcf 100644 --- a/app/ui-admin/client/admin.js +++ b/app/ui-admin/client/admin.js @@ -6,13 +6,14 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import s from 'underscore.string'; +import toastr from 'toastr'; + import { settings } from '../../settings'; import { SideNav, modal } from '../../ui-utils'; import { t, handleError } from '../../utils'; import { CachedCollection } from '../../ui-cached-collection'; -import _ from 'underscore'; -import s from 'underscore.string'; -import toastr from 'toastr'; const TempSettings = new Mongo.Collection(null); @@ -188,11 +189,10 @@ Template.admin.helpers({ }); if (found === enableQuery.length) { return {}; - } else { - return { - disabled: 'disabled', - }; } + return { + disabled: 'disabled', + }; }, isReadonly() { if (this.readonly === true) { @@ -444,7 +444,6 @@ Template.admin.events({ } toastr.success(TAPi18n.__('Settings_updated')); }); - }, 'click .rc-header__section-button .refresh-clients'() { Meteor.call('refreshClients', function() { @@ -480,9 +479,8 @@ Template.admin.events({ return Meteor.call('refreshOAuthService', function(err) { if (err) { return handleError(err); - } else { - return toastr.success(TAPi18n.__('Done')); } + return toastr.success(TAPi18n.__('Done')); }); }, 'click .remove-custom-oauth'() { diff --git a/app/ui-admin/client/adminFlex.js b/app/ui-admin/client/adminFlex.js index 0cbbf3245484f756d81273ce83da711d23dc1eaf..98929d9c83363aaeb5a423900b8b252e33583c27 100644 --- a/app/ui-admin/client/adminFlex.js +++ b/app/ui-admin/client/adminFlex.js @@ -3,6 +3,7 @@ import s from 'underscore.string'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../settings'; import { CachedCollection } from '../../ui-cached-collection'; import { menu, SideNav, AdminBox, Layout } from '../../ui-utils/client'; @@ -54,9 +55,8 @@ Template.adminFlex.helpers({ }).sort(function(a, b) { if (a.label.toLowerCase() >= b.label.toLowerCase()) { return 1; - } else { - return -1; } + return -1; }); }, label, diff --git a/app/ui-admin/client/adminInfo.js b/app/ui-admin/client/adminInfo.js index 296842b9f757ae5d5440802a43334362fd307036..0fb0397debc12e037274fa553ad7683993012d03 100644 --- a/app/ui-admin/client/adminInfo.js +++ b/app/ui-admin/client/adminInfo.js @@ -3,11 +3,12 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import s from 'underscore.string'; +import moment from 'moment'; + import { handleError, Info } from '../../utils'; import { hasAllPermission } from '../../authorization'; import { SideNav } from '../../ui-utils'; -import s from 'underscore.string'; -import moment from 'moment'; Template.adminInfo.helpers({ isReady() { @@ -68,9 +69,8 @@ Template.adminInfo.events({ instance.ready.set(true); if (error) { return handleError(error); - } else { - return instance.statistics.set(statistics); } + return instance.statistics.set(statistics); }); }, }); diff --git a/app/ui-admin/client/rooms/adminRoomInfo.js b/app/ui-admin/client/rooms/adminRoomInfo.js index 9315413c6abb1208f2faa2fc9b6f54054e5dca3d..53695b9af36c659ad1a9f2d7c2b9954a9c986716 100644 --- a/app/ui-admin/client/rooms/adminRoomInfo.js +++ b/app/ui-admin/client/rooms/adminRoomInfo.js @@ -3,14 +3,15 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + +import { AdminChatRoom } from './adminRooms'; import { t, handleError } from '../../../utils'; import { call, modal } from '../../../ui-utils'; import { hasAllPermission, hasAtLeastOnePermission } from '../../../authorization'; import { ChannelSettings } from '../../../channel-settings'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; -import { AdminChatRoom } from './adminRooms'; -import toastr from 'toastr'; Template.adminRoomInfo.helpers({ selectedRoom() { @@ -38,7 +39,7 @@ Template.adminRoomInfo.helpers({ const roomType = room && room.t; if (roomType === 'c') { return t('Channel'); - } else if (roomType === 'p') { + } if (roomType === 'p') { return t('Private_Group'); } }, @@ -63,9 +64,8 @@ Template.adminRoomInfo.helpers({ const archivationState = room && room.archived; if (archivationState === true) { return t('Room_archivation_state_true'); - } else { - return t('Room_archivation_state_false'); } + return t('Room_archivation_state_false'); }, canDeleteRoom() { const room = AdminChatRoom.findOne(this.rid, { fields: { t: 1 } }); @@ -82,9 +82,8 @@ Template.adminRoomInfo.helpers({ if (readOnly === true) { return t('True'); - } else { - return t('False'); } + return t('False'); }, }); @@ -125,9 +124,9 @@ Template.adminRoomInfo.events({ 'click [data-edit]'(e, t) { e.preventDefault(); t.editing.set($(e.currentTarget).data('edit')); - return setTimeout((function() { + return setTimeout(function() { t.$('input.editing').focus().select(); - }), 100); + }, 100); }, 'click .cancel'(e, t) { e.preventDefault(); @@ -140,8 +139,8 @@ Template.adminRoomInfo.events({ }); Template.adminRoomInfo.onCreated(function() { - this.editing = new ReactiveVar; - this.roomOwner = new ReactiveVar; + this.editing = new ReactiveVar(); + this.roomOwner = new ReactiveVar(); this.validateRoomType = () => { const type = this.$('input[name=roomType]:checked').val(); if (type !== 'c' && type !== 'p') { @@ -214,9 +213,8 @@ Template.adminRoomInfo.onCreated(function() { Meteor.call('saveRoomSettings', rid, 'roomType', val, function(err) { if (err) { return handleError(err); - } else { - toastr.success(TAPi18n.__('Room_type_changed_successfully')); } + toastr.success(TAPi18n.__('Room_type_changed_successfully')); }); }; if (!AdminChatRoom.findOne(rid, { fields: { default: 1 } }).default) { diff --git a/app/ui-admin/client/rooms/adminRooms.js b/app/ui-admin/client/rooms/adminRooms.js index b40d0f7aa9a55b5dabfe635a662dbae17e54e5fd..e757c47d05e792a3e89795e4375987eff3ec0b49 100644 --- a/app/ui-admin/client/rooms/adminRooms.js +++ b/app/ui-admin/client/rooms/adminRooms.js @@ -5,12 +5,13 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { SideNav, RocketChatTabBar, TabBar } from '../../../ui-utils'; import { t, roomTypes } from '../../../utils'; import { hasAllPermission } from '../../../authorization'; import { ChannelSettings } from '../../../channel-settings'; -import _ from 'underscore'; -import s from 'underscore.string'; export const AdminChatRoom = new Mongo.Collection('rocketchat_room'); @@ -51,9 +52,8 @@ Template.adminRooms.helpers({ 'default'() { if (this.default) { return t('True'); - } else { - return t('False'); } + return t('False'); }, flexData() { return { @@ -64,8 +64,8 @@ Template.adminRooms.helpers({ const instance = Template.instance(); return function(currentTarget) { if ( - currentTarget.offsetHeight + currentTarget.scrollTop >= - currentTarget.scrollHeight - 100 + currentTarget.offsetHeight + currentTarget.scrollTop + >= currentTarget.scrollHeight - 100 ) { return instance.limit.set(instance.limit.get() + 50); } diff --git a/app/ui-admin/client/rooms/channelSettingsDefault.js b/app/ui-admin/client/rooms/channelSettingsDefault.js index e98394d04878e4c9e8479afa73123dfeb469bedd..d584a3af210112b684067b34734faa99b97e49c8 100644 --- a/app/ui-admin/client/rooms/channelSettingsDefault.js +++ b/app/ui-admin/client/rooms/channelSettingsDefault.js @@ -2,10 +2,11 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; -import { t, handleError } from '../../../utils'; -import { AdminChatRoom } from './adminRooms'; import toastr from 'toastr'; +import { AdminChatRoom } from './adminRooms'; +import { t, handleError } from '../../../utils'; + Template.channelSettingsDefault.helpers({ canMakeDefault() { const room = AdminChatRoom.findOne(this.rid, { fields: { t: 1 } }); @@ -25,9 +26,8 @@ Template.channelSettingsDefault.helpers({ const room = AdminChatRoom.findOne(this.rid, { fields: { default: 1 } }); if (room && room.default) { return t('True'); - } else { - return t('False'); } + return t('False'); }, }); diff --git a/app/ui-admin/client/users/adminInviteUser.js b/app/ui-admin/client/users/adminInviteUser.js index a7079d540e8803f8c075c64034d64b6e3be3a3e7..d765d45e9c9344d58de6ec871bc3f9c49501b76f 100644 --- a/app/ui-admin/client/users/adminInviteUser.js +++ b/app/ui-admin/client/users/adminInviteUser.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; -import { hasAtLeastOnePermission } from '../../../authorization'; -import { t, handleError } from '../../../utils'; import _ from 'underscore'; import toastr from 'toastr'; +import { hasAtLeastOnePermission } from '../../../authorization'; +import { t, handleError } from '../../../utils'; + Template.adminInviteUser.helpers({ isAllowed() { return hasAtLeastOnePermission('bulk-register-user'); diff --git a/app/ui-admin/client/users/adminUserChannels.js b/app/ui-admin/client/users/adminUserChannels.js index ccc6101cd16f23040f904cc62facf4ee888348f8..3eeacc50e7a33096b54459712fbba992e820c71e 100644 --- a/app/ui-admin/client/users/adminUserChannels.js +++ b/app/ui-admin/client/users/adminUserChannels.js @@ -5,11 +5,10 @@ Template.adminUserChannels.helpers({ type() { if (this.t === 'd') { return 'at'; - } else if (this.t === 'p') { + } if (this.t === 'p') { return 'lock'; - } else { - return 'hash'; } + return 'hash'; }, route() { switch (this.t) { diff --git a/app/ui-admin/client/users/adminUsers.js b/app/ui-admin/client/users/adminUsers.js index 648250b393b8c66381b942823d1c0d4954900dc5..099f89586af8a61d599ffb0a7d44031a9688f850 100644 --- a/app/ui-admin/client/users/adminUsers.js +++ b/app/ui-admin/client/users/adminUsers.js @@ -3,10 +3,11 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -import { SideNav, TabBar, RocketChatTabBar } from '../../../ui-utils'; import _ from 'underscore'; import s from 'underscore.string'; +import { SideNav, TabBar, RocketChatTabBar } from '../../../ui-utils'; + Template.adminUsers.helpers({ searchText() { const instance = Template.instance(); @@ -45,8 +46,8 @@ Template.adminUsers.helpers({ const instance = Template.instance(); return function(currentTarget) { if ( - currentTarget.offsetHeight + currentTarget.scrollTop >= - currentTarget.scrollHeight - 100 + currentTarget.offsetHeight + currentTarget.scrollTop + >= currentTarget.scrollHeight - 100 ) { return instance.limit.set(instance.limit.get() + 50); } @@ -70,7 +71,7 @@ Template.adminUsers.onCreated(function() { this.ready = new ReactiveVar(true); this.tabBar = new RocketChatTabBar(); this.tabBar.showGroup(FlowRouter.current().route.name); - this.tabBarData = new ReactiveVar; + this.tabBarData = new ReactiveVar(); TabBar.addButton({ groups: ['admin-users'], id: 'invite-user', diff --git a/app/ui-admin/server/publications/adminRooms.js b/app/ui-admin/server/publications/adminRooms.js index f50d43fc8495496a8afeff12b1ea195d88be488f..f40e92f00e31a6b393df786fc9c5d0fd2c5ea80e 100644 --- a/app/ui-admin/server/publications/adminRooms.js +++ b/app/ui-admin/server/publications/adminRooms.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; -import { hasPermission } from '../../../authorization'; -import { Rooms } from '../../../models'; import _ from 'underscore'; import s from 'underscore.string'; +import { hasPermission } from '../../../authorization'; +import { Rooms } from '../../../models'; + Meteor.publish('adminRooms', function(filter, types, limit) { if (!this.userId) { return this.ready(); @@ -42,11 +43,10 @@ Meteor.publish('adminRooms', function(filter, types, limit) { if (filter && types.length) { // CACHE: can we stop using publications here? return Rooms.findByNameContainingAndTypes(filter, types, options); - } else if (types.length) { + } if (types.length) { // CACHE: can we stop using publications here? return Rooms.findByTypes(types, options); - } else { - // CACHE: can we stop using publications here? - return Rooms.findByNameContaining(filter, options); } + // CACHE: can we stop using publications here? + return Rooms.findByNameContaining(filter, options); }); diff --git a/app/ui-cached-collection/client/models/CachedCollection.js b/app/ui-cached-collection/client/models/CachedCollection.js index 72672d5b7a15618726c9f099ee5fde02146053e1..a8c3276d27116f5b35fdbd2671e64baab4b0a48a 100644 --- a/app/ui-cached-collection/client/models/CachedCollection.js +++ b/app/ui-cached-collection/client/models/CachedCollection.js @@ -5,9 +5,10 @@ import { Accounts } from 'meteor/accounts-base'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import localforage from 'localforage'; +import _ from 'underscore'; + import { callbacks } from '../../../callbacks'; import Notifications from '../../../notifications/client/lib/Notifications'; -import _ from 'underscore'; class CachedCollectionManagerClass { constructor() { @@ -96,7 +97,7 @@ class CachedCollectionManagerClass { } } -export const CachedCollectionManager = new CachedCollectionManagerClass; +export const CachedCollectionManager = new CachedCollectionManagerClass(); const debug = false; @@ -232,8 +233,8 @@ export class CachedCollection { }); this.recomputeCollectionQueries(); - if (this.updatedAt < new Date) { - this.updatedAt = new Date; + if (this.updatedAt < new Date()) { + this.updatedAt = new Date(); } callback(data); @@ -320,7 +321,7 @@ export class CachedCollection { } localforage.setItem(this.name, { - updatedAt: new Date, + updatedAt: new Date(), version: this.version, token: this.getToken(), records: data, diff --git a/app/ui-clean-history/client/lib/startup.js b/app/ui-clean-history/client/lib/startup.js index 019463c3c346be51bd60511418a5272a9dc0a646..2c7b1ffaa12c4404f89553316694c860b327fc2f 100644 --- a/app/ui-clean-history/client/lib/startup.js +++ b/app/ui-clean-history/client/lib/startup.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { TabBar } from '../../../ui-utils'; import { hasAllPermission } from '../../../authorization'; diff --git a/app/ui-clean-history/client/views/cleanHistory.js b/app/ui-clean-history/client/views/cleanHistory.js index c988e6de42f0ed5ff27b9598ecd6c60281234fc6..b4b59f6f5d519f697e67ba8ddf8eb928bb88299c 100644 --- a/app/ui-clean-history/client/views/cleanHistory.js +++ b/app/ui-clean-history/client/views/cleanHistory.js @@ -4,11 +4,12 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; +import moment from 'moment'; + import { ChatRoom } from '../../../models'; import { t, roomTypes } from '../../../utils'; import { settings } from '../../../settings'; import { modal, call } from '../../../ui-utils'; -import moment from 'moment'; const getRoomName = function() { const room = ChatRoom.findOne(Session.get('openedRoom')); @@ -40,7 +41,7 @@ const purgeWorker = function(roomId, oldest, latest, inclusive, limit, excludePi const getTimeZoneOffset = function() { const offset = new Date().getTimezoneOffset(); const absOffset = Math.abs(offset); - return `${ offset < 0 ? '+' : '-' }${ (`00${ Math.floor(absOffset / 60) }`).slice(-2) }:${ (`00${ (absOffset % 60) }`).slice(-2) }`; + return `${ offset < 0 ? '+' : '-' }${ `00${ Math.floor(absOffset / 60) }`.slice(-2) }:${ `00${ (absOffset % 60) }`.slice(-2) }`; }; @@ -149,7 +150,7 @@ Template.cleanHistory.onCreated(function() { this.ac = new AutoComplete( { - selector:{ + selector: { item: '.rc-popup-list__item', container: '.rc-popup-list__list', }, @@ -278,7 +279,6 @@ Template.cleanHistory.events({ instance.ignoreDiscussion.set(e.target.checked); }, 'click .js-prune'(e, instance) { - modal.open({ title: t('Are_you_sure'), text: t('Prune_Modal'), @@ -318,7 +318,7 @@ Template.cleanHistory.events({ let count = 0; let result; do { - result = await purgeWorker(roomId, fromDate, toDate, metaCleanHistoryInclusive, limit, metaCleanHistoryExcludePinned, ignoreDiscussion, metaCleanHistoryFilesOnly, users); + result = await purgeWorker(roomId, fromDate, toDate, metaCleanHistoryInclusive, limit, metaCleanHistoryExcludePinned, ignoreDiscussion, metaCleanHistoryFilesOnly, users); // eslint-disable-line no-await-in-loop count += result; } while (result === limit); diff --git a/app/ui-flextab/client/flexTabBar.js b/app/ui-flextab/client/flexTabBar.js index 663df68860a1d8c82c1d9be9ae88c50fc28673c0..a2f34329e77638d0cf8e13cb3f861c96032e72f7 100644 --- a/app/ui-flextab/client/flexTabBar.js +++ b/app/ui-flextab/client/flexTabBar.js @@ -3,10 +3,11 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; + import { hasAllPermission } from '../../authorization'; import { popover, TabBar, Layout } from '../../ui-utils'; import { t } from '../../utils'; -import _ from 'underscore'; const commonHelpers = { title() { @@ -29,16 +30,16 @@ function canShowAddUsersButton(rid) { 'add-user-to-joined-room', rid ); if ( - !canAddToJoinedRoom && - !canAddToChannel && - Template.instance().tabBar.currentGroup() === 'channel' + !canAddToJoinedRoom + && !canAddToChannel + && Template.instance().tabBar.currentGroup() === 'channel' ) { return false; } if ( - !canAddToJoinedRoom && - !canAddToGroup && - Template.instance().tabBar.currentGroup() === 'group' + !canAddToJoinedRoom + && !canAddToGroup + && Template.instance().tabBar.currentGroup() === 'group' ) { return false; } @@ -176,7 +177,7 @@ Template.RoomsActionTab.events({ $(e.currentTarget).blur(); e.preventDefault(); const buttons = TabBar.getButtons().filter((button) => filterButtons(button, t.anonymous, t.data.rid)); - const groups = [{ items:(t.small.get() ? buttons : buttons.slice(TabBar.size)).map((item) => ({ + const groups = [{ items: (t.small.get() ? buttons : buttons.slice(TabBar.size)).map((item) => ({ ...item, name: TAPi18n.__(item.i18nTitle), actionDefault: item.action !== action && item.action, diff --git a/app/ui-flextab/client/tabs/inviteUsers.js b/app/ui-flextab/client/tabs/inviteUsers.js index af132d5c0faae559853959a5ab3662d9df570ca2..d4f1cc8bdfe27cd7e61f07ca456012198a1c0654 100644 --- a/app/ui-flextab/client/tabs/inviteUsers.js +++ b/app/ui-flextab/client/tabs/inviteUsers.js @@ -4,11 +4,12 @@ import { Blaze } from 'meteor/blaze'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; -import { settings } from '../../../settings'; -import { t } from '../../../utils'; import { Deps } from 'meteor/deps'; import toastr from 'toastr'; +import { settings } from '../../../settings'; +import { t } from '../../../utils'; + const acEvents = { 'click .rc-popup-list__item'(e, t) { t.ac.onItemClick(this, e); @@ -128,14 +129,14 @@ Template.inviteUsers.onRendered(function() { Template.inviteUsers.onCreated(function() { this.selectedUsers = new ReactiveVar([]); - const filter = { exceptions :[Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; + const filter = { exceptions: [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; Deps.autorun(() => { filter.exceptions = [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)); }); this.userFilter = new ReactiveVar(''); this.ac = new AutoComplete({ - selector:{ + selector: { item: '.rc-popup-list__item', container: '.rc-popup-list__list', }, diff --git a/app/ui-flextab/client/tabs/membersList.js b/app/ui-flextab/client/tabs/membersList.js index b83f2b27d6734195f1f39a6e028ef2ad1a3f264b..1b62302acd46a6e1d088b98b9d8de01160bb93dc 100644 --- a/app/ui-flextab/client/tabs/membersList.js +++ b/app/ui-flextab/client/tabs/membersList.js @@ -2,12 +2,13 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + +import { getActions } from './userActions'; import { RoomManager, popover } from '../../../ui-utils'; import { ChatRoom, Subscriptions } from '../../../models'; import { settings } from '../../../settings'; import { t, isRtl, handleError, roomTypes } from '../../../utils'; import { WebRTC } from '../../../webrtc/client'; -import { getActions } from './userActions'; Template.membersList.helpers({ ignored() { @@ -67,7 +68,7 @@ Template.membersList.helpers({ return { user, - status: (onlineUsers[user.username] != null ? onlineUsers[user.username].status : 'offline'), + status: onlineUsers[user.username] != null ? onlineUsers[user.username].status : 'offline', muted: Array.from(roomMuted).includes(user.username), utcOffset, }; @@ -197,14 +198,14 @@ Template.membersList.events({ const others = _actions.filter((action) => !action.group); const channel = _actions.filter((actions) => actions.group === 'channel'); if (others.length) { - groups.push({ items:others }); + groups.push({ items: others }); } if (channel.length) { - groups.push({ items:channel }); + groups.push({ items: channel }); } if (admin.length) { - groups.push({ items:admin }); + groups.push({ items: admin }); } columns[0] = { groups }; @@ -217,7 +218,7 @@ Template.membersList.events({ y: e.currentTarget.getBoundingClientRect().bottom + 100, }), customCSSProperties: () => ({ - top: `${ e.currentTarget.getBoundingClientRect().bottom + 10 }px`, + top: `${ e.currentTarget.getBoundingClientRect().bottom + 10 }px`, left: isRtl() ? `${ e.currentTarget.getBoundingClientRect().left - 10 }px` : undefined, }), data: { @@ -228,7 +229,7 @@ Template.membersList.events({ offsetHorizontal: 15, activeElement: e.currentTarget, currentTarget: e.currentTarget, - onDestroyed:() => { + onDestroyed: () => { e.currentTarget.parentElement.classList.remove('active'); }, }; @@ -236,7 +237,6 @@ Template.membersList.events({ popover.open(config); }, 'autocompleteselect #user-add-search'(event, template, doc) { - const roomData = Session.get(`roomData${ template.data.rid }`); if (roomTypes.roomTypes[roomData.t].canAddUser(roomData)) { @@ -272,13 +272,13 @@ Template.membersList.events({ Template.membersList.onCreated(function() { this.showAllUsers = new ReactiveVar(false); this.usersLimit = new ReactiveVar(100); - this.userDetail = new ReactiveVar; + this.userDetail = new ReactiveVar(); this.showDetail = new ReactiveVar(false); this.filter = new ReactiveVar(''); this.users = new ReactiveVar([]); - this.total = new ReactiveVar; + this.total = new ReactiveVar(); this.loading = new ReactiveVar(true); this.loadingMore = new ReactiveVar(false); diff --git a/app/ui-flextab/client/tabs/uploadedFilesList.js b/app/ui-flextab/client/tabs/uploadedFilesList.js index dc4a2bfc80e1970dc96baa2e7addc17edd2bfd3d..48b4d4128e64ab33ddbb59ac21eebcae1b5ce59f 100644 --- a/app/ui-flextab/client/tabs/uploadedFilesList.js +++ b/app/ui-flextab/client/tabs/uploadedFilesList.js @@ -1,5 +1,4 @@ import _ from 'underscore'; - import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { Mongo } from 'meteor/mongo'; @@ -152,7 +151,7 @@ Template.uploadedFilesList.events({ }, ], }, - ...(canDelete ? [{ + ...canDelete ? [{ items: [ { icon: 'trash', @@ -186,12 +185,12 @@ Template.uploadedFilesList.events({ }, }, ], - }] : []), + }] : [], ], }, ], currentTarget: e.currentTarget, - onDestroyed:() => { + onDestroyed: () => { e.currentTarget.parentElement.classList.remove('active'); }, }; diff --git a/app/ui-flextab/client/tabs/userActions.js b/app/ui-flextab/client/tabs/userActions.js index 1b43da8c88c0937ebfce54e03a75a3aa35ed2370..c543da6237098932b9f414162836d36671ee5d4c 100644 --- a/app/ui-flextab/client/tabs/userActions.js +++ b/app/ui-flextab/client/tabs/userActions.js @@ -2,13 +2,14 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { WebRTC } from '../../../webrtc/client'; import { ChatRoom, ChatSubscription, RoomRoles, Subscriptions } from '../../../models'; import { modal } from '../../../ui-utils'; import { t, handleError, roomTypes } from '../../../utils'; import { settings } from '../../../settings'; import { hasPermission, hasAllPermission, hasRole } from '../../../authorization'; -import toastr from 'toastr'; const canSetLeader = () => hasAllPermission('set-leader', Session.get('openedRoom')); @@ -20,9 +21,9 @@ const canMuteUser = () => hasAllPermission('mute-user', Session.get('openedRoom' const canRemoveUser = () => hasAllPermission('remove-user', Session.get('openedRoom')); -const canBlockUser = () => ( +const canBlockUser = () => ChatSubscription.findOne({ rid: Session.get('openedRoom'), 'u._id': Meteor.userId() }, { fields: { blocker: 1 } }) -).blocker; + .blocker; const canDirectMessageTo = (username) => { const subscription = Subscriptions.findOne({ rid: Session.get('openedRoom') }); @@ -39,18 +40,12 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { const isActive = () => user && user.active; - const isLeader = () => ( - user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'leader' }) - ); - - const isOwner = () => ( - user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'owner' }) - ); - - const isModerator = () => ( - user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'moderator' }) - ); - + const isLeader = () => + user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'leader' }); + const isOwner = () => + user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'owner' }); + const isModerator = () => + user && user._id && !!RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': user._id, roles: 'moderator' }); const isInDirectMessageRoom = () => { const room = ChatRoom.findOne(Session.get('openedRoom')); return (room && room.t) === 'd'; @@ -119,7 +114,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (WebRTC.getInstanceByRoomId(Session.get('openedRoom')).callInProgress.get()) { return { - icon : 'video', + icon: 'video', name: t('Join_video_call'), action() { WebRTC.getInstanceByRoomId(Session.get('openedRoom')).joinCall({ @@ -130,7 +125,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { }; } return { - icon : 'video', + icon: 'video', name: t('Start_video_call'), action() { WebRTC.getInstanceByRoomId(Session.get('openedRoom')).startCall({ @@ -158,7 +153,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (WebRTC.getInstanceByRoomId(Session.get('openedRoom')).callInProgress.get()) { return { - icon : 'mic', + icon: 'mic', name: t('Join_audio_call'), action() { WebRTC.getInstanceByRoomId(Session.get('openedRoom')).joinCall({ @@ -169,7 +164,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { }; } return { - icon : 'mic', + icon: 'mic', name: t('Start_audio_call'), action() { WebRTC.getInstanceByRoomId(Session.get('openedRoom')).startCall({ @@ -184,14 +179,14 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { } if (canBlockUser()) { return { - icon : 'ban', - name:t('Unblock_User'), + icon: 'ban', + name: t('Unblock_User'), action: prevent(getUser, ({ _id }) => Meteor.call('unblockUser', { rid: Session.get('openedRoom'), blocked: _id }, success(() => toastr.success(t('User_is_unblocked'))))), }; } return { - icon : 'ban', - name:t('Block_User'), + icon: 'ban', + name: t('Block_User'), modifier: 'alert', action: prevent(getUser, ({ _id }) => Meteor.call('blockUser', { rid: Session.get('openedRoom'), blocked: _id }, success(() => toastr.success(t('User_is_blocked'))))), }; @@ -202,7 +197,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (isOwner()) { return { group: 'channel', - name:t('Remove_as_owner'), + name: t('Remove_as_owner'), icon: 'shield-check', action: prevent(getUser, ({ _id, username }) => { const userOwner = RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': _id, roles: 'owner' }, { fields: { _id: 1 } }); @@ -228,7 +223,6 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { const room = ChatRoom.findOne(Session.get('openedRoom')); toastr.success(TAPi18n.__('User__username__is_now_a_owner_of__room_name_', { username, room_name: roomTypes.getRoomName(room.t, room) })); })); - }), }; }, () => { @@ -254,7 +248,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { } return { group: 'channel', - name:t('Set_as_leader'), + name: t('Set_as_leader'), icon: 'shield-alt', action: prevent(getUser, ({ _id, username }) => { const userLeader = RoomRoles.findOne({ rid: Session.get('openedRoom'), 'u._id': _id, roles: 'leader' }, { fields: { _id: 1 } }); @@ -268,7 +262,6 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { }), }; }, () => { - if (!directActions || !canSetModerator()) { return; } @@ -311,16 +304,16 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (isIgnored()) { return { group: 'channel', - icon : 'ban', + icon: 'ban', name: t('Unignore'), - action: prevent(getUser, ({ _id }) => Meteor.call('ignoreUser', { rid: Session.get('openedRoom'), userId:_id, ignore: false }, success(() => toastr.success(t('User_has_been_unignored'))))), + action: prevent(getUser, ({ _id }) => Meteor.call('ignoreUser', { rid: Session.get('openedRoom'), userId: _id, ignore: false }, success(() => toastr.success(t('User_has_been_unignored'))))), }; } return { group: 'channel', - icon : 'ban', + icon: 'ban', name: t('Ignore'), - action: prevent(getUser, ({ _id }) => Meteor.call('ignoreUser', { rid: Session.get('openedRoom'), userId:_id, ignore: true }, success(() => toastr.success(t('User_has_been_ignored'))))), + action: prevent(getUser, ({ _id }) => Meteor.call('ignoreUser', { rid: Session.get('openedRoom'), userId: _id, ignore: true }, success(() => toastr.success(t('User_has_been_ignored'))))), }; }, () => { if (!directActions || !canMuteUser()) { @@ -329,9 +322,9 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (isMuted()) { return { group: 'channel', - icon : 'mic', + icon: 'mic', name: t('Unmute_user'), - action:prevent(getUser, ({ username }) => { + action: prevent(getUser, ({ username }) => { const rid = Session.get('openedRoom'); if (!hasAllPermission('mute-user', rid)) { return toastr.error(TAPi18n.__('error-not-allowed')); @@ -342,7 +335,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { } return { group: 'channel', - icon : 'mute', + icon: 'mute', name: t('Mute_user'), action: prevent(getUser, ({ username }) => { const rid = Session.get('openedRoom'); @@ -407,7 +400,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { }), condition: () => directActions && canRemoveUser(), }, { - icon : 'edit', + icon: 'edit', name: 'Edit', group: 'admin', condition: () => !hideAdminControls && hasPermission('edit-other-user-info'), @@ -415,7 +408,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { this.editingUser.set(user._id); }), }, { - icon : 'trash', + icon: 'trash', name: 'Delete', action: prevent(getUser, ({ _id }) => { const erasureType = settings.get('Message_ErasureType'); @@ -453,14 +446,14 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (hasAdminRole()) { return { group: 'admin', - icon : 'key', + icon: 'key', name: t('Remove_Admin'), action: prevent(getUser, ({ _id }) => Meteor.call('setAdminStatus', _id, false, success(() => toastr.success(t('User_is_no_longer_an_admin'))))), }; } return { group: 'admin', - icon : 'key', + icon: 'key', name: t('Make_Admin'), action: prevent(getUser, ({ _id }) => Meteor.call('setAdminStatus', _id, true, success(() => toastr.success(t('User_is_now_an_admin'))))), }; @@ -471,7 +464,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { if (isActive()) { return { group: 'admin', - icon : 'user', + icon: 'user', id: 'deactivate', name: t('Deactivate'), modifier: 'alert', diff --git a/app/ui-flextab/client/tabs/userEdit.js b/app/ui-flextab/client/tabs/userEdit.js index cb888b400b5e17d5026b93966938a381f1b90a43..499422177e88e7f9e233caa5233e4fcd7baea7ba 100644 --- a/app/ui-flextab/client/tabs/userEdit.js +++ b/app/ui-flextab/client/tabs/userEdit.js @@ -3,14 +3,15 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Random } from 'meteor/random'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; +import s from 'underscore.string'; + import { t, handleError } from '../../../utils'; import { Roles } from '../../../models'; import { Notifications } from '../../../notifications'; import { hasAtLeastOnePermission } from '../../../authorization'; import { settings } from '../../../settings'; -import toastr from 'toastr'; import { callbacks } from '../../../callbacks'; -import s from 'underscore.string'; Template.userEdit.helpers({ @@ -44,7 +45,7 @@ Template.userEdit.helpers({ role() { const roles = Template.instance().roles.get(); - return Roles.find({ _id: { $nin:roles }, scope: 'Users' }, { sort: { description: 1, _id: 1 } }); + return Roles.find({ _id: { $nin: roles }, scope: 'Users' }, { sort: { description: 1, _id: 1 } }); }, userRoles() { @@ -162,7 +163,7 @@ Template.userEdit.events({ Template.userEdit.onCreated(function() { this.user = this.data != null ? this.data.user : undefined; this.roles = this.user ? new ReactiveVar(this.user.roles) : new ReactiveVar([]); - this.avatar = new ReactiveVar; + this.avatar = new ReactiveVar(); this.url = new ReactiveVar(''); Notifications.onLogged('updateAvatar', () => this.avatar.set()); @@ -173,13 +174,12 @@ Template.userEdit.onCreated(function() { this.$('input[type=checkbox]').prop('checked', true); if (this.user) { return this.data.back(username); - } else { - return tabBar.close(); } + return tabBar.close(); }; this.getUserData = () => { - const userData = { _id: (this.user != null ? this.user._id : undefined) }; + const userData = { _id: this.user != null ? this.user._id : undefined }; userData.name = s.trim(this.$('#name').val()); userData.username = s.trim(this.$('#username').val()); userData.email = s.trim(this.$('#email').val()); diff --git a/app/ui-flextab/client/tabs/userInfo.js b/app/ui-flextab/client/tabs/userInfo.js index 4c85bb8a817f78d6589645fbd0b860c1051580f9..c328fd6f056075621cdbb57dc797767b85ae0f5c 100644 --- a/app/ui-flextab/client/tabs/userInfo.js +++ b/app/ui-flextab/client/tabs/userInfo.js @@ -6,12 +6,13 @@ import { TAPi18n } from 'meteor/tap:i18n'; import _ from 'underscore'; import s from 'underscore.string'; import moment from 'moment'; + +import { getActions } from './userActions'; import { DateFormat } from '../../../lib'; import { popover } from '../../../ui-utils'; import { templateVarHandler } from '../../../utils'; import { RoomRoles, UserRoles, Roles } from '../../../models'; import { settings } from '../../../settings'; -import { getActions } from './userActions'; import './userInfo.html'; const shownActionsCount = 2; @@ -115,7 +116,7 @@ Template.userInfo.helpers({ linkedinUsername() { const user = Template.instance().user.get(); if (user && user.services && user.services.linkedin && user.services.linkedin.publicProfileUrl) { - return s.strRight(user.services.linkedin.publicProfileUrl), '/in/'; + return s.strRight(user.services.linkedin.publicProfileUrl, '/in/'); } }, @@ -196,14 +197,14 @@ Template.userInfo.events({ const others = actions.filter((action) => !action.group); const channel = actions.filter((actions) => actions.group === 'channel'); if (others.length) { - groups.push({ items:others }); + groups.push({ items: others }); } if (channel.length) { - groups.push({ items:channel }); + groups.push({ items: channel }); } if (admin.length) { - groups.push({ items:admin }); + groups.push({ items: admin }); } columns[0] = { groups }; @@ -223,7 +224,7 @@ Template.userInfo.events({ popover.open(config); }, 'click .js-action'(e) { - return this.action && this.action.apply(this, [e, { instance : Template.instance() }]); + return this.action && this.action.apply(this, [e, { instance: Template.instance() }]); }, 'click .js-close-info'(e, instance) { return instance.clear(); @@ -235,8 +236,8 @@ Template.userInfo.events({ Template.userInfo.onCreated(function() { this.now = new ReactiveVar(moment()); - this.user = new ReactiveVar; - this.actions = new ReactiveVar; + this.user = new ReactiveVar(); + this.actions = new ReactiveVar(); this.autorun(() => { const user = this.user.get(); @@ -251,9 +252,9 @@ Template.userInfo.onCreated(function() { }); this.actions.set(actions); }); - this.editingUser = new ReactiveVar; + this.editingUser = new ReactiveVar(); this.loadingUserInfo = new ReactiveVar(true); - this.loadedUsername = new ReactiveVar; + this.loadedUsername = new ReactiveVar(); this.tabBar = Template.currentData().tabBar; this.nowInterval = setInterval(() => this.now.set(moment()), 30000); @@ -273,7 +274,7 @@ Template.userInfo.onCreated(function() { this.autorun(() => { const data = Template.currentData(); if (data.clear != null) { - return this.clear = data.clear; + this.clear = data.clear; } }); diff --git a/app/ui-login/client/login/footer.js b/app/ui-login/client/login/footer.js index 6ca2466a6a51feeea790eb2c88fedd0e6cb3ba34..454ec5de57e7b051b87000225746288ce45c20e3 100644 --- a/app/ui-login/client/login/footer.js +++ b/app/ui-login/client/login/footer.js @@ -1,6 +1,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import { settings } from '../../../settings'; Template.loginFooter.onCreated(function() { diff --git a/app/ui-login/client/login/form.js b/app/ui-login/client/login/form.js index b3f8e95b1c0df5f7c4da5cc7a4fceba2e19067f1..cabba10d0a3b7f7d1a634f941aa6e8ca3175e29f 100644 --- a/app/ui-login/client/login/form.js +++ b/app/ui-login/client/login/form.js @@ -4,13 +4,14 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; -import { settings } from '../../../settings'; -import { callbacks } from '../../../callbacks'; -import { t, handleError } from '../../../utils'; import _ from 'underscore'; import s from 'underscore.string'; import toastr from 'toastr'; +import { settings } from '../../../settings'; +import { callbacks } from '../../../callbacks'; +import { t, handleError } from '../../../utils'; + Template.loginForm.helpers({ userName() { const user = Meteor.user(); @@ -19,9 +20,8 @@ Template.loginForm.helpers({ namePlaceholder() { if (settings.get('Accounts_RequireNameForSignUp')) { return t('Name'); - } else { - return t('Name_optional'); } + return t('Name_optional'); }, showFormLogin() { return settings.get('Accounts_ShowFormLogin'); @@ -96,12 +96,11 @@ Template.loginForm.events({ if (err) { handleError(err); return instance.state.set('login'); - } else { - instance.loading.set(false); - callbacks.run('userForgotPasswordEmailRequested'); - toastr.success(t('If_this_email_is_registered')); - return instance.state.set('login'); } + instance.loading.set(false); + callbacks.run('userForgotPasswordEmailRequested'); + toastr.success(t('If_this_email_is_registered')); + return instance.state.set('login'); }); return; } @@ -121,36 +120,34 @@ Template.loginForm.events({ return Meteor.loginWithPassword(s.trim(formData.email), formData.pass, function(error) { if (error && error.error === 'error-invalid-email') { return instance.state.set('wait-email-activation'); - } else if (error && error.error === 'error-user-is-not-activated') { + } if (error && error.error === 'error-user-is-not-activated') { return instance.state.set('wait-activation'); - } else { - Session.set('forceLogin', false); } + Session.set('forceLogin', false); }); }); - } else { - let loginMethod = 'loginWithPassword'; - if (settings.get('LDAP_Enable')) { - loginMethod = 'loginWithLDAP'; - } - if (settings.get('CROWD_Enable')) { - loginMethod = 'loginWithCrowd'; - } - return Meteor[loginMethod](s.trim(formData.emailOrUsername), formData.pass, function(error) { - instance.loading.set(false); - if (error != null) { - if (error.error === 'no-valid-email') { - instance.state.set('email-verification'); - } else if (error.error === 'error-user-is-not-activated') { - toastr.error(t('Wait_activation_warning')); - } else { - toastr.error(t('User_not_found_or_incorrect_password')); - } - return; - } - Session.set('forceLogin', false); - }); } + let loginMethod = 'loginWithPassword'; + if (settings.get('LDAP_Enable')) { + loginMethod = 'loginWithLDAP'; + } + if (settings.get('CROWD_Enable')) { + loginMethod = 'loginWithCrowd'; + } + return Meteor[loginMethod](s.trim(formData.emailOrUsername), formData.pass, function(error) { + instance.loading.set(false); + if (error != null) { + if (error.error === 'no-valid-email') { + instance.state.set('email-verification'); + } else if (error.error === 'error-user-is-not-activated') { + toastr.error(t('Wait_activation_warning')); + } else { + toastr.error(t('User_not_found_or_incorrect_password')); + } + return; + } + Session.set('forceLogin', false); + }); } }, 'click .register'() { @@ -169,7 +166,7 @@ Template.loginForm.events({ Template.loginForm.onCreated(function() { const instance = this; - this.customFields = new ReactiveVar; + this.customFields = new ReactiveVar(); this.loading = new ReactiveVar(false); Tracker.autorun(() => { const Accounts_CustomFields = settings.get('Accounts_CustomFields'); @@ -203,13 +200,16 @@ Template.loginForm.onCreated(function() { } const customField = customFields[field]; if (customField.required === true && !value) { - return validationObj[field] = t('Field_required'); + validationObj[field] = t('Field_required'); + return validationObj[field]; } if ((customField.maxLength != null) && value.length > customField.maxLength) { - return validationObj[field] = t('Max_length_is', customField.maxLength); + validationObj[field] = t('Max_length_is', customField.maxLength); + return validationObj[field]; } if ((customField.minLength != null) && value.length < customField.minLength) { - return validationObj[field] = t('Min_length_is', customField.minLength); + validationObj[field] = t('Min_length_is', customField.minLength); + return validationObj[field]; } } } diff --git a/app/ui-login/client/login/header.js b/app/ui-login/client/login/header.js index 96586ecf72fe6943b41faf7865fb2ad2ca6d12bb..d7ee161b54c2cd5007c3b520dfd47c877bd6881c 100644 --- a/app/ui-login/client/login/header.js +++ b/app/ui-login/client/login/header.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; Template.loginHeader.helpers({ diff --git a/app/ui-login/client/login/layout.js b/app/ui-login/client/login/layout.js index 3bb39ee47e90f3d1c5920f9aacbb8d794f13240f..e836872201ce5957334fad673a8323a1500c62df 100644 --- a/app/ui-login/client/login/layout.js +++ b/app/ui-login/client/login/layout.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; Template.loginLayout.onRendered(function() { diff --git a/app/ui-login/client/login/services.js b/app/ui-login/client/login/services.js index 99ca7acce3ab37a5ae3a357e8ada16ca6b963795..0d80072be5e60441d59dc314038e6561ff14cbee 100644 --- a/app/ui-login/client/login/services.js +++ b/app/ui-login/client/login/services.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { ServiceConfiguration } from 'meteor/service-configuration'; -import { CustomOAuth } from '../../../custom-oauth'; import s from 'underscore.string'; import toastr from 'toastr'; +import { CustomOAuth } from '../../../custom-oauth'; + Meteor.startup(function() { return ServiceConfiguration.configurations.find({ custom: true, diff --git a/app/ui-login/client/reset-password/resetPassword.js b/app/ui-login/client/reset-password/resetPassword.js index 626018b20aa58b068d931213c9254b2f887298a2..6e9361d8379e4e00f126944ed73235dbf895ece0 100644 --- a/app/ui-login/client/reset-password/resetPassword.js +++ b/app/ui-login/client/reset-password/resetPassword.js @@ -2,11 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; + import { modal } from '../../../ui-utils'; import { t } from '../../../utils'; import { Button } from '../../../ui'; import { callbacks } from '../../../callbacks'; -import toastr from 'toastr'; Template.resetPassword.helpers({ requirePasswordChange() { diff --git a/app/ui-login/client/username/layout.js b/app/ui-login/client/username/layout.js index 670aa9b5bd0d070be86a938ca31fbe0fa2c7b26b..3cea5221d7bd72016d94f80802c0fb1e6d240997 100644 --- a/app/ui-login/client/username/layout.js +++ b/app/ui-login/client/username/layout.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; Template.usernameLayout.helpers({ diff --git a/app/ui-login/client/username/username.js b/app/ui-login/client/username/username.js index 5d82c1a29b1cdbb0c9dbfa8a9130cab38d6da842..12bafe6517a016ff17fa34b16df9fc81779f6d60 100644 --- a/app/ui-login/client/username/username.js +++ b/app/ui-login/client/username/username.js @@ -1,14 +1,15 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { Button } from '../../../ui'; import { callbacks } from '../../../callbacks'; -import _ from 'underscore'; Template.username.onCreated(function() { const self = this; - self.username = new ReactiveVar; + self.username = new ReactiveVar(); return Meteor.call('getUsernameSuggestion', function(error, username) { self.username.set({ diff --git a/app/ui-master/client/main.js b/app/ui-master/client/main.js index 0371c0a84707b169b7107bde12e10e2218f7bf1e..2b27dfd8c98480d2cbce43bd071dba0602843893 100644 --- a/app/ui-master/client/main.js +++ b/app/ui-master/client/main.js @@ -4,10 +4,11 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { t, getUserPreference } from '../../utils'; -import { getConfig } from '../../ui-utils/client/config'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + +import { getConfig } from '../../ui-utils/client/config'; +import { t, getUserPreference } from '../../utils'; import { chatMessages } from '../../ui'; import { mainReady, Layout, iframeLogin, modal, popover, menu, fireGlobalEvent, RoomManager } from '../../ui-utils'; import { toolbarSearch } from '../../ui-sidenav'; @@ -17,7 +18,7 @@ import { CachedCollectionManager } from '../../ui-cached-collection'; import { hasRole } from '../../authorization'; import { tooltip } from '../../tooltip'; -settings.collection.find({ _id:/theme-color-rc/i }, { fields:{ value: 1 } }).observe({ changed: () => { DynamicCss.run(true, settings); } }); +settings.collection.find({ _id: /theme-color-rc/i }, { fields: { value: 1 } }).observe({ changed: () => { DynamicCss.run(true, settings); } }); Template.body.onRendered(function() { new Clipboard('.clipboard'); @@ -145,10 +146,9 @@ Template.main.helpers({ if (Meteor.userId() != null || (settings.get('Accounts_AllowAnonymousRead') === true && Session.get('forceLogin') !== true)) { $('html').addClass('noscroll').removeClass('scroll'); return true; - } else { - $('html').addClass('scroll').removeClass('noscroll'); - return false; } + $('html').addClass('scroll').removeClass('noscroll'); + return false; }, useIframe() { const iframeEnabled = typeof iframeLogin !== 'undefined'; @@ -248,10 +248,9 @@ Template.main.onRendered(function() { return tooltip.showElement($('<span>').text(username), avatarElem); } }); - } else { - $(document.body).off('mouseenter', 'button.thumb'); - return $(document.body).off('mouseleave', 'button.thumb'); } + $(document.body).off('mouseenter', 'button.thumb'); + return $(document.body).off('mouseleave', 'button.thumb'); }); }); diff --git a/app/ui-master/public/generateHTML.js b/app/ui-master/public/generateHTML.js index 729eb69e11ced5b38424f65106b770ab8b21b7af..a11a5ce3eaa03d38099c9714710a7a76098b1c04 100644 --- a/app/ui-master/public/generateHTML.js +++ b/app/ui-master/public/generateHTML.js @@ -59,9 +59,7 @@ const start = async () => { }); resolve(); }); - }); - } catch (error) { console.error(error); } finally { @@ -73,7 +71,6 @@ const start = async () => { try { start(); - } catch (error) { console.error(error); } diff --git a/app/ui-master/public/generateSprite.js b/app/ui-master/public/generateSprite.js index 457cb109f3b0d5d8f5461c2da067fac0ae9b66d1..77b7e5b08c8ca96de3a8e6c3997a4f645188e011 100644 --- a/app/ui-master/public/generateSprite.js +++ b/app/ui-master/public/generateSprite.js @@ -69,9 +69,7 @@ const start = async () => { resolve(Promise.all(promises)); }); - }); - } catch (error) { console.error(error); } finally { diff --git a/app/ui-master/server/inject.js b/app/ui-master/server/inject.js index 5fd028f0ce145d122d67d734ee2997b913b873d2..0552c076980c7a5c151449fc59e8541c3deb819c 100644 --- a/app/ui-master/server/inject.js +++ b/app/ui-master/server/inject.js @@ -1,13 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { Inject } from 'meteor/meteorhacks:inject-initial'; -import { Settings } from '../../models'; -import { settings } from '../../settings'; import _ from 'underscore'; import s from 'underscore.string'; +import { Settings } from '../../models'; +import { settings } from '../../settings'; + const renderDynamicCssList = _.debounce(Meteor.bindEnvironment(() => { // const variables = RocketChat.models.Settings.findOne({_id:'theme-custom-variables'}, {fields: { value: 1}}); - const colors = Settings.find({ _id:/theme-color-rc/i }, { fields: { value: 1, editor: 1 } }).fetch().filter((color) => color && color.value); + const colors = Settings.find({ _id: /theme-color-rc/i }, { fields: { value: 1, editor: 1 } }).fetch().filter((color) => color && color.value); if (!colors) { return; @@ -27,7 +28,7 @@ renderDynamicCssList(); // changed: renderDynamicCssList // }); -Settings.find({ _id:/theme-color-rc/i }, { fields: { value: 1 } }).observe({ +Settings.find({ _id: /theme-color-rc/i }, { fields: { value: 1 } }).observe({ changed: renderDynamicCssList, }); @@ -75,8 +76,8 @@ settings.get('Assets_SvgFavicon_Enable', (key, value) => { settings.get('theme-color-sidebar-background', (key, value) => { const escapedValue = s.escapeHTML(value); - Inject.rawHead(key, `<meta name="msapplication-TileColor" content="${ escapedValue }" />` + - `<meta name="theme-color" content="${ escapedValue }" />`); + Inject.rawHead(key, `<meta name="msapplication-TileColor" content="${ escapedValue }" />` + + `<meta name="theme-color" content="${ escapedValue }" />`); }); settings.get('Accounts_ForgetUserSessionOnWindowClose', (key, value) => { @@ -99,16 +100,16 @@ settings.get('Accounts_ForgetUserSessionOnWindowClose', (key, value) => { settings.get('Site_Name', (key, value = 'Rocket.Chat') => { const escapedValue = s.escapeHTML(value); Inject.rawHead(key, - `<title>${ escapedValue }</title>` + - `<meta name="application-name" content="${ escapedValue }">` + - `<meta name="apple-mobile-web-app-title" content="${ escapedValue }">`); + `<title>${ escapedValue }</title>` + + `<meta name="application-name" content="${ escapedValue }">` + + `<meta name="apple-mobile-web-app-title" content="${ escapedValue }">`); }); settings.get('Meta_language', (key, value = '') => { const escapedValue = s.escapeHTML(value); Inject.rawHead(key, - `<meta http-equiv="content-language" content="${ escapedValue }">` + - `<meta name="language" content="${ escapedValue }">`); + `<meta http-equiv="content-language" content="${ escapedValue }">` + + `<meta name="language" content="${ escapedValue }">`); }); settings.get('Meta_robots', (key, value = '') => { diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index 31803d19ea674bbaa5f37de5040d0aa9ec78b4c8..1624574b18046cf2fdb0461ba6dfb172dbad015e 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -1,5 +1,4 @@ import _ from 'underscore'; - import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Blaze } from 'meteor/blaze'; @@ -19,9 +18,9 @@ import './message.html'; import './messageThread.html'; async function renderPdfToCanvas(canvasId, pdfLink) { - const isSafari = /constructor/i.test(window.HTMLElement) || - ((p) => p.toString() === '[object SafariRemoteNotification]')(!window.safari || - (typeof window.safari !== 'undefined' && window.safari.pushNotification)); + const isSafari = /constructor/i.test(window.HTMLElement) + || ((p) => p.toString() === '[object SafariRemoteNotification]')(!window.safari + || (typeof window.safari !== 'undefined' && window.safari.pushNotification)); if (isSafari) { const [, version] = /Version\/([0-9]+)/.exec(navigator.userAgent) || [null, 0]; @@ -79,7 +78,7 @@ const renderBody = (msg, settings) => { } else if (messageType.template) { // render template } else if (messageType.message) { - msg = TAPi18n.__(messageType.message, { ... typeof messageType.data === 'function' && messageType.data(msg) }); + msg = TAPi18n.__(messageType.message, { ...typeof messageType.data === 'function' && messageType.data(msg) }); } else if (msg.u && msg.u.username === settings.Chatops_Username) { msg.html = msg.msg; msg = callbacks.run('renderMentions', msg); @@ -277,7 +276,7 @@ Template.message.helpers({ if (msg.i18nLabel) { return t(msg.i18nLabel); - } else if (msg.label) { + } if (msg.label) { return msg.label; } }, @@ -300,7 +299,7 @@ Template.message.helpers({ return Object.entries(reactions) .map(([emoji, reaction]) => { const myDisplayName = reaction.names ? myName : `@${ myUsername }`; - const displayNames = (reaction.names || reaction.usernames.map((username) => `@${ username }`)); + const displayNames = reaction.names || reaction.usernames.map((username) => `@${ username }`); const selectedDisplayNames = displayNames.slice(0, 15).filter((displayName) => displayName !== myDisplayName); if (displayNames.some((displayName) => displayName === myDisplayName)) { @@ -428,7 +427,6 @@ Template.message.helpers({ const findParentMessage = (() => { - const waiting = []; const getMessages = _.debounce(async function() { @@ -614,12 +612,10 @@ const processSequentials = ({ currentNode, settings, forceDate, showDateSeparato }; Template.message.onRendered(function() { // duplicate of onViewRendered(NRR) the onRendered works only for non nrr templates - this.autorun(() => { const currentNode = this.firstNode; processSequentials({ currentNode, ...messageArgs(Template.currentData()) }); }); - }); Template.message.onViewRendered = function() { diff --git a/app/ui-message/client/messageBox/messageBox.js b/app/ui-message/client/messageBox/messageBox.js index 947c1d7b367960e027a96a163487f48aa0c1fb8c..73e1af18b2b482ed241979b019127119dec44169 100644 --- a/app/ui-message/client/messageBox/messageBox.js +++ b/app/ui-message/client/messageBox/messageBox.js @@ -4,6 +4,13 @@ import { ReactiveDict } from 'meteor/reactive-dict'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; +import moment from 'moment'; + +import { setupAutogrow } from './messageBoxAutogrow'; +import { + formattingButtons, + applyFormatting, +} from './messageBoxFormatting'; import { EmojiPicker } from '../../../emoji'; import { Users } from '../../../models'; import { settings } from '../../../settings'; @@ -23,12 +30,6 @@ import { roomTypes, getUserPreference, } from '../../../utils'; -import moment from 'moment'; -import { setupAutogrow } from './messageBoxAutogrow'; -import { - formattingButtons, - applyFormatting, -} from './messageBoxFormatting'; import './messageBoxActions'; import './messageBoxReplyPreview'; import './messageBoxTyping'; @@ -70,7 +71,8 @@ Template.messageBox.onCreated(function() { const before = input.value.substring(0, input.selectionStart); const after = input.value.substring(input.selectionEnd, input.value.length); input.value = `${ before }\n${ after }`; - input.selectionStart = input.selectionEnd = newPosition; + input.selectionStart = newPosition; + input.selectionEnd = newPosition; } else { input.value += '\n'; } @@ -116,8 +118,8 @@ Template.messageBox.onRendered(function() { }); } - const isBlocked = (room && room.t === 'd' && subscription && subscription.blocked); - const isBlocker = (room && room.t === 'd' && subscription && subscription.blocker); + const isBlocked = room && room.t === 'd' && subscription && subscription.blocked; + const isBlocker = room && room.t === 'd' && subscription && subscription.blocker; const isBlockedOrBlocker = isBlocked || isBlocker; const mustJoinWithCode = !subscription && room.joinCodeRequired; @@ -273,8 +275,8 @@ const handleSubmit = (event, instance) => { } const sendOnEnter = getUserPreference(Meteor.userId(), 'sendOnEnter'); - const sendOnEnterActive = sendOnEnter == null || sendOnEnter === 'normal' || - (sendOnEnter === 'desktop' && Meteor.Device.isDesktop()); + const sendOnEnterActive = sendOnEnter == null || sendOnEnter === 'normal' + || (sendOnEnter === 'desktop' && Meteor.Device.isDesktop()); const withModifier = event.shiftKey || event.ctrlKey || event.altKey || event.metaKey; const isSending = (sendOnEnterActive && !withModifier) || (!sendOnEnterActive && withModifier); @@ -358,7 +360,7 @@ Template.messageBox.events({ } const files = [...event.originalEvent.clipboardData.items] - .filter((item) => (item.kind === 'file' && item.type.indexOf('image/') !== -1)) + .filter((item) => item.kind === 'file' && item.type.indexOf('image/') !== -1) .map((item) => ({ file: item.getAsFile(), name: `Clipboard - ${ moment().format(settings.get('Message_TimeAndDateFormat')) }`, @@ -368,7 +370,6 @@ Template.messageBox.events({ if (files.length) { event.preventDefault(); fileUpload(files, input, { rid, tmid }); - return; } }, 'input .js-input-message'(event, instance) { diff --git a/app/ui-message/client/messageBox/messageBoxActions.js b/app/ui-message/client/messageBox/messageBoxActions.js index 472f0fb1c62f9de094e6c04a02d456967a0adcd0..9dd7ca8d75af59229a8b1f02f220b7f112913358 100644 --- a/app/ui-message/client/messageBox/messageBoxActions.js +++ b/app/ui-message/client/messageBox/messageBoxActions.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; + import { VRecDialog } from '../../../ui-vrecord/client'; import { messageBox, modal } from '../../../ui-utils'; import { fileUpload } from '../../../ui'; @@ -12,13 +13,13 @@ import { mime } from '../../../utils/lib/mimeTypes'; messageBox.actions.add('Create_new', 'Video_message', { id: 'video-message', icon: 'video', - condition: () => (navigator.mediaDevices || navigator.getUserMedia || navigator.webkitGetUserMedia || - navigator.mozGetUserMedia || navigator.msGetUserMedia) && - window.MediaRecorder && - settings.get('FileUpload_Enabled') && - settings.get('Message_VideoRecorderEnabled') && - (!settings.get('FileUpload_MediaTypeWhiteList') || - settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)), + condition: () => (navigator.mediaDevices || navigator.getUserMedia || navigator.webkitGetUserMedia + || navigator.mozGetUserMedia || navigator.msGetUserMedia) + && window.MediaRecorder + && settings.get('FileUpload_Enabled') + && settings.get('Message_VideoRecorderEnabled') + && (!settings.get('FileUpload_MediaTypeWhiteList') + || settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)), action: ({ rid, tmid, messageBox }) => (VRecDialog.opened ? VRecDialog.close() : VRecDialog.open(messageBox, { rid, tmid })), }); @@ -106,8 +107,7 @@ Meteor.startup(() => { const isMapViewEnabled = settings.get('MapView_Enabled') === true; const isGeolocationWatchSupported = navigator.geolocation && navigator.geolocation.watchPosition; const googleMapsApiKey = settings.get('MapView_GMapsAPIKey'); - const canGetGeolocation = - isMapViewEnabled && isGeolocationWatchSupported && (googleMapsApiKey && googleMapsApiKey.length); + const canGetGeolocation = isMapViewEnabled && isGeolocationWatchSupported && (googleMapsApiKey && googleMapsApiKey.length); if (!canGetGeolocation) { geolocation.set(false); diff --git a/app/ui-message/client/messageBox/messageBoxAudioMessage.js b/app/ui-message/client/messageBox/messageBoxAudioMessage.js index ecaf049bd3f22590abe29217c5f25d89d13a456f..e61f515a823f45cf1ba705c13af380b72882231e 100644 --- a/app/ui-message/client/messageBox/messageBoxAudioMessage.js +++ b/app/ui-message/client/messageBox/messageBoxAudioMessage.js @@ -2,6 +2,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; + import { fileUploadHandler } from '../../../file-upload'; import { settings } from '../../../settings'; import { AudioRecorder } from '../../../ui'; @@ -105,12 +106,12 @@ Template.messageBoxAudioMessage.onCreated(function() { Template.messageBoxAudioMessage.helpers({ isAllowed() { - return AudioRecorder.isSupported() && - !Template.instance().isMicrophoneDenied.get() && - settings.get('FileUpload_Enabled') && - settings.get('Message_AudioRecorderEnabled') && - (!settings.get('FileUpload_MediaTypeWhiteList') || - settings.get('FileUpload_MediaTypeWhiteList').match(/audio\/mp3|audio\/\*/i)); + return AudioRecorder.isSupported() + && !Template.instance().isMicrophoneDenied.get() + && settings.get('FileUpload_Enabled') + && settings.get('Message_AudioRecorderEnabled') + && (!settings.get('FileUpload_MediaTypeWhiteList') + || settings.get('FileUpload_MediaTypeWhiteList').match(/audio\/mp3|audio\/\*/i)); }, stateClass() { @@ -140,9 +141,9 @@ Template.messageBoxAudioMessage.events({ try { await startRecording(); - const startTime = new Date; + const startTime = new Date(); recordingInterval.set(setInterval(() => { - const now = new Date; + const now = new Date(); const distance = (now.getTime() - startTime.getTime()) / 1000; const minutes = Math.floor(distance / 60); const seconds = Math.floor(distance % 60); diff --git a/app/ui-message/client/messageBox/messageBoxAutogrow.js b/app/ui-message/client/messageBox/messageBoxAutogrow.js index 054acd98b142785c1579b2cd0d96f93bd4cf12dd..99e6cf8006a2729ce34a76f254232b8ae3b184f8 100644 --- a/app/ui-message/client/messageBox/messageBoxAutogrow.js +++ b/app/ui-message/client/messageBox/messageBoxAutogrow.js @@ -34,15 +34,12 @@ export const setupAutogrow = (textarea: HTMLTextAreaElement, shadow: HTMLDivElem return true; } - const shadowText = ( - text.replace(/</g, '<') - .replace(/>/g, '>') - .replace(/&/g, '&') - .replace(/\n$/, '<br/> ') - .replace(/\n/g, '<br/>') - .replace(/ {2,}/g, replaceWhitespaces) - ); - + const shadowText = text.replace(/</g, '<') + .replace(/>/g, '>') + .replace(/&/g, '&') + .replace(/\n$/, '<br/> ') + .replace(/\n/g, '<br/>') + .replace(/ {2,}/g, replaceWhitespaces); if (wasWidthChanged) { shadow.style.width = `${ width }px`; lastWidth = width; @@ -59,7 +56,7 @@ export const setupAutogrow = (textarea: HTMLTextAreaElement, shadow: HTMLDivElem lastHeight = height; - const overflow = (height === maxHeight) ? 'hidden' : ''; + const overflow = height === maxHeight ? 'hidden' : ''; if (height < maxHeight) { textLenght = text.length; diff --git a/app/ui-message/client/messageBox/messageBoxNotSubscribed.js b/app/ui-message/client/messageBox/messageBoxNotSubscribed.js index 75cb1b1c1f3c034c35d44aa928177160b9831090..0b0f75833babc7b6df801363371f283c57d7a9b2 100644 --- a/app/ui-message/client/messageBox/messageBoxNotSubscribed.js +++ b/app/ui-message/client/messageBox/messageBoxNotSubscribed.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; import { call, RoomManager, RoomHistoryManager } from '../../../ui-utils'; import { roomTypes } from '../../../utils'; @@ -24,13 +25,13 @@ Template.messageBoxNotSubscribed.helpers({ return room && room.joinCodeRequired; }, isAnonymousReadAllowed() { - return (Meteor.userId() == null) && - settings.get('Accounts_AllowAnonymousRead') === true; + return (Meteor.userId() == null) + && settings.get('Accounts_AllowAnonymousRead') === true; }, isAnonymousWriteAllowed() { - return (Meteor.userId() == null) && - settings.get('Accounts_AllowAnonymousRead') === true && - settings.get('Accounts_AllowAnonymousWrite') === true; + return (Meteor.userId() == null) + && settings.get('Accounts_AllowAnonymousRead') === true + && settings.get('Accounts_AllowAnonymousWrite') === true; }, }); diff --git a/app/ui-message/client/messageBox/messageBoxReadOnly.js b/app/ui-message/client/messageBox/messageBoxReadOnly.js index 2d012911926b3d6f8a2643e7f161a89dfdd9552f..a20d93326a6b1c5536c6679d76b2f5d73831a94b 100644 --- a/app/ui-message/client/messageBox/messageBoxReadOnly.js +++ b/app/ui-message/client/messageBox/messageBoxReadOnly.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { roomTypes } from '../../../utils'; import './messageBoxReadOnly.html'; diff --git a/app/ui-message/client/messageBox/messageBoxTyping.js b/app/ui-message/client/messageBox/messageBoxTyping.js index 715f909adce708023543b6d4de52b04688974205..9a1d07a9d6a9a9ba356209b737f09b44a5c59757 100644 --- a/app/ui-message/client/messageBox/messageBoxTyping.js +++ b/app/ui-message/client/messageBox/messageBoxTyping.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { MsgTyping } from '../../../ui'; import { t } from '../../../utils'; import './messageBoxTyping.html'; diff --git a/app/ui-message/client/popup/messagePopup.js b/app/ui-message/client/popup/messagePopup.js index 471d11ca557bab4a1ba040e85f8e875956658527..386af6ac7416e11fc8baf6f362aa242de90fa6e9 100644 --- a/app/ui-message/client/popup/messagePopup.js +++ b/app/ui-message/client/popup/messagePopup.js @@ -5,6 +5,7 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { toolbarSearch } from '../../../ui-sidenav'; import { lazyloadtick } from '../../../lazy-load'; import './messagePopup.html'; @@ -25,7 +26,7 @@ function getCursorPosition(input) { } if (input.selectionStart != null) { return input.selectionStart; - } else if (document.selection != null) { + } if (document.selection != null) { input.focus(); const sel = document.selection.createRange(); const selLen = document.selection.createRange().text.length; @@ -41,7 +42,7 @@ function setCursorPosition(input, caretPos) { if (input.selectionStart != null) { input.focus(); return input.setSelectionRange(caretPos, caretPos); - } else if (document.selection != null) { + } if (document.selection != null) { const range = input.createTextRange(); range.move('character', caretPos); return range.select(); @@ -51,9 +52,8 @@ function setCursorPosition(input, caretPos) { function val(v, d) { if (v != null) { return v; - } else { - return d; } + return d; } Template.messagePopup.onCreated(function() { @@ -62,7 +62,7 @@ Template.messagePopup.onCreated(function() { template.textFilterDelay = val(template.data.textFilterDelay, 0); template.open = val(template.data.open, new ReactiveVar(false)); template.hasData = new ReactiveVar(false); - template.value = new ReactiveVar; + template.value = new ReactiveVar(); template.trigger = val(template.data.trigger, ''); template.triggerAnywhere = val(template.data.triggerAnywhere, true); template.closeOnEsc = val(template.data.closeOnEsc, true); @@ -109,9 +109,8 @@ Template.messagePopup.onCreated(function() { if (first != null) { first.className += ' selected sidebar-item__popup-active'; return template.value.set(first.getAttribute('data-id')); - } else { - return template.value.set(null); } + return template.value.set(null); } }; template.onInputKeydown = (event) => { @@ -186,9 +185,8 @@ Template.messagePopup.onCreated(function() { return Meteor.defer(function() { return template.verifySelection(); }); - } else { - return template.open.set(false); } + return template.open.set(false); }; template.onBlur = () => { @@ -293,7 +291,7 @@ Template.messagePopup.events({ }, 'mousedown .popup-item, touchstart .popup-item'() { const template = Template.instance(); - return template.clickingItem = true; + template.clickingItem = true; }, 'mouseup .popup-item, touchend .popup-item'() { const template = Template.instance(); diff --git a/app/ui-message/client/popup/messagePopupChannel.js b/app/ui-message/client/popup/messagePopupChannel.js index 19efbb86285e9e8a4f5f19a695cd0c9c72656fcd..0a2f7967b4be1a7532ecb46c5aa8c1f2f79bd4c1 100644 --- a/app/ui-message/client/popup/messagePopupChannel.js +++ b/app/ui-message/client/popup/messagePopupChannel.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { roomTypes } from '../../../utils'; import './messagePopupChannel.html'; diff --git a/app/ui-message/client/popup/messagePopupConfig.js b/app/ui-message/client/popup/messagePopupConfig.js index 6ee4e8e614b12afa7f88ae5dbb962b4d70026610..11de8dceca40f13b19197acba975861b30931118 100644 --- a/app/ui-message/client/popup/messagePopupConfig.js +++ b/app/ui-message/client/popup/messagePopupConfig.js @@ -6,6 +6,7 @@ import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import { Messages, Subscriptions, Users } from '../../../models'; import { hasAllPermission, hasAtLeastOnePermission } from '../../../authorization'; import { EmojiPicker, emoji } from '../../../emoji'; @@ -197,12 +198,12 @@ Template.messagePopupConfig.helpers({ .find( { ts: { $exists: true }, - ...(filterRegex && { + ...filterRegex && { $or: [ { username: filterRegex }, { name: filterRegex }, ], - }), + }, }, { limit: 5, @@ -221,12 +222,12 @@ Template.messagePopupConfig.helpers({ t: 'd', $and: [ { - ...(filterRegex && { + ...filterRegex && { $or: [ { name: filterRegex }, { fname: filterRegex }, ], - }), + }, }, { name: { $nin: usernamesAlreadyFetched }, @@ -269,12 +270,12 @@ Template.messagePopupConfig.helpers({ const newItems = Meteor.users.find({ $and: [ { - ...(filterRegex && { + ...filterRegex && { $or: [ { username: filterRegex }, { name: filterRegex }, ], - }), + }, }, { username: { diff --git a/app/ui-message/client/popup/messagePopupSlashCommandPreview.js b/app/ui-message/client/popup/messagePopupSlashCommandPreview.js index b0f9e1b0d9cf66e7bbad265d4437eb81c4c74d9a..8ed6a44125f6691299d7fbc9b64868193e86a397 100644 --- a/app/ui-message/client/popup/messagePopupSlashCommandPreview.js +++ b/app/ui-message/client/popup/messagePopupSlashCommandPreview.js @@ -2,6 +2,7 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { slashCommands } from '../../../utils'; import { hasAtLeastOnePermission } from '../../../authorization'; import { toolbarSearch } from '../../../ui-sidenav'; @@ -24,7 +25,7 @@ function getCursorPosition(input) { if (input.selectionStart) { return input.selectionStart; - } else if (document.selection) { + } if (document.selection) { input.focus(); const sel = document.selection.createRange(); const selLen = document.selection.createRange().text.length; diff --git a/app/ui-sidenav/client/chatRoomItem.js b/app/ui-sidenav/client/chatRoomItem.js index 780df40c96b2e9b16d56b4927cca2a8b36ff3734..801c415babe9d74c70f82b1b2dcddd6fe386fae8 100644 --- a/app/ui-sidenav/client/chatRoomItem.js +++ b/app/ui-sidenav/client/chatRoomItem.js @@ -2,7 +2,6 @@ import { Template } from 'meteor/templating'; import { t, roomTypes } from '../../utils/client'; import { settings } from '../../settings/client'; - import { Rooms } from '../../models/client'; import { callbacks } from '../../callbacks/client'; @@ -23,7 +22,7 @@ Template.chatRoomItem.helpers({ ...this, icon, avatar: roomType.getAvatarPath(this), - username : this.name, + username: this.name, route: roomTypes.getRouteLink(this.t, this), name: roomType.roomName(this), unread, diff --git a/app/ui-sidenav/client/roomList.js b/app/ui-sidenav/client/roomList.js index 4d82198b5d4f83d31aa8b52c20cca5679fb6803d..9fd08cec6ca62ab8d04474bc6b55cfbfb60212f3 100644 --- a/app/ui-sidenav/client/roomList.js +++ b/app/ui-sidenav/client/roomList.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { callbacks } from '../../callbacks'; import { Template } from 'meteor/templating'; + +import { callbacks } from '../../callbacks'; import { ChatSubscription, Rooms, Users, Subscriptions } from '../../models'; import { UiTextContext, getUserPreference, roomTypes } from '../../utils'; import { settings } from '../../settings'; diff --git a/app/ui-sidenav/client/sideNav.js b/app/ui-sidenav/client/sideNav.js index d16ab2d41138c9a1508d53908a0ef9422015a883..bf92589668f6aad78e447fb4a84144122cde0bfc 100644 --- a/app/ui-sidenav/client/sideNav.js +++ b/app/ui-sidenav/client/sideNav.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; -import { lazyloadtick } from '../../lazy-load'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + +import { lazyloadtick } from '../../lazy-load'; import { SideNav, menu } from '../../ui-utils'; import { settings } from '../../settings'; import { roomTypes, getUserPreference } from '../../utils'; @@ -39,7 +40,7 @@ Template.sideNav.helpers({ sidebarViewMode() { const viewMode = getUserPreference(Meteor.userId(), 'sidebarViewMode'); - return viewMode ? viewMode : 'condensed'; + return viewMode || 'condensed'; }, sidebarHideAvatar() { @@ -102,6 +103,6 @@ Template.sideNav.onCreated(function() { }, }); const userPref = getUserPreference(user, 'sidebarGroupByType'); - this.groupedByType.set(userPref ? userPref : settings.get('UI_Group_Channels_By_Type')); + this.groupedByType.set(userPref || settings.get('UI_Group_Channels_By_Type')); }); }); diff --git a/app/ui-sidenav/client/sidebarHeader.js b/app/ui-sidenav/client/sidebarHeader.js index 22e8bdcac6d78cc23d4d8259a5f5f15154f2fbed..a35519ed0c627dc16fc006dce3f00c8cf2ccb5be 100644 --- a/app/ui-sidenav/client/sidebarHeader.js +++ b/app/ui-sidenav/client/sidebarHeader.js @@ -2,9 +2,9 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { popover, AccountBox, menu, SideNav, modal } from '../../ui-utils'; import { t, getUserPreference, handleError } from '../../utils'; - import { callbacks } from '../../callbacks'; import { settings } from '../../settings'; import { hasAtLeastOnePermission } from '../../authorization'; @@ -36,8 +36,6 @@ const extendedViewOption = (user) => { }, }; } - - return; }; const showToolbar = new ReactiveVar(false); @@ -156,8 +154,6 @@ const toolbarButtons = (user) => [{ icon: 'edit-rounded', condition: () => hasAtLeastOnePermission(['create-c', 'create-p']), action: (e) => { - - const createChannel = (e) => { e.preventDefault(); modal.open({ diff --git a/app/ui-sidenav/client/sidebarItem.js b/app/ui-sidenav/client/sidebarItem.js index 2e82468248bddd910e2b465e74478e5889fc34e3..352498763a2e78450e71b0551f6b2f546a878540 100644 --- a/app/ui-sidenav/client/sidebarItem.js +++ b/app/ui-sidenav/client/sidebarItem.js @@ -2,12 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { t, getUserPreference, roomTypes } from '../../utils'; import { popover, renderMessageBody, menu } from '../../ui-utils'; import { Users, ChatSubscription } from '../../models'; import { settings } from '../../settings'; import { hasAtLeastOnePermission } from '../../authorization'; - import { timeAgo } from '../../lib/client/lib/formatDate'; Template.sidebarItem.helpers({ @@ -85,13 +85,15 @@ Template.sidebarItem.onCreated(function() { } if (!currentData.lastMessage._id) { - return this.renderedMessage = currentData.lastMessage.msg; + this.renderedMessage = currentData.lastMessage.msg; + return; } setLastMessageTs(this, currentData.lastMessage.ts); if (currentData.lastMessage.t === 'e2e' && currentData.lastMessage.e2e !== 'done') { - return this.renderedMessage = '******'; + this.renderedMessage = '******'; + return; } const otherUser = settings.get('UI_Use_Real_Name') ? currentData.lastMessage.u.name || currentData.lastMessage.u.username : currentData.lastMessage.u.username; @@ -122,7 +124,7 @@ Template.sidebarItem.events({ if (roomData.t === 'c' && !hasAtLeastOnePermission('leave-c')) { return false; } if (roomData.t === 'p' && !hasAtLeastOnePermission('leave-p')) { return false; } - return !(((roomData.cl != null) && !roomData.cl) || (['d', 'l'].includes(roomData.t))); + return !(((roomData.cl != null) && !roomData.cl) || ['d', 'l'].includes(roomData.t)); }; const canFavorite = settings.get('Favorite_Rooms') && ChatSubscription.find({ rid: this.rid }).count() > 0; diff --git a/app/ui-sidenav/client/sortlist.js b/app/ui-sidenav/client/sortlist.js index 5bb94df0e1d97d5e0eb20800e405ce21c32d0d33..23144008b15e5324600a494d5a92759229f51e40 100644 --- a/app/ui-sidenav/client/sortlist.js +++ b/app/ui-sidenav/client/sortlist.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { popover } from '../../ui-utils'; import { getUserPreference } from '../../utils'; import { settings } from '../../settings'; @@ -44,7 +45,7 @@ Template.sortlist.events({ value = !value; } Meteor.call('saveUserPreferences', { - [name] : value, + [name]: value, }); popover.close(); }, diff --git a/app/ui-sidenav/client/toolbar.js b/app/ui-sidenav/client/toolbar.js index 9998ae91ecdacb60b7b402a551557d3c1c4db70c..d8bcbfaaa78f5180a9f7084b8452a725c99cd120 100644 --- a/app/ui-sidenav/client/toolbar.js +++ b/app/ui-sidenav/client/toolbar.js @@ -5,12 +5,13 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; +import _ from 'underscore'; + +import { toolbarSearch } from './sidebarHeader'; import { Rooms, Subscriptions } from '../../models'; import { roomTypes } from '../../utils'; import { hasAtLeastOnePermission } from '../../authorization'; import { menu } from '../../ui-utils'; -import { toolbarSearch } from './sidebarHeader'; -import _ from 'underscore'; let filterText = ''; let usernamesFromClient; @@ -82,7 +83,7 @@ Template.toolbar.helpers({ if (!Meteor.Device.isDesktop()) { return placeholder; - } else if (window.navigator.platform.toLowerCase().includes('mac')) { + } if (window.navigator.platform.toLowerCase().includes('mac')) { placeholder = `${ placeholder } (\u2318+K)`; } else { placeholder = `${ placeholder } (\u2303+K)`; @@ -135,7 +136,7 @@ Template.toolbar.helpers({ query.t = 'd'; } - const searchQuery = new RegExp((RegExp.escape(filterText)), 'i'); + const searchQuery = new RegExp(RegExp.escape(filterText), 'i'); query.$or = [ { name: searchQuery }, { fname: searchQuery }, @@ -144,7 +145,7 @@ Template.toolbar.helpers({ resultsFromClient = collection.find(query, { limit: 20, sort: { unread: -1, ls: -1 } }).fetch(); const resultsFromClientLength = resultsFromClient.length; - const user = Meteor.users.findOne(Meteor.userId(), { fields: { name: 1, username:1 } }); + const user = Meteor.users.findOne(Meteor.userId(), { fields: { name: 1, username: 1 } }); if (user) { usernamesFromClient = [user]; } diff --git a/app/ui-utils/client/lib/AccountBox.js b/app/ui-utils/client/lib/AccountBox.js index f10ab7f5bb4c14fa637f915a8c308a19dbd8d209..1090db25561be43fb065b7be7b215fdc3bc6e5cd 100644 --- a/app/ui-utils/client/lib/AccountBox.js +++ b/app/ui-utils/client/lib/AccountBox.js @@ -4,9 +4,10 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; -import { SideNav } from './SideNav'; import _ from 'underscore'; +import { SideNav } from './SideNav'; + export const AccountBox = (function() { let status = 0; const items = new ReactiveVar([]); @@ -26,9 +27,8 @@ export const AccountBox = (function() { function toggle() { if (status) { return close(); - } else { - return open(); } + return open(); } function openFlex() { status = 0; diff --git a/app/ui-utils/client/lib/AdminBox.js b/app/ui-utils/client/lib/AdminBox.js index d4978f9b7d1a0d7e3a244cdaa0928582cada8ad3..f6f1856ffa5a73555f3c0fefc3cfa9d17687c840 100644 --- a/app/ui-utils/client/lib/AdminBox.js +++ b/app/ui-utils/client/lib/AdminBox.js @@ -6,6 +6,7 @@ export const AdminBox = new class { constructor() { this.options = new ReactiveVar([]); } + addOption(option) { return Tracker.nonreactive(() => { const actual = this.options.get(); @@ -13,6 +14,7 @@ export const AdminBox = new class { return this.options.set(actual); }); } + getOptions() { return _.filter(this.options.get(), function(option) { if ((option.permissionGranted == null) || option.permissionGranted()) { @@ -20,4 +22,4 @@ export const AdminBox = new class { } }); } -}; +}(); diff --git a/app/ui-utils/client/lib/ChannelActions.js b/app/ui-utils/client/lib/ChannelActions.js index ae4623ada8ba4fe1ea96c6f1c13950ee71fe808b..1fb6493a6fc5ae84b848443da57e98fcf468ca1c 100644 --- a/app/ui-utils/client/lib/ChannelActions.js +++ b/app/ui-utils/client/lib/ChannelActions.js @@ -1,9 +1,10 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; -import { t, UiTextContext, roomTypes, handleError } from '../../../utils'; + import { modal } from './modal'; import { call } from './callMethod'; import { RoomManager } from './RoomManager'; +import { t, UiTextContext, roomTypes, handleError } from '../../../utils'; export function hide(type, rid, name) { const warnText = roomTypes.roomTypes[type].getUiText(UiTextContext.HIDE_WARNING); diff --git a/app/ui-utils/client/lib/IframeLogin.js b/app/ui-utils/client/lib/IframeLogin.js index caa389d33d359e0129063f132fbed2c4577c5c1d..973328debff58b0bacb65e6a47c05345bef8b759 100644 --- a/app/ui-utils/client/lib/IframeLogin.js +++ b/app/ui-utils/client/lib/IframeLogin.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; -import { settings } from '../../../settings'; import { Accounts } from 'meteor/accounts-base'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { HTTP } from 'meteor/http'; +import { settings } from '../../../settings'; + export class IframeLogin { constructor() { this.enabled = false; diff --git a/app/ui-utils/client/lib/Layout.js b/app/ui-utils/client/lib/Layout.js index 8e96e34ddf5a27654664499e2071ed9c31fe64a5..73dc3f46ec171a585e759698f7794ad98747416d 100644 --- a/app/ui-utils/client/lib/Layout.js +++ b/app/ui-utils/client/lib/Layout.js @@ -1,7 +1,7 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; -export const Layout = new (class RocketChatLayout { +export const Layout = new class RocketChatLayout { constructor() { Tracker.autorun(() => { this.layout = FlowRouter.getQueryParam('layout'); @@ -11,4 +11,4 @@ export const Layout = new (class RocketChatLayout { isEmbedded() { return this.layout === 'embedded'; } -}); +}(); diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js index 57265258253bc9b66fbd546c2034f1d9e7c5300a..3bbf948ddfc87a9f8d3fbde2830db378f0fb7702 100644 --- a/app/ui-utils/client/lib/MessageAction.js +++ b/app/ui-utils/client/lib/MessageAction.js @@ -3,19 +3,19 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import moment from 'moment'; import toastr from 'toastr'; import mem from 'mem'; - import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; -import { roomTypes, canDeleteMessage } from '../../../utils/client'; import { messageArgs } from './messageArgs'; +import { modal } from './modal'; +import { roomTypes, canDeleteMessage } from '../../../utils/client'; import { Messages, Rooms, Subscriptions } from '../../../models/client'; import { hasAtLeastOnePermission } from '../../../authorization/client'; import { settings } from '../../../settings/client'; -import { modal } from './modal'; + const call = (method, ...args) => new Promise((resolve, reject) => { Meteor.call(method, ...args, function(err, data) { @@ -141,7 +141,7 @@ export const MessageAction = new class { const roomURL = roomTypes.getURL(roomData.t, subData || roomData); return `${ roomURL }?msg=${ msgId }`; } -}; +}(); Meteor.startup(async function() { const { chatMessages } = await import('../../../ui'); @@ -278,9 +278,8 @@ Meteor.startup(async function() { currentTsDiff = moment().diff(msgTs, 'minutes'); } return currentTsDiff < blockEditInMinutes; - } else { - return true; } + return true; }, order: 6, group: 'menu', diff --git a/app/ui-utils/client/lib/RocketChatTabBar.js b/app/ui-utils/client/lib/RocketChatTabBar.js index 12e6c126c957c3913c536e634fb4af58b513b012..f3cdc94372a5b7344e23ff7b9e4edc8716c35608 100644 --- a/app/ui-utils/client/lib/RocketChatTabBar.js +++ b/app/ui-utils/client/lib/RocketChatTabBar.js @@ -1,5 +1,6 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; + import { TabBar } from './TabBar'; export class RocketChatTabBar { diff --git a/app/ui-utils/client/lib/RoomHistoryManager.js b/app/ui-utils/client/lib/RoomHistoryManager.js index c15da4b54aa1a933b6ef6f423ff9286cfcb7c5e3..d9303c6933f1927e580364cea06eb6a762a3f4c4 100644 --- a/app/ui-utils/client/lib/RoomHistoryManager.js +++ b/app/ui-utils/client/lib/RoomHistoryManager.js @@ -3,14 +3,14 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; import { Blaze } from 'meteor/blaze'; -import { ChatMessage, ChatSubscription, ChatRoom } from '../../../models'; -import { getConfig } from '../config'; + import { RoomManager } from './RoomManager'; import { readMessage } from './readMessages'; import { renderMessageBody } from './renderMessageBody'; +import { getConfig } from '../config'; +import { ChatMessage, ChatSubscription, ChatRoom } from '../../../models'; export const normalizeThreadMessage = (message) => { - if (message.msg) { return renderMessageBody(message).replace(/<br\s?\\?>/g, ' '); } @@ -70,7 +70,7 @@ function upsertMessageBulk({ msgs, subscription }) { }); } -const defaultLimit = parseInt(getConfig('roomListLimit')) || 50 ; +const defaultLimit = parseInt(getConfig('roomListLimit')) || 50; export const RoomHistoryManager = new class { constructor() { @@ -84,7 +84,7 @@ export const RoomHistoryManager = new class { hasMoreNext: new ReactiveVar(false), isLoading: new ReactiveVar(false), unreadNotLoaded: new ReactiveVar(0), - firstUnread: new ReactiveVar, + firstUnread: new ReactiveVar(), loaded: undefined, }; } @@ -197,7 +197,6 @@ export const RoomHistoryManager = new class { if (ts) { return Meteor.call('loadNextMessages', rid, ts, limit, function(err, result) { - upsertMessageBulk({ msgs: Array.from(result.messages).filter((msg) => msg.t !== 'command'), subscription, @@ -239,65 +238,64 @@ export const RoomHistoryManager = new class { setTimeout(function() { const messages = wrapper[0]; - return instance.atBottom = messages.scrollTop >= (messages.scrollHeight - messages.clientHeight); + instance.atBottom = messages.scrollTop >= (messages.scrollHeight - messages.clientHeight); }); return setTimeout(() => msgElement.removeClass('highlight'), 500); + } + const room = this.getRoom(message.rid); + room.isLoading.set(true); + ChatMessage.remove({ rid: message.rid }); + + let typeName = undefined; + + const subscription = ChatSubscription.findOne({ rid: message.rid }); + if (subscription) { + // const { ls } = subscription; + typeName = subscription.t + subscription.name; } else { - const room = this.getRoom(message.rid); - room.isLoading.set(true); - ChatMessage.remove({ rid: message.rid }); - - let typeName = undefined; - - const subscription = ChatSubscription.findOne({ rid: message.rid }); - if (subscription) { - // const { ls } = subscription; - typeName = subscription.t + subscription.name; - } else { - const curRoomDoc = ChatRoom.findOne({ _id: message.rid }); - typeName = (curRoomDoc ? curRoomDoc.t : undefined) + (curRoomDoc ? curRoomDoc.name : undefined); - } + const curRoomDoc = ChatRoom.findOne({ _id: message.rid }); + typeName = (curRoomDoc ? curRoomDoc.t : undefined) + (curRoomDoc ? curRoomDoc.name : undefined); + } - return Meteor.call('loadSurroundingMessages', message, limit, function(err, result) { - if (!result || !result.messages) { - return; - } - for (const msg of Array.from(result.messages)) { - if (msg.t !== 'command') { - upsertMessage({ msg, subscription }); - } + return Meteor.call('loadSurroundingMessages', message, limit, function(err, result) { + if (!result || !result.messages) { + return; + } + for (const msg of Array.from(result.messages)) { + if (msg.t !== 'command') { + upsertMessage({ msg, subscription }); } + } - Meteor.defer(function() { - readMessage.refreshUnreadMark(message.rid, true); - RoomManager.updateMentionsMarksOfRoom(typeName); - const wrapper = $('.messages-box .wrapper'); - const msgElement = $(`#${ message._id }`, wrapper); - const pos = (wrapper.scrollTop() + msgElement.offset().top) - (wrapper.height() / 2); - wrapper.animate({ - scrollTop: pos, - }, 500); - - msgElement.addClass('highlight'); - - setTimeout(function() { - room.isLoading.set(false); - const messages = wrapper[0]; - instance.atBottom = !result.moreAfter && (messages.scrollTop >= (messages.scrollHeight - messages.clientHeight)); - return 500; - }); - - return setTimeout(() => msgElement.removeClass('highlight'), 500); + Meteor.defer(function() { + readMessage.refreshUnreadMark(message.rid, true); + RoomManager.updateMentionsMarksOfRoom(typeName); + const wrapper = $('.messages-box .wrapper'); + const msgElement = $(`#${ message._id }`, wrapper); + const pos = (wrapper.scrollTop() + msgElement.offset().top) - (wrapper.height() / 2); + wrapper.animate({ + scrollTop: pos, + }, 500); + + msgElement.addClass('highlight'); + + setTimeout(function() { + room.isLoading.set(false); + const messages = wrapper[0]; + instance.atBottom = !result.moreAfter && (messages.scrollTop >= (messages.scrollHeight - messages.clientHeight)); + return 500; }); - if (!room.loaded) { - room.loaded = 0; - } - room.loaded += result.messages.length; - room.hasMore.set(result.moreBefore); - return room.hasMoreNext.set(result.moreAfter); + + return setTimeout(() => msgElement.removeClass('highlight'), 500); }); - } + if (!room.loaded) { + room.loaded = 0; + } + room.loaded += result.messages.length; + room.hasMore.set(result.moreBefore); + return room.hasMoreNext.set(result.moreAfter); + }); } hasMore(rid) { @@ -330,7 +328,7 @@ export const RoomHistoryManager = new class { if (this.histories[rid]) { this.histories[rid].hasMore.set(true); this.histories[rid].isLoading.set(false); - return this.histories[rid].loaded = undefined; + this.histories[rid].loaded = undefined; } } -}; +}(); diff --git a/app/ui-utils/client/lib/RoomManager.js b/app/ui-utils/client/lib/RoomManager.js index 871362662825b53bc7a2a412f86077b8b0167fa5..8613132c3c92b44f76ace6010f642d9de688ccbf 100644 --- a/app/ui-utils/client/lib/RoomManager.js +++ b/app/ui-utils/client/lib/RoomManager.js @@ -4,20 +4,21 @@ import { Tracker } from 'meteor/tracker'; import { Blaze } from 'meteor/blaze'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -import { roomTypes } from '../../../utils'; +import _ from 'underscore'; + import { fireGlobalEvent } from './fireGlobalEvent'; +import { upsertMessage, RoomHistoryManager } from './RoomHistoryManager'; +import { mainReady } from './mainReady'; +import { roomTypes } from '../../../utils'; import { promises } from '../../../promises/client'; import { callbacks } from '../../../callbacks'; import { Notifications } from '../../../notifications'; import { CachedChatRoom, ChatMessage, ChatSubscription, CachedChatSubscription } from '../../../models'; import { CachedCollectionManager } from '../../../ui-cached-collection'; -import _ from 'underscore'; -import { upsertMessage, RoomHistoryManager } from './RoomHistoryManager'; -import { mainReady } from './mainReady'; import { getConfig } from '../config'; -const maxRoomsOpen = parseInt(getConfig('maxRoomsOpen')) || 5 ; +const maxRoomsOpen = parseInt(getConfig('maxRoomsOpen')) || 5; const onDeleteMessageStream = (msg) => { ChatMessage.remove({ _id: msg._id }); @@ -70,10 +71,8 @@ export const RoomManager = new function() { msgStream.on(openedRooms[typeName].rid, (msg) => promises.run('onClientMessageReceived', msg).then(function(msg) { - // Should not send message to room if room has not loaded all the current messages if (RoomHistoryManager.hasMoreNext(openedRooms[typeName].rid) === false) { - // Do not load command messages into channel if (msg.t !== 'command') { const subscription = ChatSubscription.findOne({ rid: openedRooms[typeName].rid }); @@ -110,7 +109,7 @@ export const RoomManager = new function() { getDomOfRoom(typeName, rid) { const room = openedRooms[typeName]; - if ((room == null)) { + if (room == null) { return; } @@ -172,7 +171,7 @@ export const RoomManager = new function() { open(typeName) { - if ((openedRooms[typeName] == null)) { + if (openedRooms[typeName] == null) { openedRooms[typeName] = { typeName, active: false, @@ -181,14 +180,13 @@ export const RoomManager = new function() { }; } - openedRooms[typeName].lastSeen = new Date; + openedRooms[typeName].lastSeen = new Date(); if (openedRooms[typeName].ready) { this.closeOlderRooms(); } if (CachedChatSubscription.ready.get() === true) { - if (openedRooms[typeName].active !== true) { openedRooms[typeName].active = true; if (this.computation) { @@ -207,7 +205,7 @@ export const RoomManager = new function() { existsDomOfRoom(typeName) { const room = openedRooms[typeName]; - return ((room != null ? room.dom : undefined) != null); + return (room != null ? room.dom : undefined) != null; } updateUserStatus(user, status, utcOffset) { @@ -254,8 +252,8 @@ export const RoomManager = new function() { } }; Cls.initClass(); - return new Cls; -}; + return new Cls(); +}(); const loadMissedMessages = function(rid) { const lastMessage = ChatMessage.findOne({ rid, _hidden: { $ne: true }, temp: { $exists: false } }, { sort: { ts: -1 }, limit: 1 }); @@ -266,9 +264,8 @@ const loadMissedMessages = function(rid) { return Meteor.call('loadMissedMessages', rid, lastMessage.ts, (err, result) => { if (result) { return Array.from(result).map((item) => promises.run('onClientMessageReceived', item).then((msg) => upsertMessage({ msg, subscription }))); - } else { - return []; } + return []; }); }; @@ -284,11 +281,10 @@ Tracker.autorun(function() { } }); } - return connectionWasOnline = connected; + connectionWasOnline = connected; }); Meteor.startup(() => { - // Reload rooms after login let currentUsername = undefined; Tracker.autorun(() => { @@ -311,12 +307,12 @@ Meteor.startup(() => { if (RoomManager.getOpenedRoomByRid(record.rid) != null) { const recordBefore = ChatMessage.findOne({ ts: { $lt: record.ts } }, { sort: { ts: -1 } }); if (recordBefore != null) { - ChatMessage.update({ _id: recordBefore._id }, { $set: { tick: new Date } }); + ChatMessage.update({ _id: recordBefore._id }, { $set: { tick: new Date() } }); } const recordAfter = ChatMessage.findOne({ ts: { $gt: record.ts } }, { sort: { ts: 1 } }); if (recordAfter != null) { - return ChatMessage.update({ _id: recordAfter._id }, { $set: { tick: new Date } }); + return ChatMessage.update({ _id: recordAfter._id }, { $set: { tick: new Date() } }); } } }, @@ -342,7 +338,7 @@ CachedCollectionManager.onLogin(() => { ChatMessage.update({ rid: sub.rid, ignored }, { $unset: { ignored: true } }, { multi: true }); if (sub && sub.ignored) { - ChatMessage.update({ rid: sub.rid, t: { $ne: 'command' }, 'u._id': { $in : sub.ignored } }, { $set: { ignored : true } }, { multi : true }); + ChatMessage.update({ rid: sub.rid, t: { $ne: 'command' }, 'u._id': { $in: sub.ignored } }, { $set: { ignored: true } }, { multi: true }); } }); }); diff --git a/app/ui-utils/client/lib/SideNav.js b/app/ui-utils/client/lib/SideNav.js index 5f4d720c9cd9afac5fb80ac09e499db48a647f6e..116e9c8bdc502f83d14c108e45766e9b3a59b33a 100644 --- a/app/ui-utils/client/lib/SideNav.js +++ b/app/ui-utils/client/lib/SideNav.js @@ -1,8 +1,9 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; + +import { AccountBox } from './AccountBox'; import { roomTypes } from '../../../utils/client/lib/roomTypes'; import { Subscriptions } from '../../../models'; -import { AccountBox } from './AccountBox'; export const SideNav = new class { constructor() { @@ -40,6 +41,7 @@ export const SideNav = new class { return typeof callback === 'function' && callback(); }, 500); } + closeFlex(callback = null) { const routesNamesForRooms = roomTypes.getTypes().filter((i) => i.route).map((i) => i.route.name); if (!routesNamesForRooms.includes(FlowRouter.current().route.name)) { @@ -55,9 +57,11 @@ export const SideNav = new class { } this.toggleFlex(-1, callback); } + flexStatus() { return this.flexNav.opened; } + setFlex(template, data) { if (data == null) { data = {}; @@ -65,6 +69,7 @@ export const SideNav = new class { Session.set('flex-nav-template', template); return Session.set('flex-nav-data', data); } + getFlex() { return { template: Session.get('flex-nav-template'), @@ -75,10 +80,10 @@ export const SideNav = new class { toggleCurrent() { if (this.flexNav && this.flexNav.opened) { return this.closeFlex(); - } else { - return AccountBox.toggle(); } + return AccountBox.toggle(); } + focusInput() { const sideNavDivs = Array.from(this.sideNav[0].children).filter((el) => el.tagName === 'DIV' && !el.classList.contains('hidden')); let highestZidx = 0; @@ -95,6 +100,7 @@ export const SideNav = new class { return ref && ref.focus(); }, 200); } + validate() { const invalid = []; this.sideNav.find('input.required').each(function() { @@ -133,7 +139,7 @@ export const SideNav = new class { this.setFlex(item.config.template, item.config.data); return this.openFlex(item.callback); }); - return this.openQueue = []; + this.openQueue = []; } } -}; +}(); diff --git a/app/ui-utils/client/lib/TabBar.js b/app/ui-utils/client/lib/TabBar.js index 9cf8908034e412c441a83653c8a34745f7a7d57a..761b965ea44c81635e83d34a3ae77eff97a8355f 100644 --- a/app/ui-utils/client/lib/TabBar.js +++ b/app/ui-utils/client/lib/TabBar.js @@ -1,13 +1,15 @@ import _ from 'underscore'; import { ReactiveVar } from 'meteor/reactive-var'; -export const TabBar = new (class TabBar { +export const TabBar = new class TabBar { get size() { return this._size.get(); } + set size(s) { this._size.set(s); } + constructor() { this.buttons = new ReactiveVar({}); this._size = new ReactiveVar(4); @@ -31,7 +33,7 @@ export const TabBar = new (class TabBar { btns[config.id] = config; if (this.extraGroups[config.id]) { - btns[config.id].groups = _.union((btns[config.id].groups || []), this.extraGroups[config.id]); + btns[config.id].groups = _.union(btns[config.id].groups || [], this.extraGroups[config.id]); } this.buttons.set(btns); @@ -64,20 +66,20 @@ export const TabBar = new (class TabBar { addGroup(id, groups) { const btns = this.buttons.curValue; if (btns[id]) { - btns[id].groups = _.union((btns[id].groups || []), groups); + btns[id].groups = _.union(btns[id].groups || [], groups); this.buttons.set(btns); } else { - this.extraGroups[id] = _.union((this.extraGroups[id] || []), groups); + this.extraGroups[id] = _.union(this.extraGroups[id] || [], groups); } } removeGroup(id, groups) { const btns = this.buttons.curValue; if (btns[id]) { - btns[id].groups = _.difference((btns[id].groups || []), groups); + btns[id].groups = _.difference(btns[id].groups || [], groups); this.buttons.set(btns); } else { - this.extraGroups[id] = _.difference((this.extraGroups[id] || []), groups); + this.extraGroups[id] = _.difference(this.extraGroups[id] || [], groups); } } -}); +}(); diff --git a/app/ui-utils/client/lib/alerts.js b/app/ui-utils/client/lib/alerts.js index fb45088f0e708cd74f46279017aa2078879020dc..c92f713578ebe79dc12f88cd7a2c349c39edf31b 100644 --- a/app/ui-utils/client/lib/alerts.js +++ b/app/ui-utils/client/lib/alerts.js @@ -7,7 +7,7 @@ export const alerts = { open(config) { this.close(false); - config.closable = typeof(config.closable) === typeof(true) ? config.closable : true; + config.closable = typeof config.closable === typeof true ? config.closable : true; if (config.timer) { this.timer = setTimeout(() => this.close(), config.timer); diff --git a/app/ui-utils/client/lib/avatar.js b/app/ui-utils/client/lib/avatar.js index a1ea442ec0e6312b734211edf3f115ad6a94fc99..4d026179ee86f733c272434b2cdf46c172a34476 100644 --- a/app/ui-utils/client/lib/avatar.js +++ b/app/ui-utils/client/lib/avatar.js @@ -1,15 +1,15 @@ import { Blaze } from 'meteor/blaze'; import { Session } from 'meteor/session'; -import { getUserAvatarURL } from '../../../utils/lib/getUserAvatarURL'; + import { RoomManager } from './RoomManager'; +import { getUserAvatarURL } from '../../../utils/lib/getUserAvatarURL'; Blaze.registerHelper('avatarUrlFromUsername', getUserAvatarURL); export const getAvatarAsPng = function(username, cb) { - const image = new Image; + const image = new Image(); image.src = getUserAvatarURL(username); image.onload = function() { - const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; @@ -21,9 +21,10 @@ export const getAvatarAsPng = function(username, cb) { return cb(''); } }; - return image.onerror = function() { + image.onerror = function() { return cb(''); }; + return image.onerror; }; export const updateAvatarOfUsername = function(username) { diff --git a/app/ui-utils/client/lib/callMethod.js b/app/ui-utils/client/lib/callMethod.js index 5a4ca263d679c90d75260cd1531f0d2d67d33410..9b5f3e9d5afe585aa5787e38b569c7557ad3a54a 100644 --- a/app/ui-utils/client/lib/callMethod.js +++ b/app/ui-utils/client/lib/callMethod.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { handleError } from '../../../utils'; /** diff --git a/app/ui-utils/client/lib/fireGlobalEvent.js b/app/ui-utils/client/lib/fireGlobalEvent.js index 2b992660a315da9cf2f410f9607d78e7397502df..c179a29496b4862a5d6d91d31cd5c0474778e8fb 100644 --- a/app/ui-utils/client/lib/fireGlobalEvent.js +++ b/app/ui-utils/client/lib/fireGlobalEvent.js @@ -1,6 +1,7 @@ -import { settings } from '../../../settings'; import { Tracker } from 'meteor/tracker'; +import { settings } from '../../../settings'; + export const fireGlobalEvent = function _fireGlobalEvent(eventName, params) { window.dispatchEvent(new CustomEvent(eventName, { detail: params })); diff --git a/app/ui-utils/client/lib/menu.js b/app/ui-utils/client/lib/menu.js index 6bee4bd534dc4404effa2895ff39f8d9cbee4c14..068dc28e7be272b698aafb1900f8ed8744a24c38 100644 --- a/app/ui-utils/client/lib/menu.js +++ b/app/ui-utils/client/lib/menu.js @@ -1,6 +1,7 @@ import { Session } from 'meteor/session'; import _ from 'underscore'; import EventEmitter from 'wolfy87-eventemitter'; + import { lazyloadtick } from '../../../lazy-load'; import { isRtl } from '../../../utils'; @@ -24,7 +25,7 @@ export const menu = new class extends EventEmitter { showTop = true; } if ($(this).offset().top > listOffset.top + listHeight) { - return showBottom = true; + showBottom = true; } }); if (showTop === true) { @@ -34,15 +35,16 @@ export const menu = new class extends EventEmitter { } if (showBottom === true) { return $('.bottom-unread-rooms').removeClass('hidden'); - } else { - return $('.bottom-unread-rooms').addClass('hidden'); } + return $('.bottom-unread-rooms').addClass('hidden'); }, 200); this.sideNavW = sideNavW; } + get isRtl() { return isRtl(localStorage.getItem('userLanguage')); } + touchstart(e) { this.movestarted = false; this.blockmove = false; @@ -56,6 +58,7 @@ export const menu = new class extends EventEmitter { this.mainContent = $('.main-content'); } } + touchmove(e) { if (this.touchstartX == null) { return; @@ -109,6 +112,7 @@ export const menu = new class extends EventEmitter { // } } } + translate(diff, width = sideNavW) { if (diff === undefined) { diff = this.isRtl ? -1 * sideNavW : sideNavW; @@ -116,11 +120,12 @@ export const menu = new class extends EventEmitter { this.sidebarWrap.css('width', '100%'); this.wrapper.css('overflow', 'hidden'); this.sidebarWrap.css('background-color', '#000'); - this.sidebarWrap.css('opacity', map((Math.abs(diff) / width), 0, 1, -.1, .8).toFixed(2)); + this.sidebarWrap.css('opacity', map(Math.abs(diff) / width, 0, 1, -0.1, 0.8).toFixed(2)); this.isRtl ? this.sidebar.css('transform', `translate3d(${ (sideNavW + diff).toFixed(3) }px, 0 , 0)`) : this.sidebar.css('transform', `translate3d(${ (diff - sideNavW).toFixed(3) }px, 0 , 0)`); } + touchend() { - const [max, min] = [sideNavW * .76, sideNavW * .24]; + const [max, min] = [sideNavW * 0.76, sideNavW * 0.24]; if (this.movestarted !== true) { return; } @@ -128,7 +133,7 @@ export const menu = new class extends EventEmitter { if (this.isRtl) { if (this.isOpen()) { return this.diff >= -max ? this.close() : this.open(); - } else if (this.diff <= -min) { + } if (this.diff <= -min) { return this.open(); } return this.close(); @@ -144,8 +149,10 @@ export const menu = new class extends EventEmitter { } return this.close(); } + init() { - this.sidebar = this.menu = $('.sidebar'); + this.menu = $('.sidebar'); + this.sidebar = this.menu; this.sidebarWrap = $('.sidebar-wrap'); this.wrapper = $('.messages-box > .wrapper'); const ignore = (fn) => (event) => document.body.clientWidth <= 780 && fn(event); @@ -177,12 +184,15 @@ export const menu = new class extends EventEmitter { this._open = false; Session.set('isMenuOpen', this._open); } + closePopover() { return this.menu.find('[data-popover="anchor"]:checked').prop('checked', false).length > 0; } + isOpen() { return Session.get('isMenuOpen'); } + open() { this._open = true; Session.set('isMenuOpen', this._open); @@ -198,7 +208,7 @@ export const menu = new class extends EventEmitter { toggle() { return this.isOpen() ? this.close() : this.open(); } -}; +}(); let passClosePopover = false; diff --git a/app/ui-utils/client/lib/messageBox.js b/app/ui-utils/client/lib/messageBox.js index 3da205910b4e95506956bf8f9e8343c0903854c2..8a2a36827c76799a07d213cc73b76bd83ffcf612 100644 --- a/app/ui-utils/client/lib/messageBox.js +++ b/app/ui-utils/client/lib/messageBox.js @@ -26,7 +26,8 @@ class MessageBoxActions { return false; } - return (this.actions[group] = this.actions[group].filter((action) => !expression.test(action.id))); + this.actions[group] = this.actions[group].filter((action) => !expression.test(action.id)); + return this.actions[group]; } get(group) { @@ -55,5 +56,5 @@ class MessageBoxActions { } export const messageBox = { - actions: new MessageBoxActions, + actions: new MessageBoxActions(), }; diff --git a/app/ui-utils/client/lib/modal.js b/app/ui-utils/client/lib/modal.js index 9022af53f67ac79f54ba69c8e987a90e96c7b3cb..07170159f4f3611f1682d888cb30de3ecf6c6a77 100644 --- a/app/ui-utils/client/lib/modal.js +++ b/app/ui-utils/client/lib/modal.js @@ -2,6 +2,7 @@ import './modal.html'; import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; + import { t, getUserPreference, handleError } from '../../../utils'; export const modal = { @@ -106,7 +107,6 @@ Template.rc_modal.helpers({ }, type() { return this.type && `rc-modal__content-icon rc-modal__content-icon--modal-${ this.type }`; - }, modalIcon() { switch (this.type) { diff --git a/app/ui-utils/client/lib/openRoom.js b/app/ui-utils/client/lib/openRoom.js index 50b8bdbaf464453e494f9fcc746e21822fdd2280..0cbab721858426205de1cc32817042230f609420 100644 --- a/app/ui-utils/client/lib/openRoom.js +++ b/app/ui-utils/client/lib/openRoom.js @@ -5,12 +5,15 @@ import { Template } from 'meteor/templating'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; + import { RoomManager, fireGlobalEvent, readMessage, RoomHistoryManager } from '..'; + +import _ from 'underscore'; + import { ChatSubscription, Rooms } from '../../../models'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { roomTypes, handleError } from '../../../utils'; -import _ from 'underscore'; window.currentTracker = undefined; @@ -65,22 +68,19 @@ export const openRoom = function(type, name) { if (!error) { RoomManager.close(type + name); return openRoom('d', name); - } else { - Session.set('roomNotFound', { type, name, error }); - BlazeLayout.render('main', { center: 'roomNotFound' }); - return; } + Session.set('roomNotFound', { type, name, error }); + BlazeLayout.render('main', { center: 'roomNotFound' }); }); } else { Meteor.call('getRoomByTypeAndName', type, name, function(error, record) { if (error) { Session.set('roomNotFound', { type, name, error }); return BlazeLayout.render('main', { center: 'roomNotFound' }); - } else { - Rooms.upsert({ _id: record._id }, _.omit(record, '_id')); - RoomManager.close(type + name); - return openRoom(type, name); } + Rooms.upsert({ _id: record._id }, _.omit(record, '_id')); + RoomManager.close(type + name); + return openRoom(type, name); }); } return; diff --git a/app/ui-utils/client/lib/popout.js b/app/ui-utils/client/lib/popout.js index 2b88d702e0ad11262a85073975ae39622811759e..1b5fd5d4aa1472d1b23827ae146f589d471e90a7 100644 --- a/app/ui-utils/client/lib/popout.js +++ b/app/ui-utils/client/lib/popout.js @@ -2,6 +2,7 @@ import './popout.html'; import { Blaze } from 'meteor/blaze'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; + import { callbacks } from '../../../callbacks'; export const popout = { @@ -36,7 +37,7 @@ export const popout = { if (this.timer) { clearTimeout(this.timer); } - if (typeof(this.onCloseCallback) === 'function') { + if (typeof this.onCloseCallback === 'function') { this.onCloseCallback(); } }, diff --git a/app/ui-utils/client/lib/popover.js b/app/ui-utils/client/lib/popover.js index f7fbdd75d5b03bac574702660973eb4308f0d62b..300384d7e65a8426aee1e888640078560a784dda 100644 --- a/app/ui-utils/client/lib/popover.js +++ b/app/ui-utils/client/lib/popover.js @@ -3,13 +3,15 @@ import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -import { isRtl, handleError } from '../../../utils/client'; -import { ChatSubscription } from '../../../models/client'; import _ from 'underscore'; + import { hide, leave } from './ChannelActions'; import { messageBox } from './messageBox'; import { MessageAction } from './MessageAction'; import { RoomManager } from './RoomManager'; +import { ChatSubscription } from '../../../models/client'; +import { isRtl, handleError } from '../../../utils/client'; + export const popover = { renderedPopover: null, open({ currentTarget, ...config }) { @@ -54,7 +56,6 @@ Template.popover.onRendered(function() { const { activeElement } = this.data; const popoverContent = this.firstNode.children[0]; const position = _.throttle(() => { - const direction = typeof this.data.direction === 'function' ? this.data.direction() : this.data.direction; const verticalDirection = /top/.test(direction) ? 'top' : 'bottom'; diff --git a/app/ui-utils/client/lib/prependReplies.js b/app/ui-utils/client/lib/prependReplies.js index b7a944eeca05b90a9f3fc4e026c15c5dca9e9d39..eb9b3a8fd5eab1610ba7ba92ca1dd94872f52631 100644 --- a/app/ui-utils/client/lib/prependReplies.js +++ b/app/ui-utils/client/lib/prependReplies.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { MessageAction } from './MessageAction'; import { Rooms, Users } from '../../../models/client'; diff --git a/app/ui-utils/client/lib/readMessages.js b/app/ui-utils/client/lib/readMessages.js index 3731f907bb6e0b5fd404852d3458c5855c49bb43..aa288db73d6084e438c991f5b280ca202fa7b4b7 100644 --- a/app/ui-utils/client/lib/readMessages.js +++ b/app/ui-utils/client/lib/readMessages.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; -import { ChatSubscription, ChatMessage } from '../../../models'; -import { RoomHistoryManager } from './RoomHistoryManager'; -import { RoomManager } from './RoomManager'; import _ from 'underscore'; import EventEmitter from 'wolfy87-eventemitter'; + +import { RoomHistoryManager } from './RoomHistoryManager'; +import { RoomManager } from './RoomManager'; +import { ChatSubscription, ChatMessage } from '../../../models'; /* DEFINITIONS - If window loses focus user needs to scroll or click/touch some place - On hit ESC enable read, force read of current room and remove unread mark @@ -78,7 +79,7 @@ export const readMessage = new class extends EventEmitter { const position = unreadMark.position(); const visible = (position != null ? position.top : undefined) >= 0; if (!visible && (room.unreadSince.get() != null)) { - if (this.debug) { console.log('readMessage -> readNow canceled, unread mark visible:', visible, 'unread since exists', (room.unreadSince.get() != null)); } + if (this.debug) { console.log('readMessage -> readNow canceled, unread mark visible:', visible, 'unread since exists', room.unreadSince.get() != null); } return; } // if unread mark is not visible and there is more more not loaded unread messages @@ -95,11 +96,11 @@ export const readMessage = new class extends EventEmitter { } disable() { - return this.canReadMessage = false; + this.canReadMessage = false; } enable() { - return this.canReadMessage = document.hasFocus(); + this.canReadMessage = document.hasFocus(); } isEnable() { @@ -144,8 +145,7 @@ export const readMessage = new class extends EventEmitter { }); if ((lastReadRecord == null) && (RoomHistoryManager.getRoom(room.rid).unreadNotLoaded.get() === 0)) { - lastReadRecord = - { ts: new Date(0) }; + lastReadRecord = { ts: new Date(0) }; } if ((lastReadRecord != null) || (RoomHistoryManager.getRoom(room.rid).unreadNotLoaded.get() > 0)) { @@ -176,7 +176,7 @@ export const readMessage = new class extends EventEmitter { } } } -}; +}(); Meteor.startup(function() { diff --git a/app/ui-utils/client/lib/renderMessageBody.js b/app/ui-utils/client/lib/renderMessageBody.js index 0992d15c21c597d298c33ad8309969002c1fefbd..68685ea0543922ece1bbffbb767a981198286333 100644 --- a/app/ui-utils/client/lib/renderMessageBody.js +++ b/app/ui-utils/client/lib/renderMessageBody.js @@ -1,6 +1,7 @@ -import { callbacks } from '../../../callbacks'; import s from 'underscore.string'; +import { callbacks } from '../../../callbacks'; + const generateKeyDefault = (...args) => args.map((item) => JSON.stringify(item)).join('-'); const mem = (fn, tm = 500, generateKey = generateKeyDefault) => { @@ -25,11 +26,10 @@ const mem = (fn, tm = 500, generateKey = generateKeyDefault) => { }; export const renderMessageBody = mem((message) => { - message.html = s.trim(message.msg) ? s.escapeHTML(message.msg) : ''; const { tokens, html } = callbacks.run('renderMessage', message); return (Array.isArray(tokens) ? tokens.reverse() : []) .reduce((html, { token, text }) => html.replace(token, () => text), html); -}, 5000, ({ _id, _updatedAt }) => (_id && _updatedAt && _id + _updatedAt)); +}, 5000, ({ _id, _updatedAt }) => _id && _updatedAt && _id + _updatedAt); diff --git a/app/ui-utils/lib/Message.js b/app/ui-utils/lib/Message.js index 91ab4501d3b6e24bcd5cd51a63a32b670fb40b20..36ff9c9830d35403db48fcb79e0f84ad875961f9 100644 --- a/app/ui-utils/lib/Message.js +++ b/app/ui-utils/lib/Message.js @@ -1,7 +1,8 @@ import { TAPi18n } from 'meteor/tap:i18n'; -import { settings } from '../../settings'; import s from 'underscore.string'; + import { MessageTypes } from './MessageTypes'; +import { settings } from '../../settings'; export const Message = { parse(msg, language) { @@ -9,10 +10,10 @@ export const Message = { if (messageType) { if (messageType.render) { return messageType.render(msg); - } else if (messageType.template) { + } if (messageType.template) { // Render message return; - } else if (messageType.message) { + } if (messageType.message) { if (!language && typeof localStorage !== 'undefined') { language = localStorage.getItem('userLanguage'); } diff --git a/app/ui-utils/lib/MessageProperties.js b/app/ui-utils/lib/MessageProperties.js index 467215901bbe0671f29cac3d5101a9ebaa225b01..3b33ae4ce2880af63d41c030445f3d6092592e9c 100644 --- a/app/ui-utils/lib/MessageProperties.js +++ b/app/ui-utils/lib/MessageProperties.js @@ -1,16 +1,17 @@ -import { emoji } from '../../emoji'; import GraphemeSplitter from 'grapheme-splitter'; +import { emoji } from '../../emoji'; + const splitter = new GraphemeSplitter(); export const messageProperties = { - length: ((message) => splitter.countGraphemes(message)), + length: (message) => splitter.countGraphemes(message), - messageWithoutEmojiShortnames: ((message) => message.replace(/:\w+:/gm, (match) => { + messageWithoutEmojiShortnames: (message) => message.replace(/:\w+:/gm, (match) => { if (emoji.list[match] !== undefined) { return ' '; } return match; - })), + }), }; diff --git a/app/ui-utils/lib/MessageTypes.js b/app/ui-utils/lib/MessageTypes.js index 8e4191e005ac88e6d27b8d2b00652d6357276feb..5907dddaa873c1678be87a63446e7a93000a6191 100644 --- a/app/ui-utils/lib/MessageTypes.js +++ b/app/ui-utils/lib/MessageTypes.js @@ -4,7 +4,8 @@ export const MessageTypes = new class { } registerType(options) { - return this.types[options.id] = options; + this.types[options.id] = options; + return options; } getType(message) { @@ -15,5 +16,4 @@ export const MessageTypes = new class { const type = this.types[message && message.t]; return type && type.system; } - -}; +}(); diff --git a/app/ui-utils/tests/server.tests.js b/app/ui-utils/tests/server.tests.js index c715bbbbcf4daa883cbad94aa04dd4016c60d812..a1592b60602a5d6ec15bd2b519017c67641670ec 100644 --- a/app/ui-utils/tests/server.tests.js +++ b/app/ui-utils/tests/server.tests.js @@ -1,6 +1,7 @@ /* eslint-env mocha */ import 'babel-polyfill'; import assert from 'assert'; + import './server.mocks.js'; import { messageProperties } from '../lib/MessageProperties'; diff --git a/app/ui-vrecord/client/VRecDialog.js b/app/ui-vrecord/client/VRecDialog.js index 9ce0c98098c388c2c80aedd054aeb79e38938874..5da5d5d3c34bfbfc5c24f7397b8ca35cb1a73974 100644 --- a/app/ui-vrecord/client/VRecDialog.js +++ b/app/ui-vrecord/client/VRecDialog.js @@ -1,8 +1,9 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; -import { VideoRecorder } from '../../ui'; import _ from 'underscore'; +import { VideoRecorder } from '../../ui'; + export const VRecDialog = new class { constructor() { this.opened = false; @@ -57,13 +58,12 @@ export const VRecDialog = new class { right = 10; } return dialog.css({ top: `${ top }px`, right: `${ right }px` }); - } else { - let left = (sourcePos.left - this.width) + 100; - if (left < 0) { - left = 10; - } - return dialog.css({ top: `${ top }px`, left: `${ left }px` }); } + let left = (sourcePos.left - this.width) + 100; + if (left < 0) { + left = 10; + } + return dialog.css({ top: `${ top }px`, left: `${ left }px` }); }; const set = _.debounce(_set, 2000); @@ -79,4 +79,4 @@ export const VRecDialog = new class { } return VideoRecorder.start(this.video); } -}; +}(); diff --git a/app/ui-vrecord/client/vrecord.js b/app/ui-vrecord/client/vrecord.js index 544a6c757713ee62c61d497aa8d838ac3112231a..daea0e04b81e5a5e2d097d682bcccf9fbc48e466 100644 --- a/app/ui-vrecord/client/vrecord.js +++ b/app/ui-vrecord/client/vrecord.js @@ -1,23 +1,22 @@ -import { VRecDialog } from './VRecDialog'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + +import { VRecDialog } from './VRecDialog'; import { VideoRecorder, fileUpload } from '../../ui'; Template.vrecDialog.helpers({ recordIcon() { if (VideoRecorder.cameraStarted.get() && VideoRecorder.recording.get()) { return 'icon-stop'; - } else { - return 'icon-circle'; } + return 'icon-circle'; }, okDisabled() { if (VideoRecorder.cameraStarted.get() && VideoRecorder.recordingAvailable.get()) { return ''; - } else { - return 'disabled'; } + return 'disabled'; }, recordDisabled() { diff --git a/app/ui/client/components/header/header.js b/app/ui/client/components/header/header.js index 555755f677f8dfcdbca0d9941affb8b445c71326..8fef0596d4e86e385cdf29c39dc20eb401d7bcf4 100644 --- a/app/ui/client/components/header/header.js +++ b/app/ui/client/components/header/header.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { TabBar, fireGlobalEvent } from '../../../../ui-utils'; Template.header.helpers({ diff --git a/app/ui/client/components/header/headerRoom.js b/app/ui/client/components/header/headerRoom.js index d60a765c0232904f3a1490639a70b6eee7682b61..ff7e5f133504d2c134364bac4ddb3eedc4da57dd 100644 --- a/app/ui/client/components/header/headerRoom.js +++ b/app/ui/client/components/header/headerRoom.js @@ -3,11 +3,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; +import { FlowRouter } from 'meteor/kadira:flow-router'; + import { t, roomTypes, handleError } from '../../../../utils'; import { TabBar, fireGlobalEvent, call } from '../../../../ui-utils'; import { ChatSubscription, Rooms, ChatRoom } from '../../../../models'; import { settings } from '../../../../settings'; -import { FlowRouter } from 'meteor/kadira:flow-router'; import { emoji } from '../../../../emoji'; import { Markdown } from '../../../../markdown/client'; import { hasAllPermission } from '../../../../authorization'; diff --git a/app/ui/client/components/icon.js b/app/ui/client/components/icon.js index b94f9c5ea1f740560b22c812d30f5fec84847c3c..779ea70f1632f903e919ac525c55d60de718b23b 100644 --- a/app/ui/client/components/icon.js +++ b/app/ui/client/components/icon.js @@ -1,9 +1,10 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; + import { isChrome, isFirefox } from '../../../utils'; const baseUrlFix = () => `${ document.baseURI }${ FlowRouter.current().path.substring(1) }`; Template.icon.helpers({ - baseUrl: ((isFirefox && isFirefox[1] < 55) || (isChrome && isChrome[1] < 55)) ? baseUrlFix : undefined, + baseUrl: (isFirefox && isFirefox[1] < 55) || (isChrome && isChrome[1] < 55) ? baseUrlFix : undefined, }); diff --git a/app/ui/client/components/popupList.js b/app/ui/client/components/popupList.js index cec7fc0af186c3ef4f6a9d2ad9b833d177463538..37b9a89b22aee596a3d37319663802771861571f 100644 --- a/app/ui/client/components/popupList.js +++ b/app/ui/client/components/popupList.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; Template.popupList.helpers({ @@ -9,7 +10,7 @@ Template.popupList.helpers({ ready: this.ready, loading: this.ready !== undefined && !this.ready, noMatchTemplate: this.data.noMatchTemplate, - template_item :this.data.template_item || 'popupList_item_default', + template_item: this.data.template_item || 'popupList_item_default', items: this.items, onClick: this.data.onClick || function() {}, modifier: this.data.modifier || function(text) { return text; }, diff --git a/app/ui/client/components/selectDropdown.js b/app/ui/client/components/selectDropdown.js index 71937cd6a558287cd5a11a35b7e391d5d6ea4088..45a8df186451c16278f3f62ff7fc0c8a24187415 100644 --- a/app/ui/client/components/selectDropdown.js +++ b/app/ui/client/components/selectDropdown.js @@ -5,10 +5,10 @@ Template.selectDropdown.events({ 'focus input'(e, i) { i.open.set(true); console.log('asdasd'); - }, 'blur input'(e, i) { + }, + 'blur input'(e, i) { setTimeout(() => { i.open.set(false); - }, 100); console.log('asdasd'); }, diff --git a/app/ui/client/index.js b/app/ui/client/index.js index 00ac6e838b1b89a0f54e2f980f3e1aaf915f6c1b..9c9c1b40be471857d5d4f15d527d4a7dd5b771c8 100644 --- a/app/ui/client/index.js +++ b/app/ui/client/index.js @@ -1,18 +1,11 @@ import './lib/accounts'; -export { ChatMessages } from './lib/chatMessages'; import './lib/collections'; import './lib/customEventPolyfill'; -export { fileUpload } from './lib/fileUpload'; import './lib/iframeCommands'; import './lib/menu'; import './lib/Modernizr'; -export { MsgTyping } from './lib/msgTyping'; -export { KonchatNotification } from './lib/notification'; import './lib/parentTemplate'; -export { Login, animationSupport, animeBack, Button, preLoadImgs } from './lib/rocket'; import './lib/codeMirror/codeMirror'; -export { AudioRecorder } from './lib/recorderjs/audioRecorder'; -export { VideoRecorder } from './lib/recorderjs/videoRecorder'; import './lib/textarea-cursor'; import './views/cmsPage.html'; import './views/fxos.html'; @@ -43,7 +36,6 @@ import './views/app/createChannel'; import './views/app/fullModal'; import './views/app/home'; import './views/app/directory'; -export { chatMessages } from './views/app/room'; import './views/app/roomSearch'; import './views/app/secretURL'; import './views/app/videoCall/videoButtons'; @@ -65,3 +57,12 @@ import './components/header/headerRoom.html'; import './components/header/headerRoom'; import './components/contextualBar.html'; import './components/contextualBar'; + +export { ChatMessages } from './lib/chatMessages'; +export { fileUpload } from './lib/fileUpload'; +export { MsgTyping } from './lib/msgTyping'; +export { KonchatNotification } from './lib/notification'; +export { Login, animationSupport, animeBack, Button, preLoadImgs } from './lib/rocket'; +export { AudioRecorder } from './lib/recorderjs/audioRecorder'; +export { VideoRecorder } from './lib/recorderjs/videoRecorder'; +export { chatMessages } from './views/app/room'; diff --git a/app/ui/client/lib/accounts.js b/app/ui/client/lib/accounts.js index 6fccbb22708feb3cbd8de11f51bd7c164dccaa24..773a60d2de55eaa1bc1451e8a2abad2809ac81b5 100644 --- a/app/ui/client/lib/accounts.js +++ b/app/ui/client/lib/accounts.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; -import { t } from '../../../utils'; import toastr from 'toastr'; +import { t } from '../../../utils'; + Accounts.onEmailVerificationLink(function(token, done) { Accounts.verifyEmail(token, function(error) { if (error == null) { diff --git a/app/ui/client/lib/chatMessages.js b/app/ui/client/lib/chatMessages.js index 8c84d5ff439486a2e5653e11426047bf6b3e0b2e..b854deb325c0cfad3598cf8ce291709e2772f4b6 100644 --- a/app/ui/client/lib/chatMessages.js +++ b/app/ui/client/lib/chatMessages.js @@ -2,13 +2,15 @@ import moment from 'moment'; import toastr from 'toastr'; import _ from 'underscore'; import s from 'underscore.string'; - import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { TAPi18n } from 'meteor/tap:i18n'; +import { KonchatNotification } from './notification'; +import { MsgTyping } from './msgTyping'; +import { fileUpload } from './fileUpload'; import { t, slashCommands, handleError } from '../../../utils/client'; import { messageProperties, @@ -26,9 +28,6 @@ import { hasAtLeastOnePermission } from '../../../authorization/client'; import { Messages, Rooms, ChatMessage, ChatSubscription } from '../../../models/client'; import { emoji } from '../../../emoji/client'; -import { KonchatNotification } from './notification'; -import { MsgTyping } from './msgTyping'; -import { fileUpload } from './fileUpload'; const messageBoxState = { saveValue: _.debounce(({ rid, tmid }, value) => { @@ -294,9 +293,8 @@ export class ChatMessages { } catch (error) { console.error(error); handleError(error); - } finally { - return done(); } + return done(); } if (this.editing.id) { @@ -364,7 +362,7 @@ export class ChatMessages { } if (!settings.get('FileUpload_Enabled') || !settings.get('Message_AllowConvertLongMessagesToAttachment') || this.editing.id) { - throw { error: 'Message_too_long' }; + throw new Error({ error: 'Message_too_long' }); } try { @@ -383,9 +381,10 @@ export class ChatMessages { const fileName = `${ Meteor.user().username } - ${ new Date() }.txt`; const file = new File([messageBlob], fileName, { type: contentType, lastModified: Date.now() }); fileUpload([{ file, name: fileName }], this.input, { rid, tmid }); - } finally { + } catch (e) { return true; } + return true; } async processMessageEditing(message) { @@ -429,7 +428,7 @@ export class ChatMessages { const invalidCommandMsg = { _id: Random.id(), rid: msgObject.rid, - ts: new Date, + ts: new Date(), msg: TAPi18n.__('No_such_command', { command: s.escapeHTML(match[1]) }), u: { username: settings.get('InternalHubot_Username'), @@ -556,7 +555,6 @@ export class ChatMessages { event.preventDefault(); event.stopPropagation(); - return; } } diff --git a/app/ui/client/lib/codeMirror/codeMirrorComponent.js b/app/ui/client/lib/codeMirror/codeMirrorComponent.js index 60cd4ab84eff108774e4803c16a587d51ecdba2a..e1a1e07f111415a749346ba3c0174bbc0ae8215f 100644 --- a/app/ui/client/lib/codeMirror/codeMirrorComponent.js +++ b/app/ui/client/lib/codeMirror/codeMirrorComponent.js @@ -1,11 +1,11 @@ -const CodeMirrors = {}; - import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import 'codemirror/lib/codemirror.css'; import CodeMirror from 'codemirror/lib/codemirror.js'; +const CodeMirrors = {}; + Template.CodeMirror.rendered = function() { const options = this.data.options || { lineNumbers: true }; const textarea = this.find('textarea'); diff --git a/app/ui/client/lib/collections.js b/app/ui/client/lib/collections.js index 9c53bec1dc0aecd1fbc2a5a2f3bd579728c00cd5..18df31be28b85f897397ed12cbe88d298a345c8b 100644 --- a/app/ui/client/lib/collections.js +++ b/app/ui/client/lib/collections.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; import { CachedChatRoom, CachedChatSubscription } from '../../../models'; diff --git a/app/ui/client/lib/fileUpload.js b/app/ui/client/lib/fileUpload.js index 8e587cb577ad019275b69fa59abd236350eb8514..b421603cbdf92305437927002d884d99290eb963 100644 --- a/app/ui/client/lib/fileUpload.js +++ b/app/ui/client/lib/fileUpload.js @@ -2,8 +2,9 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import s from 'underscore.string'; -import { fileUploadHandler } from '../../../file-upload'; import { Handlebars } from 'meteor/ui'; + +import { fileUploadHandler } from '../../../file-upload'; import { t, fileUploadIsValidContentType } from '../../../utils'; import { modal, prependReplies } from '../../../ui-utils'; diff --git a/app/ui/client/lib/iframeCommands.js b/app/ui/client/lib/iframeCommands.js index facd647d60b4af68188fcd4f45b25241c00daa11..83dfe611db0bfbcbe4b6827b949b71801b73a7e1 100644 --- a/app/ui/client/lib/iframeCommands.js +++ b/app/ui/client/lib/iframeCommands.js @@ -2,10 +2,11 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import s from 'underscore.string'; + import { AccountBox } from '../../../ui-utils'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; -import s from 'underscore.string'; const commands = { go(data) { diff --git a/app/ui/client/lib/menu.js b/app/ui/client/lib/menu.js index 732fc661364c825dbd258440c02b3c4c2e8e8366..b8619b5663224274c7f1a26eaf8ad0abdebcdf44 100644 --- a/app/ui/client/lib/menu.js +++ b/app/ui/client/lib/menu.js @@ -1,7 +1,8 @@ import _ from 'underscore'; -import { menu } from '../../../ui-utils'; import EventEmitter from 'wolfy87-eventemitter'; +import { menu } from '../../../ui-utils'; + const emitter = new EventEmitter(); window.addEventListener('resize', _.debounce((() => { diff --git a/app/ui/client/lib/msgTyping.js b/app/ui/client/lib/msgTyping.js index 28c4a09af949b17f94f44a189acafbc1243a922d..b6085d60ab4af65ac5c3d337d1120c7279d752c8 100644 --- a/app/ui/client/lib/msgTyping.js +++ b/app/ui/client/lib/msgTyping.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; +import _ from 'underscore'; + import { settings } from '../../../settings'; import { Notifications } from '../../../notifications'; -import _ from 'underscore'; export const MsgTyping = (function() { const timeout = 15000; @@ -13,7 +14,7 @@ export const MsgTyping = (function() { const renewTimeout = 10000; const selfTyping = new ReactiveVar(false); const usersTyping = {}; - const dep = new Tracker.Dependency; + const dep = new Tracker.Dependency(); const shownName = function(user) { if (!user) { @@ -64,14 +65,15 @@ export const MsgTyping = (function() { const start = function(room) { if (!renew) { return; } - setTimeout(() => renew = true, renewTimeout); + setTimeout(() => { renew = true; }, renewTimeout); renew = false; selfTyping.set(true); const user = Meteor.user(); Notifications.notifyRoom(room, 'typing', shownName(user), true); clearTimeout(timeouts[room]); - return timeouts[room] = Meteor.setTimeout(() => stop(room), timeout); + timeouts[room] = Meteor.setTimeout(() => stop(room), timeout); + return timeouts[room]; }; diff --git a/app/ui/client/lib/notification.js b/app/ui/client/lib/notification.js index c7f43e3d30228c4ee10515416982027234d69b4c..253ce7f7da72d9e74030e51393a6a98de994963a 100644 --- a/app/ui/client/lib/notification.js +++ b/app/ui/client/lib/notification.js @@ -7,6 +7,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import _ from 'underscore'; import s from 'underscore.string'; + import { e2e } from '../../../e2e/client'; import { Users, ChatSubscription } from '../../../models'; import { getUserPreference } from '../../../utils'; @@ -15,7 +16,7 @@ import { getAvatarAsPng } from '../../../ui-utils'; import { promises } from '../../../promises/client'; export const KonchatNotification = { - notificationStatus: new ReactiveVar, + notificationStatus: new ReactiveVar(), // notificacoes HTML5 getDesktopPermission() { @@ -23,7 +24,7 @@ export const KonchatNotification = { return Notification.requestPermission(function(status) { KonchatNotification.notificationStatus.set(status); if (Notification.permission !== status) { - return Notification.permission = status; + Notification.permission = status; } }); } @@ -31,7 +32,7 @@ export const KonchatNotification = { notify(notification) { if (window.Notification && Notification.permission === 'granted') { - const message = { rid: (notification.payload != null ? notification.payload.rid : undefined), msg: notification.text, notification: true }; + const message = { rid: notification.payload != null ? notification.payload.rid : undefined, msg: notification.text, notification: true }; return promises.run('onClientMessageReceived', message).then(function(message) { const n = new Notification(notification.title, { icon: notification.icon || getUserAvatarURL(notification.payload.sender.username), @@ -43,7 +44,7 @@ export const KonchatNotification = { const notificationDuration = notification.duration - 0 || getUserPreference(Meteor.userId(), 'desktopNotificationDuration') - 0; if (notificationDuration > 0) { - setTimeout((() => n.close()), notificationDuration * 1000); + setTimeout(() => n.close(), notificationDuration * 1000); } if (notification.payload && notification.payload.rid) { @@ -174,7 +175,7 @@ Meteor.startup(() => { } if (room.pause) { room.pause(); - return room.currentTime = 0; + room.currentTime = 0; } } }); diff --git a/app/ui/client/lib/parentTemplate.js b/app/ui/client/lib/parentTemplate.js index fb2d2a03569bdf7f6ccdf0421930b9e18f8316a5..9c0fd2feaaa34b640960ea9545e193c7edc35782 100644 --- a/app/ui/client/lib/parentTemplate.js +++ b/app/ui/client/lib/parentTemplate.js @@ -12,7 +12,7 @@ Blaze.TemplateInstance.prototype.parentTemplate = function(levels) { levels = 1; } while (view) { - if (view.name.substring(0, 9) === 'Template.' && !(levels--)) { + if (view.name.substring(0, 9) === 'Template.' && !levels--) { return view.templateInstance(); } view = view.parentView; diff --git a/app/ui/client/lib/recorderjs/audioEncoder.js b/app/ui/client/lib/recorderjs/audioEncoder.js index 52e6102cbe9f733a860026b4ac1375a866840717..8dbe7c4c4a7cdaa46243b3613205176e6250f4c7 100644 --- a/app/ui/client/lib/recorderjs/audioEncoder.js +++ b/app/ui/client/lib/recorderjs/audioEncoder.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../../settings'; import EventEmitter from 'wolfy87-eventemitter'; +import { settings } from '../../../../settings'; + class AudioEncoder extends EventEmitter { constructor(source, { bufferLen = 4096, diff --git a/app/ui/client/lib/recorderjs/audioRecorder.js b/app/ui/client/lib/recorderjs/audioRecorder.js index 9675bb6f018315961ba246110c3b7a6f67b95a69..a06ce2b6e5c5a1da4195a055a1b4ab889a7ae0ae 100644 --- a/app/ui/client/lib/recorderjs/audioRecorder.js +++ b/app/ui/client/lib/recorderjs/audioRecorder.js @@ -5,8 +5,8 @@ const getUserMedia = ((navigator) => { return navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); } - const legacyGetUserMedia = navigator.getUserMedia || - navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; + const legacyGetUserMedia = navigator.getUserMedia + || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; if (legacyGetUserMedia) { return (options) => new Promise((resolve, reject) => { @@ -27,7 +27,7 @@ class AudioRecorder { return; } - this.audioContext = new AudioContext; + this.audioContext = new AudioContext(); } destroyAudioContext() { @@ -99,6 +99,6 @@ class AudioRecorder { } } -const instance = new AudioRecorder; +const instance = new AudioRecorder(); export { instance as AudioRecorder }; diff --git a/app/ui/client/lib/recorderjs/videoRecorder.js b/app/ui/client/lib/recorderjs/videoRecorder.js index 0726d8458f979281af30857272043b6731d4edae..0c09d44ecc482641d643f318bbcd009213066b67 100644 --- a/app/ui/client/lib/recorderjs/videoRecorder.js +++ b/app/ui/client/lib/recorderjs/videoRecorder.js @@ -1,6 +1,6 @@ import { ReactiveVar } from 'meteor/reactive-var'; -export const VideoRecorder = new (class VideoRecorder { +export const VideoRecorder = new class VideoRecorder { constructor() { this.started = false; this.cameraStarted = new ReactiveVar(false); @@ -21,14 +21,14 @@ export const VideoRecorder = new (class VideoRecorder { cb && cb.call(this, false); }; - const oldGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || - navigator.msGetUserMedia; + 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) { + } if (oldGetUserMedia) { oldGetUserMedia.call(navigator, { audio: true, video: true }, handleSuccess, handleError); return; } @@ -117,4 +117,4 @@ export const VideoRecorder = new (class VideoRecorder { this.recording.set(false); delete this.mediaRecorder; } -}); +}(); diff --git a/app/ui/client/lib/rocket.js b/app/ui/client/lib/rocket.js index 80ce4b8ab6647355fb2558bc0872321216a8574a..81fbd0bb36b2b1d9e51b4ac7311086eadc9e0ea8 100644 --- a/app/ui/client/lib/rocket.js +++ b/app/ui/client/lib/rocket.js @@ -35,7 +35,8 @@ export const Button = (function() { const next = el.attr('data-loading-text'); const html = el.find('span').html(); el.addClass('-progress').attr('data-def-text', html).find('span').html(next); - return time = setTimeout(() => el.addClass('going'), 1); + time = setTimeout(() => el.addClass('going'), 1); + return time; }; const done = function(el) { return el.addClass('done'); @@ -82,13 +83,11 @@ export const animeBack = function(e, callback, type) { return; } const s = animationSupport(); - const p = ((type ? s.animation : s.transition)); + const p = type ? s.animation : s.transition; el.one(p, function(e) { - // el.off(p); callback(e); }); - }; export const preLoadImgs = function(urls, callback) { @@ -116,5 +115,4 @@ export const preLoadImgs = function(urls, callback) { if (im.width > 0) { l_(im); } return im; }); - }; diff --git a/app/ui/client/views/app/burger.js b/app/ui/client/views/app/burger.js index 4fbbc2f45ac87335e3c3b4003f76f1f5bebcc3fe..3ff6a24fd32ae0e6ae7c10ee5b02decccc12069f 100644 --- a/app/ui/client/views/app/burger.js +++ b/app/ui/client/views/app/burger.js @@ -1,5 +1,6 @@ import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { Layout } from '../../../../ui-utils'; Template.burger.helpers({ diff --git a/app/ui/client/views/app/createChannel.js b/app/ui/client/views/app/createChannel.js index ab97dabaddcd2bee03c79c8069486094506a1b82..af251012b708b7505ce404330c72ef346bfaf5ff 100644 --- a/app/ui/client/views/app/createChannel.js +++ b/app/ui/client/views/app/createChannel.js @@ -5,12 +5,13 @@ import { Blaze } from 'meteor/blaze'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; +import toastr from 'toastr'; +import _ from 'underscore'; + import { settings } from '../../../../settings'; import { callbacks } from '../../../../callbacks'; import { t, roomTypes } from '../../../../utils'; import { hasAllPermission } from '../../../../authorization'; -import toastr from 'toastr'; -import _ from 'underscore'; const acEvents = { 'click .rc-popup-list__item'(e, t) { @@ -146,7 +147,7 @@ Template.createChannel.helpers({ extensionsConfig() { const instance = Template.instance(); return { - validations : instance.extensions_validations, + validations: instance.extensions_validations, submits: instance.extensions_submits, change: instance.change, }; @@ -285,7 +286,7 @@ Template.createChannel.onRendered(function() { Template.createChannel.onCreated(function() { this.selectedUsers = new ReactiveVar([]); - const filter = { exceptions :[Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; + const filter = { exceptions: [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; // this.onViewRead:??y(function() { Tracker.autorun(() => { filter.exceptions = [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)); @@ -302,7 +303,7 @@ Template.createChannel.onCreated(function() { this.extensions_invalid = new ReactiveVar(false); this.change = _.debounce(() => { let valid = true; - Object.keys(this.extensions_validations).map((key) => this.extensions_validations[key]).forEach((f) => (valid = f(this) && valid)); + Object.keys(this.extensions_validations).map((key) => this.extensions_validations[key]).forEach((f) => { valid = f(this) && valid; }); this.extensions_invalid.set(!valid); }, 300); @@ -335,12 +336,12 @@ Template.createChannel.onCreated(function() { this.ac = new AutoComplete( { - selector:{ + selector: { anchor: '.rc-input__label', item: '.rc-popup-list__item', container: '.rc-popup-list__list', }, - position:'fixed', + position: 'fixed', limit: 10, inputDelay: 300, rules: [ @@ -396,7 +397,7 @@ Template.tokenpass.helpers({ }, addIsDisabled() { const { balance, token } = Template.instance(); - return (balance.get().length && token.get().length) ? '' : 'disabled'; + return balance.get().length && token.get().length ? '' : 'disabled'; }, tokenRequiment() { return Template.instance().requireAll.get() ? t('Require_all_tokens') : t('Require_any_token'); @@ -414,7 +415,7 @@ Template.tokenpass.events({ selectedTokens.set([...arr.filter((token) => token.token !== text), { token: text, balance: balance.get() }]); balance.set(''); token.set(''); - [...instance.findAll('input[type=text],input[type=number]')].forEach((el) => el.value = ''); + [...instance.findAll('input[type=text],input[type=number]')].forEach((el) => { el.value = ''; }); instance.data.change(); return false; }, diff --git a/app/ui/client/views/app/directory.js b/app/ui/client/views/app/directory.js index 16295a0d29d637b3600c4f2ca162476d4459ef17..ba4af117e7f02bb10ee096c42e522627cf80e67d 100644 --- a/app/ui/client/views/app/directory.js +++ b/app/ui/client/views/app/directory.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; -import { hasAllPermission } from '../../../../authorization/client'; import { Template } from 'meteor/templating'; import _ from 'underscore'; + import { timeAgo } from './helpers'; +import { hasAllPermission } from '../../../../authorization/client'; import { t, roomTypes } from '../../../../utils'; import { settings } from '../../../../settings'; import { hasAtLeastOnePermission } from '../../../../authorization'; @@ -146,8 +147,8 @@ Template.directory.helpers({ } return function(currentTarget) { if ( - currentTarget.offsetHeight + currentTarget.scrollTop >= - currentTarget.scrollHeight - 100 + currentTarget.offsetHeight + currentTarget.scrollTop + >= currentTarget.scrollHeight - 100 ) { return instance.page.set(instance.page.get() + 1); } diff --git a/app/ui/client/views/app/helpers.js b/app/ui/client/views/app/helpers.js index c73bb977039c3687e33d20e071a4e2ef704cc701..09b6abf0252a9476f4491dceb6a89db90bb4b775 100644 --- a/app/ui/client/views/app/helpers.js +++ b/app/ui/client/views/app/helpers.js @@ -11,8 +11,8 @@ export function timeAgo(time, t, now = new Date()) { const isToday = time.getFullYear() >= today.getFullYear() && time.getMonth() >= today.getMonth() && time.getDate() >= today.getDate(); const wasYesterday = time.getFullYear() >= yesterday.getFullYear() && time.getMonth() >= yesterday.getMonth() && time.getDate() >= yesterday.getDate(); - const todayFormatted = (isToday && moment(time).format('LT')); - const yesterdayFormatted = (wasYesterday && t('yesterday')); + const todayFormatted = isToday && moment(time).format('LT'); + const yesterdayFormatted = wasYesterday && t('yesterday'); const beforeFormatted = moment(time).format('MMM D, YYYY'); return todayFormatted || yesterdayFormatted || beforeFormatted; diff --git a/app/ui/client/views/app/home.js b/app/ui/client/views/app/home.js index 7f51fd7d92e2074dbea8a40b3dc45bb7fb1032b6..ade5be9ca31fdbce251c3b62afc3bced6eccef7f 100644 --- a/app/ui/client/views/app/home.js +++ b/app/ui/client/views/app/home.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../../settings'; Template.home.helpers({ diff --git a/app/ui/client/views/app/photoswipe.js b/app/ui/client/views/app/photoswipe.js index adc22287e76da709a59970d50f8fb1f3359c32fc..c221fcb35cffc1e511bbd90ba49587518dc81783 100644 --- a/app/ui/client/views/app/photoswipe.js +++ b/app/ui/client/views/app/photoswipe.js @@ -5,7 +5,6 @@ import 'photoswipe/dist/photoswipe.css'; import s from 'underscore.string'; Meteor.startup(() => { - let currentGallery = null; const initGallery = (items, options) => { if (!currentGallery) { @@ -36,8 +35,7 @@ Meteor.startup(() => { ...defaultGalleryOptions, index: 0, addCaptionHTMLFn(item, captionEl) { - captionEl.children[0].innerHTML = - `${ s.escapeHTML(item.title) }<br/><small>${ s.escapeHTML(item.description) }</small>`; + captionEl.children[0].innerHTML = `${ s.escapeHTML(item.title) }<br/><small>${ s.escapeHTML(item.description) }</small>`; return true; }, }; diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index 36827a40551f5ac89abc1b7719a6940d6136b490..02def0b8c9750a3ce0dcc27f2c15a015995d1a34 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -1,7 +1,6 @@ import _ from 'underscore'; import moment from 'moment'; import Clipboard from 'clipboard'; - import { Meteor } from 'meteor/meteor'; import { ReactiveDict } from 'meteor/reactive-dict'; import { ReactiveVar } from 'meteor/reactive-var'; @@ -117,7 +116,7 @@ const mountPopover = (e, i, outerContext) => { menuItems = menuItems.concat(messageItems); } - const [items, deleteItem] = menuItems.reduce((result, value) => (result[value.id === 'delete-message' ? 1 : 0].push(value), result), [[], []]); + const [items, deleteItem] = menuItems.reduce((result, value) => { result[value.id === 'delete-message' ? 1 : 0].push(value); return result; }, [[], []]); const groups = [{ items }]; if (deleteItem.length) { @@ -234,9 +233,9 @@ Template.room.helpers({ }, isTranslated() { const { state } = Template.instance(); - return settings.get('AutoTranslate_Enabled') && - (state.get('autoTranslate') === true) && - !!state.get('autoTranslateLanguage'); + return settings.get('AutoTranslate_Enabled') + && (state.get('autoTranslate') === true) + && !!state.get('autoTranslateLanguage'); }, embeddedVersion() { @@ -277,12 +276,11 @@ Template.room.helpers({ const query = { rid, _hidden: { $ne: true }, - ...((ignoreReplies || modes[viewMode] === 'compact') && { tmid: { $exists: 0 } }), + ...(ignoreReplies || modes[viewMode] === 'compact') && { tmid: { $exists: 0 } }, }; if (hideMessagesOfType.length > 0) { - query.t = - { $nin: hideMessagesOfType }; + query.t = { $nin: hideMessagesOfType }; } const options = { @@ -320,7 +318,7 @@ Template.room.helpers({ const leader = Users.findOne({ _id: roles.u._id }, { fields: { status: 1 } }) || {}; return { ...roles.u, - name: settings.get('UI_Use_Real_Name') ? (roles.u.name || roles.u.username) : roles.u.username, + name: settings.get('UI_Use_Real_Name') ? roles.u.name || roles.u.username : roles.u.username, status: leader.status || 'offline', statusDisplay: ((status) => status.charAt(0).toUpperCase() + status.slice(1))(leader.status || 'offline'), }; @@ -398,8 +396,7 @@ Template.room.helpers({ }, unreadData() { - const data = - { count: RoomHistoryManager.getRoom(this._id).unreadNotLoaded.get() + Template.instance().unreadCount.get() }; + const data = { count: RoomHistoryManager.getRoom(this._id).unreadNotLoaded.get() + Template.instance().unreadCount.get() }; const room = RoomManager.getOpenedRoomByRid(this._id); if (room) { @@ -562,7 +559,6 @@ export const dropzoneEvents = { }, 'dropped .dropzone-overlay'(event, instance) { - event.currentTarget.parentNode.classList.remove('over'); const e = event.originalEvent || event; @@ -721,7 +717,7 @@ Template.room.events({ RoomHistoryManager.getSurroundingMessages(message, 50); } else { const subscription = Subscriptions.findOne({ rid: _id }); - message = ChatMessage.find({ rid: _id, ts: { $gt: (subscription != null ? subscription.ls : undefined) } }, { sort: { ts: 1 }, limit: 1 }).fetch()[0]; + message = ChatMessage.find({ rid: _id, ts: { $gt: subscription != null ? subscription.ls : undefined } }, { sort: { ts: 1 }, limit: 1 }).fetch()[0]; RoomHistoryManager.getSurroundingMessages(message, 50); } }, @@ -786,7 +782,6 @@ Template.room.events({ chatMessages[RoomManager.openedRoom].input.focus(); }, 'click .message-actions__menu'(e, i) { - const { msg: message, context: ctx } = messageArgs(this); const context = ctx || message.actionContext || 'message'; @@ -802,10 +797,10 @@ Template.room.events({ 'delete-message', 'report-message', ]; - const [items, alertsItem] = allItems.reduce((result, value) => (result[itemsBelowDivider.includes(value.id) ? 1 : 0].push(value), result), [[], []]); + const [items, alertsItem] = allItems.reduce((result, value) => { result[itemsBelowDivider.includes(value.id) ? 1 : 0].push(value); return result; }, [[], []]); const groups = [{ items }]; - if (alertsItem .length) { + if (alertsItem.length) { groups.push({ items: alertsItem }); } const config = { @@ -853,7 +848,6 @@ Template.room.events({ if (username) { openProfileTabOrOpenDM(e, instance, username); - return; } }, @@ -878,7 +872,7 @@ Template.room.events({ } }, 'load img'(e, template) { - return (typeof template.sendToBottomIfNecessary === 'function' ? template.sendToBottomIfNecessary() : undefined); + return typeof template.sendToBottomIfNecessary === 'function' ? template.sendToBottomIfNecessary() : undefined; }, 'click .jump-recent button'(e, template) { @@ -917,16 +911,15 @@ Template.room.events({ if (!roomData) { return false; } if (roomData.announcementDetails != null && roomData.announcementDetails.callback != null) { return callbacks.run(roomData.announcementDetails.callback, this._id); - } else { - modal.open({ - title: t('Announcement'), - text: callbacks.run('renderMessage', { html: roomData.announcement }).html, - html: true, - showConfirmButton: false, - showCancelButton: true, - cancelButtonText: t('Close'), - }); } + modal.open({ + title: t('Announcement'), + text: callbacks.run('renderMessage', { html: roomData.announcement }).html, + html: true, + showConfirmButton: false, + showCancelButton: true, + cancelButtonText: t('Close'), + }); }, 'click .toggle-hidden'(e) { const id = e.currentTarget.dataset.message; @@ -1001,7 +994,7 @@ Template.room.onCreated(function() { this.selectedRange = []; this.selectablePointer = null; - this.flexTemplate = new ReactiveVar; + this.flexTemplate = new ReactiveVar(); this.userDetail = new ReactiveVar(FlowRouter.getParam('username')); this.groupDetail = new ReactiveVar(); @@ -1113,7 +1106,7 @@ Template.room.onRendered(function() { const { _id: rid } = this.data; if (!chatMessages[rid]) { - chatMessages[rid] = new ChatMessages; + chatMessages[rid] = new ChatMessages(); } chatMessages[rid].initializeWrapper(this.find('.wrapper')); chatMessages[rid].initializeInput(this.find('.js-input-message'), { rid }); @@ -1167,9 +1160,7 @@ Template.room.onRendered(function() { // observer.disconnect() template.onWindowResize = () => - Meteor.defer(() => template.sendToBottomIfNecessaryDebounced()) - ; - + Meteor.defer(() => template.sendToBottomIfNecessaryDebounced()); window.addEventListener('resize', template.onWindowResize); wrapper.addEventListener('mousewheel', function() { @@ -1182,7 +1173,7 @@ Template.room.onRendered(function() { Meteor.defer(() => template.checkIfScrollIsAtBottom()); }); - wrapper.addEventListener('touchstart', () => template.atBottom = false); + wrapper.addEventListener('touchstart', () => { template.atBottom = false; }); wrapper.addEventListener('touchend', function() { template.checkIfScrollIsAtBottom(); @@ -1240,7 +1231,7 @@ Template.room.onRendered(function() { wrapper.addEventListener('scroll', () => updateUnreadCount()); // salva a data da renderização para exibir alertas de novas mensagens - $.data(this.firstNode, 'renderedAt', new Date); + $.data(this.firstNode, 'renderedAt', new Date()); const webrtc = WebRTC.getInstanceByRoomId(template.data._id); if (webrtc) { @@ -1267,7 +1258,6 @@ Template.room.onRendered(function() { }); this.autorun(function() { - if (template.data._id !== RoomManager.openedRoom) { return; } @@ -1277,7 +1267,6 @@ Template.room.onRendered(function() { FlowRouter.go('home'); } }); - }); callbacks.add('enter-room', (sub) => { diff --git a/app/ui/client/views/app/roomSearch.js b/app/ui/client/views/app/roomSearch.js index c77fb4c736a2c47c453349819cc34191e30821d4..b1c5f39bdab88053e494f3b7023a6771d3f216b5 100644 --- a/app/ui/client/views/app/roomSearch.js +++ b/app/ui/client/views/app/roomSearch.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { roomTypes } from '../../../../utils'; Template.roomSearch.helpers({ diff --git a/app/ui/client/views/app/secretURL.js b/app/ui/client/views/app/secretURL.js index 6adc7baca6eb333d2142cf107ff4c159710d7dca..d78a778c622addeee9fa90d7852914f0ecf77a23 100644 --- a/app/ui/client/views/app/secretURL.js +++ b/app/ui/client/views/app/secretURL.js @@ -3,6 +3,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { settings } from '../../../../settings'; import { KonchatNotification } from '../../lib/notification'; diff --git a/app/ui/client/views/app/tests/helpers.tests.js b/app/ui/client/views/app/tests/helpers.tests.js index cf5440edcdf983ca3e9cb6847762f1e666a925e1..110a050454ebe45b60bacf74bc063bcd59ad460e 100644 --- a/app/ui/client/views/app/tests/helpers.tests.js +++ b/app/ui/client/views/app/tests/helpers.tests.js @@ -1,6 +1,7 @@ /* eslint-env mocha */ import 'babel-polyfill'; import assert from 'assert'; + import { timeAgo } from '../helpers'; diff --git a/app/ui/client/views/app/videoCall/videoButtons.js b/app/ui/client/views/app/videoCall/videoButtons.js index 1a0ea2f39d63063592d9667f4813ed358c99bc6d..08a83c496c52c2bef787157ff7a8269a7a6578a2 100644 --- a/app/ui/client/views/app/videoCall/videoButtons.js +++ b/app/ui/client/views/app/videoCall/videoButtons.js @@ -1,5 +1,6 @@ import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { WebRTC } from '../../../../../webrtc/client'; Template.videoButtons.helpers({ diff --git a/app/ui/client/views/app/videoCall/videoCall.js b/app/ui/client/views/app/videoCall/videoCall.js index f7674ede58700d791d84bc434e1fcf5972ebd92d..442d2140ee49dd37059a27aa6cd6a48a03a94974 100644 --- a/app/ui/client/views/app/videoCall/videoCall.js +++ b/app/ui/client/views/app/videoCall/videoCall.js @@ -2,11 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { t } from '../../../../../utils'; import { WebRTC } from '../../../../../webrtc/client'; Template.videoCall.onCreated(function() { - return this.mainVideo = new ReactiveVar('$auto'); + this.mainVideo = new ReactiveVar('$auto'); }); Template.videoCall.helpers({ @@ -66,9 +67,8 @@ Template.videoCall.helpers({ } if (webrtc.remoteItemsById.get()[template.mainVideo.get()] != null) { return webrtc.remoteItemsById.get()[template.mainVideo.get()].url; - } else { - template.mainVideo.set('$auto'); } + template.mainVideo.set('$auto'); }, mainVideoUsername() { const template = Template.instance(); @@ -87,9 +87,8 @@ Template.videoCall.helpers({ if (webrtc.remoteItemsById.get()[template.mainVideo.get()] != null) { const user = Meteor.users.findOne(webrtc.remoteItemsById.get()[template.mainVideo.get()].id); return user != null ? user.username : undefined; - } else { - template.mainVideo.set('$auto'); } + template.mainVideo.set('$auto'); }, usernameByUserId(userId) { const user = Meteor.users.findOne(userId); @@ -130,7 +129,7 @@ Template.videoCall.events({ }, 'loadstart video[muted]'(e) { e.currentTarget.muted = true; - return e.currentTarget.volume = 0; + e.currentTarget.volume = 0; }, }); diff --git a/app/ui/client/views/cmsPage.js b/app/ui/client/views/cmsPage.js index 39558923caa9c681902816f049f00d55248fd9a4..63d55648cf3eef420939722c93fadb00b9a22f16 100644 --- a/app/ui/client/views/cmsPage.js +++ b/app/ui/client/views/cmsPage.js @@ -3,6 +3,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { Tracker } from 'meteor/tracker'; + import { settings } from '../../../settings'; Template.cmsPage.onCreated(function() { diff --git a/app/ui/client/views/fxos.js b/app/ui/client/views/fxos.js index fef0a8167cd23fcb4e1251ea9f662e58ff7ac2d3..72847ba83a51ec7a4d3836a9b4679d1eedc11936 100644 --- a/app/ui/client/views/fxos.js +++ b/app/ui/client/views/fxos.js @@ -2,7 +2,6 @@ import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Template } from 'meteor/templating'; Template.fxOsInstallPrompt.onRendered(function() { - const showPrompt = function() { const request = window.navigator.mozApps.install(`http://${ location.host }/manifest.webapp`); request.onsuccess = function() { diff --git a/app/user-data-download/server/cronProcessDownloads.js b/app/user-data-download/server/cronProcessDownloads.js index a903827fe2df443e51edb6a8fff6b2719093bc9b..bd76ea49e1a72e8a46562f09e1482f2817323d2b 100644 --- a/app/user-data-download/server/cronProcessDownloads.js +++ b/app/user-data-download/server/cronProcessDownloads.js @@ -1,12 +1,14 @@ +import fs from 'fs'; +import path from 'path'; + import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import { SyncedCron } from 'meteor/littledata:synced-cron'; +import archiver from 'archiver'; + import { settings } from '../../settings'; import { Subscriptions, Rooms, Users, Uploads, Messages, UserDataFiles, ExportOperations } from '../../models'; import { FileUpload } from '../../file-upload'; -import { SyncedCron } from 'meteor/littledata:synced-cron'; -import fs from 'fs'; -import path from 'path'; -import archiver from 'archiver'; import * as Mailer from '../../mailer'; let zipFolder = '/tmp/zipFiles'; @@ -43,7 +45,7 @@ const loadUserSubscriptions = function(exportOperation) { cursor.forEach((subscription) => { const roomId = subscription.rid; const roomData = Rooms.findOneById(roomId); - let roomName = (roomData && roomData.name) ? roomData.name : roomId; + let roomName = roomData && roomData.name ? roomData.name : roomId; let userId = null; if (subscription.t === 'd') { @@ -79,7 +81,7 @@ const loadUserSubscriptions = function(exportOperation) { const getAttachmentData = function(attachment) { const attachmentData = { - type : attachment.type, + type: attachment.type, title: attachment.title, title_link: attachment.title_link, image_url: attachment.image_url, @@ -227,13 +229,13 @@ const continueExportingRoom = function(exportOperation, exportOpRoomData) { message = TAPi18n.__('User_left'); break; case 'au': - message = TAPi18n.__('User_added_by', { user_added : msg.msg, user_by : msg.u.username }); + message = TAPi18n.__('User_added_by', { user_added: msg.msg, user_by: msg.u.username }); break; case 'r': message = TAPi18n.__('Room_name_changed', { room_name: msg.msg, user_by: msg.u.username }); break; case 'ru': - message = TAPi18n.__('User_removed_by', { user_removed : msg.msg, user_by : msg.u.username }); + message = TAPi18n.__('User_removed_by', { user_removed: msg.msg, user_by: msg.u.username }); break; case 'wm': message = TAPi18n.__('Welcome', { user: msg.u.username }); @@ -315,7 +317,6 @@ const sendEmail = function(userId) { subject, html: body, }); - }; const makeZipFile = function(exportOperation) { @@ -408,7 +409,6 @@ const continueExportOperation = function(exportOperation) { } try { - if (exportOperation.status === 'exporting-rooms') { generateChannelsFile(exportOperation); } diff --git a/app/user-data-download/server/startup/settings.js b/app/user-data-download/server/startup/settings.js index fb13e50988a666b74e6d937243bcf4eafcec7a1d..8b2c5165aca495fe81f4045d91e7a5032bb0832f 100644 --- a/app/user-data-download/server/startup/settings.js +++ b/app/user-data-download/server/startup/settings.js @@ -1,7 +1,6 @@ import { settings } from '../../../settings'; settings.addGroup('UserDataDownload', function() { - this.add('UserData_EnableDownload', true, { type: 'boolean', public: true, @@ -31,6 +30,4 @@ settings.addGroup('UserDataDownload', function() { public: true, i18nLabel: 'UserData_MessageLimitPerRequest', }); - - }); diff --git a/app/utils/client/lib/CustomTranslations.js b/app/utils/client/lib/CustomTranslations.js index ab17aa85cd1eb34b95b846e056d2ef4dce49db23..1996a7718d85c7cabf494c9646e5b00daeeb4e68 100644 --- a/app/utils/client/lib/CustomTranslations.js +++ b/app/utils/client/lib/CustomTranslations.js @@ -1,4 +1,5 @@ import { TAPi18n, TAPi18next } from 'meteor/tap:i18n'; + import { settings } from '../../../settings'; export function applyCustomTranslations() { diff --git a/app/utils/client/lib/canDeleteMessage.js b/app/utils/client/lib/canDeleteMessage.js index 9270d46a97a917eace6475b36fe163a0160fce80..22305afb0b52aa3ba86453124d2ba8c9bbb37cf5 100644 --- a/app/utils/client/lib/canDeleteMessage.js +++ b/app/utils/client/lib/canDeleteMessage.js @@ -38,5 +38,3 @@ export const canDeleteMessage = ({ rid, ts, uid }) => { return true; }; - - diff --git a/app/utils/client/lib/handleError.js b/app/utils/client/lib/handleError.js index abe8adcffc247762e8b4b0b9ab4e0d89a6d9bf04..9e54e8cacf48ca69107e321a4ffce84cdcbcf5ef 100644 --- a/app/utils/client/lib/handleError.js +++ b/app/utils/client/lib/handleError.js @@ -14,7 +14,7 @@ export const handleError = function(error, useToastr = true) { if (useToastr) { const details = Object.entries(error.details || {}) - .reduce((obj, [key, value]) => ({ ...obj, [key] : s.escapeHTML(value) }), {}); + .reduce((obj, [key, value]) => ({ ...obj, [key]: s.escapeHTML(value) }), {}); const message = TAPi18n.__(error.error, details); const title = details.errorTitle && TAPi18n.__(details.errorTitle); diff --git a/app/utils/client/lib/roomTypes.js b/app/utils/client/lib/roomTypes.js index ba448d239241c0fdd34bcc5726d152021da0bb9b..96fdcf0e5493adf001d2722ab84957aef955e0a7 100644 --- a/app/utils/client/lib/roomTypes.js +++ b/app/utils/client/lib/roomTypes.js @@ -1,35 +1,43 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; +import _ from 'underscore'; + import { RoomTypesCommon } from '../../lib/RoomTypesCommon'; import { ChatRoom, ChatSubscription, RoomRoles } from '../../../models'; -import _ from 'underscore'; export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { checkCondition(roomType) { return roomType.condition == null || roomType.condition(); } + getTypes() { return _.sortBy(this.roomTypesOrder, 'order').map((type) => this.roomTypes[type.identifier]).filter((type) => !type.condition || type.condition()); } + getIcon(roomData) { if (!roomData || !roomData.t || !this.roomTypes[roomData.t]) { return; } return (this.roomTypes[roomData.t].getIcon && this.roomTypes[roomData.t].getIcon(roomData)) || this.roomTypes[roomData.t].icon; } + getRoomName(roomType, roomData) { return this.roomTypes[roomType] && this.roomTypes[roomType].roomName && this.roomTypes[roomType].roomName(roomData); } + getSecondaryRoomName(roomType, roomData) { return this.roomTypes[roomType] && typeof this.roomTypes[roomType].secondaryRoomName === 'function' && this.roomTypes[roomType].secondaryRoomName(roomData); } + getIdentifiers(e) { const except = [].concat(e); const list = _.reject(this.roomTypesOrder, (t) => except.indexOf(t.identifier) !== -1); return _.map(list, (t) => t.identifier); } + getUserStatus(roomType, rid) { return this.roomTypes[roomType] && typeof this.roomTypes[roomType].getUserStatus === 'function' && this.roomTypes[roomType].getUserStatus(rid); } + getRoomType(roomId) { const fields = { t: 1, @@ -41,12 +49,15 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { }); return room && room.t; } + findRoom(roomType, identifier, user) { return this.roomTypes[roomType] && this.roomTypes[roomType].findRoom(identifier, user); } + canSendMessage(rid) { return ChatSubscription.find({ rid }).count() > 0; } + readOnly(rid, user) { const fields = { ro: 1, @@ -80,10 +91,12 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { }); return room && (room.ro === true && Array.isArray(room.muted) && room.muted.indexOf(user.username) !== -1 && !userOwner); } + archived(rid) { const room = ChatRoom.findOne({ _id: rid }, { fields: { archived: 1 } }); return room && room.archived === true; } + verifyCanSendMessage(rid) { const room = ChatRoom.findOne({ _id: rid }, { fields: { t: 1 } }); @@ -97,6 +110,7 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { } return this.canSendMessage(rid); } + verifyShowJoinLink(rid) { const room = ChatRoom.findOne({ _id: rid, t: { $exists: true, $ne: null } }, { fields: { t: 1 } }); if (!room || !room.t) { @@ -108,6 +122,7 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { } return this.roomTypes[roomType].showJoinLink(rid); } + getNotSubscribedTpl(rid) { const room = ChatRoom.findOne({ _id: rid, t: { $exists: true, $ne: null } }, { fields: { t: 1 } }); if (!room || !room.t) { @@ -145,4 +160,4 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { return FlowRouter.go(this.roomTypes[roomType].route.name, routeData, queryParams); } -}; +}(); diff --git a/app/utils/lib/RoomTypeConfig.js b/app/utils/lib/RoomTypeConfig.js index df3a66eb785289cde22b5f3c06aae037ef6415da..ac87d16863cd4d9fb4265a8bee558d93e676b229 100644 --- a/app/utils/lib/RoomTypeConfig.js +++ b/app/utils/lib/RoomTypeConfig.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { settings } from '../../settings'; let Users; @@ -174,18 +175,18 @@ export class RoomTypeConfig { if (!hasPermission && typeof hasPermission !== 'function') { throw new Error('You MUST provide the "hasPermission" to canBeCreated function'); } - return Meteor.isServer ? - hasPermission(Meteor.userId(), `create-${ this._identifier }`) : - hasPermission([`create-${ this._identifier }`]); + return Meteor.isServer + ? hasPermission(Meteor.userId(), `create-${ this._identifier }`) + : hasPermission([`create-${ this._identifier }`]); } canBeDeleted(hasPermission, room) { if (!hasPermission && typeof hasPermission !== 'function') { throw new Error('You MUST provide the "hasPermission" to canBeDeleted function'); } - return Meteor.isServer ? - hasPermission(Meteor.userId(), `delete-${ room.t }`, room._id) : - hasPermission(`delete-${ room.t }`, room._id); + return Meteor.isServer + ? hasPermission(Meteor.userId(), `delete-${ room.t }`, room._id) + : hasPermission(`delete-${ room.t }`, room._id); } supportMembersList(/* room */) { diff --git a/app/utils/lib/RoomTypesCommon.js b/app/utils/lib/RoomTypesCommon.js index 438a0b130686a6bb1b6c69762276a5234b652930..a98d5f716d1694c59238512b876f1a483430844f 100644 --- a/app/utils/lib/RoomTypesCommon.js +++ b/app/utils/lib/RoomTypesCommon.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; -import { RoomTypeConfig } from './RoomTypeConfig'; import { FlowRouter } from 'meteor/kadira:flow-router'; + +import { RoomTypeConfig } from './RoomTypeConfig'; import { roomExit } from './roomExit'; export class RoomTypesCommon { diff --git a/app/utils/lib/fileUploadRestrictions.js b/app/utils/lib/fileUploadRestrictions.js index 576eee8ebe7bfa831f09777b49a2d853833899d2..c35b3a881e5ce11b302e4a27c9d842a3a5f5d02d 100644 --- a/app/utils/lib/fileUploadRestrictions.js +++ b/app/utils/lib/fileUploadRestrictions.js @@ -1,6 +1,7 @@ -import { settings } from '../../settings'; import _ from 'underscore'; +import { settings } from '../../settings'; + export const fileUploadMediaWhiteList = function() { const mediaTypeWhiteList = settings.get('FileUpload_MediaTypeWhiteList'); @@ -24,14 +25,14 @@ export const fileUploadIsValidContentType = function(type) { if (_.contains(list, type)) { return true; - } else { - const wildCardGlob = '/*'; - const wildcards = _.filter(list, function(item) { - return item.indexOf(wildCardGlob) > 0; - }); - if (_.contains(wildcards, type.replace(/(\/.*)$/, wildCardGlob))) { - return true; - } } + const wildCardGlob = '/*'; + const wildcards = _.filter(list, function(item) { + return item.indexOf(wildCardGlob) > 0; + }); + if (_.contains(wildcards, type.replace(/(\/.*)$/, wildCardGlob))) { + return true; + } + return false; }; diff --git a/app/utils/lib/getRoomAvatarURL.js b/app/utils/lib/getRoomAvatarURL.js index 5f5f449c85399d05684f03c47016bc3f2b107f22..aa3fc898a7049c6c07e356f7e530c64f566e87e1 100644 --- a/app/utils/lib/getRoomAvatarURL.js +++ b/app/utils/lib/getRoomAvatarURL.js @@ -1,5 +1,5 @@ -import { settings } from '../../settings'; import { getAvatarURL } from './getAvatarURL'; +import { settings } from '../../settings'; export const getRoomAvatarURL = function(roomId) { const externalSource = (settings.get('Accounts_AvatarExternalProviderUrl') || '').trim().replace(/\/$/, ''); diff --git a/app/utils/lib/getURL.js b/app/utils/lib/getURL.js index 3ffb8e1c88ad97ea86bc22822a27e154955c16c6..1498dc77b1f9a893971223512000ddfd6e51af19 100644 --- a/app/utils/lib/getURL.js +++ b/app/utils/lib/getURL.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { settings } from '../../settings'; import s from 'underscore.string'; + import { isURL } from './isURL'; +import { settings } from '../../settings'; export const getURL = (path, { cdn = true, full = false } = {}) => { if (isURL(path)) { diff --git a/app/utils/lib/getUserAvatarURL.js b/app/utils/lib/getUserAvatarURL.js index 0310234fe7eabda51a5c1d744ef1707f7c1fc2a1..82f0905f571b74d0dcb1273bb844b02432e2c069 100644 --- a/app/utils/lib/getUserAvatarURL.js +++ b/app/utils/lib/getUserAvatarURL.js @@ -1,7 +1,8 @@ import { Session } from 'meteor/session'; import { Tracker } from 'meteor/tracker'; -import { settings } from '../../settings'; + import { getAvatarURL } from './getAvatarURL'; +import { settings } from '../../settings'; export const getUserAvatarURL = function(username) { const externalSource = (settings.get('Accounts_AvatarExternalProviderUrl') || '').trim().replace(/\/$/, ''); diff --git a/app/utils/lib/getUserPreference.js b/app/utils/lib/getUserPreference.js index c9785eb34e8b0e04ea75808af2ba1e0a5cac880a..1cb3ad7bd800bf8dc0e321ddb324e4da41961490 100644 --- a/app/utils/lib/getUserPreference.js +++ b/app/utils/lib/getUserPreference.js @@ -6,8 +6,8 @@ export const getUserPreference = (user, key, defaultValue = undefined) => { if (typeof user === typeof '') { user = Users.findOne(user, { fields: { [`settings.preferences.${ key }`]: 1 } }); } - if (user && user.settings && user.settings.preferences && - user.settings.preferences.hasOwnProperty(key)) { + if (user && user.settings && user.settings.preferences + && user.settings.preferences.hasOwnProperty(key)) { preference = user.settings.preferences[key]; } else if (defaultValue === undefined) { preference = settings.get(`Accounts_Default_User_Preferences_${ key }`); diff --git a/app/utils/lib/getValidRoomName.js b/app/utils/lib/getValidRoomName.js index 5436d7d5cac22abc72adfdbf53e44ecfc2e5b203..fdc8d31b2a187fc577a9a6858dc5fe02f71657d7 100644 --- a/app/utils/lib/getValidRoomName.js +++ b/app/utils/lib/getValidRoomName.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import limax from 'limax'; + import { settings } from '../../settings'; import { Rooms } from '../../models'; diff --git a/app/utils/lib/placeholders.js b/app/utils/lib/placeholders.js index b68db8eddb7f045f78f8807a2969c1f0a4537c0a..ffb93e7312aeb9846009b6fcc3d2cc8f4c6364f3 100644 --- a/app/utils/lib/placeholders.js +++ b/app/utils/lib/placeholders.js @@ -1,6 +1,7 @@ -import { settings } from '../../settings'; import s from 'underscore.string'; +import { settings } from '../../settings'; + export const placeholders = { replace: (str, data) => { if (!str) { @@ -25,7 +26,7 @@ export const placeholders = { } } - str = str.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2'); + str = str.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br>$2'); return str; }, diff --git a/app/utils/lib/roomExit.js b/app/utils/lib/roomExit.js index ada0fe375eab61526c64ace1d46efb499de67714..6b66ee3e76b7f08de1bf0fe36362fec5df26302f 100644 --- a/app/utils/lib/roomExit.js +++ b/app/utils/lib/roomExit.js @@ -1,5 +1,6 @@ import { Blaze } from 'meteor/blaze'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + import { callbacks } from '../../callbacks'; export const roomExit = function() { diff --git a/app/utils/lib/tapi18n.js b/app/utils/lib/tapi18n.js index 77a11c881a8285ab77391e4e60bd0c5caaab1fbf..665913b57879038bda57906acc554762a769f43d 100644 --- a/app/utils/lib/tapi18n.js +++ b/app/utils/lib/tapi18n.js @@ -4,12 +4,11 @@ import { TAPi18n } from 'meteor/tap:i18n'; export const t = function(key, ...replaces) { if (_.isObject(replaces[0])) { return TAPi18n.__(key, ...replaces); - } else { - return TAPi18n.__(key, { - postProcess: 'sprintf', - sprintf: replaces, - }); } + return TAPi18n.__(key, { + postProcess: 'sprintf', + sprintf: replaces, + }); }; export const isRtl = (lang) => { diff --git a/app/utils/lib/templateVarHandler.js b/app/utils/lib/templateVarHandler.js index 8b8070ca8961212cec11023d1ba88705c9658db1..463a48ed34e3aecaaa4b491f4b9211d56b93baad 100644 --- a/app/utils/lib/templateVarHandler.js +++ b/app/utils/lib/templateVarHandler.js @@ -8,7 +8,6 @@ if (Meteor.isServer) { } export const templateVarHandler = function(variable, object) { - const templateRegex = /#{([\w\-]+)}/gi; let match = templateRegex.exec(variable); let tmpVariable = variable; @@ -19,22 +18,21 @@ export const templateVarHandler = function(variable, object) { return; } return object[variable]; - } else { - logger && logger.debug('template found. replacing values'); - while (match != null) { - const tmplVar = match[0]; - const tmplAttrName = match[1]; - - if (!object.hasOwnProperty(tmplAttrName)) { - logger && logger.debug(`user does not have attribute: ${ tmplAttrName }`); - return; - } + } + logger && logger.debug('template found. replacing values'); + while (match != null) { + const tmplVar = match[0]; + const tmplAttrName = match[1]; - const attrVal = object[tmplAttrName]; - logger && logger.debug(`replacing template var: ${ tmplVar } with value: ${ attrVal }`); - tmpVariable = tmpVariable.replace(tmplVar, attrVal); - match = templateRegex.exec(variable); + if (!object.hasOwnProperty(tmplAttrName)) { + logger && logger.debug(`user does not have attribute: ${ tmplAttrName }`); + return; } - return tmpVariable; + + const attrVal = object[tmplAttrName]; + logger && logger.debug(`replacing template var: ${ tmplVar } with value: ${ attrVal }`); + tmpVariable = tmpVariable.replace(tmplVar, attrVal); + match = templateRegex.exec(variable); } + return tmpVariable; }; diff --git a/app/utils/server/functions/getMongoInfo.js b/app/utils/server/functions/getMongoInfo.js index b8137afe0d9ddda10d0f8889b22bce29faa099cc..49baab0536d837437e211ecfb83c95cecc2659f5 100644 --- a/app/utils/server/functions/getMongoInfo.js +++ b/app/utils/server/functions/getMongoInfo.js @@ -43,12 +43,9 @@ export function getMongoInfo() { mongoVersion = version; mongoStorageEngine = storageEngine.name; - } catch (e) { return fallbackMongoInfo(); } return { oplogEnabled, mongoVersion, mongoStorageEngine }; } - - diff --git a/app/utils/server/lib/roomTypes.js b/app/utils/server/lib/roomTypes.js index 3e8c5a13d6143041c3fb9cff59eec714865741a0..d4b2adcab3da1128eb82626646590dfd167e46f0 100644 --- a/app/utils/server/lib/roomTypes.js +++ b/app/utils/server/lib/roomTypes.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { RoomTypesCommon } from '../../lib/RoomTypesCommon'; export const roomTypes = new class roomTypesServer extends RoomTypesCommon { @@ -15,7 +16,7 @@ export const roomTypes = new class roomTypesServer extends RoomTypesCommon { if (this.roomTypes[roomType] == null) { this.roomTypes[roomType] = {}; } - return this.roomTypes[roomType].publish = callback; + this.roomTypes[roomType].publish = callback; } setRoomFind(roomType, callback) { @@ -25,7 +26,7 @@ export const roomTypes = new class roomTypesServer extends RoomTypesCommon { if (this.roomTypes[roomType] == null) { this.roomTypes[roomType] = {}; } - return this.roomTypes[roomType].roomFind = callback; + this.roomTypes[roomType].roomFind = callback; } getRoomFind(roomType) { @@ -46,5 +47,4 @@ export const roomTypes = new class roomTypesServer extends RoomTypesCommon { runPublish(scope, roomType, identifier) { return this.roomTypes[roomType] && this.roomTypes[roomType].publish && this.roomTypes[roomType].publish.call(scope, identifier); } - -}; +}(); diff --git a/app/version-check/client/index.js b/app/version-check/client/index.js index 51282acc7cb3669889df644ac26ec6b9471bd3a2..2409e39f4840264977c2ba57034827f1765e6696 100644 --- a/app/version-check/client/index.js +++ b/app/version-check/client/index.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { TAPi18n } from 'meteor/tap:i18n'; + import { alerts } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/version-check/server/functions/checkVersionUpdate.js b/app/version-check/server/functions/checkVersionUpdate.js index b775e1e9397d500e39a818f5fd1a2b2694231040..702c74e1e853e082183d4358734d864dc5471c41 100644 --- a/app/version-check/server/functions/checkVersionUpdate.js +++ b/app/version-check/server/functions/checkVersionUpdate.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; +import semver from 'semver'; + +import getNewUpdates from './getNewUpdates'; import { settings } from '../../../settings'; import { Info } from '../../../utils'; import { Roles, Users } from '../../../models'; -import semver from 'semver'; import logger from '../logger'; -import getNewUpdates from './getNewUpdates'; // import getNewUpdates from '../sampleUpdateData'; export default () => { @@ -75,7 +76,7 @@ export default () => { } const msg = { - msg: `*${ TAPi18n.__('Rocket_Chat_Alert', adminUser.language) }:*\n\n*${ TAPi18n.__(alert.title, adminUser.language) }*\n${ TAPi18n.__(alert.text, ...(alert.textArguments || []), adminUser.language) }\n${ alert.infoUrl }`, + msg: `*${ TAPi18n.__('Rocket_Chat_Alert', adminUser.language) }:*\n\n*${ TAPi18n.__(alert.title, adminUser.language) }*\n${ TAPi18n.__(alert.text, ...alert.textArguments || [], adminUser.language) }\n${ alert.infoUrl }`, rid: [adminUser._id, 'rocket.cat'].sort().join(''), }; diff --git a/app/version-check/server/functions/getNewUpdates.js b/app/version-check/server/functions/getNewUpdates.js index 1694e5b416774dc55e32a9e216820781ea835f5c..f2f35cb622e62ad4939be55687f93b1049d58f96 100644 --- a/app/version-check/server/functions/getNewUpdates.js +++ b/app/version-check/server/functions/getNewUpdates.js @@ -1,10 +1,12 @@ import os from 'os'; + import { HTTP } from 'meteor/http'; import { check, Match } from 'meteor/check'; +import { MongoInternals } from 'meteor/mongo'; + import { Settings } from '../../../models'; import { Info } from '../../../utils'; import { getWorkspaceAccessToken } from '../../../cloud/server'; -import { MongoInternals } from 'meteor/mongo'; export default () => { try { diff --git a/app/version-check/server/index.js b/app/version-check/server/index.js index 601ad375a17523be7ce2f45ab7c5a374e185f836..acf5998dbff8b66980c58eb3cdbbab986b2a56ed 100644 --- a/app/version-check/server/index.js +++ b/app/version-check/server/index.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { SyncedCron } from 'meteor/littledata:synced-cron'; + import checkVersionUpdate from './functions/checkVersionUpdate'; import './methods/banner_dismiss'; import './addSettings'; diff --git a/app/version-check/server/methods/banner_dismiss.js b/app/version-check/server/methods/banner_dismiss.js index 9eac456984baaad5d0b32d8a61007290cb1ca7b0..217aaf49252e4b7d226c08f66188e7b34db8bcb3 100644 --- a/app/version-check/server/methods/banner_dismiss.js +++ b/app/version-check/server/methods/banner_dismiss.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models'; Meteor.methods({ diff --git a/app/videobridge/client/actionLink.js b/app/videobridge/client/actionLink.js index 8adeb233ac07716834b674a6146ba3f7dc00b2c8..dffb509114f685d5a248d940d5011d7582e691e1 100644 --- a/app/videobridge/client/actionLink.js +++ b/app/videobridge/client/actionLink.js @@ -1,8 +1,9 @@ import { Session } from 'meteor/session'; import { TAPi18n } from 'meteor/tap:i18n'; +import toastr from 'toastr'; + import { actionLinks } from '../../action-links'; import { Rooms } from '../../models'; -import toastr from 'toastr'; actionLinks.register('joinJitsiCall', function(message, params, instance) { if (Session.get('openedRoom')) { diff --git a/app/videobridge/client/tabBar.js b/app/videobridge/client/tabBar.js index 42345646868eb51ca18e6cb857e88f237ade8668..a6617d8b8a5897bb42d654c8bb707b36da6d2b60 100644 --- a/app/videobridge/client/tabBar.js +++ b/app/videobridge/client/tabBar.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; + import { settings } from '../../settings'; import { TabBar } from '../../ui-utils'; import { Rooms } from '../../models'; Meteor.startup(function() { - Tracker.autorun(function() { if (!settings.get('bigbluebutton_Enabled')) { return TabBar.removeButton('bbb_video'); diff --git a/app/videobridge/client/views/videoFlexTab.js b/app/videobridge/client/views/videoFlexTab.js index 8abfa4d9db36f16367b400c4c875a5eb80579ebd..058899992912e71b6c601974ec29debdf5632cae 100644 --- a/app/videobridge/client/views/videoFlexTab.js +++ b/app/videobridge/client/views/videoFlexTab.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; import { modal, TabBar } from '../../../ui-utils'; import { t } from '../../../utils'; diff --git a/app/videobridge/client/views/videoFlexTabBbb.js b/app/videobridge/client/views/videoFlexTabBbb.js index d7ce80ec454a9459c589df9e6d66462f5691d184..a12581da3604ea2f1b901b2825132aeda19b8efd 100644 --- a/app/videobridge/client/views/videoFlexTabBbb.js +++ b/app/videobridge/client/views/videoFlexTabBbb.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; + import { settings } from '../../../settings'; import { Rooms } from '../../../models'; import { hasAllPermission } from '../../../authorization'; diff --git a/app/videobridge/lib/messageType.js b/app/videobridge/lib/messageType.js index 0d97b899553790462347bc113d73d1ecc0d2a958..2ad1871fa3fd89e46ce9ff7779fb1e1fa7641700 100644 --- a/app/videobridge/lib/messageType.js +++ b/app/videobridge/lib/messageType.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/tap:i18n'; + import { MessageTypes } from '../../ui-utils'; Meteor.startup(function() { diff --git a/app/videobridge/server/methods/bbb.js b/app/videobridge/server/methods/bbb.js index 8f7a708cdeea32bdb4cd551ce84582fdf56b182a..04b1d6030ed169e0db000aaaf77528f6ac2accd4 100644 --- a/app/videobridge/server/methods/bbb.js +++ b/app/videobridge/server/methods/bbb.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; +import { HTTP } from 'meteor/http'; +import xml2js from 'xml2js'; + import BigBlueButtonApi from '../../../bigbluebutton'; import { settings } from '../../../settings'; import { Rooms, Users } from '../../../models'; import { saveStreamingOptions } from '../../../channel-settings'; import { API } from '../../../api'; -import { HTTP } from 'meteor/http'; -import xml2js from 'xml2js'; const parser = new xml2js.Parser({ explicitRoot: true, @@ -22,7 +23,6 @@ const getBBBAPI = () => { Meteor.methods({ bbbJoin({ rid }) { - if (!this.userId) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'bbbJoin' }); } diff --git a/app/videobridge/server/methods/jitsiSetTimeout.js b/app/videobridge/server/methods/jitsiSetTimeout.js index 763940e55c452c4f021f1374e0c2e803e2ba4d57..71b892f4f7e71349233ba334cc52ad0659af705e 100644 --- a/app/videobridge/server/methods/jitsiSetTimeout.js +++ b/app/videobridge/server/methods/jitsiSetTimeout.js @@ -8,7 +8,6 @@ import { canAccessRoom } from '../../../authorization/server'; Meteor.methods({ 'jitsi:updateTimeout': (rid) => { - if (!Meteor.userId()) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'jitsi:updateTimeout' }); } @@ -29,15 +28,15 @@ Meteor.methods({ if (!jitsiTimeout || currentTime > jitsiTimeout) { const message = Messages.createWithTypeRoomIdMessageAndUser('jitsi_call_started', rid, '', Meteor.user(), { - actionLinks : [ + actionLinks: [ { icon: 'icon-videocam', label: TAPi18n.__('Click_to_join'), method_id: 'joinJitsiCall', params: '' }, ], }); message.msg = TAPi18n.__('Started_a_video_call'); message.mentions = [ { - _id:'here', - username:'here', + _id: 'here', + username: 'here', }, ]; callbacks.run('afterSaveMessage', message, { ...room, jitsiTimeout: currentTime + CONSTANTS.TIMEOUT }); diff --git a/app/videobridge/server/settings.js b/app/videobridge/server/settings.js index 60c68517308b75e7fb994968787933270e38ae4d..cfb7f90e8d539c1ce6cd670fd982c6d337482e48 100644 --- a/app/videobridge/server/settings.js +++ b/app/videobridge/server/settings.js @@ -1,11 +1,10 @@ import { Meteor } from 'meteor/meteor'; + import { settings } from '../../settings'; Meteor.startup(function() { settings.addGroup('Video Conference', function() { - this.section('BigBlueButton', function() { - this.add('bigbluebutton_Enabled', false, { type: 'boolean', i18nLabel: 'Enabled', @@ -60,7 +59,6 @@ Meteor.startup(function() { }, public: true, }); - }); this.section('Jitsi', function() { diff --git a/app/webdav/client/actionButton.js b/app/webdav/client/actionButton.js index 62656975cc59d6b47761bf2781c58bd93407898a..76d520d0ce81a01aca9fcc3a87313a48fe858a8d 100644 --- a/app/webdav/client/actionButton.js +++ b/app/webdav/client/actionButton.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; + import { t, getURL } from '../../utils'; import { Subscriptions, WebdavAccounts } from '../../models'; import { settings } from '../../settings'; import { MessageAction, modal } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; -Meteor.startup(function() { +Meteor.startup(function() { MessageAction.addButton({ id: 'webdav-upload', icon: 'upload', diff --git a/app/webdav/client/addWebdavAccount.js b/app/webdav/client/addWebdavAccount.js index 1d7bcb3c067018e86644dc4d0ebce07eb6822572..8cdb66a304753d67088723194ad0ad44c925413a 100644 --- a/app/webdav/client/addWebdavAccount.js +++ b/app/webdav/client/addWebdavAccount.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; -import { modal } from '../../ui-utils'; -import { t } from '../../utils'; import _ from 'underscore'; import toastr from 'toastr'; +import { modal } from '../../ui-utils'; +import { t } from '../../utils'; + Template.addWebdavAccount.helpers({ btnAddNewServer() { if (Template.instance().loading.get()) { diff --git a/app/webdav/client/selectWebdavAccount.js b/app/webdav/client/selectWebdavAccount.js index d94fddf1f54088f4f853a574223ac089faaad0d2..18125501c868f18114cf13e2dec1d3e89c9ead08 100644 --- a/app/webdav/client/selectWebdavAccount.js +++ b/app/webdav/client/selectWebdavAccount.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import toastr from 'toastr'; + import { modal } from '../../ui-utils'; import { t } from '../../utils'; import { WebdavAccounts } from '../../models'; diff --git a/app/webdav/client/startup/messageBoxActions.js b/app/webdav/client/startup/messageBoxActions.js index 95d60169787d2e86f666c3377fb62a9f76a78b1f..0ccfcb1760ac959807d98b9143c523c47603c5f8 100644 --- a/app/webdav/client/startup/messageBoxActions.js +++ b/app/webdav/client/startup/messageBoxActions.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import { t } from '../../../utils'; import { settings } from '../../../settings'; import { messageBox, modal } from '../../../ui-utils'; diff --git a/app/webdav/client/webdavFilePicker.js b/app/webdav/client/webdavFilePicker.js index 5484e683d40ed6c9aa2240a8692d4bb193e59ee0..fc6edd3edfde0bede34c6a4c7469160fc639c106 100644 --- a/app/webdav/client/webdavFilePicker.js +++ b/app/webdav/client/webdavFilePicker.js @@ -3,10 +3,11 @@ import { Template } from 'meteor/templating'; import _ from 'underscore'; import toastr from 'toastr'; import { Session } from 'meteor/session'; +import { Handlebars } from 'meteor/ui'; + import { modal, call } from '../../ui-utils'; import { t } from '../../utils'; import { fileUploadHandler } from '../../file-upload'; -import { Handlebars } from 'meteor/ui'; Template.webdavFilePicker.rendered = async function() { const { accountId } = this.data; diff --git a/app/webdav/server/methods/addWebdavAccount.js b/app/webdav/server/methods/addWebdavAccount.js index 60ac0fd2e69f86b6f52df959d2d452e230077a36..2834eb52de2883e4a244eec700b43c09b5c2055e 100644 --- a/app/webdav/server/methods/addWebdavAccount.js +++ b/app/webdav/server/methods/addWebdavAccount.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import { createClient } from 'webdav'; + import { settings } from '../../../settings'; import { WebdavAccounts } from '../../../models'; -import { createClient } from 'webdav'; Meteor.methods({ async addWebdavAccount(formData) { - const userId = Meteor.userId(); if (!userId) { @@ -50,6 +50,5 @@ Meteor.methods({ } catch (error) { return { success: false, message: error.code === 11000 ? 'duplicated-account' : 'unknown-write-error', error }; } - }, }); diff --git a/app/webdav/server/methods/getFileFromWebdav.js b/app/webdav/server/methods/getFileFromWebdav.js index c5d417da38eae2509a4d4e2713d8c0577afb4def..c4a7d78fadbee727ef0211b1cd632f500853aa00 100644 --- a/app/webdav/server/methods/getFileFromWebdav.js +++ b/app/webdav/server/methods/getFileFromWebdav.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import { createClient } from 'webdav'; + import { settings } from '../../../settings'; import { WebdavAccounts } from '../../../models'; -import { createClient } from 'webdav'; Meteor.methods({ async getFileFromWebdav(accountId, file) { diff --git a/app/webdav/server/methods/getWebdavFileList.js b/app/webdav/server/methods/getWebdavFileList.js index a637abd612a04094a94d9b33b2127159c0265905..3f48d845edada66c41dbaf0b19f7116cd62b7e52 100644 --- a/app/webdav/server/methods/getWebdavFileList.js +++ b/app/webdav/server/methods/getWebdavFileList.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; +import { createClient } from 'webdav'; + import { settings } from '../../../settings'; import { WebdavAccounts } from '../../../models'; -import { createClient } from 'webdav'; Meteor.methods({ async getWebdavFileList(accountId, path) { diff --git a/app/webdav/server/methods/removeWebdavAccount.js b/app/webdav/server/methods/removeWebdavAccount.js index cf461ae8e8d79340f6458a64548fdccef8c743b8..d7305f0f64c78a622dfcf4c8637babd0ac8f85b6 100644 --- a/app/webdav/server/methods/removeWebdavAccount.js +++ b/app/webdav/server/methods/removeWebdavAccount.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { WebdavAccounts } from '../../../models'; Meteor.methods({ diff --git a/app/webdav/server/methods/uploadFileToWebdav.js b/app/webdav/server/methods/uploadFileToWebdav.js index a6f5f776850bb7ef3549d664fe2ce1aa9d1e9c88..7460d87050a1e9b5012f04ace5d43c8861a646a6 100644 --- a/app/webdav/server/methods/uploadFileToWebdav.js +++ b/app/webdav/server/methods/uploadFileToWebdav.js @@ -1,9 +1,11 @@ +import stream from 'stream'; + import { Meteor } from 'meteor/meteor'; -import { settings } from '../../../settings'; -import { WebdavAccounts } from '../../../models'; import Future from 'fibers/future'; import { createClient } from 'webdav'; -import stream from 'stream'; + +import { settings } from '../../../settings'; +import { WebdavAccounts } from '../../../models'; Meteor.methods({ async uploadFileToWebdav(accountId, fileData, name) { diff --git a/app/webdav/server/publications/webdavAccounts.js b/app/webdav/server/publications/webdavAccounts.js index b67c8b303a3098e1068998bc4f83f4f435769bbc..9a067fa4e4ed9d1eb1a76279d9868812f8479665 100644 --- a/app/webdav/server/publications/webdavAccounts.js +++ b/app/webdav/server/publications/webdavAccounts.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { WebdavAccounts } from '../../../models'; Meteor.publish('webdavAccounts', function() { @@ -8,7 +9,7 @@ Meteor.publish('webdavAccounts', function() { return WebdavAccounts.findWithUserId(this.userId, { fields: { - _id:1, + _id: 1, username: 1, server_url: 1, name: 1, diff --git a/app/webrtc/client/WebRTCClass.js b/app/webrtc/client/WebRTCClass.js index 3bef0bcd60f70678c9ab157cd1b2691174c57906..09af52fb423c28e2476b5f45bc157435ad069bfb 100644 --- a/app/webrtc/client/WebRTCClass.js +++ b/app/webrtc/client/WebRTCClass.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; -import { FlowRouter } from 'meteor/kadira:flow-router' ; +import { FlowRouter } from 'meteor/kadira:flow-router'; import { TAPi18n } from 'meteor/tap:i18n'; -import { t } from '../../utils'; + import { ChromeScreenShare } from './screenShare'; +import { t } from '../../utils'; import { Notifications } from '../../notifications'; import { settings } from '../../settings'; import { modal } from '../../ui-utils'; @@ -151,8 +152,6 @@ class WebRTCTransportClass { } callbacks.onRemoteStatus.push(fn); } - - } class WebRTCClass { @@ -195,7 +194,7 @@ class WebRTCClass { this.videoEnabled = new ReactiveVar(true); this.overlayEnabled = new ReactiveVar(false); this.screenShareEnabled = new ReactiveVar(false); - this.localUrl = new ReactiveVar; + this.localUrl = new ReactiveVar(); this.active = false; this.remoteMonitoring = false; this.monitor = false; @@ -406,7 +405,7 @@ class WebRTCClass { _getUserMedia(media, onSuccess, onError) { const onSuccessLocal = (stream) => { if (AudioContext && stream.getAudioTracks().length > 0) { - const audioContext = new AudioContext; + const audioContext = new AudioContext(); const source = audioContext.createMediaStreamSource(stream); const volume = audioContext.createGain(); source.connect(volume); @@ -954,7 +953,6 @@ class WebRTCClass { peerConnection.setRemoteDescription(new RTCSessionDescription(data.description)); } } - } const WebRTC = new class { @@ -986,7 +984,7 @@ const WebRTC = new class { } return this.instancesByRoomId[roomId]; } -}; +}(); Meteor.startup(function() { Tracker.autorun(function() { diff --git a/app/webrtc/client/screenShare.js b/app/webrtc/client/screenShare.js index 66f14ed95796a46b92adabcafc5ef272ac4d6add..827d1fb3eba6119242d1603ce5947fd0e540f4a8 100644 --- a/app/webrtc/client/screenShare.js +++ b/app/webrtc/client/screenShare.js @@ -13,7 +13,7 @@ export const ChromeScreenShare = { }, getSourceId(navigator, callback) { if (callback == null) { - throw '"callback" parameter is mandatory.'; + throw new Error('"callback" parameter is mandatory.'); } this.callbacks.getSourceId = callback; if (navigator === 'electron') { diff --git a/app/wordpress/lib/common.js b/app/wordpress/lib/common.js index dc77951554ec4b9f6f80a730f5b0413e3716ffe5..909342850d2e7f8f96975ad77ad459f699907bec 100644 --- a/app/wordpress/lib/common.js +++ b/app/wordpress/lib/common.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; -import { settings } from '../../settings'; import { ServiceConfiguration } from 'meteor/service-configuration'; -import { CustomOAuth } from '../../custom-oauth'; import _ from 'underscore'; +import { settings } from '../../settings'; +import { CustomOAuth } from '../../custom-oauth'; + const config = { serverURL: '', identityPath: '/oauth/me', diff --git a/app/wordpress/server/startup.js b/app/wordpress/server/startup.js index b239d6d0a5adfc8342dd9dd966fce117a3f1642c..871a515d0e8685fbbe6483c7331c30a5c2e28516 100644 --- a/app/wordpress/server/startup.js +++ b/app/wordpress/server/startup.js @@ -2,7 +2,6 @@ import { settings } from '../../settings'; settings.addGroup('OAuth', function() { return this.section('WordPress', function() { - const enableQuery = { _id: 'Accounts_OAuth_Wordpress', value: true, diff --git a/client/methods/deleteMessage.js b/client/methods/deleteMessage.js index f2ae46a1bedd0d3bfde9ca8d6591096a307dbe64..2badef099b873228809f325b17b4e8a0025204a9 100644 --- a/client/methods/deleteMessage.js +++ b/client/methods/deleteMessage.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatMessage } from '../../app/models/client'; import { canDeleteMessage } from '../../app/utils/client'; diff --git a/client/methods/hideRoom.js b/client/methods/hideRoom.js index 9b93fe9e4cf17d769b28afed727a5b5427cdc897..832dc3a49d227a710dfe965d1dd24c9a4a77af7e 100644 --- a/client/methods/hideRoom.js +++ b/client/methods/hideRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatSubscription } from '../../app/models'; Meteor.methods({ diff --git a/client/methods/openRoom.js b/client/methods/openRoom.js index cc242a2c05e6f6851d562bef33c2bb6688392de0..78a529c86f8e596f0b8f8659ebfb53954b865f64 100644 --- a/client/methods/openRoom.js +++ b/client/methods/openRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatSubscription } from '../../app/models'; Meteor.methods({ diff --git a/client/methods/setUserActiveStatus.js b/client/methods/setUserActiveStatus.js index 99121d34b710bb009fba18a8a214a607573c7614..eaebed8199c3c8830c077f5b845696c2b96b7179 100644 --- a/client/methods/setUserActiveStatus.js +++ b/client/methods/setUserActiveStatus.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + Meteor.methods({ setUserActiveStatus(userId, active) { Meteor.users.update(userId, { $set: { active } }); diff --git a/client/methods/toggleFavorite.js b/client/methods/toggleFavorite.js index e6a4ebbeec33e0f51c65ed72d4889356157710a3..ff4a4a99d6487b19925677196c21ec0f1c4834f0 100644 --- a/client/methods/toggleFavorite.js +++ b/client/methods/toggleFavorite.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { ChatSubscription } from '../../app/models'; Meteor.methods({ diff --git a/client/methods/updateMessage.js b/client/methods/updateMessage.js index 904cd9b9dc37769ff1d92ff4e2da847ddb2d7b07..f51e3046be1890a81ac8c1cff4bec45e43c9dbaf 100644 --- a/client/methods/updateMessage.js +++ b/client/methods/updateMessage.js @@ -1,14 +1,15 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { TimeSync } from 'meteor/mizzao:timesync'; +import _ from 'underscore'; +import moment from 'moment'; +import toastr from 'toastr'; + import { t } from '../../app/utils'; import { ChatMessage } from '../../app/models'; import { hasAtLeastOnePermission } from '../../app/authorization'; import { settings } from '../../app/settings'; import { callbacks } from '../../app/callbacks'; -import _ from 'underscore'; -import moment from 'moment'; -import toastr from 'toastr'; Meteor.methods({ updateMessage(message) { @@ -50,7 +51,6 @@ Meteor.methods({ } Tracker.nonreactive(function() { - if (isNaN(TimeSync.serverOffset())) { message.editedAt = new Date(); } else { @@ -73,7 +73,7 @@ Meteor.methods({ ChatMessage.update({ _id: message._id, 'u._id': Meteor.userId(), - }, { $set : messageObject }); + }, { $set: messageObject }); }); }, }); diff --git a/client/notifications/UsersNameChanged.js b/client/notifications/UsersNameChanged.js index 8af9032ce102f2031f2672308ac9836d6faf2fed..7cba85af027d96db8092eaa90dfd5c96a48a1c42 100644 --- a/client/notifications/UsersNameChanged.js +++ b/client/notifications/UsersNameChanged.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Notifications } from '../../app/notifications'; import { Messages, Subscriptions } from '../../app/models'; diff --git a/client/notifications/notification.js b/client/notifications/notification.js index 67dfabfd806d316735d0b25e7741caa48cd82ba7..ca374de481653edc7ae3322601b34fc4ad3528f4 100644 --- a/client/notifications/notification.js +++ b/client/notifications/notification.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; + import { KonchatNotification } from '../../app/ui'; import { CachedChatSubscription } from '../../app/models'; import { fireGlobalEvent, readMessage, Layout } from '../../app/ui-utils'; @@ -13,7 +14,6 @@ import { Notifications } from '../../app/notifications'; // group messages in which the user is mentioned. function notifyNewRoom(sub) { - // Do not play new room sound if user is busy if (Session.equals(`user_${ Meteor.userId() }_status`, 'busy')) { return; @@ -28,7 +28,6 @@ Meteor.startup(function() { Tracker.autorun(function() { if (Meteor.userId()) { Notifications.onUser('notification', function(notification) { - let openedRoomId = undefined; if (['channel', 'group', 'direct'].includes(FlowRouter.getRouteName())) { openedRoomId = Session.get('openedRoom'); @@ -56,7 +55,6 @@ Meteor.startup(function() { }); Notifications.onUser('audioNotification', function(notification) { - const openedRoomId = Session.get('openedRoom'); // This logic is duplicated in /client/startup/unread.coffee. diff --git a/client/notifications/updateAvatar.js b/client/notifications/updateAvatar.js index 2dd3bf6a63f6450e258ed2ccf759a053f9e64a62..8fc2684842c567e368e1338ff3bde5c87eca8465 100644 --- a/client/notifications/updateAvatar.js +++ b/client/notifications/updateAvatar.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { updateAvatarOfUsername } from '../../app/ui-utils'; import { Notifications } from '../../app/notifications'; diff --git a/client/notifications/updateUserState.js b/client/notifications/updateUserState.js index b2e8c0477540140b1ad5385813d03bf8d322b48f..faaaa30fb7db087a7aa8e16cfcece3f9744ff589 100644 --- a/client/notifications/updateUserState.js +++ b/client/notifications/updateUserState.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { fireGlobalEvent } from '../../app/ui-utils'; import { callbacks } from '../../app/callbacks'; diff --git a/client/routes/adminRouter.js b/client/routes/adminRouter.js index 7d13cbf5e0e6c418344dd991aaec00d6ce9464a0..4cacb323836ae37cf801d50657b7edb658d8f5c6 100644 --- a/client/routes/adminRouter.js +++ b/client/routes/adminRouter.js @@ -1,4 +1,4 @@ -import { FlowRouter } from 'meteor/kadira:flow-router' ; +import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; FlowRouter.route('/admin/users', { diff --git a/client/routes/roomRoute.js b/client/routes/roomRoute.js index ef0c29aef73c02e7b50e3e75f718adc476c62fb3..522dcb99bb67b050741c9df68dbd3ff05e128d5c 100644 --- a/client/routes/roomRoute.js +++ b/client/routes/roomRoute.js @@ -1,6 +1,6 @@ import mem from 'mem'; - import { FlowRouter } from 'meteor/kadira:flow-router'; + import { ChatSubscription } from '../../app/models'; import { roomTypes } from '../../app/utils'; import { call } from '../../app/ui-utils'; diff --git a/client/routes/router.js b/client/routes/router.js index 105cf8493f6b3aa2437297f19e7d9d3a7d402472..15dfc0237f523f90dc41f2986003c9c7aeadf86b 100644 --- a/client/routes/router.js +++ b/client/routes/router.js @@ -6,6 +6,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 '../../app/ui'; Blaze.registerHelper('pathFor', function(path, kw) { @@ -186,4 +187,3 @@ FlowRouter.notFound = { BlazeLayout.render('pageNotFound'); }, }; - diff --git a/client/startup/emailVerification.js b/client/startup/emailVerification.js index acc0f762ad979fdb6d814f0f0e46e76758e1e985..690817dbf62262b3ab74d910ec967deda7cd9125 100644 --- a/client/startup/emailVerification.js +++ b/client/startup/emailVerification.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import { TAPi18n } from 'meteor/tap:i18n'; -import { settings } from '../../app/settings'; import toastr from 'toastr'; +import { settings } from '../../app/settings'; + Meteor.startup(function() { Tracker.autorun(function() { const user = Meteor.user(); diff --git a/client/startup/i18n.js b/client/startup/i18n.js index 4dfd9f458e84512094047ee56c1e3580ca158e93..57ddf0348221814bf85fb7834b9d1bd866276b22 100644 --- a/client/startup/i18n.js +++ b/client/startup/i18n.js @@ -2,10 +2,11 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { TAPi18n } from 'meteor/tap:i18n'; +import moment from 'moment'; + import { isRtl } from '../../app/utils'; import { settings } from '../../app/settings'; import { Users } from '../../app/models'; -import moment from 'moment'; const currentLanguage = new ReactiveVar(); diff --git a/client/startup/roomObserve.js b/client/startup/roomObserve.js index 8214a993f6d0aba33fc0e2cfbb20bc6ddc18e829..4dd658b856570b08bf1d77868c8d90970a517722 100644 --- a/client/startup/roomObserve.js +++ b/client/startup/roomObserve.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { ChatRoom } from '../../app/models'; Meteor.startup(function() { diff --git a/client/startup/startup.js b/client/startup/startup.js index eed7ec005510ed2e2ea2ec8b35331fefc630d828..1393e2fcd42ac2914a5b35f49072c2748204a545 100644 --- a/client/startup/startup.js +++ b/client/startup/startup.js @@ -3,12 +3,13 @@ import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import { TimeSync } from 'meteor/mizzao:timesync'; import { UserPresence } from 'meteor/konecty:user-presence'; +import toastr from 'toastr'; +import hljs from 'highlight.js'; + import { fireGlobalEvent } from '../../app/ui-utils'; import { settings } from '../../app/settings'; import { Users } from '../../app/models'; import { getUserPreference } from '../../app/utils'; -import toastr from 'toastr'; -import hljs from 'highlight.js'; import 'highlight.js/styles/github.css'; hljs.initHighlightingOnLoad(); diff --git a/client/startup/unread.js b/client/startup/unread.js index abc28c9068c2e1261e37a080e33910aec542c75d..640ad63275e82cad360662fc82d8cd57a399b216 100644 --- a/client/startup/unread.js +++ b/client/startup/unread.js @@ -2,6 +2,7 @@ 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 '../../app/favico'; import { ChatSubscription } from '../../app/models'; import { RoomManager, menu, fireGlobalEvent, readMessage } from '../../app/ui-utils'; diff --git a/client/startup/userSetUtcOffset.js b/client/startup/userSetUtcOffset.js index 7ce89fec7b60f26843f5a395e47dc50ff08dc82b..710ae9710897a5999f4410c6c4153520af0334cc 100644 --- a/client/startup/userSetUtcOffset.js +++ b/client/startup/userSetUtcOffset.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; -import { Users } from '../../app/models'; import moment from 'moment'; +import { Users } from '../../app/models'; + Meteor.startup(function() { Tracker.autorun(function() { const user = Users.findOne({ _id: Meteor.userId() }, { fields: { statusConnection: 1, utcOffset: 1 } }); diff --git a/client/startup/usersObserve.js b/client/startup/usersObserve.js index 4bc6292d648cd125674626a1da12e3eda0597a9c..af2ac52755616234c8892b69ddc04af95ab0759c 100644 --- a/client/startup/usersObserve.js +++ b/client/startup/usersObserve.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; + import { RoomManager } from '../../app/ui-utils'; Meteor.startup(function() { diff --git a/imports/message-read-receipt/client/main.js b/imports/message-read-receipt/client/main.js index e1f6274d5088d18ac0cedcb59febe1fc985dc773..09956e864887180ca1da1847c5c715db2f3e364d 100644 --- a/imports/message-read-receipt/client/main.js +++ b/imports/message-read-receipt/client/main.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../app/settings'; Template.main.helpers({ diff --git a/imports/message-read-receipt/client/message.js b/imports/message-read-receipt/client/message.js index 2b406ba32bce40926aafd26b45d8f3afdf16fbd4..76c7c4ce8f7f27b2aba5f4859929bce9e501d644 100644 --- a/imports/message-read-receipt/client/message.js +++ b/imports/message-read-receipt/client/message.js @@ -1,4 +1,5 @@ import { Template } from 'meteor/templating'; + import { settings } from '../../../app/settings'; Template.message.helpers({ diff --git a/imports/message-read-receipt/client/readReceipts.js b/imports/message-read-receipt/client/readReceipts.js index df05373d3d7a8b345b38c70eafa352e49184fb7f..b8890c53d315dd0a567520159218fef38bc6d55f 100644 --- a/imports/message-read-receipt/client/readReceipts.js +++ b/imports/message-read-receipt/client/readReceipts.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; -import { settings } from '../../../app/settings'; import moment from 'moment'; +import { settings } from '../../../app/settings'; + import './readReceipts.css'; import './readReceipts.html'; diff --git a/imports/message-read-receipt/server/api/methods/getReadReceipts.js b/imports/message-read-receipt/server/api/methods/getReadReceipts.js index fdc0d0d42041d8086bb1292c2a4666ca7315cb4b..f73448b92d3cb6b9167129e1a6bfc70dedb145c5 100644 --- a/imports/message-read-receipt/server/api/methods/getReadReceipts.js +++ b/imports/message-read-receipt/server/api/methods/getReadReceipts.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Messages } from '../../../../../app/models'; import { ReadReceipt } from '../../lib/ReadReceipt'; diff --git a/imports/message-read-receipt/server/hooks.js b/imports/message-read-receipt/server/hooks.js index 29e8388868a9d8042560815fb765da054ca5ba0d..eee2b1f3d795d304e8c47907af61986cf6d4641c 100644 --- a/imports/message-read-receipt/server/hooks.js +++ b/imports/message-read-receipt/server/hooks.js @@ -1,9 +1,8 @@ +import { ReadReceipt } from './lib/ReadReceipt'; import { callbacks } from '../../../app/callbacks'; import { Subscriptions } from '../../../app/models'; -import { ReadReceipt } from './lib/ReadReceipt'; callbacks.add('afterSaveMessage', (message, room) => { - // skips this callback if the message was edited if (message.editedAt) { return message; diff --git a/imports/message-read-receipt/server/lib/ReadReceipt.js b/imports/message-read-receipt/server/lib/ReadReceipt.js index c826a9a44447a100e3cb0e0e617d5aede65f381d..a631a12afea50545a4c8b092ba2010a1fe7a0f69 100644 --- a/imports/message-read-receipt/server/lib/ReadReceipt.js +++ b/imports/message-read-receipt/server/lib/ReadReceipt.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; + import { ReadReceipts, Subscriptions, Messages, Rooms, Users, LivechatVisitors } from '../../../../app/models'; import { settings } from '../../../../app/settings'; import { roomTypes } from '../../../../app/utils'; diff --git a/imports/personal-access-tokens/client/personalAccessTokens.js b/imports/personal-access-tokens/client/personalAccessTokens.js index 6fea0b65e1f053760dc101f01081074f22899a91..3216f4ddb02f0b0232995ba5094b17066be35776 100644 --- a/imports/personal-access-tokens/client/personalAccessTokens.js +++ b/imports/personal-access-tokens/client/personalAccessTokens.js @@ -3,11 +3,12 @@ import { Mongo } from 'meteor/mongo'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; +import toastr from 'toastr'; +import moment from 'moment'; + import { t } from '../../../app/utils'; import { modal, SideNav } from '../../../app/ui-utils'; import { hasAllPermission } from '../../../app/authorization'; -import toastr from 'toastr'; -import moment from 'moment'; import './personalAccessTokens.html'; diff --git a/imports/personal-access-tokens/server/api/methods/generateToken.js b/imports/personal-access-tokens/server/api/methods/generateToken.js index 17a714a5062affb34941721a267a506680c1f99a..100c6e71bc21aec882dc03c0e29dcbdc134af5d8 100644 --- a/imports/personal-access-tokens/server/api/methods/generateToken.js +++ b/imports/personal-access-tokens/server/api/methods/generateToken.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Accounts } from 'meteor/accounts-base'; + import { hasPermission } from '../../../../../app/authorization'; import { Users } from '../../../../../app/models'; diff --git a/imports/personal-access-tokens/server/api/methods/regenerateToken.js b/imports/personal-access-tokens/server/api/methods/regenerateToken.js index 5fc71b0fe2300221fbd15c3335b822446453cc52..3745c2b048a3a80ab5a2fdc119bb70421340c402 100644 --- a/imports/personal-access-tokens/server/api/methods/regenerateToken.js +++ b/imports/personal-access-tokens/server/api/methods/regenerateToken.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../../app/authorization'; import { Users } from '../../../../../app/models'; diff --git a/imports/personal-access-tokens/server/api/methods/removeToken.js b/imports/personal-access-tokens/server/api/methods/removeToken.js index d0b60b6afa22895c177768924984ee379b373e68..5a304b6b798bd371486bcc8a0bfcd28afb52dacf 100644 --- a/imports/personal-access-tokens/server/api/methods/removeToken.js +++ b/imports/personal-access-tokens/server/api/methods/removeToken.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../../app/authorization'; import { Users } from '../../../../../app/models'; diff --git a/imports/personal-access-tokens/server/index.js b/imports/personal-access-tokens/server/index.js index d384c4a8a2e56298d8257a968be439af6cabce98..20815977fa0a8248aee33348f549b740d123c1a0 100644 --- a/imports/personal-access-tokens/server/index.js +++ b/imports/personal-access-tokens/server/index.js @@ -1,4 +1,2 @@ import './api/methods'; import './publications'; - - diff --git a/imports/personal-access-tokens/server/publications/personalAccessTokens.js b/imports/personal-access-tokens/server/publications/personalAccessTokens.js index 71be1107a9451320c2e556a9a7af4767d51cc389..cff965bd494d792221a5b127aea90d7d1eb27655 100644 --- a/imports/personal-access-tokens/server/publications/personalAccessTokens.js +++ b/imports/personal-access-tokens/server/publications/personalAccessTokens.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../../../app/authorization'; import { Users } from '../../../../app/models'; diff --git a/package-lock.json b/package-lock.json index 3eee2efc0db5db914ede3680b37884a90f62253c..d529ba6f23fe2e712d54246fced78aae1fc7b461 100644 --- a/package-lock.json +++ b/package-lock.json @@ -688,12 +688,12 @@ } }, "@rocket.chat/eslint-config": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/eslint-config/-/eslint-config-0.2.0.tgz", - "integrity": "sha512-ePg8ykVzNMsU3MnRaY458Ech0wEwaGsueZfNwpOkof9EVW/yXS97HbwGO5RSiifu+GcZPUCItQ6u/DrUT75gLw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/eslint-config/-/eslint-config-0.3.0.tgz", + "integrity": "sha512-3AlJvlohi7uwYRbKJP/v3uFCAI69J/2bU/rDAfF0GDifGDPsHAfhLIzSOshtjjIiQHtHeJ/Hg9yz/5U6E9pCrg==", "dev": true, "requires": { - "eslint-plugin-import": "^2.16.0" + "eslint-plugin-import": "^2.17.2" } }, "@slack/client": { @@ -3946,6 +3946,16 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -4272,11 +4282,13 @@ "chromedriver": "^2.35", "colors": "1.1.2", "commander": "^2.9.0", + "cucumber": "github:xolvio/cucumber-js#cf953cb5b5de30dbcc279f59e4ebff3aa040071c", "deep-extend": "^0.4.1", "exit": "^0.1.2", "fibers": "^1.0.14", "freeport": "~1.0.5", "fs-extra": "^1.0.0", + "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", "hapi": "8.8.0", "jasmine": "^2.4.1", "loglevel": "~1.4.0", @@ -4314,19 +4326,6 @@ "type-detect": "^4.0.0" } }, - "cucumber": { - "version": "github:xolvio/cucumber-js#cf953cb5b5de30dbcc279f59e4ebff3aa040071c", - "from": "github:xolvio/cucumber-js#cf953cb5b5de30dbcc279f59e4ebff3aa040071c", - "requires": { - "co": "^4.6.0", - "colors": "^1.1.2", - "commander": "^2.9.0", - "fibers": "^1.0.7", - "glob": "^7.0.0", - "lodash": "^4.0.0", - "meteor-promise": "^0.8.0" - } - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -4345,11 +4344,13 @@ "fibers": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", - "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=" + "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", + "dev": true }, "glob": { - "version": "7.1.1", - "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "version": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "from": "github:lucetius/node-glob#chimp", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4426,7 +4427,8 @@ "once": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz", - "integrity": "sha1-FRr4a/wfCMS58H0GqyUP/L61ZYE=" + "integrity": "sha1-FRr4a/wfCMS58H0GqyUP/L61ZYE=", + "dev": true }, "progress": { "version": "1.1.8", @@ -4572,6 +4574,23 @@ "restore-cursor": "^2.0.0" } }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -4689,7 +4708,8 @@ "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true }, "colour": { "version": "0.7.1", @@ -4789,6 +4809,12 @@ "utils-merge": "1.0.1" } }, + "connected-domain": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/connected-domain/-/connected-domain-1.0.0.tgz", + "integrity": "sha1-v+dyOMdL5FOnnwy2BY3utPI1jpM=", + "dev": true + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -5111,6 +5137,36 @@ "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", "dev": true }, + "cucumber": { + "version": "github:xolvio/cucumber-js#cf953cb5b5de30dbcc279f59e4ebff3aa040071c", + "from": "github:xolvio/cucumber-js#v1.3.0-chimp.6", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "cli-table": "^0.3.1", + "co": "^4.6.0", + "colors": "^1.1.2", + "commander": "^2.9.0", + "duration": "^0.2.0", + "fibers": "^1.0.7", + "figures": "1.7.0", + "gherkin": "4.0.0", + "glob": "^7.0.0", + "is-generator": "^1.0.2", + "lodash": "^4.0.0", + "meteor-promise": "^0.8.0", + "stack-chain": "^1.3.5", + "stacktrace-js": "^1.3.0" + }, + "dependencies": { + "fibers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", + "dev": true + } + } + }, "cuid": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz", @@ -5148,6 +5204,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -5252,6 +5317,30 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -5260,6 +5349,120 @@ "mimic-response": "^1.0.0" } }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } + }, "deep-copy": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/deep-copy/-/deep-copy-1.4.2.tgz", @@ -5585,6 +5788,16 @@ "stream-shift": "^1.0.0" } }, + "duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -5759,6 +5972,15 @@ } } }, + "error-stack-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", + "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", + "dev": true, + "requires": { + "stackframe": "^0.3.1" + } + }, "es-abstract": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", @@ -5781,6 +6003,28 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, "es6-promise": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", @@ -5794,6 +6038,16 @@ "es6-promise": "^4.0.3" } }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6754,6 +7008,16 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", @@ -7065,8 +7329,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -7087,14 +7350,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7109,20 +7370,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -7239,8 +7497,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -7252,7 +7509,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7267,7 +7523,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7275,14 +7530,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7301,7 +7554,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -7382,8 +7634,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -7395,7 +7646,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -7481,8 +7731,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -7518,7 +7767,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7538,7 +7786,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7582,14 +7829,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -7678,6 +7923,26 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, + "getos": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/getos/-/getos-2.8.4.tgz", + "integrity": "sha1-e4YD02GcKOOMsP56T2PDrLgNUWM=", + "dev": true, + "requires": { + "async": "2.1.4" + }, + "dependencies": { + "async": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + } + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -7686,6 +7951,12 @@ "assert-plus": "^1.0.0" } }, + "gherkin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", + "integrity": "sha1-edzgTRIj6kO0hip2vlzo+JwSwyw=", + "dev": true + }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -7976,6 +8247,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, "grant": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/grant/-/grant-3.8.0.tgz", @@ -8792,18 +9069,6 @@ "hoek": "2.x.x", "joi": "6.x.x", "wreck": "5.x.x" - }, - "dependencies": { - "wreck": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-5.6.1.tgz", - "integrity": "sha1-r/ADBAATiJ11YZtccYcN0qjdBpo=", - "dev": true, - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - } } }, "heavy": { @@ -8815,20 +9080,6 @@ "boom": "2.x.x", "hoek": "2.x.x", "joi": "5.x.x" - }, - "dependencies": { - "joi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-5.1.0.tgz", - "integrity": "sha1-FSrQfbjunGQBmX/1/SwSiWBwv1g=", - "dev": true, - "requires": { - "hoek": "^2.2.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" - } - } } }, "hoek": { @@ -9974,6 +10225,12 @@ "number-is-nan": "^1.0.0" } }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", + "dev": true + }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -9988,6 +10245,12 @@ "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -11122,6 +11385,12 @@ "signal-exit": "^3.0.0" } }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11237,6 +11506,12 @@ "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==", "dev": true }, + "md5-file": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.1.1.tgz", + "integrity": "sha1-2zySwJu9pcLeiD+lSQ3XEf3burk=", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -11616,7 +11891,8 @@ "meteor-promise": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.8.6.tgz", - "integrity": "sha512-HP6tOr67z/9XU2Dr0F2SSr8WRTuE23AG9Dj578DCJPEYHs67OLKBviU8A8rwvbwMD7Lu2+Of+yAMz2Wd8r4yxg==" + "integrity": "sha512-HP6tOr67z/9XU2Dr0F2SSr8WRTuE23AG9Dj578DCJPEYHs67OLKBviU8A8rwvbwMD7Lu2+Of+yAMz2Wd8r4yxg==", + "dev": true }, "methods": { "version": "1.1.2", @@ -11956,6 +12232,36 @@ "moment": ">= 2.9.0" } }, + "mongo-unit": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mongo-unit/-/mongo-unit-1.4.4.tgz", + "integrity": "sha512-65maFMGR/h/dixhRXaDBEJgkDN5E9OoIDfqR+mt6bbTXFS3kqScA7FDWpzpFopcvkP3z8AzTrA9N1t2u/+vhFg==", + "dev": true, + "requires": { + "debug": "^3.0.1", + "mongodb": "~2.2.31", + "mongodb-prebuilt": "~6.4.0", + "portfinder": "^1.0.10", + "ps-node": "^0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "mongodb": { "version": "2.2.36", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", @@ -12016,6 +12322,48 @@ } } }, + "mongodb-download": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/mongodb-download/-/mongodb-download-2.2.7.tgz", + "integrity": "sha512-39/eiEmCqig0gCR3tNbmbTk6rIpWzEGqcXT0BE645stlA+DY7WlrIWZGEG51BcI3MUdGzqVYFj+qLoRw+HsJSA==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "decompress": "^4.0.0", + "fs-extra": "^2.0.0", + "getos": "^2.7.0", + "md5-file": "3.1.1", + "request": "^2.79.0", + "request-promise": "^4.1.1", + "semver": "^5.6.0", + "yargs": "^3.26.0" + }, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" + } + } + } + }, + "mongodb-prebuilt": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/mongodb-prebuilt/-/mongodb-prebuilt-6.4.0.tgz", + "integrity": "sha512-ws6c31q3QfJ2OowRneseaydQxmF/66wPmtNm4x+F31ZB1myDFjDrn+M0Fs4FhZotBAmYVKtzoSVM6if2ekB7Ew==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "glob": "^7.1.1", + "mongodb-download": "^2.2.7", + "spawn-sync": "1.0.15", + "yargs": "^3.26.0" + } + }, "more-entropy": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz", @@ -12123,11 +12471,26 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "node-abi": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz", @@ -12615,6 +12978,12 @@ "windows-release": "^3.1.0" } }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -13180,6 +13549,25 @@ "optimist": "*" } }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -13899,6 +14287,15 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, + "ps-node": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ps-node/-/ps-node-0.1.6.tgz", + "integrity": "sha1-mvZ6mdex0BMuUaUDCZ04qNKs4sM=", + "dev": true, + "requires": { + "table-parser": "^0.1.3" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -14444,6 +14841,29 @@ "throttleit": "^1.0.0" } }, + "request-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.4.tgz", + "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + } + } + }, "request-promise-core": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", @@ -14739,6 +15159,26 @@ "resolved": "https://registry.npmjs.org/scmp/-/scmp-0.0.3.tgz", "integrity": "sha1-NkjfLXKUZB5/eGc//CloHZutkHM=" }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "~2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -15168,6 +15608,16 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, "spdx-correct": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", @@ -15265,11 +15715,69 @@ "figgy-pudding": "^3.5.1" } }, + "stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=", + "dev": true + }, + "stack-generator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", + "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", + "dev": true, + "requires": { + "stackframe": "^1.0.2" + }, + "dependencies": { + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + } + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "stackframe": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", + "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", + "dev": true + }, + "stacktrace-gps": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz", + "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", + "dev": true, + "requires": { + "source-map": "0.5.6", + "stackframe": "~0.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "stacktrace-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", + "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", + "dev": true, + "requires": { + "error-stack-parser": "^1.3.6", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.3" + } + }, "starttls": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/starttls/-/starttls-1.0.1.tgz", @@ -15433,6 +15941,15 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, "strip-eof": { "version": "1.0.0", "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -15784,6 +16301,15 @@ } } }, + "table-parser": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/table-parser/-/table-parser-0.1.3.tgz", + "integrity": "sha1-BEHPzhallIFoTCfRtaZ/8VpDx7A=", + "dev": true, + "requires": { + "connected-domain": "^1.0.0" + } + }, "tapable": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", @@ -16325,6 +16851,16 @@ "random-bytes": "~1.0.0" } }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "underscore": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", @@ -16546,6 +17082,12 @@ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", diff --git a/package.json b/package.json index a881cdc4ae6fc97c7c973cc5bd3b96adfc87703d..a4daef73379b1dc62f4e4511446132d9b14d7efd 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ }, "devDependencies": { "@octokit/rest": "^16.1.0", - "@rocket.chat/eslint-config": "^0.2.0", + "@rocket.chat/eslint-config": "^0.3.0", "acorn": "^6.0.7", "autoprefixer": "^9.4.1", "babel-eslint": "^10.0.1", diff --git a/packages/meteor-autocomplete/client/autocomplete-client.js b/packages/meteor-autocomplete/client/autocomplete-client.js index 6f39c688cb2afa04ec3fc7ad81b725ef9f2322c1..f8b9efda71cbf3173e763edfb10cbd1a4660714c 100755 --- a/packages/meteor-autocomplete/client/autocomplete-client.js +++ b/packages/meteor-autocomplete/client/autocomplete-client.js @@ -3,9 +3,10 @@ import { Match } from 'meteor/check'; import { Blaze } from 'meteor/blaze'; import { Deps } from 'meteor/deps'; import _ from 'underscore'; -import AutoCompleteRecords from './collection'; import { getCaretCoordinates } from 'meteor/dandv:caret-position'; +import AutoCompleteRecords from './collection'; + const isServerSearch = function(rule) { return _.isString(rule.collection); }; @@ -29,10 +30,9 @@ const getRegExp = function(rule) { if (!isWholeField(rule)) { // Expressions for the range from the last word break to the current cursor position return new RegExp(`(^|\\b|\\s)${ rule.token }([\\w.]*)$`); - } else { - // Whole-field behavior - word characters or spaces - return new RegExp('(^)(.*)$'); } + // Whole-field behavior - word characters or spaces + return new RegExp('(^)(.*)$'); }; const getFindParams = function(rule, filter, limit) { @@ -101,9 +101,9 @@ export default class AutoComplete { this.loaded = true; // Reactive dependencies for current matching rule and filter - this.ruleDep = new Deps.Dependency; - this.filterDep = new Deps.Dependency; - this.loadingDep = new Deps.Dependency; + this.ruleDep = new Deps.Dependency(); + this.filterDep = new Deps.Dependency(); + this.loadingDep = new Deps.Dependency(); // Autosubscribe to the record set published by the server based on the filter // This will tear down server subscriptions when they are no longer being used. @@ -145,9 +145,8 @@ export default class AutoComplete { this.ruleDep.depend(); if (this.matched >= 0) { return this.rules[this.matched]; - } else { - return null; } + return null; } setMatchedRule(i) { @@ -320,7 +319,6 @@ export default class AutoComplete { const doc = Blaze.getData(node); if (!doc) { return false; // Don't select if nothing matched - } this.processSelection(doc, this.rules[this.matched]); return true; @@ -332,7 +330,6 @@ export default class AutoComplete { this.replace(replacement, rule); this.hideList(); } else { - // Empty string or doesn't exist? // Single-field replacement: replace whole field this.setText(replacement); @@ -354,7 +351,7 @@ export default class AutoComplete { let val = fullStuff.substring(0, startpos); val = val.replace(this.expressions[this.matched], `$1${ this.rules[this.matched].token }${ replacement }`); const posfix = fullStuff.substring(startpos, fullStuff.length); - const separator = (posfix.match(/^\s/) ? '' : ' '); + const separator = posfix.match(/^\s/) ? '' : ' '; const finalFight = val + separator + posfix; this.setText(finalFight); const newPosition = val.length + 1; @@ -402,7 +399,6 @@ export default class AutoComplete { pos.left = position.left; if (rule.doNotChangeWidth !== false) { pos.width = element.outerWidth(); // position.offsetWidth - } } else { // Normal positioning, at token word pos = { left: position.left + offset.left }; @@ -462,5 +458,4 @@ export default class AutoComplete { currentTemplate() { return this.rules[this.matched].template; } - } diff --git a/packages/meteor-autocomplete/client/templates.js b/packages/meteor-autocomplete/client/templates.js index 81782c33ecd28270deda92980487324dfdebae15..e1c0416c7144426ebacd8361e4b9e40edccdcc6b 100755 --- a/packages/meteor-autocomplete/client/templates.js +++ b/packages/meteor-autocomplete/client/templates.js @@ -1,8 +1,9 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; -import AutoComplete from './autocomplete-client'; import _ from 'underscore'; +import AutoComplete from './autocomplete-client'; + // Events on template instances, sent to the autocomplete class const acEvents = { 'keydown'(e, t) { @@ -25,7 +26,6 @@ Template.textareaAutocomplete.events(acEvents); const attributes = function() { return _.omit(this, 'settings'); // Render all but the settings parameter - }; const autocompleteHelpers = { diff --git a/packages/rocketchat-google-natural-language/client/index.js b/packages/rocketchat-google-natural-language/client/index.js index 144d68e62d9c9356f30d92d642b1302909ed9a92..4d104379c7aa0e10a4aca610c8016a846a1d5df3 100644 --- a/packages/rocketchat-google-natural-language/client/index.js +++ b/packages/rocketchat-google-natural-language/client/index.js @@ -12,9 +12,9 @@ Template.room.helpers({ if (room.sentiment >= 0.3) { return ':)'; - } else if (room.sentiment >= -0.3) { + } if (room.sentiment >= -0.3) { return ':|'; - } else if (room.sentiment < -0.3) { + } if (room.sentiment < -0.3) { return ':('; } }, diff --git a/packages/rocketchat-livechat/.app/client/lib/CustomFields.js b/packages/rocketchat-livechat/.app/client/lib/CustomFields.js index f9968cfe2223e36a83f7cd0c82e9e242679a80b7..9a0da0eafb2553112774cba4debed2f31c59e32c 100644 --- a/packages/rocketchat-livechat/.app/client/lib/CustomFields.js +++ b/packages/rocketchat-livechat/.app/client/lib/CustomFields.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import visitor from '../../imports/client/visitor'; this.CustomFields = (function() { diff --git a/packages/rocketchat-livechat/.app/client/lib/LivechatFileUpload.js b/packages/rocketchat-livechat/.app/client/lib/LivechatFileUpload.js index 05e749a0df3f4995975f54f28dcd311354807e20..89d16be71e58aacd6ad54d843472d0f6123ead7e 100644 --- a/packages/rocketchat-livechat/.app/client/lib/LivechatFileUpload.js +++ b/packages/rocketchat-livechat/.app/client/lib/LivechatFileUpload.js @@ -1,9 +1,10 @@ /* globals fileUpload, Livechat, Handlebars, showError, sendFileUpload */ /* exported LivechatFileUpload, fileUpload, sendFileUpload */ import { Meteor } from 'meteor/meteor'; -import visitor from '../../imports/client/visitor'; import swal from 'sweetalert2'; +import visitor from '../../imports/client/visitor'; + const handleRequestError = (response) => { if (!response.success) { let reason = t('FileUpload_Error'); @@ -57,7 +58,7 @@ function getUploadPreview(file, callback) { // If greater then 10MB don't try and show a preview if (file.file.size > (10 * 1000000)) { return callback(file, null); - } else if (file.file.type == null) { + } if (file.file.type == null) { callback(file, null); } else if ((file.file.type.indexOf('audio') > -1) || (file.file.type.indexOf('video') > -1) || (file.file.type.indexOf('image') > -1)) { file.type = file.file.type.split('/')[0]; @@ -157,7 +158,6 @@ sendFileUpload = (file) => getUploadPreview(file, function(file, preview) { }); fileUpload = (file) => { - if (file.size === 0) { swal({ title: t('FileUpload_File_Empty'), diff --git a/packages/rocketchat-livechat/.app/client/lib/LivechatVideoCall.js b/packages/rocketchat-livechat/.app/client/lib/LivechatVideoCall.js index 4643ebf3a4531559759915cdc8d590444d26d4c0..bdbb2e971d4f535cc3e6c5803e10cf9b8cb5253b 100644 --- a/packages/rocketchat-livechat/.app/client/lib/LivechatVideoCall.js +++ b/packages/rocketchat-livechat/.app/client/lib/LivechatVideoCall.js @@ -1,9 +1,10 @@ /* globals LivechatVideoCall, JitsiMeetExternalAPI */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; + import visitor from '../../imports/client/visitor'; -LivechatVideoCall = new (class LivechatVideoCall { +LivechatVideoCall = new class LivechatVideoCall { constructor() { this.live = new ReactiveVar(false); this.calling = new ReactiveVar(false); @@ -67,6 +68,6 @@ LivechatVideoCall = new (class LivechatVideoCall { isLive() { return this.live.get(); } -}); +}(); /* exported LivechatVideoCall */ diff --git a/packages/rocketchat-livechat/.app/client/lib/_livechat.js b/packages/rocketchat-livechat/.app/client/lib/_livechat.js index c9c0999ed76ffdcd600c7354386a15c3c35db824..76871f73d0d8494bac013806c9c447f8a6ba036c 100644 --- a/packages/rocketchat-livechat/.app/client/lib/_livechat.js +++ b/packages/rocketchat-livechat/.app/client/lib/_livechat.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { TAPi18n } from 'meteor/tap:i18n'; + import visitor from '../../imports/client/visitor'; -this.Livechat = new (class Livechat { +this.Livechat = new class Livechat { constructor() { this._online = new ReactiveVar(null); @@ -70,78 +71,101 @@ this.Livechat = new (class Livechat { get online() { return this._online.get(); } + get color() { if (!this._online.get()) { return this._offlineColor.get(); } return this._customColor.get() || this._onlineColor.get(); } + get fontColor() { if (!this._online.get()) { return this._offlineFontColor.get(); } return this._customFontColor.get() || this._onlineFontColor.get(); } + get title() { return this._title.get(); } + get registrationForm() { return this._registrationForm.get(); } + get showSwitchDepartmentForm() { return this._showSwitchDepartmentForm.get(); } + get allowSwitchingDepartments() { return this._allowSwitchingDepartments.get(); } + get offlineMessage() { return this._offlineMessage.get(); } + get offlineUnavailableMessage() { return this._offlineUnavailableMessage.get(); } + get displayOfflineForm() { return this._displayOfflineForm.get(); } + get offlineSuccessMessage() { return this._offlineSuccessMessage.get(); } + get videoCall() { return this._videoCall.get(); } + get fileUpload() { return this._fileUpload.get(); } + get transcriptMessage() { return this._transcriptMessage.get(); } + get conversationFinishedMessage() { return this._conversationFinishedMessage.get(); } + get nameFieldRegistrationForm() { return this._nameFieldRegistrationForm.get(); } + get emailFieldRegistrationForm() { return this._emailFieldRegistrationForm.get(); } + get department() { return this._department.get(); } + get connecting() { return this._connecting.get(); } + get agent() { return this._agent.get(); } + get guestName() { return this._guestName.get(); } + get guestEmail() { return this._guestEmail.get(); } + get room() { return this._room.get(); } + get registrationFormMessage() { return this._registrationFormMessage.get(); } @@ -149,85 +173,112 @@ this.Livechat = new (class Livechat { set online(value) { this._online.set(value); } + set title(value) { this._title.set(value); } + set registrationForm(value) { this._registrationForm.set(value); } + set showSwitchDepartmentForm(value) { this._showSwitchDepartmentForm.set(value); } + set allowSwitchingDepartments(value) { this._allowSwitchingDepartments.set(value); } + set offlineMessage(value) { this._offlineMessage.set(value); } + set offlineUnavailableMessage(value) { this._offlineUnavailableMessage.set(value); } + set displayOfflineForm(value) { this._displayOfflineForm.set(value); } + set offlineSuccessMessage(value) { this._offlineSuccessMessage.set(value); } + set customColor(value) { this._customColor.set(value); } + set onlineColor(value) { this._onlineColor.set(value); } + set offlineColor(value) { this._offlineColor.set(value); } + set customFontColor(value) { this._customFontColor.set(value); } + set onlineFontColor(value) { this._onlineFontColor.set(value); } + set offlineFontColor(value) { this._offlineFontColor.set(value); } + set videoCall(value) { this._videoCall.set(value); } + set fileUpload(value) { this._fileUpload.set(value); } + set transcriptMessage(value) { this._transcriptMessage.set(value); } + set conversationFinishedMessage(value) { this._conversationFinishedMessage.set(value); } + set nameFieldRegistrationForm(value) { this._nameFieldRegistrationForm.set(value); } + set emailFieldRegistrationForm(value) { this._emailFieldRegistrationForm.set(value); } + set connecting(value) { this._connecting.set(value); } + set room(roomId) { this._room.set(roomId); } + set department(departmentId) { const dept = Department.findOne({ _id: departmentId }) || Department.findOne({ name: departmentId }); this._department.set(dept && dept._id); } + set agent(agentData) { this._agent.set(agentData); } + set guestName(name) { return this._guestName.set(name); } + set guestEmail(email) { return this._guestEmail.set(email); } + set registrationFormMessage(value) { this._registrationFormMessage.set(value); } @@ -251,4 +302,4 @@ this.Livechat = new (class Livechat { isWidgetOpened() { return this._widgetOpened.get(); } -})(); +}(); diff --git a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js index 95880c92e25aa59cd9655e240c978ce6b93f69e6..5988b486555cce9938c7015b31539e7927c9f469 100644 --- a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js +++ b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js @@ -4,6 +4,7 @@ import { Random } from 'meteor/random'; import _ from 'underscore'; import s from 'underscore.string'; import toastr from 'toastr'; + import visitor from '../../imports/client/visitor'; this.ChatMessages = class ChatMessages { @@ -14,7 +15,6 @@ this.ChatMessages = class ChatMessages { this.wrapper = $(node).find('.wrapper'); this.input = $(node).find('.input-message').get(0); // this.bindEvents() - return; } resize() { @@ -258,7 +258,6 @@ this.ChatMessages = class ChatMessages { event.preventDefault(); event.stopPropagation(); this.clearEditing(); - return; } // else if k is 38 or k is 40 # Arrow Up or down // if k is 38 diff --git a/packages/rocketchat-livechat/.app/client/lib/commands.js b/packages/rocketchat-livechat/.app/client/lib/commands.js index 76268455eef443c498d433f2f429363b1e999429..169315925336b2399f873e408e3d3f2bc52bd427 100644 --- a/packages/rocketchat-livechat/.app/client/lib/commands.js +++ b/packages/rocketchat-livechat/.app/client/lib/commands.js @@ -4,12 +4,13 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import swal from 'sweetalert2'; + import visitor from '../../imports/client/visitor'; // Functions to call on messages of type 'command' this.Commands = { survey() { - if (!($('body #survey').length)) { + if (!$('body #survey').length) { Blaze.render(Template.survey, $('body').get(0)); } }, @@ -22,7 +23,7 @@ this.Commands = { if (Livechat.transcript) { const visitorData = visitor.getData(); const email = visitorData && visitorData.visitorEmails && visitorData.visitorEmails.length > 0 ? visitorData.visitorEmails[0].address : ''; - const transcriptMessage = (Livechat.transcriptMessage) ? Livechat.transcriptMessage : (TAPi18n.__('Would_you_like_a_copy_if_this_chat_emailed')); + const transcriptMessage = Livechat.transcriptMessage ? Livechat.transcriptMessage : TAPi18n.__('Would_you_like_a_copy_if_this_chat_emailed'); swal({ title: t('Chat_ended'), diff --git a/packages/rocketchat-livechat/.app/client/lib/fromApp/Notifications.js b/packages/rocketchat-livechat/.app/client/lib/fromApp/Notifications.js index 4dcdab907990dac28eb7e7d5ab4b8d315f2bc9bb..3ed14a00e2c4135bcd9a35ea570d44bd44e93ce2 100644 --- a/packages/rocketchat-livechat/.app/client/lib/fromApp/Notifications.js +++ b/packages/rocketchat-livechat/.app/client/lib/fromApp/Notifications.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; + import visitor from '../../../imports/client/visitor'; this.Notifications = new class { @@ -10,7 +11,7 @@ this.Notifications = new class { if (visitor.getId() !== null && this.logged === false) { this.loginCb.forEach((cb) => cb()); } - return this.logged = visitor.getId() !== null; + this.logged = visitor.getId() !== null; }); this.debug = false; this.streamAll = new Meteor.Streamer('notify-all'); @@ -34,6 +35,7 @@ this.Notifications = new class { return cb(); } } + notifyRoom(room, eventName, ...args) { if (this.debug === true) { console.log('RocketChat.Notifications: notifyRoom', room, eventName, ...args); @@ -41,6 +43,7 @@ this.Notifications = new class { args.unshift(`${ room }/${ eventName }`); return this.streamRoom.emit.apply(this.streamRoom, args); } + notifyUser(userId, eventName, ...args) { if (this.debug === true) { console.log('RocketChat.Notifications: notifyUser', userId, eventName, ...args); @@ -48,12 +51,15 @@ this.Notifications = new class { args.unshift(`${ userId }/${ eventName }`); return this.streamUser.emit.apply(this.streamUser, args); } + onAll(eventName, callback) { return this.streamAll.on(eventName, { token: visitor.getToken() }, callback); } + onLogged(eventName, callback) { return this.onLogin(() => this.streamLogged.on(eventName, { token: visitor.getToken() }, callback)); } + onRoom(room, eventName, callback) { if (this.debug === true) { this.streamRoom.on(room, { token: visitor.getToken() }, function() { @@ -62,20 +68,24 @@ this.Notifications = new class { } return this.streamRoom.on(`${ room }/${ eventName }`, { token: visitor.getToken() }, callback); } + onUser(eventName, callback) { return this.streamUser.on(`${ visitor.getId() }/${ eventName }`, { token: visitor.getToken() }, callback); } + unAll(callback) { return this.streamAll.removeListener('notify', callback); } + unLogged(callback) { return this.streamLogged.removeListener('notify', callback); } + unRoom(room, eventName, callback) { return this.streamRoom.removeListener(`${ room }/${ eventName }`, callback); } + unUser(eventName, callback) { return this.streamUser.removeListener(`${ visitor.getId() }/${ eventName }`, callback); } - -}; +}(); diff --git a/packages/rocketchat-livechat/.app/client/lib/fromApp/RoomHistoryManager.js b/packages/rocketchat-livechat/.app/client/lib/fromApp/RoomHistoryManager.js index aec7846d3ddca3b067f02d363bacb4482ad07f35..325f5269523e4f227cb880be17324f913267462b 100644 --- a/packages/rocketchat-livechat/.app/client/lib/fromApp/RoomHistoryManager.js +++ b/packages/rocketchat-livechat/.app/client/lib/fromApp/RoomHistoryManager.js @@ -3,22 +3,24 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Blaze } from 'meteor/blaze'; -import visitor from '../../../imports/client/visitor'; import _ from 'underscore'; +import visitor from '../../../imports/client/visitor'; + export const RoomHistoryManager = new class { constructor() { this.defaultLimit = 50; this.histories = {}; } + getRoom(rid) { - if ((this.histories[rid] == null)) { + if (this.histories[rid] == null) { this.histories[rid] = { hasMore: new ReactiveVar(true), hasMoreNext: new ReactiveVar(false), isLoading: new ReactiveVar(false), unreadNotLoaded: new ReactiveVar(0), - firstUnread: new ReactiveVar, + firstUnread: new ReactiveVar(), loaded: undefined, }; } @@ -139,65 +141,64 @@ export const RoomHistoryManager = new class { setTimeout(function() { const messages = wrapper[0]; - return instance.atBottom = messages.scrollTop >= (messages.scrollHeight - messages.clientHeight); + instance.atBottom = messages.scrollTop >= (messages.scrollHeight - messages.clientHeight); }); return setTimeout(() => msgElement.removeClass('highlight'), 500); + } + const room = this.getRoom(message.rid); + room.isLoading.set(true); + ChatMessage.remove({ rid: message.rid }); + + let typeName = undefined; + + const subscription = ChatSubscription.findOne({ rid: message.rid }); + if (subscription) { + // const { ls } = subscription; + typeName = subscription.t + subscription.name; } else { - const room = this.getRoom(message.rid); - room.isLoading.set(true); - ChatMessage.remove({ rid: message.rid }); - - let typeName = undefined; - - const subscription = ChatSubscription.findOne({ rid: message.rid }); - if (subscription) { - // const { ls } = subscription; - typeName = subscription.t + subscription.name; - } else { - const curRoomDoc = ChatRoom.findOne({ _id: message.rid }); - typeName = (curRoomDoc != null ? curRoomDoc.t : undefined) + (curRoomDoc != null ? curRoomDoc.name : undefined); - } + const curRoomDoc = ChatRoom.findOne({ _id: message.rid }); + typeName = (curRoomDoc != null ? curRoomDoc.t : undefined) + (curRoomDoc != null ? curRoomDoc.name : undefined); + } - return Meteor.call('loadSurroundingMessages', message, limit, function(err, result) { - for (const item of Array.from((result != null ? result.messages : undefined) || [])) { - if (item.t !== 'command') { - const roles = [ - (item.u && item.u._id && UserRoles.findOne(item.u._id, { fields: { roles: 1 } })) || {}, - (item.u && item.u._id && RoomRoles.findOne({ rid: item.rid, 'u._id': item.u._id })) || {}, - ].map((e) => e.roles); - item.roles = _.union.apply(_.union, roles); - ChatMessage.upsert({ _id: item._id }, item); - } + return Meteor.call('loadSurroundingMessages', message, limit, function(err, result) { + for (const item of Array.from((result != null ? result.messages : undefined) || [])) { + if (item.t !== 'command') { + const roles = [ + (item.u && item.u._id && UserRoles.findOne(item.u._id, { fields: { roles: 1 } })) || {}, + (item.u && item.u._id && RoomRoles.findOne({ rid: item.rid, 'u._id': item.u._id })) || {}, + ].map((e) => e.roles); + item.roles = _.union.apply(_.union, roles); + ChatMessage.upsert({ _id: item._id }, item); } + } - Meteor.defer(function() { - readMessage.refreshUnreadMark(message.rid, true); - RoomManager.updateMentionsMarksOfRoom(typeName); - const wrapper = $('.messages-box .wrapper'); - const msgElement = $(`#${ message._id }`, wrapper); - const pos = (wrapper.scrollTop() + msgElement.offset().top) - (wrapper.height() / 2); - wrapper.animate({ - scrollTop: pos, - }, 500); - - msgElement.addClass('highlight'); - - setTimeout(function() { - room.isLoading.set(false); - const messages = wrapper[0]; - instance.atBottom = !result.moreAfter && (messages.scrollTop >= (messages.scrollHeight - messages.clientHeight)); - return 500; - }); - - return setTimeout(() => msgElement.removeClass('highlight'), 500); + Meteor.defer(function() { + readMessage.refreshUnreadMark(message.rid, true); + RoomManager.updateMentionsMarksOfRoom(typeName); + const wrapper = $('.messages-box .wrapper'); + const msgElement = $(`#${ message._id }`, wrapper); + const pos = (wrapper.scrollTop() + msgElement.offset().top) - (wrapper.height() / 2); + wrapper.animate({ + scrollTop: pos, + }, 500); + + msgElement.addClass('highlight'); + + setTimeout(function() { + room.isLoading.set(false); + const messages = wrapper[0]; + instance.atBottom = !result.moreAfter && (messages.scrollTop >= (messages.scrollHeight - messages.clientHeight)); + return 500; }); - if (room.loaded == null) { room.loaded = 0; } - room.loaded += result.messages.length; - room.hasMore.set(result.moreBefore); - return room.hasMoreNext.set(result.moreAfter); + + return setTimeout(() => msgElement.removeClass('highlight'), 500); }); - } + if (room.loaded == null) { room.loaded = 0; } + room.loaded += result.messages.length; + room.hasMore.set(result.moreBefore); + return room.hasMoreNext.set(result.moreAfter); + }); } hasMore(rid) { @@ -230,8 +231,8 @@ export const RoomHistoryManager = new class { if (this.histories[rid] != null) { this.histories[rid].hasMore.set(true); this.histories[rid].isLoading.set(false); - return this.histories[rid].loaded = undefined; + this.histories[rid].loaded = undefined; } } -}; +}(); this.RoomHistoryManager = RoomHistoryManager; diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index 4f66f2aec9fef60ac1be274f4e286a811679ba4e..04f4c61d2a62d70ff88680d33b00e786a592884c 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Tracker } from 'meteor/tracker'; + import visitor from '../../imports/client/visitor'; const api = { diff --git a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js index 1231daad287fc02fc00faadebb3edbbb1799d0c0..cab9b9f47fbf746464ff830e955c8cec09e0d46e 100644 --- a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js +++ b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js @@ -2,9 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; -import visitor from '../../imports/client/visitor'; import _ from 'underscore'; +import visitor from '../../imports/client/visitor'; + export const MsgTyping = (function() { const timeout = 15000; const timeouts = {}; @@ -12,7 +13,7 @@ export const MsgTyping = (function() { const renewTimeout = 10000; const selfTyping = new ReactiveVar(false); const usersTyping = {}; - const dep = new Tracker.Dependency; + const dep = new Tracker.Dependency(); let oldRoom; const addStream = function(room) { @@ -63,14 +64,15 @@ export const MsgTyping = (function() { const start = function(room) { if (!renew) { return; } - setTimeout(() => renew = true, renewTimeout); + setTimeout(() => { renew = true; }, renewTimeout); renew = false; selfTyping.set(true); const visitorData = visitor.getData(); Notifications.notifyRoom(room, 'typing', visitorData && visitorData.username, true, { token: visitor.getToken() }); clearTimeout(timeouts[room]); - return timeouts[room] = Meteor.setTimeout(() => stop(room), timeout); + timeouts[room] = Meteor.setTimeout(() => stop(room), timeout); + return timeouts[room]; }; const get = function(room) { diff --git a/packages/rocketchat-livechat/.app/client/lib/tapi18n.js b/packages/rocketchat-livechat/.app/client/lib/tapi18n.js index 57ce066d5b77794f5eb65d0b049579f919cb6a2c..c4a8b55b7e2cfd0e32152df0481276cd696e3e24 100644 --- a/packages/rocketchat-livechat/.app/client/lib/tapi18n.js +++ b/packages/rocketchat-livechat/.app/client/lib/tapi18n.js @@ -4,23 +4,21 @@ import _ from 'underscore'; this.t = function(key, ...replaces) { if (_.isObject(replaces[0])) { return TAPi18n.__(key, replaces); - } else { - return TAPi18n.__(key, { - postProcess: 'sprintf', - sprintf: replaces, - }); } + return TAPi18n.__(key, { + postProcess: 'sprintf', + sprintf: replaces, + }); }; this.tr = function(key, options, ...replaces) { if (_.isObject(replaces[0])) { return TAPi18n.__(key, options, replaces); - } else { - return TAPi18n.__(key, options, { - postProcess: 'sprintf', - sprintf: replaces, - }); } + return TAPi18n.__(key, options, { + postProcess: 'sprintf', + sprintf: replaces, + }); }; this.isRtl = (lang) => { diff --git a/packages/rocketchat-livechat/.app/client/lib/triggers.js b/packages/rocketchat-livechat/.app/client/lib/triggers.js index bdd46364e4ac0720984cd3849df36f00062b1b9f..4e2010f2f85dd4a0bd1c4736c520f0648b8185c3 100644 --- a/packages/rocketchat-livechat/.app/client/lib/triggers.js +++ b/packages/rocketchat-livechat/.app/client/lib/triggers.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Session } from 'meteor/session'; + import visitor from '../../imports/client/visitor'; const firedTriggers = JSON.parse(localStorage.getItem('rocketChatFiredTriggers')) || []; diff --git a/packages/rocketchat-livechat/.app/client/methods/sendMessageExternal.js b/packages/rocketchat-livechat/.app/client/methods/sendMessageExternal.js index 29723d521ee2b4efbb0d0b7c7973d6f8b22c016c..a555db944fd83af5d77d8344211c52e363b5d39c 100644 --- a/packages/rocketchat-livechat/.app/client/methods/sendMessageExternal.js +++ b/packages/rocketchat-livechat/.app/client/methods/sendMessageExternal.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { TimeSync } from 'meteor/mizzao:timesync'; -import visitor from '../../imports/client/visitor'; import s from 'underscore.string'; +import visitor from '../../imports/client/visitor'; + Meteor.methods({ sendMessageLivechat(message) { if (s.trim(message.msg) !== '') { diff --git a/packages/rocketchat-livechat/.app/client/routes/router.js b/packages/rocketchat-livechat/.app/client/routes/router.js index ae4fca721122b4ac7cdc065ac0897168899c8ad5..55c8620365d71122cff20a553856c7ff8999a1e8 100644 --- a/packages/rocketchat-livechat/.app/client/routes/router.js +++ b/packages/rocketchat-livechat/.app/client/routes/router.js @@ -1,7 +1,8 @@ -import visitor from '../../imports/client/visitor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { BlazeLayout } from 'meteor/kadira:blaze-layout'; +import visitor from '../../imports/client/visitor'; + BlazeLayout.setRoot('body'); FlowRouter.route('/livechat', { diff --git a/packages/rocketchat-livechat/.app/client/startup/visitor.js b/packages/rocketchat-livechat/.app/client/startup/visitor.js index f30e4cc806cd0b960e8d63745eeff4a2125427f4..f43f0507e4fcf535b0e46063aea49211bcb8b311 100644 --- a/packages/rocketchat-livechat/.app/client/startup/visitor.js +++ b/packages/rocketchat-livechat/.app/client/startup/visitor.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { Tracker } from 'meteor/tracker'; + import visitor from '../../imports/client/visitor'; Meteor.startup(() => { diff --git a/packages/rocketchat-livechat/.app/client/views/avatar.js b/packages/rocketchat-livechat/.app/client/views/avatar.js index 3fc7c01b66381808984c6375e3f164d80d2a4c6b..3464e77fd55eab7ebfec444ae5878557fcac0891 100644 --- a/packages/rocketchat-livechat/.app/client/views/avatar.js +++ b/packages/rocketchat-livechat/.app/client/views/avatar.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; + import visitor from '../../imports/client/visitor'; Template.avatar.helpers({ diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index 6358874a7db93c35bfd3f12926fa25d281057724..0512c71950c486e8bbb2aed0df3c1b48bacbc77a 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -4,6 +4,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; + import visitor from '../../imports/client/visitor'; function showDepartments() { @@ -30,7 +31,7 @@ Template.livechatWindow.helpers({ if (Session.get('triggered') || visitor.getId()) { return false; } - return (Livechat.registrationForm && (Livechat.nameFieldRegistrationForm || Livechat.emailFieldRegistrationForm || showDepartments())); + return Livechat.registrationForm && (Livechat.nameFieldRegistrationForm || Livechat.emailFieldRegistrationForm || showDepartments()); }, showSwitchDepartmentForm() { return Livechat.showSwitchDepartmentForm; @@ -78,7 +79,8 @@ Template.livechatWindow.events({ parentCall('stopDragWindow'); window.removeEventListener('mousemove', this.onDrag); window.removeEventListener('mousedown', this.onDragStop); - this.onDrag = this.onDragStop = null; + this.onDrag = null; + this.onDragStop = null; }; window.addEventListener('mousemove', this.onDrag); diff --git a/packages/rocketchat-livechat/.app/client/views/message.js b/packages/rocketchat-livechat/.app/client/views/message.js index 0ded2996ce6e4937166cfd07ff650faff8db445b..69381c49747ad8d9074bed3220bdf10361434f42 100644 --- a/packages/rocketchat-livechat/.app/client/views/message.js +++ b/packages/rocketchat-livechat/.app/client/views/message.js @@ -2,9 +2,10 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; import moment from 'moment'; -import visitor from '../../imports/client/visitor'; import s from 'underscore.string'; +import visitor from '../../imports/client/visitor'; + Template.message.helpers({ own() { if (this.u && this.u._id === visitor.getId()) { @@ -42,7 +43,7 @@ Template.message.helpers({ case 'wm': return t('Welcome', { user: this.u.username }); case 'livechat-close': - return (Livechat.conversationFinishedMessage) ? Livechat.conversationFinishedMessage : t('Conversation_finished'); + return Livechat.conversationFinishedMessage ? Livechat.conversationFinishedMessage : t('Conversation_finished'); // case 'rtc': return RocketChat.callbacks.run('renderRtcMessage', this); default: this.html = this.msg; diff --git a/packages/rocketchat-livechat/.app/client/views/messages.js b/packages/rocketchat-livechat/.app/client/views/messages.js index 06ea6dd5a8df4f52d95c53d26324930b8196e699..b698dfd0a33753f197b6bcaaba50fa251d29052d 100644 --- a/packages/rocketchat-livechat/.app/client/views/messages.js +++ b/packages/rocketchat-livechat/.app/client/views/messages.js @@ -3,10 +3,11 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; -import visitor from '../../imports/client/visitor'; import _ from 'underscore'; import mime from 'mime-type/with-db'; +import visitor from '../../imports/client/visitor'; + Template.messages.helpers({ messages() { return ChatMessage.find({ @@ -23,16 +24,14 @@ Template.messages.helpers({ showOptions() { if (Template.instance().showOptions.get()) { return 'show'; - } else { - return ''; } + return ''; }, optionsLink() { if (Template.instance().showOptions.get()) { return t('Close_menu'); - } else { - return t('Options'); } + return t('Options'); }, videoCallEnabled() { return Livechat.videoCall; diff --git a/packages/rocketchat-livechat/.app/client/views/offlineForm.js b/packages/rocketchat-livechat/.app/client/views/offlineForm.js index 436758697a422db8c50a73803b64f16eb2191792..0a9e61f8f4d1d8dc077bc209068bd82cd98b8fe3 100644 --- a/packages/rocketchat-livechat/.app/client/views/offlineForm.js +++ b/packages/rocketchat-livechat/.app/client/views/offlineForm.js @@ -13,14 +13,13 @@ Template.offlineForm.helpers({ return Template.instance().messageSent.get(); }, offlineMessage() { - return (!_.isEmpty(this.offlineMessage)) ? this.offlineMessage.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br>$2') : TAPi18n.__('We_are_not_online_right_now_please_leave_a_message'); + return !_.isEmpty(this.offlineMessage) ? this.offlineMessage.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br>$2') : TAPi18n.__('We_are_not_online_right_now_please_leave_a_message'); }, offlineSuccessMessage() { if (!_.isEmpty(this.offlineSuccessMessage)) { return this.offlineSuccessMessage.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br>$2'); - } else { - return TAPi18n.__('Thanks_We_ll_get_back_to_you_soon'); } + return TAPi18n.__('Thanks_We_ll_get_back_to_you_soon'); }, }); @@ -48,10 +47,9 @@ Template.offlineForm.events({ if (error) { return instance.showError(error.reason); - } else { - instance.messageSent.set(true); - parentCall('callback', ['offline-form-submit', data]); } + instance.messageSent.set(true); + parentCall('callback', ['offline-form-submit', data]); }); }, }); diff --git a/packages/rocketchat-livechat/.app/client/views/options.js b/packages/rocketchat-livechat/.app/client/views/options.js index b8ba4742642b3d354a0ce6e43338f52dd2b7ee49..c791fc2288bac8ee3c9884334f8cf39c92e97c42 100644 --- a/packages/rocketchat-livechat/.app/client/views/options.js +++ b/packages/rocketchat-livechat/.app/client/views/options.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import swal from 'sweetalert2'; + import visitor from '../../imports/client/visitor'; Template.options.helpers({ diff --git a/packages/rocketchat-livechat/.app/client/views/register.js b/packages/rocketchat-livechat/.app/client/views/register.js index ee7306c5a501e5cdfcaa14b2e4d292fbd0be133d..bee093dfd66e5181a0419a001529fe52b5778aaf 100644 --- a/packages/rocketchat-livechat/.app/client/views/register.js +++ b/packages/rocketchat-livechat/.app/client/views/register.js @@ -3,10 +3,11 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; -import visitor from '../../imports/client/visitor'; import _ from 'underscore'; import s from 'underscore.string'; +import visitor from '../../imports/client/visitor'; + Template.register.helpers({ error() { return Template.instance().error.get(); @@ -68,34 +69,33 @@ Template.register.events({ if (!instance.validateForm(form, fields)) { return instance.showError(TAPi18n.__('You_must_complete_all_fields')); - } else { - let departmentId = instance.$('select[name=department]').val(); - if (!departmentId) { - const department = Department.findOne({ showOnRegistration: true }); - if (department) { - departmentId = department._id; - } + } + let departmentId = instance.$('select[name=department]').val(); + if (!departmentId) { + const department = Department.findOne({ showOnRegistration: true }); + if (department) { + departmentId = department._id; } + } - Livechat.department = departmentId; + Livechat.department = departmentId; - const guest = { - token: visitor.getToken(), - name, - email, - department: Livechat.department, - }; + const guest = { + token: visitor.getToken(), + name, + email, + department: Livechat.department, + }; - Meteor.call('livechat:registerGuest', guest, function(error, result) { - if (error != null) { - return instance.showError(error.reason); - } - parentCall('callback', ['pre-chat-form-submit', _.omit(guest, 'token')]); - visitor.setId(result.userId); - visitor.setData(result.visitor); - start(); - }); - } + Meteor.call('livechat:registerGuest', guest, function(error, result) { + if (error != null) { + return instance.showError(error.reason); + } + parentCall('callback', ['pre-chat-form-submit', _.omit(guest, 'token')]); + visitor.setId(result.userId); + visitor.setData(result.visitor); + start(); + }); }, 'click .error'(e, instance) { return instance.hideError(); diff --git a/packages/rocketchat-livechat/.app/client/views/survey.js b/packages/rocketchat-livechat/.app/client/views/survey.js index 1bf5b1a1168758305674df116cc5b2bc62519f06..6331c9814141acd4cfa0dc12574f0093ba8c0838 100644 --- a/packages/rocketchat-livechat/.app/client/views/survey.js +++ b/packages/rocketchat-livechat/.app/client/views/survey.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import swal from 'sweetalert2'; + import visitor from '../../imports/client/visitor'; Template.survey.events({ diff --git a/packages/rocketchat-livechat/.app/client/views/switchDepartment.js b/packages/rocketchat-livechat/.app/client/views/switchDepartment.js index c31e5b6a68c782282f709a9d0cb7a8f1d632817a..b14c6e8921a1863f2b5960e79717dc7042647b0e 100644 --- a/packages/rocketchat-livechat/.app/client/views/switchDepartment.js +++ b/packages/rocketchat-livechat/.app/client/views/switchDepartment.js @@ -3,6 +3,7 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import swal from 'sweetalert2'; + import visitor from '../../imports/client/visitor'; Template.switchDepartment.helpers({ diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index c1aaf04ef70f989716da65759befd20d0c2f9db2..836333f6be17a54e84c529b38714f2a86d660979 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -76,7 +76,6 @@ export default { this.token.set(token); Meteor.call('livechat:loginByToken', token, (err, result) => { - if (!result) { return; } diff --git a/packages/rocketchat-livechat/plugin/build-livechat.js b/packages/rocketchat-livechat/plugin/build-livechat.js index 16461f3a8ed7c353a04051805b567c007367c9a8..cae2c077b289160926d3b7d677cca0dde048a9ac 100644 --- a/packages/rocketchat-livechat/plugin/build-livechat.js +++ b/packages/rocketchat-livechat/plugin/build-livechat.js @@ -1,6 +1,7 @@ import path from 'path'; import { execSync } from 'child_process'; import fs from 'fs'; + import UglifyJS from 'uglify-js'; const livechatSource = path.resolve('packages', 'rocketchat-livechat', 'assets', 'rocket-livechat.js'); diff --git a/packages/rocketchat-version/plugin/compile-version.js b/packages/rocketchat-version/plugin/compile-version.js index 8e3a9b6cd5d98170bbd238d9661fddf9ccc2a792..19da988d165829d32d4bb8fbc266d6e35505f2bd 100644 --- a/packages/rocketchat-version/plugin/compile-version.js +++ b/packages/rocketchat-version/plugin/compile-version.js @@ -2,12 +2,13 @@ import { exec } from 'child_process'; import os from 'os'; import fs from 'fs'; import path from 'path'; + import Future from 'fibers/future'; import async from 'async'; class VersionCompiler { processFilesForTarget(files) { - const future = new Future; + const future = new Future(); const processFile = function(file, cb) { if (!file.getDisplayPath().match(/rocketchat\.info$/)) { return cb(); diff --git a/private/node_scripts/auto-translate.js b/private/node_scripts/auto-translate.js index 5b5cf98a141a29ee4bc1518737340962e202dcce..b9be97d0a86994b8fd6591338db46e0f03fb24f8 100644 --- a/private/node_scripts/auto-translate.js +++ b/private/node_scripts/auto-translate.js @@ -1,15 +1,17 @@ /* eslint import/no-unresolved: 0 */ -const async = require('async'); const fs = require('fs'); + +const async = require('async'); const _ = require('underscore'); +const translate = require('google-translate'); if (!process.argv[2]) { console.error('\You must inform your Google API key: node auto-translate.js [google-api-key]\n'); process.exit(); } -const googleTranslate = require('google-translate')(process.argv[2]); +const googleTranslate = translate(process.argv[2]); googleTranslate.getSupportedLanguages(function(err, langs) { if (err) { @@ -25,9 +27,8 @@ googleTranslate.getSupportedLanguages(function(err, langs) { _.keys(enUnsorted).sort(function(a, b) { if (a.toLowerCase() !== b.toLowerCase()) { return a.toLowerCase().localeCompare(b.toLowerCase()); - } else { - return a.localeCompare(b); } + return a.localeCompare(b); }).forEach(function(key) { en[key] = enUnsorted[key]; }); diff --git a/private/node_scripts/check-unused-i18n.js b/private/node_scripts/check-unused-i18n.js index f5bdbc8b73ed7c7b326247d81b05e09bd136e4e7..f134375f0ca3c8d994f05b8de9d3a419b3bd8f1e 100644 --- a/private/node_scripts/check-unused-i18n.js +++ b/private/node_scripts/check-unused-i18n.js @@ -1,5 +1,6 @@ const fs = require('fs'); const path = require('path'); + const _ = require('underscore'); let contents = fs.readFileSync(`${ __dirname }/../../packages/rocketchat-lib/i18n/en.i18n.json`, 'utf-8'); diff --git a/private/node_scripts/unsubscribe_csv/unsubscribe.js b/private/node_scripts/unsubscribe_csv/unsubscribe.js index a78fbd91fea47568daefe36566db2eb5680ffe47..954de0116a833d5e449cffc1d92a3d8359de1aee 100644 --- a/private/node_scripts/unsubscribe_csv/unsubscribe.js +++ b/private/node_scripts/unsubscribe_csv/unsubscribe.js @@ -5,9 +5,9 @@ import program from 'commander'; import wait from 'wait.for'; import { MongoClient } from 'mongodb'; -program.usage('[options]').option('-v, --verbose', 'Verbose', (function(v, total) { +program.usage('[options]').option('-v, --verbose', 'Verbose', function(v, total) { return total + 1; -}), 0).option('-M, --mongo-db [mongo db]', 'Mongo DB', 'localhost:27017').option('-N, --db-name [db name]', 'DB Name', 'meteor').on('--help', function() { +}, 0).option('-M, --mongo-db [mongo db]', 'Mongo DB', 'localhost:27017').option('-N, --db-name [db name]', 'DB Name', 'meteor').on('--help', function() { console.log(' Example:'); console.log(''); console.log(' $ node unsubscribe.js'); diff --git a/server/configuration/accounts_meld.js b/server/configuration/accounts_meld.js index 24821494e20c96127f746a4e0a8af12df4ec157e..139b1be0262b5e6ae9659ca4956dc47a1e6c3b01 100644 --- a/server/configuration/accounts_meld.js +++ b/server/configuration/accounts_meld.js @@ -1,5 +1,6 @@ import _ from 'underscore'; import { Accounts } from 'meteor/accounts-base'; + import { Users } from '../../app/models'; const orig_updateOrCreateUserFromExternalService = Accounts.updateOrCreateUserFromExternalService; diff --git a/server/lib/accounts.js b/server/lib/accounts.js index 16130d2d3957baa1f750db235c51f09fa6069af1..c9a47e50d17422bb863bc2df8c05360aa35af03e 100644 --- a/server/lib/accounts.js +++ b/server/lib/accounts.js @@ -4,6 +4,7 @@ import { Accounts } from 'meteor/accounts-base'; import { TAPi18n } from 'meteor/tap:i18n'; import _ from 'underscore'; import s from 'underscore.string'; + import * as Mailer from '../../app/mailer'; import { settings } from '../../app/settings'; import { callbacks } from '../../app/callbacks'; diff --git a/server/lib/cordova.js b/server/lib/cordova.js index 57a27a0e4faeb7495e760850ce83cc617fe7d447..363921fdf301bf2e919003ca470094dc088a13dd 100644 --- a/server/lib/cordova.js +++ b/server/lib/cordova.js @@ -1,9 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; import { TAPi18n } from 'meteor/tap:i18n'; +import { Push } from 'meteor/rocketchat:push'; + import { SystemLogger } from '../../app/logger'; import { getWorkspaceAccessToken } from '../../app/cloud/server'; -import { Push } from 'meteor/rocketchat:push'; import { hasRole } from '../../app/authorization'; import { settings } from '../../app/settings'; diff --git a/server/lib/roomFiles.js b/server/lib/roomFiles.js index 19152166329ae2b0d57ca79f7c16680f5e47ddf4..f7a716ac1caf7401356c9196f1ba05e7cb911061 100644 --- a/server/lib/roomFiles.js +++ b/server/lib/roomFiles.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users, Uploads } from '../../app/models'; export const roomFiles = (pub, { rid, searchText, limit = 50 }) => { diff --git a/server/methods/OEmbedCacheCleanup.js b/server/methods/OEmbedCacheCleanup.js index dce33adcd4679ce9916a50cbae8cb59cce4f8a73..168cc4aba10bc6ef138a9db2cebc6d6dd66f46ec 100644 --- a/server/methods/OEmbedCacheCleanup.js +++ b/server/methods/OEmbedCacheCleanup.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { OEmbedCache } from '../../app/models'; import { settings } from '../../app/settings'; import { hasRole } from '../../app/authorization'; diff --git a/server/methods/addAllUserToRoom.js b/server/methods/addAllUserToRoom.js index 8270f05d77b08319cfc8759b776b95497f4d270f..d8379b2030c717189289ceb3a06822b0027a8f5d 100644 --- a/server/methods/addAllUserToRoom.js +++ b/server/methods/addAllUserToRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasRole } from '../../app/authorization'; import { Users, Rooms, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; @@ -7,9 +8,8 @@ import { callbacks } from '../../app/callbacks'; Meteor.methods({ addAllUserToRoom(rid, activeUsersOnly = false) { - - check (rid, String); - check (activeUsersOnly, Boolean); + check(rid, String); + check(activeUsersOnly, Boolean); if (hasRole(this.userId, 'admin') === true) { const userCount = Users.find().count(); @@ -54,10 +54,9 @@ Meteor.methods({ return callbacks.run('afterJoinRoom', user, room); }); return true; - } else { - throw (new Meteor.Error(403, 'Access to Method Forbidden', { - method: 'addAllToRoom', - })); } + throw new Meteor.Error(403, 'Access to Method Forbidden', { + method: 'addAllToRoom', + }); }, }); diff --git a/server/methods/addRoomLeader.js b/server/methods/addRoomLeader.js index fce2764c4a7e6639b951712181d2d7b4f578f68e..548abf36a9845943dbb9baa4a331688ed3348a42 100644 --- a/server/methods/addRoomLeader.js +++ b/server/methods/addRoomLeader.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/addRoomModerator.js b/server/methods/addRoomModerator.js index 69bf8cc9f24d15e161207b92231822487a68a579..04a593768e2a5efe983d546c02a5e0649548291a 100644 --- a/server/methods/addRoomModerator.js +++ b/server/methods/addRoomModerator.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/addRoomOwner.js b/server/methods/addRoomOwner.js index 5935dfd133a5eb057592609988d9a392dd24885d..b6e0080f3a130c022aaf2bf0532cf4f56e642362 100644 --- a/server/methods/addRoomOwner.js +++ b/server/methods/addRoomOwner.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/afterVerifyEmail.js b/server/methods/afterVerifyEmail.js index 88aaa93df4cea2d391246c7653fdb60d1baa44a4..107a8bfab46b2c3b9798af1f7ee5e3c14e1c11d5 100644 --- a/server/methods/afterVerifyEmail.js +++ b/server/methods/afterVerifyEmail.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { Users, Roles } from '../../app/models'; import _ from 'underscore'; +import { Users, Roles } from '../../app/models'; + Meteor.methods({ afterVerifyEmail() { const userId = Meteor.userId(); diff --git a/server/methods/browseChannels.js b/server/methods/browseChannels.js index e23f7ed2d11bc35bec34e0f721fafc11e17eb545..2d8d9ffb3c7f626b651a51ffa302c520c114b4b7 100644 --- a/server/methods/browseChannels.js +++ b/server/methods/browseChannels.js @@ -1,9 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; -import { hasPermission } from '../../app/authorization'; -import { Rooms, Users } from '../../app/models'; import s from 'underscore.string'; +import { hasPermission } from '../../app/authorization'; +import { Rooms, Users } from '../../app/models'; import { Federation } from '../../app/federation/server'; const sortChannels = function(field, direction) { diff --git a/server/methods/canAccessRoom.js b/server/methods/canAccessRoom.js index ee270af0fa60ce31d64395b8ad55d663ceef0c49..008a2505f818eb4f18338955b4e77817130483df 100644 --- a/server/methods/canAccessRoom.js +++ b/server/methods/canAccessRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Users, Rooms } from '../../app/models'; import { canAccessRoom } from '../../app/authorization'; import { settings } from '../../app/settings'; @@ -37,7 +38,6 @@ Meteor.methods({ throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'canAccessRoom', }); - } if (canAccessRoom.call(this, room, user, extraData)) { diff --git a/server/methods/channelsList.js b/server/methods/channelsList.js index cbb85ef93f1dc53e851ad5b511ebdc443228bad4..cbf39337185fc92bd290eccccb872438e5d8a918 100644 --- a/server/methods/channelsList.js +++ b/server/methods/channelsList.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import _ from 'underscore'; +import s from 'underscore.string'; + import { hasPermission } from '../../app/authorization'; import { Rooms, Subscriptions, Users } from '../../app/models'; import { getUserPreference } from '../../app/utils'; import { settings } from '../../app/settings'; -import _ from 'underscore'; -import s from 'underscore.string'; Meteor.methods({ channelsList(filter, channelType, limit, sort) { diff --git a/server/methods/createDirectMessage.js b/server/methods/createDirectMessage.js index 6577182ea1b211632941b8fc6588bd4179b7691f..2fb895435984504f131dfed634f721f4df9e5d50 100644 --- a/server/methods/createDirectMessage.js +++ b/server/methods/createDirectMessage.js @@ -1,12 +1,12 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { settings } from '../../app/settings'; import { hasPermission } from '../../app/authorization'; import { Users, Rooms, Subscriptions } from '../../app/models'; import { getDefaultSubscriptionPref } from '../../app/utils'; import { RateLimiter } from '../../app/lib'; import { callbacks } from '../../app/callbacks'; - import { Federation } from '../../app/federation/server'; Meteor.methods({ diff --git a/server/methods/deleteFileMessage.js b/server/methods/deleteFileMessage.js index ba946c2e4e9c00b609fdfd3f3cb51157719436bb..18353d1a45c82c0f8d506efaea049604e1b05913 100644 --- a/server/methods/deleteFileMessage.js +++ b/server/methods/deleteFileMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { FileUpload } from '../../app/file-upload'; import { Messages } from '../../app/models'; diff --git a/server/methods/deleteUser.js b/server/methods/deleteUser.js index bab9b7ea840e32e89557ffd94344216579e4a52a..9c8f1d266ab14bb0d01ff126d0b08aca8445c8d4 100644 --- a/server/methods/deleteUser.js +++ b/server/methods/deleteUser.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Users } from '../../app/models'; import { hasPermission } from '../../app/authorization'; import { deleteUser } from '../../app/lib'; diff --git a/server/methods/eraseRoom.js b/server/methods/eraseRoom.js index ffea46ee51376bd18dacf44506005302da8f4ea9..5be022bc14b5bc18ad77738a5baaf1931b26878d 100644 --- a/server/methods/eraseRoom.js +++ b/server/methods/eraseRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { deleteRoom } from '../../app/lib'; import { hasPermission } from '../../app/authorization'; import { Rooms } from '../../app/models'; diff --git a/server/methods/getAvatarSuggestion.js b/server/methods/getAvatarSuggestion.js index d4ac947e91c6f273c85abf0f7b5456c69ef0064a..53f27ad5b47441e56e195b94844d9bb0a498b69d 100644 --- a/server/methods/getAvatarSuggestion.js +++ b/server/methods/getAvatarSuggestion.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getAvatarSuggestionForUser } from '../../app/lib'; Meteor.methods({ diff --git a/server/methods/getRoomById.js b/server/methods/getRoomById.js index 4550d824e2fe9b01f410b8b15539363a90b18853..9bae89ab1dedd9bc967f6e608c94cfc6fb7d5828 100644 --- a/server/methods/getRoomById.js +++ b/server/methods/getRoomById.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { Rooms } from '../../app/models'; import { canAccessRoom } from '../../app/authorization'; diff --git a/server/methods/getRoomIdByNameOrId.js b/server/methods/getRoomIdByNameOrId.js index 43e3d97731608060bb731dcd1baf6cc01797ae29..8718bbf4dbbe184d370ada7741e645f79925e50f 100644 --- a/server/methods/getRoomIdByNameOrId.js +++ b/server/methods/getRoomIdByNameOrId.js @@ -1,6 +1,7 @@ // DEPRECATE import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms } from '../../app/models'; import { canAccessRoom } from '../../app/authorization'; diff --git a/server/methods/getRoomNameById.js b/server/methods/getRoomNameById.js index 897483d6950603224a9f52b2bc14a636f41c5838..81f596d520b633b3e24c3ce07222fbc49888de1c 100644 --- a/server/methods/getRoomNameById.js +++ b/server/methods/getRoomNameById.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms, Subscriptions } from '../../app/models'; import { hasPermission } from '../../app/authorization'; diff --git a/server/methods/getTotalChannels.js b/server/methods/getTotalChannels.js index d1145c5fdc2e2870b2bd94e9c9f45c3c215469e8..0fcfaff4165ad9308d256ea1c60e5f9f00406fed 100644 --- a/server/methods/getTotalChannels.js +++ b/server/methods/getTotalChannels.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Rooms } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/getUsersOfRoom.js b/server/methods/getUsersOfRoom.js index 02d4524f3e7c3d55f6ddd3c1c60883363c2f089a..dda28c79a08f0ef7de0946bb3704d464d86a9410 100644 --- a/server/methods/getUsersOfRoom.js +++ b/server/methods/getUsersOfRoom.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions } from '../../app/models'; import { hasPermission } from '../../app/authorization'; import { settings } from '../../app/settings'; @@ -23,14 +24,14 @@ function findUsers({ rid, status, skip, limit }) { 'u.status': 1, }, }, - ...(status ? [{ $match: { 'u.status': status } }] : []), + ...status ? [{ $match: { 'u.status': status } }] : [], { $sort: { [settings.get('UI_Use_Real_Name') ? 'u.name' : 'u.username']: 1, }, }, - ...(skip > 0 ? [{ $skip: skip }] : []), - ...(limit > 0 ? [{ $limit: limit }] : []), + ...skip > 0 ? [{ $skip: skip }] : [], + ...limit > 0 ? [{ $limit: limit }] : [], { $project: { _id: { $arrayElemAt: ['$u._id', 0] }, diff --git a/server/methods/hideRoom.js b/server/methods/hideRoom.js index b1beddd89aaa7fbc000d54683521813e4c474f70..8c632eb8ac4175ceb32e654812e02283eec5325e 100644 --- a/server/methods/hideRoom.js +++ b/server/methods/hideRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/ignoreUser.js b/server/methods/ignoreUser.js index d4dc0ee006a9fc93ba55bbd6b8eece1349048a51..c907c0fbcd1060d69559bf22c41c1ea41db6d64c 100644 --- a/server/methods/ignoreUser.js +++ b/server/methods/ignoreUser.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/loadHistory.js b/server/methods/loadHistory.js index b0e9d3d628aaae662187fb28daea63cd464fc636..f4187c84a0caf9d194dfbe6ffb38c25fb8ab9e2a 100644 --- a/server/methods/loadHistory.js +++ b/server/methods/loadHistory.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../app/models'; import { hasPermission } from '../../app/authorization'; import { settings } from '../../app/settings'; diff --git a/server/methods/loadMissedMessages.js b/server/methods/loadMissedMessages.js index 13a773e1102a92e24ecb2c1a05a896e6470b94fe..5079e23b0dc69b4d569913f1509d472269c04ce6 100644 --- a/server/methods/loadMissedMessages.js +++ b/server/methods/loadMissedMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/loadNextMessages.js b/server/methods/loadNextMessages.js index 1ebc69f50590fc7baf706bd5ad56174d6e684468..7136447873e4c1327cf3dc6fbace8f0359d0866d 100644 --- a/server/methods/loadNextMessages.js +++ b/server/methods/loadNextMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages } from '../../app/models'; import { settings } from '../../app/settings'; import { normalizeMessagesForUser } from '../../app/utils/server/lib/normalizeMessagesForUser'; diff --git a/server/methods/loadSurroundingMessages.js b/server/methods/loadSurroundingMessages.js index 23ac57766ad2b6dd201124cc29b94524d3ac95db..180f9f4b3e16650119151009c4430b3dad4df88f 100644 --- a/server/methods/loadSurroundingMessages.js +++ b/server/methods/loadSurroundingMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages } from '../../app/models'; import { settings } from '../../app/settings'; import { normalizeMessagesForUser } from '../../app/utils/server/lib/normalizeMessagesForUser'; @@ -31,7 +32,7 @@ Meteor.methods({ return false; } - limit = limit - 1; + limit -= 1; const options = { sort: { diff --git a/server/methods/logoutCleanUp.js b/server/methods/logoutCleanUp.js index 37d3fd17a12f3c30563567b61fa6cadd4e7af9a1..db6cba739aa385ee2f1e4fd54aa4db40ed7b65dc 100644 --- a/server/methods/logoutCleanUp.js +++ b/server/methods/logoutCleanUp.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { callbacks } from '../../app/callbacks'; Meteor.methods({ diff --git a/server/methods/messageSearch.js b/server/methods/messageSearch.js index 6251d25852f0edc2d6e8e88b4e3c02a5577ea471..f58674c598efc75b20584e2d11e58ffc109cc05b 100644 --- a/server/methods/messageSearch.js +++ b/server/methods/messageSearch.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; +import s from 'underscore.string'; + import { Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; -import s from 'underscore.string'; Meteor.methods({ messageSearch(text, rid, limit) { @@ -13,7 +14,7 @@ Meteor.methods({ // TODO: Evaluate why we are returning `users` and `channels`, as the only thing that gets set is the `messages`. const result = { message: { - docs:[], + docs: [], }, }; diff --git a/server/methods/migrate.js b/server/methods/migrate.js index 466eb433c374feaaba362680072da72720715969..e0301756b89f81a9b162b80b9518d799a851dbc9 100644 --- a/server/methods/migrate.js +++ b/server/methods/migrate.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Migrations } from '../../app/migrations'; import { hasPermission } from '../../app/authorization'; diff --git a/server/methods/muteUserInRoom.js b/server/methods/muteUserInRoom.js index 464d3c5f5adc38080c635e78cf091334ad424e8f..9f39ce95543bfcf693b0b5e3e0b74ea773856157 100644 --- a/server/methods/muteUserInRoom.js +++ b/server/methods/muteUserInRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Rooms, Subscriptions, Users, Messages } from '../../app/models'; import { hasPermission } from '../../app/authorization'; import { callbacks } from '../../app/callbacks'; diff --git a/server/methods/openRoom.js b/server/methods/openRoom.js index bd327f6c8ed8a77f6e545075baf9de4ddbe4aed0..61ca1129a9f5a8cdb9258e5036868e76cfa7ca2c 100644 --- a/server/methods/openRoom.js +++ b/server/methods/openRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Subscriptions } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/readMessages.js b/server/methods/readMessages.js index 331bf783d1a64b95a248ac8482228d5ddd62df7d..3301524d34ee4e8cee97d375fc7c0e74b54308ea 100644 --- a/server/methods/readMessages.js +++ b/server/methods/readMessages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { callbacks } from '../../app/callbacks'; import { Subscriptions } from '../../app/models'; diff --git a/server/methods/registerUser.js b/server/methods/registerUser.js index 47a99242e3bcf3b0ce7e9ec50d4a95b290cb1d47..83464419607f2cf004fb796ce50192c0be923252 100644 --- a/server/methods/registerUser.js +++ b/server/methods/registerUser.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; import s from 'underscore.string'; + import * as Mailer from '../../app/mailer'; import { Users } from '../../app/models'; import { settings } from '../../app/settings'; @@ -29,20 +30,20 @@ Meteor.methods({ Accounts._insertLoginToken(userId, stampedLoginToken); return stampedLoginToken; - } else { - check(formData, Match.ObjectIncluding({ - email: String, - pass: String, - name: String, - secretURL: Match.Optional(String), - reason: Match.Optional(String), - })); } + check(formData, Match.ObjectIncluding({ + email: String, + pass: String, + name: String, + secretURL: Match.Optional(String), + reason: Match.Optional(String), + })); + if (settings.get('Accounts_RegistrationForm') === 'Disabled') { throw new Meteor.Error('error-user-registration-disabled', 'User registration is disabled', { method: 'registerUser' }); } else if (settings.get('Accounts_RegistrationForm') === 'Secret URL' && (!formData.secretURL || formData.secretURL !== settings.get('Accounts_RegistrationForm_SecretURL'))) { - throw new Meteor.Error ('error-user-registration-secret', 'User registration is only allowed via Secret URL', { method: 'registerUser' }); + throw new Meteor.Error('error-user-registration-secret', 'User registration is only allowed via Secret URL', { method: 'registerUser' }); } passwordPolicy.validate(formData.pass); @@ -76,7 +77,6 @@ Meteor.methods({ saveCustomFields(userId, formData); try { - const subject = Mailer.replace(settings.get('Verification_Email_Subject')); Accounts.emailTemplates.verifyEmail.subject = () => subject; diff --git a/server/methods/removeRoomLeader.js b/server/methods/removeRoomLeader.js index 90aebe4c38c524e704419368c9053880ec69bfbc..b0576c3d207ee07fefa43c6ba917dd7abbbb7048 100644 --- a/server/methods/removeRoomLeader.js +++ b/server/methods/removeRoomLeader.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/removeRoomModerator.js b/server/methods/removeRoomModerator.js index eea88e224afbdbc9890ae1548f41ed6e4e5b60f6..ae00b1aeb2f09512f623085f8079ee1e42061452 100644 --- a/server/methods/removeRoomModerator.js +++ b/server/methods/removeRoomModerator.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/removeRoomOwner.js b/server/methods/removeRoomOwner.js index a818c5da2e86d4179318ce4bef20cc951ae1b294..2dbd82e6cb857539f57144af29fdaa2ff3d49a15 100644 --- a/server/methods/removeRoomOwner.js +++ b/server/methods/removeRoomOwner.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { hasPermission, getUsersInRole } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; diff --git a/server/methods/removeUserFromRoom.js b/server/methods/removeUserFromRoom.js index 69bc4f52d77f0128e473ca65042acd5f8227c7fa..45839078e7a68922aa25e7fcc5ababd79988cff8 100644 --- a/server/methods/removeUserFromRoom.js +++ b/server/methods/removeUserFromRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission, hasRole, getUsersInRole, removeUserFromRoles } from '../../app/authorization'; import { Users, Subscriptions, Rooms, Messages } from '../../app/models'; import { callbacks } from '../../app/callbacks'; diff --git a/server/methods/reportMessage.js b/server/methods/reportMessage.js index 13c66136b8a247d14585980ca5af229182de6194..9ff33ef8426d7cddfa35a7750502633ac93b8f2b 100644 --- a/server/methods/reportMessage.js +++ b/server/methods/reportMessage.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Messages, Reports } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/requestDataDownload.js b/server/methods/requestDataDownload.js index f1d444bf59eaacf86ecf7aaa2ced67d80a290798..604d68c72ec91329814abc23ef3ff5adca0e019a 100644 --- a/server/methods/requestDataDownload.js +++ b/server/methods/requestDataDownload.js @@ -1,8 +1,10 @@ +import fs from 'fs'; +import path from 'path'; + import { Meteor } from 'meteor/meteor'; + import { ExportOperations } from '../../app/models'; import { settings } from '../../app/settings'; -import fs from 'fs'; -import path from 'path'; let tempFolder = '/tmp/userData'; if (settings.get('UserData_FileSystemPath') != null) { @@ -50,7 +52,7 @@ Meteor.methods({ } const exportOperation = { - userId : currentUserData._id, + userId: currentUserData._id, roomList: null, status: 'pending', exportPath: folderName, diff --git a/server/methods/resetAvatar.js b/server/methods/resetAvatar.js index 77bea775507a3facd3e4418c51963b02ee0a8afa..f60b0aefc43c73c0f36456c564ac564fa1eae9b8 100644 --- a/server/methods/resetAvatar.js +++ b/server/methods/resetAvatar.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { FileUpload } from '../../app/file-upload'; import { Users } from '../../app/models/server'; import { settings } from '../../app/settings'; diff --git a/server/methods/roomNameExists.js b/server/methods/roomNameExists.js index 5bb3e5e68dd279761042e5813678700c727dc8d0..ef2c2a5d167e37c76226310da9624334a4b7f0cb 100644 --- a/server/methods/roomNameExists.js +++ b/server/methods/roomNameExists.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { Rooms } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/saveUserPreferences.js b/server/methods/saveUserPreferences.js index fd389a20a52247914048537dfb2ec6aa47c9d68f..04408d121807c7ea4ecc837ffc7ded1a4207b53e 100644 --- a/server/methods/saveUserPreferences.js +++ b/server/methods/saveUserPreferences.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Users, Subscriptions } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/saveUserProfile.js b/server/methods/saveUserProfile.js index 429fdf4ccc0833f589d674d6efa8c9ee7dbc7c65..788ee9281d0485c17f119849b581a3e0d5e43c9f 100644 --- a/server/methods/saveUserProfile.js +++ b/server/methods/saveUserProfile.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; + import { saveCustomFields, passwordPolicy } from '../../app/lib'; import { Users } from '../../app/models'; import { settings as rcSettings } from '../../app/settings'; @@ -59,7 +60,7 @@ Meteor.methods({ } // Should be the last check to prevent error when trying to check password for users without password - if ((settings.newPassword) && rcSettings.get('Accounts_AllowPasswordChange') === true) { + if (settings.newPassword && rcSettings.get('Accounts_AllowPasswordChange') === true) { if (!checkPassword(user, settings.typedPassword)) { throw new Meteor.Error('error-invalid-password', 'Invalid password', { method: 'saveUserProfile', diff --git a/server/methods/sendConfirmationEmail.js b/server/methods/sendConfirmationEmail.js index a2ee55be978b8e24ab10f489eecfb3d9fb8696b6..5749d0e5869069f92403317ce12457a0ce9e2c21 100644 --- a/server/methods/sendConfirmationEmail.js +++ b/server/methods/sendConfirmationEmail.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; + import * as Mailer from '../../app/mailer'; import { Users } from '../../app/models'; import { settings } from '../../app/settings'; @@ -34,7 +35,7 @@ Meteor.methods({ }; Accounts.emailTemplates.verifyEmail.html = function(userModel, url) { - return Mailer.replace(html, { Verification_Url:url, name: user.name }); + return Mailer.replace(html, { Verification_Url: url, name: user.name }); }; try { @@ -45,6 +46,5 @@ Meteor.methods({ message: error.message, }); } - }, }); diff --git a/server/methods/sendForgotPasswordEmail.js b/server/methods/sendForgotPasswordEmail.js index 91fdb918b3391d023fbb78bd853eef3c4f3f09d3..c8ba6c8c34031db4f8a057372fa570a7f61bf9f4 100644 --- a/server/methods/sendForgotPasswordEmail.js +++ b/server/methods/sendForgotPasswordEmail.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; import s from 'underscore.string'; + import * as Mailer from '../../app/mailer'; import { Users } from '../../app/models'; import { settings } from '../../app/settings'; @@ -42,7 +43,6 @@ Meteor.methods({ Accounts.emailTemplates.from = `${ settings.get('Site_Name') } <${ settings.get('From_Email') }>`; try { - Accounts.emailTemplates.resetPassword.subject = function(/* userModel*/) { return subject; // TODO check a better way to do this }; diff --git a/server/methods/setAvatarFromService.js b/server/methods/setAvatarFromService.js index c93cd2c2d4a52ed96a516a90f241c61830627878..2d1a7aeb8a57173edb8057d44a88c049df93cb84 100644 --- a/server/methods/setAvatarFromService.js +++ b/server/methods/setAvatarFromService.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { settings } from '../../app/settings'; import { setUserAvatar } from '../../app/lib'; import { Users } from '../../app/models/server'; diff --git a/server/methods/setUserActiveStatus.js b/server/methods/setUserActiveStatus.js index 2577af9e4ed5cf275c0947649fa7335ec573d83d..2328d79d54ca89dedd53d8da3bab7f5290897558 100644 --- a/server/methods/setUserActiveStatus.js +++ b/server/methods/setUserActiveStatus.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; + import * as Mailer from '../../app/mailer'; import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions } from '../../app/models'; @@ -61,6 +62,5 @@ Meteor.methods({ return true; - }, }); diff --git a/server/methods/setUserPassword.js b/server/methods/setUserPassword.js index 8f5c91eb94192e6eb3290ae3fea0d8b3bd4a9253..5ebcc135a2aaf0904599b0db2ac268ef752510c6 100644 --- a/server/methods/setUserPassword.js +++ b/server/methods/setUserPassword.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Accounts } from 'meteor/accounts-base'; + import { Users } from '../../app/models'; import { passwordPolicy } from '../../app/lib'; diff --git a/server/methods/toogleFavorite.js b/server/methods/toogleFavorite.js index 82293eae4de7b1a05a9926a1c3c61b6f928ba6f7..9cc84bf82f943c13b2a4d817c7d1cf853bb76e31 100644 --- a/server/methods/toogleFavorite.js +++ b/server/methods/toogleFavorite.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { Subscriptions } from '../../app/models'; Meteor.methods({ diff --git a/server/methods/unmuteUserInRoom.js b/server/methods/unmuteUserInRoom.js index b90cadd03a9c68922deb4dc7c773eee4acc8429c..759c21483909ec40fc59e9d82a0870090740d9d1 100644 --- a/server/methods/unmuteUserInRoom.js +++ b/server/methods/unmuteUserInRoom.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Rooms, Messages } from '../../app/models'; import { callbacks } from '../../app/callbacks'; diff --git a/server/methods/userSetUtcOffset.js b/server/methods/userSetUtcOffset.js index ad33d8c1a2306bb946a7953d8f365834ff36e8b0..f99bef47aff69c800ceb8ee306d3216445411a72 100644 --- a/server/methods/userSetUtcOffset.js +++ b/server/methods/userSetUtcOffset.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; + import { Users } from '../../app/models'; Meteor.methods({ diff --git a/server/publications/activeUsers.js b/server/publications/activeUsers.js index 180def537d054bc484edb6ef067211100a37fa18..c6e33e2835170523b09ae1405ea5422ecf69a365 100644 --- a/server/publications/activeUsers.js +++ b/server/publications/activeUsers.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../app/models'; Meteor.publish('activeUsers', function() { diff --git a/server/publications/channelAndPrivateAutocomplete.js b/server/publications/channelAndPrivateAutocomplete.js index bda54b0bd3231499a7ea62c4406977da22e8629f..17cb499dd9b5f5026f9be68bafd71b81fc0456e5 100644 --- a/server/publications/channelAndPrivateAutocomplete.js +++ b/server/publications/channelAndPrivateAutocomplete.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../app/authorization'; import { Rooms } from '../../app/models'; diff --git a/server/publications/fullUserData.js b/server/publications/fullUserData.js index aa6d2e9ccc57e818f4537958f118ed37a7644a24..30151581250b81b9cee629655c9229ecde00493b 100644 --- a/server/publications/fullUserData.js +++ b/server/publications/fullUserData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { getFullUserData } from '../../app/lib'; Meteor.publish('fullUserData', function(filter, limit) { diff --git a/server/publications/messages.js b/server/publications/messages.js index ac0ce3cff1f69d43bcd415b2c68018b4b14b14fa..625eb8a5fcda349e44e4469863a6a5682d2a8c76 100644 --- a/server/publications/messages.js +++ b/server/publications/messages.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; + import { normalizeMessagesForUser } from '../../app/utils/server/lib/normalizeMessagesForUser'; import { Messages } from '../../app/models'; @@ -95,6 +96,5 @@ Meteor.methods({ } return Meteor.call('getChannelHistory', { rid, latest: latestDate, oldest: oldestDate, inclusive, count, unreads }); - }, }); diff --git a/server/publications/room.js b/server/publications/room.js index 48cc90ca99f3c7cbbeb067b030719d85f2be1b1a..570e04ea9063a9d67392400ef33ac0b7933cdd85 100644 --- a/server/publications/room.js +++ b/server/publications/room.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { roomTypes } from '../../app/utils'; import { hasPermission } from '../../app/authorization'; import { Rooms, Subscriptions } from '../../app/models'; import { settings } from '../../app/settings'; import { Notifications } from '../../app/notifications'; -import _ from 'underscore'; const fields = { _id: 1, diff --git a/server/publications/roomFiles.js b/server/publications/roomFiles.js index ff95417017007d9b333571babc5ada530f699aee..3f42581932062810d5e53091add6f34064eb6e67 100644 --- a/server/publications/roomFiles.js +++ b/server/publications/roomFiles.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { roomFiles } from '../lib/roomFiles'; Meteor.publish('roomFiles', function(rid, limit = 50) { diff --git a/server/publications/roomFilesWithSearchText.js b/server/publications/roomFilesWithSearchText.js index 7d0d975beaaf08cdfa931723d9560fce76f53384..f7f26d13a01adff93d17b442092cbd2dac85d132 100644 --- a/server/publications/roomFilesWithSearchText.js +++ b/server/publications/roomFilesWithSearchText.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { roomFiles } from '../lib/roomFiles'; Meteor.publish('roomFilesWithSearchText', function(rid, searchText, limit = 50) { diff --git a/server/publications/roomSubscriptionsByRole.js b/server/publications/roomSubscriptionsByRole.js index 8d6d56feab586ac25d0875a1727e0c6607938e51..17ed6963437520a38ea2c0ff3167342a841ae090 100644 --- a/server/publications/roomSubscriptionsByRole.js +++ b/server/publications/roomSubscriptionsByRole.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../app/authorization'; import { Subscriptions } from '../../app/models'; diff --git a/server/publications/spotlight.js b/server/publications/spotlight.js index faa3b5e93185c46370a3b3baf6596cca4d5e79a8..93e313facf6cdc8aed6f40c41534164cfaf93ba4 100644 --- a/server/publications/spotlight.js +++ b/server/publications/spotlight.js @@ -1,10 +1,11 @@ import { Meteor } from 'meteor/meteor'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; +import s from 'underscore.string'; + import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Rooms } from '../../app/models'; import { settings } from '../../app/settings'; import { roomTypes } from '../../app/utils'; -import s from 'underscore.string'; function fetchRooms(userId, rooms) { if (!settings.get('Store_Last_Message') || hasPermission(userId, 'preview-c-room')) { @@ -83,7 +84,8 @@ Meteor.methods({ } } else if (type.users === true && rid) { const subscriptions = Subscriptions.find({ - rid, 'u.username': { + rid, + 'u.username': { $regex: regex, $nin: [...usernames, Meteor.user().username], }, diff --git a/server/publications/subscription.js b/server/publications/subscription.js index 15b1bafce9322672fd8c37c25c6c4281cc827094..182de0eaf38ba372047c45807d7dd9424ad771e5 100644 --- a/server/publications/subscription.js +++ b/server/publications/subscription.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Subscriptions } from '../../app/models'; import { Notifications } from '../../app/notifications'; diff --git a/server/publications/userAutocomplete.js b/server/publications/userAutocomplete.js index 36f315f9aee3e174c3e4f5920555a48e2d2a25f3..e7911b4356b91fa22a8f96e3f90997fbdb5d4668 100644 --- a/server/publications/userAutocomplete.js +++ b/server/publications/userAutocomplete.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; -import { Users } from '../../app/models'; import _ from 'underscore'; +import { Users } from '../../app/models'; + Meteor.publish('userAutocomplete', function(selector) { if (!this.userId) { return this.ready(); diff --git a/server/publications/userChannels.js b/server/publications/userChannels.js index e67e106975c94d6ff8e2b50efbdee3dc033c58e9..ac7a3777857bdb0623fb7f961866ffc133235e94 100644 --- a/server/publications/userChannels.js +++ b/server/publications/userChannels.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../app/authorization'; import { Subscriptions } from '../../app/models'; diff --git a/server/publications/userData.js b/server/publications/userData.js index 200db4b3c01a05b0a28c2182e4c3a8e263d31540..c8438a98a481b108adb3a0a157a8d345adcd0c05 100644 --- a/server/publications/userData.js +++ b/server/publications/userData.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Users } from '../../app/models'; Meteor.publish('userData', function() { diff --git a/server/routes/avatar/room.js b/server/routes/avatar/room.js index ac27c73be82e9a6151a08e17fa474437648d1017..450e211e54c0e3106089f1198009d4d4568e6ec5 100644 --- a/server/routes/avatar/room.js +++ b/server/routes/avatar/room.js @@ -1,14 +1,14 @@ import { Meteor } from 'meteor/meteor'; -import { Rooms } from '../../../app/models/server'; -import { roomTypes } from '../../../app/utils'; - import { renderSVGLetters, serveAvatar, wasFallbackModified, setCacheAndDispositionHeaders, } from './utils'; +import { Rooms } from '../../../app/models/server'; +import { roomTypes } from '../../../app/utils'; + const getRoom = (roomId) => { const room = Rooms.findOneById(roomId, { fields: { t: 1, prid: 1, name: 1, fname: 1 } }); diff --git a/server/routes/avatar/user.js b/server/routes/avatar/user.js index 20ed189044c829f7fe9fa945189591e975f92ee0..ac93faca25631216f29a5ec17460a3830db5812e 100644 --- a/server/routes/avatar/user.js +++ b/server/routes/avatar/user.js @@ -1,15 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { FileUpload } from '../../../app/file-upload'; -import { settings } from '../../../app/settings/server'; -import { Users, Avatars } from '../../../app/models/server'; - import { renderSVGLetters, serveAvatar, wasFallbackModified, setCacheAndDispositionHeaders, } from './utils'; +import { FileUpload } from '../../../app/file-upload'; +import { settings } from '../../../app/settings/server'; +import { Users, Avatars } from '../../../app/models/server'; + // request /avatar/@name forces returning the svg export const userAvatar = Meteor.bindEnvironment(function(req, res) { @@ -74,5 +74,4 @@ export const userAvatar = Meteor.bindEnvironment(function(req, res) { } serveAvatar(svg, req.query.format, res); - return; }); diff --git a/server/routes/avatar/utils.js b/server/routes/avatar/utils.js index 0db31ea180fd522c4db07326e5a9e44e3158c4c2..9334b53de4aeae6ca7f6e6421e17192110e2bfb7 100644 --- a/server/routes/avatar/utils.js +++ b/server/routes/avatar/utils.js @@ -1,6 +1,5 @@ import sharp from 'sharp'; import { throttle } from 'underscore'; - import { Cookies } from 'meteor/ostrio:cookies'; import { Users } from '../../../app/models/server'; @@ -38,7 +37,7 @@ function isUserAuthenticated({ headers, query }) { let { rc_uid, rc_token } = query; if (!rc_uid && headers.cookie) { - rc_uid = cookie.get('rc_uid', headers.cookie) ; + rc_uid = cookie.get('rc_uid', headers.cookie); rc_token = cookie.get('rc_token', headers.cookie); } diff --git a/server/startup/cron.js b/server/startup/cron.js index 7149871300e553645214792aed4dfc8573c62b1a..4f7c178ad815ee462f403ea5db1eb2e2d849ad44 100644 --- a/server/startup/cron.js +++ b/server/startup/cron.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; +import { SyncedCron } from 'meteor/littledata:synced-cron'; + import { Logger } from '../../app/logger'; import { getWorkspaceAccessToken } from '../../app/cloud/server'; -import { SyncedCron } from 'meteor/littledata:synced-cron'; import { statistics } from '../../app/statistics'; import { settings } from '../../app/settings'; diff --git a/server/startup/initialData.js b/server/startup/initialData.js index 3c24330b58bc907422f94e2b780587f2e386b2d7..a204992ca0712fc13671edbe4be425a69a2f0df6 100644 --- a/server/startup/initialData.js +++ b/server/startup/initialData.js @@ -1,12 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import _ from 'underscore'; + import { RocketChatFile } from '../../app/file'; import { FileUpload } from '../../app/file-upload'; import { addUserRoles, getUsersInRole } from '../../app/authorization'; import { Users, Settings, Rooms } from '../../app/models'; import { settings } from '../../app/settings'; import { checkUsernameAvailability, addUserToDefaultChannels } from '../../app/lib'; -import _ from 'underscore'; Meteor.startup(function() { Meteor.defer(() => { @@ -60,7 +61,7 @@ Meteor.startup(function() { adminUser.name = process.env.ADMIN_NAME; } - console.log((`Name: ${ adminUser.name }`).green); + console.log(`Name: ${ adminUser.name }`.green); if (process.env.ADMIN_EMAIL) { const re = /^[^@].*@[^@]+$/i; @@ -72,7 +73,7 @@ Meteor.startup(function() { verified: true, }]; - console.log((`Email: ${ process.env.ADMIN_EMAIL }`).green); + console.log(`Email: ${ process.env.ADMIN_EMAIL }`.green); } else { console.log('Email provided already exists; Ignoring environment variables ADMIN_EMAIL'.red); } @@ -101,7 +102,7 @@ Meteor.startup(function() { } } - console.log((`Username: ${ adminUser.username }`).green); + console.log(`Username: ${ adminUser.username }`.green); adminUser.type = 'user'; @@ -109,7 +110,7 @@ Meteor.startup(function() { Accounts.setPassword(id, process.env.ADMIN_PASS); - console.log((`Password: ${ process.env.ADMIN_PASS }`).green); + console.log(`Password: ${ process.env.ADMIN_PASS }`.green); addUserRoles(id, 'admin'); } else { @@ -171,10 +172,10 @@ Meteor.startup(function() { type: 'user', }; - console.log((`Name: ${ adminUser.name }`).green); - console.log((`Email: ${ adminUser.emails[0].address }`).green); - console.log((`Username: ${ adminUser.username }`).green); - console.log((`Password: ${ adminUser._id }`).green); + console.log(`Name: ${ adminUser.name }`.green); + console.log(`Email: ${ adminUser.emails[0].address }`.green); + console.log(`Username: ${ adminUser.username }`.green); + console.log(`Password: ${ adminUser._id }`.green); if (Users.findOneByEmailAddress(adminUser.emails[0].address)) { throw new Meteor.Error(`Email ${ adminUser.emails[0].address } already exists`, 'Rocket.Chat can\'t run in test mode'); diff --git a/server/startup/migrations/v001.js b/server/startup/migrations/v001.js index 6dd91abeaf170002a3a35d3899f35b63aa66ce7b..f92b833c1ee7878519711591c80baec5980de157 100644 --- a/server/startup/migrations/v001.js +++ b/server/startup/migrations/v001.js @@ -16,9 +16,8 @@ Migrations.add({ const username = generateUsernameSuggestion(user); if (username && username.trim() !== '') { return Users.setUsername(user._id, username); - } else { - return console.log('User without username', JSON.stringify(user, null, ' ')); } + return console.log('User without username', JSON.stringify(user, null, ' ')); }); }, }); diff --git a/server/startup/migrations/v003.js b/server/startup/migrations/v003.js index 29b62da5352d3a91d869c0ccbd1e36efcffc3e16..e8de574f6ead58fc793edb36c7fa310a8efa6bd5 100644 --- a/server/startup/migrations/v003.js +++ b/server/startup/migrations/v003.js @@ -128,9 +128,8 @@ Migrations.add({ }, { multi: true, }); - } else { - return Rooms.update(room._id, update); } + return Rooms.update(room._id, update); }); console.log('Fixing ChatMessage uid'); diff --git a/server/startup/migrations/v004.js b/server/startup/migrations/v004.js index 81d6e02165a7348140687596321fb05990a1ac2d..911bd32e0c9c3305c37659e4e5939dbc9fc0450a 100644 --- a/server/startup/migrations/v004.js +++ b/server/startup/migrations/v004.js @@ -1,4 +1,5 @@ import { Random } from 'meteor/random'; + import { Migrations } from '../../../app/migrations'; import { Rooms, Subscriptions, Messages } from '../../../app/models'; @@ -45,7 +46,6 @@ Migrations.add({ console.log('Making room names unique'); Rooms.find().forEach(function(room) { - return Rooms.find({ name: room.name, _id: { diff --git a/server/startup/migrations/v005.js b/server/startup/migrations/v005.js index c823c7f5b4eab663fa7fb8e1eadeefd42d547a0a..bb6a4ab1efed5f74ce3e9f4861471e272b9d6fbc 100644 --- a/server/startup/migrations/v005.js +++ b/server/startup/migrations/v005.js @@ -40,11 +40,11 @@ Migrations.add({ }).forEach((user) => { let newUserName = user.emails[0].address.split('@')[0]; if (Users.findOneByUsernameIgnoringCase(newUserName)) { - newUserName = newUserName + Math.floor((Math.random() * 10) + 1); + newUserName += Math.floor((Math.random() * 10) + 1); if (Users.findOneByUsernameIgnoringCase(newUserName)) { - newUserName = newUserName + Math.floor((Math.random() * 10) + 1); + newUserName += Math.floor((Math.random() * 10) + 1); if (Users.findOneByUsernameIgnoringCase(newUserName)) { - newUserName = newUserName + Math.floor((Math.random() * 10) + 1); + newUserName += Math.floor((Math.random() * 10) + 1); } } } diff --git a/server/startup/migrations/v007.js b/server/startup/migrations/v007.js index c15edc15865323a87c0eb76b6cba08b90a8002ce..bed0fffa3ae39bb31769d33c60c7bd0fd2dfc5f6 100644 --- a/server/startup/migrations/v007.js +++ b/server/startup/migrations/v007.js @@ -1,7 +1,8 @@ +import _ from 'underscore'; + import { OEmbed } from '../../../app/oembed/server'; import { Migrations } from '../../../app/migrations'; import { Messages } from '../../../app/models'; -import _ from 'underscore'; Migrations.add({ version: 7, diff --git a/server/startup/migrations/v009.js b/server/startup/migrations/v009.js index 98574e9688e9881b79be47257b50d2666ec5a8af..f98905072dd76c19a0ac10f568e337ff25dc1070 100644 --- a/server/startup/migrations/v009.js +++ b/server/startup/migrations/v009.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; + import { Migrations } from '../../../app/migrations'; import { Rooms, Subscriptions, Messages, Settings, OEmbedCache } from '../../../app/models'; diff --git a/server/startup/migrations/v010.js b/server/startup/migrations/v010.js index b6b96a037c9db61adc37e7acc356d86b07c9f928..e4c26c261bbebea5d2cc2ac5bf74e939e74b48b3 100644 --- a/server/startup/migrations/v010.js +++ b/server/startup/migrations/v010.js @@ -1,6 +1,7 @@ +import _ from 'underscore'; + import { Migrations } from '../../../app/migrations'; import { Rooms } from '../../../app/models'; -import _ from 'underscore'; Migrations.add({ version: 10, diff --git a/server/startup/migrations/v012.js b/server/startup/migrations/v012.js index d048552a4dfd5162cff4f8b252fd47758b4cfedf..a535696eb06b22a0187cf20dfd79891324c44399 100644 --- a/server/startup/migrations/v012.js +++ b/server/startup/migrations/v012.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Migrations } from '../../../app/migrations'; import { Users } from '../../../app/models'; diff --git a/server/startup/migrations/v015.js b/server/startup/migrations/v015.js index 0410e14ededed62be9413efcba01c5ab9fab1ade..426542040292d04b15e911780cc029168dd7fa69 100644 --- a/server/startup/migrations/v015.js +++ b/server/startup/migrations/v015.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; + import { Migrations } from '../../../app/migrations'; import { Uploads, Messages } from '../../../app/models'; @@ -81,7 +82,7 @@ Migrations.add({ }], }).forEach((message) => { for (const urlsItem of message.urls) { - if (urlsItem.url === (`https://open.rocket.chat/cfs/files/Files/${ cfsRecord._id }`) || urlsItem.url === (`https://rocket.chat/cfs/files/Files/${ cfsRecord._id }`)) { + if (urlsItem.url === `https://open.rocket.chat/cfs/files/Files/${ cfsRecord._id }` || urlsItem.url === `https://rocket.chat/cfs/files/Files/${ cfsRecord._id }`) { urlsItem.url = Meteor.absoluteUrl() + url; if (urlsItem.parsedUrl && urlsItem.parsedUrl.pathname) { urlsItem.parsedUrl.pathname = `/${ url }`; diff --git a/server/startup/migrations/v018.js b/server/startup/migrations/v018.js index 5a8181a121baa16eb6810db456a7c0a8056aa72f..8da8cc5a0d1535880a53a6b7d54ec26594d399a4 100644 --- a/server/startup/migrations/v018.js +++ b/server/startup/migrations/v018.js @@ -1,4 +1,5 @@ import { ServiceConfiguration } from 'meteor/service-configuration'; + import { Migrations } from '../../../app/migrations'; import { Settings } from '../../../app/models'; diff --git a/server/startup/migrations/v019.js b/server/startup/migrations/v019.js index 0e5deed8a798f9341d13e3531497adede1a17e2a..5fe4c2d341b73292cec908a687cfac70536399fd 100644 --- a/server/startup/migrations/v019.js +++ b/server/startup/migrations/v019.js @@ -1,8 +1,9 @@ import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + import { Migrations } from '../../../app/migrations'; import { addUserRoles } from '../../../app/authorization'; import { Rooms, Subscriptions, Messages } from '../../../app/models'; -import _ from 'underscore'; Migrations.add({ version: 19, @@ -35,7 +36,7 @@ Migrations.add({ let usernames = _.pluck(admins, 'username').join(', '); - console.log((`Migrate ${ usernames } from admin field to 'admin' role`).green); + console.log(`Migrate ${ usernames } from admin field to 'admin' role`.green); // Add 'user' role to all users const users = Meteor.users.find().fetch(); @@ -44,7 +45,7 @@ Migrations.add({ }); usernames = _.pluck(users, 'username').join(', '); - console.log((`Add ${ usernames } to 'user' role`).green); + console.log(`Add ${ usernames } to 'user' role`.green); // Add 'moderator' role to channel/group creators const rooms = Rooms.findByTypes(['c', 'p']).fetch(); @@ -56,11 +57,10 @@ Migrations.add({ _id: creator, })) { return addUserRoles(creator, ['moderator'], room._id); - } else { - Subscriptions.removeByRoomId(room._id); - Messages.removeByRoomId(room._id); - return Rooms.removeById(room._id); } + Subscriptions.removeByRoomId(room._id); + Messages.removeByRoomId(room._id); + return Rooms.removeById(room._id); } }); }, diff --git a/server/startup/migrations/v027.js b/server/startup/migrations/v027.js index 49fd58e71c6ad7e26c49ecc4d5aed76f6a46ee62..19ab5fc4e52c104025f695c9423806f6b0de70be 100644 --- a/server/startup/migrations/v027.js +++ b/server/startup/migrations/v027.js @@ -4,7 +4,6 @@ import { Users, Roles } from '../../../app/models'; Migrations.add({ version: 27, up() { - Users.update({}, { $rename: { roles: '_roles', diff --git a/server/startup/migrations/v029.js b/server/startup/migrations/v029.js index 61038bf43961c4224c0df6e6acfcfb5d8a28ec01..0879bee544c2172afeca0cdc3369f83352ba8875 100644 --- a/server/startup/migrations/v029.js +++ b/server/startup/migrations/v029.js @@ -16,7 +16,7 @@ Migrations.add({ value: LDAP_Url, }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); } @@ -27,7 +27,7 @@ Migrations.add({ value: 'tls', }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); } @@ -38,7 +38,7 @@ Migrations.add({ value: LDAP_DN, }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); @@ -47,7 +47,7 @@ Migrations.add({ value: '', }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); @@ -56,7 +56,7 @@ Migrations.add({ value: '', }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); } @@ -67,7 +67,7 @@ Migrations.add({ value: LDAP_Bind_Search, }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); @@ -76,7 +76,7 @@ Migrations.add({ value: true, }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); } diff --git a/server/startup/migrations/v030.js b/server/startup/migrations/v030.js index c8a4d32d6a5514ba454d15bb56d9158fa5698b6a..d064c4a300b6620f3e59bc9c67204a4a80d98cea 100644 --- a/server/startup/migrations/v030.js +++ b/server/startup/migrations/v030.js @@ -37,7 +37,7 @@ Migrations.add({ value: servers, }, $setOnInsert: { - createdAt: new Date, + createdAt: new Date(), }, }); } diff --git a/server/startup/migrations/v036.js b/server/startup/migrations/v036.js index e73d28b5a26f467d01d459993b59387a4a45aa91..a4f97e7bf80f483c3c28c8120262bc54efa735e2 100644 --- a/server/startup/migrations/v036.js +++ b/server/startup/migrations/v036.js @@ -1,9 +1,11 @@ +import url from 'url'; + import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; + import { Migrations } from '../../../app/migrations'; import { Settings } from '../../../app/models'; import { RocketChatAssets } from '../../../app/assets'; -import url from 'url'; Migrations.add({ version: 36, diff --git a/server/startup/migrations/v037.js b/server/startup/migrations/v037.js index 8ce42c36482b01ded06bd99829a37d0b9f364dda..93cd5ea91719a987690ec95f9e43236fd70f1112 100644 --- a/server/startup/migrations/v037.js +++ b/server/startup/migrations/v037.js @@ -5,7 +5,6 @@ Migrations.add({ version: 37, up() { if (Permissions) { - // Find permission add-user (changed it to create-user) const addUserPermission = Permissions.findOne('add-user'); diff --git a/server/startup/migrations/v042.js b/server/startup/migrations/v042.js index 695788351740de2f7245f391973c9e345ccc0dbd..dc95a49cbae2d138b06f1e3b6c027a04efd35c6a 100644 --- a/server/startup/migrations/v042.js +++ b/server/startup/migrations/v042.js @@ -1,4 +1,5 @@ import { Mongo } from 'meteor/mongo'; + import { Migrations } from '../../../app/migrations'; import { settings } from '../../../app/settings'; import { RocketChatAssets } from '../../../app/assets'; diff --git a/server/startup/migrations/v045.js b/server/startup/migrations/v045.js index 806520def56965fa191cb84c2baaeb44a988cef6..478fdf2ef74bfc72412f100136e7ffa6b91ae336 100644 --- a/server/startup/migrations/v045.js +++ b/server/startup/migrations/v045.js @@ -5,14 +5,13 @@ import { settings } from '../../../app/settings'; Migrations.add({ version: 45, up() { - // finds the latest created visitor const lastVisitor = Users.find({ type: 'visitor' }, { fields: { username: 1 }, sort: { createdAt: -1 }, limit: 1 }).fetch(); if (lastVisitor && lastVisitor.length > 0) { const lastNumber = lastVisitor[0].username.replace(/^guest\-/, ''); - settings.add('Livechat_guest_count', (parseInt(lastNumber) + 1), { type: 'int', group: 'Livechat' }); + settings.add('Livechat_guest_count', parseInt(lastNumber) + 1, { type: 'int', group: 'Livechat' }); } }, }); diff --git a/server/startup/migrations/v048.js b/server/startup/migrations/v048.js index 50e624e8ee32bce2ca8b80bcf7d019af827ac273..b8c1334a78d18ba8eef8108fc2f49f48fc5e3598 100644 --- a/server/startup/migrations/v048.js +++ b/server/startup/migrations/v048.js @@ -5,7 +5,6 @@ Migrations.add({ version: 48, up() { if (Settings) { - const RocketBot_Enabled = Settings.findOne({ _id: 'RocketBot_Enabled', }); @@ -37,7 +36,6 @@ Migrations.add({ }, }); } - } }, }); diff --git a/server/startup/migrations/v049.js b/server/startup/migrations/v049.js index 802153d692ca7bcf5c8c99093d028c428ffe9232..a30d5748b0e00ee9fb81746814118a390c5f3d22 100644 --- a/server/startup/migrations/v049.js +++ b/server/startup/migrations/v049.js @@ -4,7 +4,6 @@ import { Rooms, Subscriptions, Settings } from '../../../app/models'; Migrations.add({ version: 49, up() { - let count = 1; Rooms.find({ t: 'l' }, { sort: { ts: 1 }, fields: { _id: 1 } }).forEach(function(room) { diff --git a/server/startup/migrations/v055.js b/server/startup/migrations/v055.js index 51b57b203c995a2dd488470953b58a3b0078c878..c7bc9cdb719571cd40ac42c489bb35f82898ef5b 100644 --- a/server/startup/migrations/v055.js +++ b/server/startup/migrations/v055.js @@ -1,6 +1,7 @@ +import s from 'underscore.string'; + import { Migrations } from '../../../app/migrations'; import { Rooms, Messages } from '../../../app/models'; -import s from 'underscore.string'; Migrations.add({ version: 55, diff --git a/server/startup/migrations/v060.js b/server/startup/migrations/v060.js index d9be7e5a7c525b6498bb260b2445bda7d4cbe0d5..2daff7bc3c59cf7c8d880570edf36d7f599cb6cc 100644 --- a/server/startup/migrations/v060.js +++ b/server/startup/migrations/v060.js @@ -1,6 +1,7 @@ +import _ from 'underscore'; + import { Migrations } from '../../../app/migrations'; import { Users, Subscriptions } from '../../../app/models'; -import _ from 'underscore'; Migrations.add({ version: 60, diff --git a/server/startup/migrations/v063.js b/server/startup/migrations/v063.js index 4b5b4bcc79c735aa08561082628130bce5d72fd1..659e88dcba95063ae28d8d9df02494b26935019d 100644 --- a/server/startup/migrations/v063.js +++ b/server/startup/migrations/v063.js @@ -4,8 +4,8 @@ import { Settings } from '../../../app/models'; Migrations.add({ version: 63, up() { - const forward = Settings.findOne({ _id:'Livechat_forward_open_chats' }); - const timeout = Settings.findOne({ _id:'Livechat_forward_open_chats_timeout' }); + const forward = Settings.findOne({ _id: 'Livechat_forward_open_chats' }); + const timeout = Settings.findOne({ _id: 'Livechat_forward_open_chats_timeout' }); if (forward && forward.value) { Settings.upsert({ _id: 'Livechat_agent_leave_action' }, { diff --git a/server/startup/migrations/v064.js b/server/startup/migrations/v064.js index b5d73f096dba6f7347797a8add1be878fe5d1765..3016bdf6764cb1e52b28c1636072e2920854b42a 100644 --- a/server/startup/migrations/v064.js +++ b/server/startup/migrations/v064.js @@ -1,6 +1,7 @@ +import s from 'underscore.string'; + import { Migrations } from '../../../app/migrations'; import { Messages } from '../../../app/models'; -import s from 'underscore.string'; Migrations.add({ version: 64, diff --git a/server/startup/migrations/v065.js b/server/startup/migrations/v065.js index 96b5aea12e7bce5fa277ef470b97c96a12470e89..afa87af46dc3363035d4059116b270ad08e85a9a 100644 --- a/server/startup/migrations/v065.js +++ b/server/startup/migrations/v065.js @@ -5,7 +5,6 @@ Migrations.add({ version: 65, up() { if (Settings) { - // New color settings - start with old settings as defaults const replace1 = Settings.findOne({ _id: 'theme-color-quaternary-font-color' }); const replace2 = Settings.findOne({ _id: 'theme-color-input-font-color' }); diff --git a/server/startup/migrations/v066.js b/server/startup/migrations/v066.js index d111515a8a5d8cef2715dac487482a8922c15d12..d07f46a0d83cebe0584e73a9e7c8a706c2f1baa1 100644 --- a/server/startup/migrations/v066.js +++ b/server/startup/migrations/v066.js @@ -5,7 +5,6 @@ Migrations.add({ version: 66, up() { if (Settings) { - // New color settings - start with old settings as defaults const replace1 = Settings.findOne({ _id: 'theme-color-tertiary-background-color' }); if (replace1) { diff --git a/server/startup/migrations/v068.js b/server/startup/migrations/v068.js index 0eaa26b0c54bcb794df9a22ea76eba204b3320f0..4d55e3520356dddc6793fc654e9bcaba8b33a616 100644 --- a/server/startup/migrations/v068.js +++ b/server/startup/migrations/v068.js @@ -17,4 +17,3 @@ Migrations.add({ Settings.remove({ _id: 'GoogleSiteVerification_id' }); }, }); - diff --git a/server/startup/migrations/v075.js b/server/startup/migrations/v075.js index 25b88b9cebd1a6b2fb4f1a85ea8ff0610fc894e7..d6bd48a95cb81a44f440fa7d762c0bc39a07f3f3 100644 --- a/server/startup/migrations/v075.js +++ b/server/startup/migrations/v075.js @@ -1,6 +1,7 @@ -import { Migrations } from '../../../app/migrations'; import { ServiceConfiguration } from 'meteor/service-configuration'; +import { Migrations } from '../../../app/migrations'; + Migrations.add({ version: 71.1, up() { @@ -14,4 +15,3 @@ Migrations.add({ ServiceConfiguration.configurations.remove({}); }, }); - diff --git a/server/startup/migrations/v077.js b/server/startup/migrations/v077.js index b9cafc473ee1f4ec26a4a3d0d006f960aacbdbc0..14b57c5e5ad5d5add859a893c7faeceaa1cc6098 100644 --- a/server/startup/migrations/v077.js +++ b/server/startup/migrations/v077.js @@ -25,4 +25,3 @@ Migrations.add({ } }, }); - diff --git a/server/startup/migrations/v084.js b/server/startup/migrations/v084.js index e36683c8847734ce0edecfb51140e50544476d54..29f8b87624ef5a964001e35ee3c23b23113abad0 100644 --- a/server/startup/migrations/v084.js +++ b/server/startup/migrations/v084.js @@ -5,7 +5,6 @@ Migrations.add({ version: 84, up() { if (Permissions) { - // Update permission name, copy values from old name const oldPermission = Permissions.findOne('add-user-to-room'); if (oldPermission && oldPermission.roles.length) { @@ -17,7 +16,6 @@ Migrations.add({ down() { if (Permissions) { - // Revert permission name, copy values from updated name const newPermission = Permissions.findOne('add-user-to-joined-room'); if (newPermission && newPermission.roles.length) { diff --git a/server/startup/migrations/v093.js b/server/startup/migrations/v093.js index 6a67b1b2ccd54c82ddadc375101eb0c8f4a1562c..c872be47c4d76c3b6b8c77bcf9e7ce50e4788ad4 100644 --- a/server/startup/migrations/v093.js +++ b/server/startup/migrations/v093.js @@ -4,7 +4,6 @@ import { Settings, Permissions } from '../../../app/models'; Migrations.add({ version: 93, up() { - if (Settings) { const setting = Settings.findOne({ _id: 'Accounts_AllowAnonymousAccess' }); if (setting && setting.value === true) { diff --git a/server/startup/migrations/v099.js b/server/startup/migrations/v099.js index df216ca8626f6a617bc4d1abe289c6e9f50cb327..acf9dec63b828ddfe507f1cbb99d7aa623e88a90 100644 --- a/server/startup/migrations/v099.js +++ b/server/startup/migrations/v099.js @@ -1,13 +1,15 @@ +import fs from 'fs'; +import path from 'path'; + import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Mongo } from 'meteor/mongo'; + import { RocketChatFile } from '../../../app/file'; import { SystemLogger } from '../../../app/logger'; import { FileUpload } from '../../../app/file-upload'; import { Migrations } from '../../../app/migrations'; import { Uploads, Settings, Users } from '../../../app/models'; -import fs from 'fs'; -import path from 'path'; function log(...args) { console.log('[AVATAR]', ...args); diff --git a/server/startup/migrations/v100.js b/server/startup/migrations/v100.js index 8d7244fbfc766923991a05fb9b0076abe4c910d2..b59a4fd91dae152292f741e18b7d7e42433bbafc 100644 --- a/server/startup/migrations/v100.js +++ b/server/startup/migrations/v100.js @@ -4,6 +4,6 @@ import { Subscriptions } from '../../../app/models'; Migrations.add({ version: 100, up() { - Subscriptions.update({ audioNotification:{ $exists:1 } }, { $rename: { audioNotification: 'audioNotifications' } }); + Subscriptions.update({ audioNotification: { $exists: 1 } }, { $rename: { audioNotification: 'audioNotifications' } }); }, }); diff --git a/server/startup/migrations/v101.js b/server/startup/migrations/v101.js index 7606bfc9ed622d62bb9576e8ee1d1048c065d862..8daa7da3d2b20c8e93f87875e3c9eeec2b30c9e4 100644 --- a/server/startup/migrations/v101.js +++ b/server/startup/migrations/v101.js @@ -4,6 +4,6 @@ import { Subscriptions } from '../../../app/models'; Migrations.add({ version: 101, up() { - Subscriptions.update({ lastActivity:{ $exists:1 } }, { $unset: { lastActivity: '' } }, { multi: true }); + Subscriptions.update({ lastActivity: { $exists: 1 } }, { $unset: { lastActivity: '' } }, { multi: true }); }, }); diff --git a/server/startup/migrations/v103.js b/server/startup/migrations/v103.js index 9fc8740e9effcdfd4644194cb9fb9f5bdf599d80..5e88205a3f6241a48fed09fb8aac79e239817f9e 100644 --- a/server/startup/migrations/v103.js +++ b/server/startup/migrations/v103.js @@ -76,7 +76,7 @@ Migrations.add({ color.value = newvariables[color.value.replace('@', '')]; } const id = `theme-color-${ key }`; - Settings.update({ _id: id }, { $set: { value : color.value, editor: /^#.+/.test(color.value) ? 'color' : 'expression' } }); + Settings.update({ _id: id }, { $set: { value: color.value, editor: /^#.+/.test(color.value) ? 'color' : 'expression' } }); if (key === 'rc-color-primary') { Settings.update({ _id: 'theme-color-rc-color-primary-darkest' }, { $set: { editor: 'color', value: lightenDarkenColor(color.value, -16) } }); Settings.update({ _id: 'theme-color-rc-color-primary-dark' }, { $set: { editor: 'color', value: lightenDarkenColor(color.value, 18) } }); diff --git a/server/startup/migrations/v104.js b/server/startup/migrations/v104.js index 011027cb9266916b9ca129261946de345bb465d2..fbecd5acd8f810801471efb6a92265d8c9be20f6 100644 --- a/server/startup/migrations/v104.js +++ b/server/startup/migrations/v104.js @@ -4,12 +4,12 @@ import { Settings } from '../../../app/models'; Migrations.add({ version: 104, up() { - if ((Settings.findOne({ _id: 'theme-color-rc-color-primary' }) || {}).value === '#04436A' && - (Settings.findOne({ _id: 'theme-color-rc-color-primary-darkest' }) || {}).value === '#335a' && - (Settings.findOne({ _id: 'theme-color-rc-color-primary-dark' }) || {}).value === '#16557c' && - (Settings.findOne({ _id: 'theme-color-rc-color-primary-light' }) || {}).value === '#72b1d8' && - (Settings.findOne({ _id: 'theme-color-rc-color-primary-light-medium' }) || {}).value === '#a0dfff' && - (Settings.findOne({ _id: 'theme-color-rc-color-primary-lightest' }) || {}).value === '#ccffff' + if ((Settings.findOne({ _id: 'theme-color-rc-color-primary' }) || {}).value === '#04436A' + && (Settings.findOne({ _id: 'theme-color-rc-color-primary-darkest' }) || {}).value === '#335a' + && (Settings.findOne({ _id: 'theme-color-rc-color-primary-dark' }) || {}).value === '#16557c' + && (Settings.findOne({ _id: 'theme-color-rc-color-primary-light' }) || {}).value === '#72b1d8' + && (Settings.findOne({ _id: 'theme-color-rc-color-primary-light-medium' }) || {}).value === '#a0dfff' + && (Settings.findOne({ _id: 'theme-color-rc-color-primary-lightest' }) || {}).value === '#ccffff' ) { Settings.update({ _id: 'theme-color-rc-color-primary' }, { $set: { editor: 'expression', value: 'color-dark' } }); Settings.update({ _id: 'theme-color-rc-color-primary-darkest' }, { $set: { editor: 'expression', value: 'color-darkest' } }); diff --git a/server/startup/migrations/v106.js b/server/startup/migrations/v106.js index a88641621deef39246796e4e94ca651413f53c0b..05f102748204764a6fae4a678e6760d5b09251b2 100644 --- a/server/startup/migrations/v106.js +++ b/server/startup/migrations/v106.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { LivechatVisitors } from '../../../app/models'; import { Migrations } from '../../../app/migrations'; diff --git a/server/startup/migrations/v107.js b/server/startup/migrations/v107.js index 657f746b390f7a5ee5b85fa0570559803ff0219d..fd1ec51a14c4ae424aa0a5df6cfde1ac66a0341f 100644 --- a/server/startup/migrations/v107.js +++ b/server/startup/migrations/v107.js @@ -4,8 +4,6 @@ import { Users } from '../../../app/models'; Migrations.add({ version: 107, up() { - - Users.update({ 'preferences.roomsListExhibitionMode': 'activity', }, { @@ -26,7 +24,7 @@ Migrations.add({ }, $set: { 'preferences.sidebarSortby': 'alphabetical', - 'preferences.sidebarShowUnread' : true, + 'preferences.sidebarShowUnread': true, 'preferences.sidebarShowFavorites': true, }, }); diff --git a/server/startup/migrations/v113.js b/server/startup/migrations/v113.js index ef4241cab125c2b48190a1f4e5211274a8db1c84..cc83895cea3fe55b17d734bba6a84fc84d053be2 100644 --- a/server/startup/migrations/v113.js +++ b/server/startup/migrations/v113.js @@ -12,7 +12,7 @@ Migrations.add({ const filesToUpdate = Uploads.find(fileQuery); filesToUpdate.forEach((file) => { const messageQuery = { - 'file._id' : file._id, + 'file._id': file._id, }; const message = Messages.findOne(messageQuery); if (message) { diff --git a/server/startup/migrations/v118.js b/server/startup/migrations/v118.js index a919d7aeba3d4f3976fb543341595a5d209de39c..9ba4366bafd6b54795abcc25adf32fd75410d5d2 100644 --- a/server/startup/migrations/v118.js +++ b/server/startup/migrations/v118.js @@ -12,7 +12,7 @@ Migrations.add({ emailNotifications: 'mentions', }, }, { - multi:true, + multi: true, }); Users.update({ @@ -22,7 +22,7 @@ Migrations.add({ 'settings.preferences.emailNotificationMode': 'nothing', }, }, { - multi:true, + multi: true, }); Users.update({ @@ -32,7 +32,7 @@ Migrations.add({ 'settings.preferences.emailNotificationMode': 'mentions', }, }, { - multi:true, + multi: true, }); Settings.update({ diff --git a/server/startup/migrations/v120.js b/server/startup/migrations/v120.js index 37944478374712ea3ac409e5b22cf2e37c49e9cd..1e88c3fb3912034c810725d6aff30f5e5dd9f81f 100644 --- a/server/startup/migrations/v120.js +++ b/server/startup/migrations/v120.js @@ -24,7 +24,7 @@ Migrations.add({ }, $set: { 'settings.preferences.sidebarSortby': 'alphabetical', - 'settings.preferences.sidebarShowUnread' : true, + 'settings.preferences.sidebarShowUnread': true, 'settings.preferences.sidebarShowFavorites': true, }, }); diff --git a/server/startup/migrations/v121.js b/server/startup/migrations/v121.js index 05efa66a12cb9edc6a2d3a5b2645e84767eb7d5d..0d0da59f899af8d6e5ce7e25f5cd786c1376e7ad 100644 --- a/server/startup/migrations/v121.js +++ b/server/startup/migrations/v121.js @@ -4,7 +4,6 @@ import { Users, Subscriptions } from '../../../app/models'; Migrations.add({ version: 121, up() { - // set user preferences on subscriptions Users.find({ $or: [ diff --git a/server/startup/migrations/v123.js b/server/startup/migrations/v123.js index 8c7ee9e7037c70faa51e944b96aef8e261a26544..764f609b72b82aaf53a6910e85caf107037d331f 100644 --- a/server/startup/migrations/v123.js +++ b/server/startup/migrations/v123.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { Migrations } from '../../../app/migrations'; import { Messages, Rooms, LivechatPageVisited } from '../../../app/models'; @@ -37,11 +38,11 @@ async function migrateHistory(total, current) { ts: item.ts, msg: `${ item.page.title } - ${ item.page.location.href }`, u: { - _id : 'rocket.cat', - username : 'rocket.cat', + _id: 'rocket.cat', + username: 'rocket.cat', }, - groupable : false, - navigation : { + groupable: false, + navigation: { page: item.page, token: item.token, }, diff --git a/server/startup/migrations/v127.js b/server/startup/migrations/v127.js index 99b676b2c1ffb5d974c1fefc22206c66d11767c1..1e2f3cc0646996a475b4a43d4cebaf73c8f45189 100644 --- a/server/startup/migrations/v127.js +++ b/server/startup/migrations/v127.js @@ -5,7 +5,6 @@ Migrations.add({ version: 127, up() { if (Permissions) { - const newPermission = Permissions.findOne('view-livechat-manager'); if (newPermission && newPermission.roles.length) { Permissions.upsert({ _id: 'remove-closed-livechat-rooms' }, { $set: { roles: newPermission.roles } }); @@ -15,7 +14,6 @@ Migrations.add({ down() { if (Permissions) { - // Revert permission Permissions.remove({ _id: 'remove-closed-livechat-rooms' }); } diff --git a/server/startup/migrations/v130.js b/server/startup/migrations/v130.js index 83226bf73557d113e788bbff426cd31e3c09bb9b..f64b845b0a471f8b5206fc08a7fa2f84cb3e598d 100644 --- a/server/startup/migrations/v130.js +++ b/server/startup/migrations/v130.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import Future from 'fibers/future'; + import { Migrations } from '../../../app/migrations'; import { Rooms, Subscriptions, Users } from '../../../app/models'; diff --git a/server/startup/migrations/v131.js b/server/startup/migrations/v131.js index 3cd2bcd3f5c4ff52a16c2f953e95c0c991db423f..0d047991e8f697d77525103b8b6b9ea975313c71 100644 --- a/server/startup/migrations/v131.js +++ b/server/startup/migrations/v131.js @@ -6,7 +6,7 @@ Migrations.add({ up() { const userOptions = { fields: { - _id : 1, + _id: 1, }, }; @@ -14,16 +14,16 @@ Migrations.add({ const userIds = users.map((user) => user._id); const subscriptionQuery = { - 'u._id' : { - $nin : userIds, + 'u._id': { + $nin: userIds, }, }; const subscriptionOptions = { - fields : { - _id : 1, - rid : 1, - 'u._id' : 1, + fields: { + _id: 1, + rid: 1, + 'u._id': 1, }, }; diff --git a/server/startup/migrations/v134.js b/server/startup/migrations/v134.js index 11ae56f0f1d7844fcd572a81b565d5b6fe8641ab..ab44912154330a2d971556170d82b6bf7a295b98 100644 --- a/server/startup/migrations/v134.js +++ b/server/startup/migrations/v134.js @@ -61,8 +61,6 @@ Migrations.add({ if (setting.value === oldValue) { Settings.updateValueById(_id, setting.packageValue); } - }); - }, }); diff --git a/server/startup/migrations/v139.js b/server/startup/migrations/v139.js index bb8a984902df41088d45393c51d182a0e12c90a4..58cd2cfeafb9ad0e084cb18eca0bb7c8b818d6e2 100644 --- a/server/startup/migrations/v139.js +++ b/server/startup/migrations/v139.js @@ -1,5 +1,4 @@ import { Migrations } from '../../../app/migrations/server'; - import { Messages, Permissions, Rooms, Settings } from '../../../app/models/server'; const getField = (msg, fieldType, fieldName) => { diff --git a/server/startup/migrations/v140.js b/server/startup/migrations/v140.js index efa35de80778b9c2edb79e6f6167e5caa9b930ff..f21166d7ac105835e6c10374ba22289599102a99 100644 --- a/server/startup/migrations/v140.js +++ b/server/startup/migrations/v140.js @@ -1,5 +1,4 @@ import { Migrations } from '../../../app/migrations/server'; - import { Messages, Rooms } from '../../../app/models/server'; Migrations.add({ diff --git a/server/startup/migrations/xrun.js b/server/startup/migrations/xrun.js index 609b2caaa2c7f21f1bb1d4b8b146745e6a771179..7489bacc3ca31a511358bce1b95ba51ca1a1912d 100644 --- a/server/startup/migrations/xrun.js +++ b/server/startup/migrations/xrun.js @@ -1,4 +1,5 @@ import _ from 'underscore'; + import { Migrations } from '../../../app/migrations'; if (Migrations.getVersion() !== 0) { diff --git a/server/startup/presence.js b/server/startup/presence.js index e57abac7f49d6bbdce7c9a1facfbbe1d0164ae07..10abc5b7a7839df397fda720a57ab1898c6e0d1d 100644 --- a/server/startup/presence.js +++ b/server/startup/presence.js @@ -17,8 +17,8 @@ Meteor.startup(function() { UserPresence.start(); - const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' || - !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); + const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' + || !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); if (startMonitor) { UserPresenceMonitor.start(); } diff --git a/server/startup/serverRunning.js b/server/startup/serverRunning.js index bed6084a791ce4910414d05dff34e68f95def8da..31174413b13c40aeddfebed896a50a26cf5999e7 100644 --- a/server/startup/serverRunning.js +++ b/server/startup/serverRunning.js @@ -1,10 +1,12 @@ +import fs from 'fs'; +import path from 'path'; + +import semver from 'semver'; import { Meteor } from 'meteor/meteor'; + import { SystemLogger } from '../../app/logger'; import { settings } from '../../app/settings'; import { Info, getMongoInfo } from '../../app/utils'; -import fs from 'fs'; -import path from 'path'; -import semver from 'semver'; Meteor.startup(function() { const { oplogEnabled, mongoVersion, mongoStorageEngine } = getMongoInfo(); diff --git a/server/stream/messages.js b/server/stream/messages.js index 205ed8f978f27ef8de06234a6484220b304cd1b7..d04f155a9e3b42c838cadde46bd24cf5b20b4e51 100644 --- a/server/stream/messages.js +++ b/server/stream/messages.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; + import { hasPermission } from '../../app/authorization'; import { settings } from '../../app/settings'; import { Subscriptions, Users, Messages } from '../../app/models'; @@ -22,7 +23,6 @@ msgStream.allowRead(function(eventName, args) { return true; } catch (error) { - /* error*/ return false; } @@ -43,7 +43,6 @@ msgStream.allowEmit(MY_MESSAGE, function(eventName, msg) { roomType: room.t, roomName: room.name, }; - } catch (error) { /* error*/ return false; diff --git a/server/stream/streamBroadcast.js b/server/stream/streamBroadcast.js index 9d379b3d066e12aa34841e69ee65a8bb5b93fd86..f5a2cb0c734c0e2d7c3cd713a991bd823b8cbeec 100644 --- a/server/stream/streamBroadcast.js +++ b/server/stream/streamBroadcast.js @@ -4,6 +4,7 @@ import { check } from 'meteor/check'; import _ from 'underscore'; import { DDP } from 'meteor/ddp'; import { DDPCommon } from 'meteor/ddp-common'; + import { Logger, LoggerManager } from '../../app/logger'; import { hasPermission } from '../../app/authorization'; import { settings } from '../../app/settings'; @@ -95,7 +96,7 @@ function startMatrixBroadcast() { connections[instance].instanceRecord = record; connections[instance].instanceId = record._id; - return connections[instance].onReconnect = function() { + connections[instance].onReconnect = function() { return authorizeConnection(instance); }; }, @@ -133,7 +134,7 @@ Meteor.methods({ _id: remoteId, }; - if (selfId === InstanceStatus.id() && remoteId !== InstanceStatus.id() && (InstanceStatus.getCollection().findOne(query))) { + if (selfId === InstanceStatus.id() && remoteId !== InstanceStatus.id() && InstanceStatus.getCollection().findOne(query)) { this.connection.broadcastAuth = true; } @@ -225,9 +226,8 @@ function startStreamBroadcast() { if (value && value.trim() !== '') { return startStreamCastBroadcast(value); - } else { - return startMatrixBroadcast(); } + return startMatrixBroadcast(); }); function broadcast(streamName, eventName, args/* , userId*/) { @@ -245,18 +245,18 @@ function startStreamBroadcast() { switch (response) { case 'self-not-authorized': - logger.stream.error((`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } to self is not authorized`).red); + logger.stream.error(`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } to self is not authorized`.red); logger.stream.debug(' -> connection authorized'.red, connection.broadcastAuth); logger.stream.debug(' -> connection status'.red, connection.status()); return logger.stream.debug(' -> arguments'.red, eventName, args); case 'not-authorized': - logger.stream.error((`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } not authorized`).red); + logger.stream.error(`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } not authorized`.red); logger.stream.debug(' -> connection authorized'.red, connection.broadcastAuth); logger.stream.debug(' -> connection status'.red, connection.status()); logger.stream.debug(' -> arguments'.red, eventName, args); return authorizeConnection(instance); case 'stream-not-exists': - logger.stream.error((`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } does not exist`).red); + logger.stream.error(`Stream broadcast from '${ fromInstance }' to '${ connection._stream.endpoint }' with name ${ streamName } does not exist`.red); logger.stream.debug(' -> connection authorized'.red, connection.broadcastAuth); logger.stream.debug(' -> connection status'.red, connection.status()); return logger.stream.debug(' -> arguments'.red, eventName, args); diff --git a/tests/data/api-data.js b/tests/data/api-data.js index 92773d95ce54b48afe5b0e2053b204bea497937d..02fb2a52f28008196b7f443a5d686bd8a3026c10 100644 --- a/tests/data/api-data.js +++ b/tests/data/api-data.js @@ -1,7 +1,9 @@ +import supertest from 'supertest'; + import { publicChannelName, privateChannelName } from './channel.js'; import { roleNameUsers, roleNameSubscriptions, roleScopeUsers, roleScopeSubscriptions, roleDescription } from './role.js'; import { username, email, adminUsername, adminPassword } from './user.js'; -import supertest from 'supertest'; + export const request = supertest('http://localhost:3000'); const prefix = '/api/v1/'; @@ -23,8 +25,8 @@ export const message = {}; export const directMessage = {}; export const integration = {}; export const credentials = { - ['X-Auth-Token']: undefined, - ['X-User-Id']: undefined, + 'X-Auth-Token': undefined, + 'X-User-Id': undefined, }; export const login = { user: adminUsername, @@ -54,4 +56,3 @@ export function getCredentials(done = function() {}) { }) .end(done); } - diff --git a/tests/data/rooms.helper.js b/tests/data/rooms.helper.js index f3213591d6e34a42b7bcaceb389cfcdfd8da55a9..9c995969fbf70c7a01082731a76c2bef21d1fbdf 100644 --- a/tests/data/rooms.helper.js +++ b/tests/data/rooms.helper.js @@ -13,8 +13,8 @@ export const createRoom = ({ name, type, username }) => { d: 'im.create', }; const params = type === 'd' - ? ({ username }) - : ({ name }); + ? { username } + : { name }; return request.post(api(endpoints[type])) .set(credentials) diff --git a/tests/end-to-end/api/00-miscellaneous.js b/tests/end-to-end/api/00-miscellaneous.js index 1dba5d0a756c7898aea9bd07f661bfb63f581bb8..aa27be53a9af37e42462b20be6b40a83a4e0701f 100644 --- a/tests/end-to-end/api/00-miscellaneous.js +++ b/tests/end-to-end/api/00-miscellaneous.js @@ -213,9 +213,9 @@ describe('miscellaneous', function() { text: testChannel.name, type: 'channels', }), - sort: JSON.stringify(({ + sort: JSON.stringify({ name: 1, - })), + }), }) .expect('Content-Type', 'application/json') .expect(200) @@ -256,10 +256,10 @@ describe('miscellaneous', function() { text: testChannel.name, type: 'channels', }), - sort: JSON.stringify(({ + sort: JSON.stringify({ name: 1, test: 1, - })), + }), }) .expect('Content-Type', 'application/json') .expect(400) diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index 285334a6c6388d6a076c9c05f0d115bdb4b6e34c..10a6c00dcd87c30628b0d9c1603d7e6ba44f2642 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -1,4 +1,5 @@ import crypto from 'crypto'; + import { getCredentials, api, @@ -324,7 +325,6 @@ describe('[Users]', function() { userCredentials['X-User-Id'] = res.body.data.userId; }) .end(done); - }); before((done) => { updatePermission('edit-other-user-info', ['admin', 'user']).then(done); @@ -966,8 +966,8 @@ describe('[Users]', function() { .set(credentials) .send({ username: user.username }) .expect('Content-Type', 'application/json') - .end((err, res) => (err ? done() : - request.get(api('me')) + .end((err, res) => (err ? done() + : request.get(api('me')) .set({ 'X-Auth-Token': `${ res.body.data.authToken }`, 'X-User-Id': res.body.data.userId }) .expect(200) .expect((res) => { @@ -1112,7 +1112,6 @@ describe('[Users]', function() { }) .end(done); }); - }); describe('[/users.deleteOwnAccount]', () => { @@ -1177,7 +1176,6 @@ describe('[Users]', function() { }) .end(done); }); - }); describe('[/users.delete]', () => { @@ -1464,7 +1462,6 @@ describe('[Users]', function() { userCredentials['X-User-Id'] = res.body.data.userId; }) .end(done); - }); before((done) => { updatePermission('edit-other-user-active-status', ['admin', 'user']).then(done); diff --git a/tests/end-to-end/api/02-channels.js b/tests/end-to-end/api/02-channels.js index 40d3a5925fe10c8aa1a9c986a7ed96695c53e936..d5eeee2dacc336cfa76e494ce4caf0ae4bcfe7d1 100644 --- a/tests/end-to-end/api/02-channels.js +++ b/tests/end-to-end/api/02-channels.js @@ -620,7 +620,7 @@ describe('[Channels]', function() { describe('/channels.setCustomFields:', () => { let cfchannel; it('create channel with customFields', (done) => { - const customFields = { field0:'value0' }; + const customFields = { field0: 'value0' }; request.post(api('channels.create')) .set(credentials) .send({ @@ -647,7 +647,7 @@ describe('[Channels]', function() { .end(done); }); it('change customFields', async (done) => { - const customFields = { field9:'value9' }; + const customFields = { field9: 'value9' }; request.post(api('channels.setCustomFields')) .set(credentials) .send({ @@ -705,7 +705,7 @@ describe('[Channels]', function() { }); }); it('set customFields with one nested field', async (done) => { - const customFields = { field1:'value1' }; + const customFields = { field1: 'value1' }; request.post(api('channels.setCustomFields')) .set(credentials) .send({ @@ -724,7 +724,7 @@ describe('[Channels]', function() { .end(done); }); it('set customFields with multiple nested fields', async (done) => { - const customFields = { field2:'value2', field3:'value3', field4:'value4' }; + const customFields = { field2: 'value2', field3: 'value3', field4: 'value4' }; request.post(api('channels.setCustomFields')) .set(credentials) diff --git a/tests/end-to-end/api/03-groups.js b/tests/end-to-end/api/03-groups.js index 0bc80ac621af908ea2619a47a24100e51e3063e3..d32cf2ff32aaef1e78208fce37d65f92ed762e66 100644 --- a/tests/end-to-end/api/03-groups.js +++ b/tests/end-to-end/api/03-groups.js @@ -602,7 +602,7 @@ describe('[Groups]', function() { describe('/groups.setCustomFields:', () => { let cfchannel; it('create group with customFields', (done) => { - const customFields = { field0:'value0' }; + const customFields = { field0: 'value0' }; request.post(api('groups.create')) .set(credentials) .send({ @@ -629,7 +629,7 @@ describe('[Groups]', function() { .end(done); }); it('change customFields', async (done) => { - const customFields = { field9:'value9' }; + const customFields = { field9: 'value9' }; request.post(api('groups.setCustomFields')) .set(credentials) .send({ @@ -687,7 +687,7 @@ describe('[Groups]', function() { }); }); it('set customFields with one nested field', async (done) => { - const customFields = { field1:'value1' }; + const customFields = { field1: 'value1' }; request.post(api('groups.setCustomFields')) .set(credentials) .send({ @@ -706,7 +706,7 @@ describe('[Groups]', function() { .end(done); }); it('set customFields with multiple nested fields', async (done) => { - const customFields = { field2:'value2', field3:'value3', field4:'value4' }; + const customFields = { field2: 'value2', field3: 'value3', field4: 'value4' }; request.post(api('groups.setCustomFields')) .set(credentials) diff --git a/tests/end-to-end/api/05-chat.js b/tests/end-to-end/api/05-chat.js index 65eda7a4bd2275429264e3073d79ac64f45e1efe..04e8f9ea7c973c6d1af89c93fb5cb53a3a4addd4 100644 --- a/tests/end-to-end/api/05-chat.js +++ b/tests/end-to-end/api/05-chat.js @@ -17,7 +17,6 @@ describe('[Chat]', function() { before((done) => getCredentials(done)); describe('/chat.postMessage', () => { - it('should throw an error when at least one of required parameters(channel, roomId) is not sent', (done) => { request.post(api('chat.postMessage')) .set(credentials) @@ -74,7 +73,6 @@ describe('[Chat]', function() { }); describe('should throw an error when the sensitive properties contain malicious XSS values', () => { - it('attachment.message_link', (done) => request.post(api('chat.postMessage')) .set(credentials) @@ -273,7 +271,6 @@ describe('[Chat]', function() { }) .end(done); }); - }); describe('/chat.getMessage', () => { @@ -294,7 +291,6 @@ describe('[Chat]', function() { }); describe('/chat.sendMessage', () => { - it('should throw an error when the required param \'rid\' is not sent', (done) => { request.post(api('chat.sendMessage')) .set(credentials) @@ -316,7 +312,6 @@ describe('[Chat]', function() { }); describe('should throw an error when the sensitive properties contain malicious XSS values', () => { - it('attachment.message_link', (done) => request.post(api('chat.postMessage')) .set(credentials) @@ -553,7 +548,6 @@ describe('[Chat]', function() { .end(done); }); }); - }); describe('/chat.update', () => { diff --git a/tests/end-to-end/api/09-rooms.js b/tests/end-to-end/api/09-rooms.js index f9c31ac030cdfd4db92e7ac6e0e4883253ada3f7..2a33745d11cb14c0b86195adb5bed218da094f70 100644 --- a/tests/end-to-end/api/09-rooms.js +++ b/tests/end-to-end/api/09-rooms.js @@ -25,7 +25,7 @@ describe('[Rooms]', function() { request.get(api('rooms.get')) .set(credentials) .query({ - updatedSince: new Date, + updatedSince: new Date(), }) .expect(200) .expect((res) => { @@ -291,14 +291,14 @@ describe('[Rooms]', function() { }); }); it('create a group', (done) => { - createRoom(({ type: 'p', name: testGroupName })) + 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' })) + createRoom({ type: 'd', username: 'rocket.cat' }) .end((err, res) => { testDM = res.body.room; done(); @@ -409,14 +409,14 @@ describe('[Rooms]', function() { }); }); it('create a group', (done) => { - createRoom(({ type: 'p', name: testGroupName })) + 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' })) + createRoom({ type: 'd', username: 'rocket.cat' }) .end((err, res) => { testDM = res.body.room; done(); diff --git a/tests/end-to-end/api/10-subscriptions.js b/tests/end-to-end/api/10-subscriptions.js index a88a9305e942378774bc123945a7db59be2eba2a..6a82aa8f6b758daf389b467ce47e0c5175cbd30b 100644 --- a/tests/end-to-end/api/10-subscriptions.js +++ b/tests/end-to-end/api/10-subscriptions.js @@ -22,7 +22,7 @@ describe('[Subscriptions]', function() { request.get(api('subscriptions.get')) .set(credentials) .query({ - updatedSince: new Date, + updatedSince: new Date(), }) .expect(200) .expect((res) => { diff --git a/tests/end-to-end/api/11-graphql.js b/tests/end-to-end/api/11-graphql.js index 258e4d02b9fd2d091be85c7d60003e04a552e296..ca307a5773541be6bc017534580b297296510303 100644 --- a/tests/end-to-end/api/11-graphql.js +++ b/tests/end-to-end/api/11-graphql.js @@ -1,8 +1,9 @@ -const supertest = require('supertest'); -const request = supertest('http://localhost:3000'); +import supertest from 'supertest'; import { adminUsername, adminPassword, adminEmail } from '../../data/user.js'; +const request = supertest('http://localhost:3000'); + const user = { username: adminUsername, password: adminPassword, email: adminEmail, accessToken: null }; const channel = {}; const message = { content: 'Test Message GraphQL', modifiedContent: 'Test Message GraphQL Modified' }; @@ -10,8 +11,8 @@ const message = { content: 'Test Message GraphQL', modifiedContent: 'Test Messag const { expect } = require('chai'); const credentials = { - ['X-Auth-Token']: undefined, - ['X-User-Id']: undefined, + 'X-Auth-Token': undefined, + 'X-User-Id': undefined, }; const login = { @@ -93,7 +94,6 @@ describe('GraphQL Tests', function() { user.accessToken = data.tokens.accessToken; expect(data.user).to.have.property('username', user.username); expect(data.user).to.have.property('email', user.email); - }) .end(done); }); diff --git a/tests/end-to-end/api/12-emoji-custom.js b/tests/end-to-end/api/12-emoji-custom.js index 16ff9c7e38e204d7bf3c484327be8bf358b638dd..057c6022b1aad29714abcabde0a333b73ace207e 100644 --- a/tests/end-to-end/api/12-emoji-custom.js +++ b/tests/end-to-end/api/12-emoji-custom.js @@ -1,5 +1,6 @@ import { getCredentials, api, request, credentials } from '../../data/api-data.js'; import { imgURL } from '../../data/interactions'; + const customEmojiName = `my-custom-emoji-${ Date.now() }`; let createdCustomEmoji; diff --git a/tests/end-to-end/ui/03-user-creation.js b/tests/end-to-end/ui/03-user-creation.js index 8ad2f644f998658d4e6733d778f33fad87fcf855..97996cd4a9e269d7be30ab9acd2ed023a083fbcf 100644 --- a/tests/end-to-end/ui/03-user-creation.js +++ b/tests/end-to-end/ui/03-user-creation.js @@ -1,7 +1,5 @@ import loginPage from '../../pageobjects/login.page'; import mainContent from '../../pageobjects/main-content.page'; - -// test data imports import { username, email, password } from '../../data/user.js'; diff --git a/tests/end-to-end/ui/04-main-elements-render.js b/tests/end-to-end/ui/04-main-elements-render.js index 3c61dccf673f73af609167e97c347b0e6dea9005..ed40839180891797e839cd0abaa0c871525e3aa3 100644 --- a/tests/end-to-end/ui/04-main-elements-render.js +++ b/tests/end-to-end/ui/04-main-elements-render.js @@ -1,8 +1,6 @@ import flexTab from '../../pageobjects/flex-tab.page'; import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; - -// test data imports import { checkIfUserIsValid } from '../../data/checks'; import { username, email, password } from '../../data/user.js'; @@ -36,6 +34,7 @@ describe('[Main Elements Render]', function() { }); it('it should show spotlight search bar', () => { sideNav.spotlightSearchIcon.click(); + sideNav.spotlightSearch.waitForVisible(500); sideNav.spotlightSearch.isVisible().should.be.true; }); @@ -207,7 +206,6 @@ describe('[Main Elements Render]', function() { flexTab.channelSettingName.waitForVisible(); flexTab.channelSettingName.getAttribute('title').should.equal('general'); }); - }); describe('Search Tab:', () => { @@ -298,7 +296,6 @@ describe('[Main Elements Render]', function() { }); describe('Mentions Tab:', () => { - before(() => { if (flexTab.mentionsTab.isVisible()) { this.shouldClose = undefined; diff --git a/tests/end-to-end/ui/05-channel-creation.js b/tests/end-to-end/ui/05-channel-creation.js index cd150f0e2ef7762df403d6996b363f06d5f8a6df..13f0142c17d3f310ec2f68834e48b11297371a32 100644 --- a/tests/end-to-end/ui/05-channel-creation.js +++ b/tests/end-to-end/ui/05-channel-creation.js @@ -1,10 +1,9 @@ import sideNav from '../../pageobjects/side-nav.page'; import { publicChannelName, privateChannelName } from '../../data/channel.js'; import { targetUser } from '../../data/interactions.js'; - -// test data imports import { checkIfUserIsValid, setPublicChannelCreated, setPrivateChannelCreated, setDirectMessageCreated } from '../../data/checks'; import { username, email, password } from '../../data/user.js'; + // Basic usage test start describe('[Channel creation]', function() { before(() => { diff --git a/tests/end-to-end/ui/06-messaging.js b/tests/end-to-end/ui/06-messaging.js index 63fb8ed609a675d5f06a5a96b91d553a544e5f4b..a2b70a7adbadba102ffd77250b3efd9b573dd505 100644 --- a/tests/end-to-end/ui/06-messaging.js +++ b/tests/end-to-end/ui/06-messaging.js @@ -1,8 +1,6 @@ import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; import Global from '../../pageobjects/global'; - -// test data imports import { username, email, password } from '../../data/user.js'; import { publicChannelName, privateChannelName } from '../../data/channel.js'; import { targetUser, imgURL } from '../../data/interactions.js'; diff --git a/tests/end-to-end/ui/07-emoji.js b/tests/end-to-end/ui/07-emoji.js index 52bf414fffff3230154be41cb012546b5f345bb8..d13099dae9e90064434d2dee35ba11afee819b15 100644 --- a/tests/end-to-end/ui/07-emoji.js +++ b/tests/end-to-end/ui/07-emoji.js @@ -1,6 +1,5 @@ import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; - import { username, email, password } from '../../data/user.js'; import { checkIfUserIsValid } from '../../data/checks'; @@ -138,5 +137,4 @@ describe('[Emoji]', () => { }); }); }); - }); diff --git a/tests/end-to-end/ui/08-resolutions.js b/tests/end-to-end/ui/08-resolutions.js index a5ccd1d96c40f7c0874fa862cafdf956b0a8908b..edd015ea75892b13a894032bca85743524dc1f82 100644 --- a/tests/end-to-end/ui/08-resolutions.js +++ b/tests/end-to-end/ui/08-resolutions.js @@ -1,7 +1,6 @@ import Global from '../../pageobjects/global'; import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; - import { username, email, password } from '../../data/user.js'; import { checkIfUserIsValid } from '../../data/checks'; @@ -23,7 +22,7 @@ describe('[Resolution]', () => { describe('moving elements:', () => { it('it should close the sidenav', () => { - mainContent.mainContent.getLocation().should.deep.include({ x:0 }); + mainContent.mainContent.getLocation().should.deep.include({ x: 0 }); }); it('it should press the navbar button', () => { @@ -32,7 +31,7 @@ describe('[Resolution]', () => { }); it('it should open de sidenav', () => { - mainContent.mainContent.getLocation().should.not.deep.equal({ x:0 }); + mainContent.mainContent.getLocation().should.not.deep.equal({ x: 0 }); }); it('it should not close sidebar on pressing the sidebar item menu', () => { @@ -40,7 +39,7 @@ describe('[Resolution]', () => { sideNav.firstSidebarItemMenu.waitForVisible(10000); sideNav.firstSidebarItemMenu.click(); browser.pause(100); - mainContent.mainContent.getLocation().should.not.deep.equal({ x:0 }); + mainContent.mainContent.getLocation().should.not.deep.equal({ x: 0 }); sideNav.popoverOverlay.click(); }); @@ -49,7 +48,7 @@ describe('[Resolution]', () => { }); it('it should close the sidenav', () => { - mainContent.mainContent.getLocation().should.deep.include({ x:0 }); + mainContent.mainContent.getLocation().should.deep.include({ x: 0 }); }); it('it should press the navbar button', () => { @@ -70,7 +69,7 @@ describe('[Resolution]', () => { }); it('it should close the sidenav', () => { - mainContent.mainContent.getLocation().should.deep.include({ x:0 }); + mainContent.mainContent.getLocation().should.deep.include({ x: 0 }); }); it('it should press the navbar button', () => { @@ -84,7 +83,7 @@ describe('[Resolution]', () => { }); it('it should close the sidenav', () => { - mainContent.mainContent.getLocation().should.deep.include({ x:0 }); + mainContent.mainContent.getLocation().should.deep.include({ x: 0 }); }); it('it should press the navbar button', () => { diff --git a/tests/end-to-end/ui/09-channel.js b/tests/end-to-end/ui/09-channel.js index ea9ffd4561d2c99873c8df46218e4cfbbd02a37c..96e56ccdcaed5bb9a20f1eaca539a2c9e4fccfbe 100644 --- a/tests/end-to-end/ui/09-channel.js +++ b/tests/end-to-end/ui/09-channel.js @@ -2,7 +2,6 @@ import flexTab from '../../pageobjects/flex-tab.page'; import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; import Global from '../../pageobjects/global'; - import { username, email, password } from '../../data/user.js'; import { checkIfUserIsValid, publicChannelCreated, setPublicChannelCreated } from '../../data/checks'; import { publicChannelName } from '../../data/channel.js'; @@ -117,13 +116,11 @@ describe('[Channel]', () => { Global.toastAlert.waitForVisible(5000, true); } flexTab.operateFlexTab('members', false); - }); it('it should add people to the room', () => { flexTab.addPeopleToChannel(targetUser); }); - }); describe('Channel settings:', () => { @@ -134,7 +131,6 @@ describe('[Channel]', () => { Global.toastAlert.waitForVisible(5000, true); } flexTab.operateFlexTab('info', true); - }); after(() => { @@ -327,7 +323,6 @@ describe('[Channel]', () => { Global.toastAlert.waitForVisible(5000, true); } flexTab.operateFlexTab('members', true); - }); after(() => { @@ -388,7 +383,6 @@ describe('[Channel]', () => { sideNav.searchChannel(`NAME-EDITED-${ publicChannelName }`); mainContent.joinChannelBtn.waitForVisible(5000); mainContent.joinChannelBtn.click(); - }); it('it should show the channel on the list', () => { diff --git a/tests/end-to-end/ui/10-user-preferences.js b/tests/end-to-end/ui/10-user-preferences.js index acdf4db4731126373e8ff71a31c6343b654e54fb..0df8dd83f9b0cb7eb530c84fbb6058c2e24b0628 100644 --- a/tests/end-to-end/ui/10-user-preferences.js +++ b/tests/end-to-end/ui/10-user-preferences.js @@ -3,11 +3,9 @@ import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; import preferencesMainContent from '../../pageobjects/preferences-main-content.page'; import admin from '../../pageobjects/administration.page'; - import { username, password, email, adminUsername, adminEmail, adminPassword } from '../../data/user.js'; -// import {imgURL} from '../../data/interactions.js'; - import { checkIfUserIsValid, checkIfUserIsAdmin } from '../../data/checks'; +// import {imgURL} from '../../data/interactions.js'; describe('[User Preferences]', () => { @@ -52,7 +50,6 @@ describe('[User Preferences]', () => { it('it should show the submit button', () => { preferencesMainContent.submitBtn.isVisible().should.be.true; }); - }); describe('user info change:', () => { diff --git a/tests/end-to-end/ui/11-admin.js b/tests/end-to-end/ui/11-admin.js index 39224039f54aba44f057964f5b8e25f2492a676d..5256e27436d19edb5634746dade43ac4d16b6b05 100644 --- a/tests/end-to-end/ui/11-admin.js +++ b/tests/end-to-end/ui/11-admin.js @@ -1,8 +1,6 @@ import sideNav from '../../pageobjects/side-nav.page'; import flexTab from '../../pageobjects/flex-tab.page'; import admin from '../../pageobjects/administration.page'; - -// test data imports import { checkIfUserIsAdmin } from '../../data/checks'; import { adminUsername, adminEmail, adminPassword } from '../../data/user.js'; diff --git a/tests/end-to-end/ui/12-settings.js b/tests/end-to-end/ui/12-settings.js index 1301e3c681bdd3e57ae70dafce84416845716388..7b9823845b47cec6f16aa71eee74503a2a0ca53f 100644 --- a/tests/end-to-end/ui/12-settings.js +++ b/tests/end-to-end/ui/12-settings.js @@ -1,25 +1,23 @@ -import loginPage from '../../pageobjects/login.page'; import supertest from 'supertest'; -const request = supertest('http://localhost:3000'); -const prefix = '/api/v1/'; +import loginPage from '../../pageobjects/login.page'; import flexTab from '../../pageobjects/flex-tab.page'; import mainContent from '../../pageobjects/main-content.page'; import sideNav from '../../pageobjects/side-nav.page'; import admin from '../../pageobjects/administration.page'; - -// test data imports import { checkIfUserIsValid, checkIfUserIsAdmin } from '../../data/checks'; - import { adminUsername, adminEmail, adminPassword, username, email, password, reason } from '../../data/user.js'; +const request = supertest('http://localhost:3000'); +const prefix = '/api/v1/'; + function api(path) { return prefix + path; } const credentials = { - ['X-Auth-Token']: undefined, - ['X-User-Id']: undefined, + 'X-Auth-Token': undefined, + 'X-User-Id': undefined, }; const login = { @@ -59,7 +57,7 @@ describe('[Api Settings Change]', () => { it('it should change the message editing via api', (done) => { request.post(api('settings/Message_AllowEditing')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -78,7 +76,7 @@ describe('[Api Settings Change]', () => { it('it should change the message editing via api', (done) => { request.post(api('settings/Message_AllowEditing')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -92,7 +90,7 @@ describe('[Api Settings Change]', () => { it('it should change the message deleting via api', (done) => { request.post(api('settings/Message_AllowDeleting')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -111,7 +109,7 @@ describe('[Api Settings Change]', () => { it('it should change the message deleting via api', (done) => { request.post(api('settings/Message_AllowDeleting')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -125,7 +123,7 @@ describe('[Api Settings Change]', () => { it('it should change the message audio files via api', (done) => { request.post(api('settings/Message_AudioRecorderEnabled')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -143,7 +141,7 @@ describe('[Api Settings Change]', () => { it('it should change the message audio files via api', (done) => { request.post(api('settings/Message_AudioRecorderEnabled')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -157,7 +155,7 @@ describe('[Api Settings Change]', () => { it('it should change the message video files via api', (done) => { request.post(api('settings/Message_VideoRecorderEnabled')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -175,7 +173,7 @@ describe('[Api Settings Change]', () => { it('it should change the message video files via api', (done) => { request.post(api('settings/Message_VideoRecorderEnabled')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -189,7 +187,7 @@ describe('[Api Settings Change]', () => { it('it should change the bad words filter via api', (done) => { request.post(api('settings/Message_AllowBadWordsFilter')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -201,7 +199,7 @@ describe('[Api Settings Change]', () => { it('it should add bad words to the filter via api', (done) => { request.post(api('settings/Message_BadWordsFilterList')) .set(credentials) - .send({ value : 'badword' }) + .send({ value: 'badword' }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -221,7 +219,7 @@ describe('[Api Settings Change]', () => { it('it should change the bad words filter via api', (done) => { request.post(api('settings/Message_AllowBadWordsFilter')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -235,7 +233,7 @@ describe('[Api Settings Change]', () => { it('it should change the message pin via api', (done) => { request.post(api('settings/Message_AllowPinning')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -260,7 +258,7 @@ describe('[Api Settings Change]', () => { it('it should change the message pin via api', (done) => { request.post(api('settings/Message_AllowPinning')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -274,7 +272,7 @@ describe('[Api Settings Change]', () => { it('it should change the message star via api', (done) => { request.post(api('settings/Message_AllowStarring')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -299,7 +297,7 @@ describe('[Api Settings Change]', () => { it('it should change the message star via api', (done) => { request.post(api('settings/Message_AllowStarring')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -313,7 +311,7 @@ describe('[Api Settings Change]', () => { it('it should change the file upload via api', (done) => { request.post(api('settings/FileUpload_Enabled')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -329,7 +327,7 @@ describe('[Api Settings Change]', () => { it('it should change the file upload via api', (done) => { request.post(api('settings/FileUpload_Enabled')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -357,7 +355,7 @@ describe('[Api Settings Change]', () => { it('it should change the allow user profile change via api', (done) => { request.post(api('settings/Accounts_AllowUserProfileChange')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -373,7 +371,7 @@ describe('[Api Settings Change]', () => { it('it should change the allow user profile change via api', (done) => { request.post(api('settings/Accounts_AllowUserProfileChange')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -387,7 +385,7 @@ describe('[Api Settings Change]', () => { it('it should change the allow user avatar change via api', (done) => { request.post(api('settings/Accounts_AllowUserAvatarChange')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -403,7 +401,7 @@ describe('[Api Settings Change]', () => { it('it should change the allow user avatar change via api', (done) => { request.post(api('settings/Accounts_AllowUserAvatarChange')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -427,7 +425,7 @@ describe('[Api Settings Change]', () => { it('it should change the Manually Approve New Users via api', (done) => { request.post(api('settings/Accounts_ManuallyApproveNewUsers')) .set(credentials) - .send({ value : true }) + .send({ value: true }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { @@ -497,7 +495,7 @@ describe('[Api Settings Change]', () => { it('it should change the Manually Approve New Users via api', (done) => { request.post(api('settings/Accounts_ManuallyApproveNewUsers')) .set(credentials) - .send({ value : false }) + .send({ value: false }) .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { diff --git a/tests/end-to-end/ui/13-permissions.js b/tests/end-to-end/ui/13-permissions.js index 1b5f49ba501b90043f14907b7d717480d446e2c6..545f3940ed5b0c21ad0afc0e2722735604e1490d 100644 --- a/tests/end-to-end/ui/13-permissions.js +++ b/tests/end-to-end/ui/13-permissions.js @@ -3,8 +3,6 @@ import flexTab from '../../pageobjects/flex-tab.page'; import admin from '../../pageobjects/administration.page'; import mainContent from '../../pageobjects/main-content.page'; import { checkIfUserIsValid, checkIfUserIsAdmin } from '../../data/checks'; - -// test data imports import { username, email, password, adminUsername, adminEmail, adminPassword } from '../../data/user.js'; describe.skip('[Permissions]', () => { diff --git a/tests/end-to-end/ui/14-message-popup.js b/tests/end-to-end/ui/14-message-popup.js index 781dedfdf107a259d2c3464c4aa25a2031a9295a..fe2e7d166e7b12ae36ff002d4b14758b3892c54f 100644 --- a/tests/end-to-end/ui/14-message-popup.js +++ b/tests/end-to-end/ui/14-message-popup.js @@ -1,5 +1,4 @@ import { adminEmail, adminPassword } from '../../data/user.js'; - import { api, request, @@ -74,7 +73,7 @@ describe('[Message Popup]', () => { browser.call(async () => { for (const user of users) { - await createTestUser(user); + await createTestUser(user); // eslint-disable-line no-await-in-loop } }); diff --git a/tests/end-to-end/ui/15-discussion.js b/tests/end-to-end/ui/15-discussion.js index 5d94a9dc6342178e4a2ad2638dcc6942efa72f2f..3687002fdcf975c2bf3d6bee28fb97ff4cb9f03a 100644 --- a/tests/end-to-end/ui/15-discussion.js +++ b/tests/end-to-end/ui/15-discussion.js @@ -8,12 +8,12 @@ import { sendEscape } from '../../pageobjects/keyboard'; import { discussion } from '../../pageobjects/discussion.page'; import { username, email, password } from '../../data/user.js'; import { checkIfUserIsValid } from '../../data/checks'; + const parentChannelName = 'unit-testing'; const discussionName = 'Lorem ipsum dolor sit amet'; const message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; describe('[Discussion]', function () { - before(function () { checkIfUserIsValid(username, email, password); sideNav.spotlightSearchIcon.waitForVisible(3000); @@ -60,5 +60,4 @@ describe('[Discussion]', function () { discussion.deleteRoom(parentChannelName); }); }); - }); diff --git a/tests/pageobjects/administration.page.js b/tests/pageobjects/administration.page.js index 21a77825f9d2c829e23bb01d183c5e962358a3a1..15a3a674601048dd8f09b4b8d76923991877a0bd 100644 --- a/tests/pageobjects/administration.page.js +++ b/tests/pageobjects/administration.page.js @@ -2,61 +2,113 @@ import Page from './Page'; class Administration extends Page { get flexNav() { return browser.element('.flex-nav'); } + get flexNavContent() { return browser.element('.flex-nav'); } + get settingsSearch() { return browser.element('[name=settings-search]'); } + get layoutLink() { return browser.element('.flex-nav [href="/admin/Layout"]'); } + get infoLink() { return browser.element('.flex-nav [href="/admin/info"]'); } + get roomsLink() { return browser.element('.flex-nav [href="/admin/rooms"]'); } + get usersLink() { return browser.element('.flex-nav [href="/admin/users"]'); } + get accountsLink() { return browser.element('.flex-nav [href="/admin/Accounts"]'); } + get generalLink() { return browser.element('.flex-nav [href="/admin/General"]'); } + get permissionsLink() { return browser.element('.flex-nav [href="/admin/permissions"]'); } + get customScriptBtn() { return browser.element('.section:nth-of-type(6) .collapse'); } + get customScriptLoggedOutTextArea() { return browser.element('.section:nth-of-type(6) .CodeMirror-scroll'); } + get customScriptLoggedInTextArea() { return browser.element('.CodeMirror.cm-s-default:nth-of-type(2)'); } + get infoRocketChatTableTitle() { return browser.element('.content h3'); } + get infoRocketChatTable() { return browser.element('.content .statistics-table'); } + get infoCommitTableTitle() { return browser.element('.content h3:nth-of-type(2)'); } + get infoCommitTable() { return browser.element('.content .statistics-table:nth-of-type(2)'); } + get infoRuntimeTableTitle() { return browser.element('.content h3:nth-of-type(3)'); } + get infoRuntimeTable() { return browser.element('.content .statistics-table:nth-of-type(3)'); } + get infoBuildTableTitle() { return browser.element('.content h3:nth-of-type(4)'); } + get infoBuildTable() { return browser.element('.content .statistics-table:nth-of-type(4)'); } + get infoUsageTableTitle() { return browser.element('.content h3:nth-of-type(5)'); } + get infoUsageTable() { return browser.element('.content .statistics-table:nth-of-type(5)'); } + get roomsSearchForm() { return browser.element('.content .search'); } + get roomsFilter() { return browser.element('#rooms-filter'); } + get roomsChannelsCheckbox() { return browser.element('label:nth-of-type(1) input[name="room-type"]'); } + get roomsDirectCheckbox() { return browser.element('label:nth-of-type(2) input[name="room-type"]'); } + get roomsPrivateCheckbox() { return browser.element('label:nth-of-type(3) input[name="room-type"]'); } + get roomsGeneralChannel() { return browser.element('td=general'); } + get usersRocketCat() { return browser.element('td=Rocket.Cat'); } + get usersInternalAdmin() { return browser.element('td=rocketchat.internal.admin.test'); } + get usersFilter() { return browser.element('#users-filter'); } + get rolesNewRolesButton() { return browser.element('.rc-button.new-role'); } + get rolesPermissionGrid() { return browser.element('.permission-grid'); } + get rolesAdmin() { return browser.element('[title="Admin"]'); } + get rolesModerator() { return browser.element('[title="Moderator"]'); } + get rolesOwner() { return browser.element('[title="Owner"]'); } + get rolesReturnLink() { return browser.element('[href="/admin/permissions"]'); } + get rolesNewRoleName() { return browser.element('[name="name"]'); } + get rolesNewRoleDesc() { return browser.element('[name="description"]'); } + get rolesNewRoleScope() { return browser.element('[name="scope"]'); } + get rolesAddBtn() { return browser.element('button.add'); } + get rolesRoomsSearchForm() { return browser.element('.search [name="room"]'); } // permissions grids checkboxes get rolesUserCreateC() { return browser.element('[name="perm[user][create-c]"]'); } + get rolesUserCreateP() { return browser.element('[name="perm[user][create-p]"]'); } + get rolesUserCreateD() { return browser.element('[name="perm[user][create-d]"]'); } + get rolesUserMentionAll() { return browser.element('[name="perm[user][mention-all]"]'); } + get rolesUserPreviewC() { return browser.element('[name="perm[user][preview-c-room]"]'); } + get rolesUserViewC() { return browser.element('[name="perm[user][view-c-room]"]'); } + get rolesUserViewD() { return browser.element('[name="perm[user][view-d-room]"]'); } + get rolesUserViewP() { return browser.element('[name="perm[user][view-p-room]"]'); } + get rolesUserHistory() { return browser.element('[name="perm[user][view-history]"]'); } + get rolesOwnerDeleteMessage() { return browser.element('[name="perm[owner][delete-message]"]'); } + get rolesOwnerEditMessage() { return browser.element('[name="perm[owner][edit-message]"]'); } @@ -66,159 +118,254 @@ class Administration extends Page { get buttonSave() { return browser.element('button.save'); } get generalButtonExpandIframe() { return browser.element('.section:nth-of-type(4) .expand'); } + get generalButtonExpandNotifications() { return browser.element('.section:nth-of-type(5) .expand'); } + get generalButtonExpandRest() { return browser.element('.section:nth-of-type(6) .expand'); } + get generalButtonExpandReporting() { return browser.element('.section:nth-of-type(7) .expand'); } + get generalButtonExpandStreamCast() { return browser.element('.section:nth-of-type(8) .expand'); } + get generalButtonExpandTranslations() { return browser.element('.section:nth-of-type(9) .expand'); } + get generalButtonExpandUTF8() { return browser.element('.section:nth-of-type(10) .expand'); } get generalSiteUrl() { return browser.element('[name="Site_Url"]'); } + get generalSiteUrlReset() { return browser.element('.reset-setting[data-setting="Site_Url"]'); } + get generalSiteName() { return browser.element('[name="Site_Name"]'); } + get generalSiteNameReset() { return browser.element('.reset-setting[data-setting="Site_Name"]'); } + get generalLanguage() { return browser.element('[name="Language"]'); } + get generalLanguagePtOption() { return browser.element('[value="pt"]'); } + get generalLanguageReset() { return browser.element('.reset-setting[data-setting="Language"]'); } + get generalSelfSignedCertsTrue() { return browser.element('label:nth-of-type(1) [name="Allow_Invalid_SelfSigned_Certs"]'); } + get generalSelfSignedCertsFalse() { return browser.element('label:nth-of-type(2) [name="Allow_Invalid_SelfSigned_Certs"]'); } + get generalSelfSignedCertsReset() { return browser.element('.reset-setting[data-setting="Allow_Invalid_SelfSigned_Certs"]'); } + get generalFavoriteRoomTrue() { return browser.element('label:nth-of-type(1) [name="Favorite_Rooms"]'); } + get generalFavoriteRoomFalse() { return browser.element('label:nth-of-type(2) [name="Favorite_Rooms"]'); } + get generalFavoriteRoomReset() { return browser.element('.reset-setting[data-setting="Favorite_Rooms"]'); } + get generalOpenFirstChannel() { return browser.element('[name="First_Channel_After_Login"]'); } + get generalOpenFirstChannelReset() { return browser.element('.reset-setting[data-setting="First_Channel_After_Login"]'); } + get generalCdnPrefix() { return browser.element('[name="CDN_PREFIX"]'); } + get generalCdnPrefixReset() { return browser.element('.reset-setting[data-setting="CDN_PREFIX"]'); } + get generalForceSSLTrue() { return browser.element('label:nth-of-type(1) [name="Force_SSL"]'); } + get generalForceSSLFalse() { return browser.element('label:nth-of-type(2) [name="Force_SSL"]'); } + get generalForceSSLReset() { return browser.element('.reset-setting[data-setting="Force_SSL"]'); } + get generalGoogleTagId() { return browser.element('[name="GoogleTagManager_id"]'); } + get generalGoogleTagIdReset() { return browser.element('.reset-setting[data-setting="GoogleTagManager_id"]'); } + get generalBugsnagKey() { return browser.element('[name="Bugsnag_api_key"]'); } + get generalBugsnagKeyReset() { return browser.element('.reset-setting[data-setting="Bugsnag_api_key"]'); } + get generalIframeSendTrue() { return browser.element('label:nth-of-type(1) [name="Iframe_Integration_send_enable"]'); } + get generalIframeSendFalse() { return browser.element('label:nth-of-type(2) [name="Iframe_Integration_send_enable"]'); } + get generalIframeSendReset() { return browser.element('.reset-setting[data-setting="Iframe_Integration_send_enable"]'); } + get generalIframeSendTargetOrigin() { return browser.element('[name="Iframe_Integration_send_target_origin"]'); } + get generalIframeSendTargetOriginReset() { return browser.element('.reset-setting[data-setting="Iframe_Integration_send_target_origin"]'); } + get generalIframeRecieveTrue() { return browser.element('label:nth-of-type(1) [name="Iframe_Integration_receive_enable"]'); } + get generalIframeRecieveFalse() { return browser.element('label:nth-of-type(2) [name="Iframe_Integration_receive_enable"]'); } + get generalIframeRecieveFalseReset() { return browser.element('.reset-setting[data-setting="Iframe_Integration_receive_enable"]'); } + get generalIframeRecieveOrigin() { return browser.element('[name="Iframe_Integration_receive_origin"]'); } + get generalIframeRecieveOriginReset() { return browser.element('.reset-setting[data-setting="Iframe_Integration_receive_origin"]'); } + get generalNotificationsMaxRoomMembers() { return browser.element('[name="Notifications_Max_Room_Members"]'); } + get generalNotificationsMaxRoomMembersReset() { return browser.element('.reset-setting[data-setting="Notifications_Max_Room_Members"]'); } + get generalRestApiUserLimit() { return browser.element('[name="API_User_Limit"]'); } + get generalRestApiUserLimitReset() { return browser.element('.reset-setting[data-setting="API_User_Limit"]'); } + get generalReportingTrue() { return browser.element('label:nth-of-type(1) [name="Statistics_reporting"]'); } + get generalReportingFalse() { return browser.element('label:nth-of-type(2) [name="Statistics_reporting"]'); } + get generalReportingReset() { return browser.element('.reset-setting[data-setting="Statistics_reporting"]'); } + get generalStreamCastAdress() { return browser.element('[name="Stream_Cast_Address"]'); } + get generalStreamCastAdressReset() { return browser.element('.reset-setting[data-setting="Stream_Cast_Address"]'); } + get generalUTF8Regex() { return browser.element('[name="UTF8_Names_Validation"]'); } + get generalUTF8RegexReset() { return browser.element('.reset-setting[data-setting="UTF8_Names_Validation"]'); } + get generalUTF8NamesSlugTrue() { return browser.element('label:nth-of-type(1) [name="UTF8_Names_Slugify"]'); } + get generalUTF8NamesSlugFalse() { return browser.element('label:nth-of-type(2) [name="UTF8_Names_Slugify"]'); } + get generalUTF8NamesSlugReset() { return browser.element('.reset-setting[data-setting="UTF8_Names_Slugify"]'); } // accounts get accountsButtonExpandDefaultUserPreferences() { return browser.element('.section:nth-of-type(2) .expand'); } + get accountsButtonCollapseDefaultUserPreferences() { return browser.element('.section:nth-of-type(2) .collapse'); } get accountsEnableAutoAwayTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_enableAutoAway"]'); } + get accountsEnableAutoAwayFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_enableAutoAway"]'); } + get accountsEnableAutoAwayReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_enableAutoAway"]'); } get accountsidleTimeLimit() { return browser.element('[name="Accounts_Default_User_Preferences_idleTimeLimit"]'); } + get accountsidleTimeLimitReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_idleTimeLimit"]'); } get accountsNotificationDuration() { return browser.element('[name="Accounts_Default_User_Preferences_desktopNotificationDuration"]'); } + get accountsNotificationDurationReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_desktopNotificationDuration"]'); } get accountsAudioNotifications() { return browser.element('[name="Accounts_Default_User_Preferences_audioNotifications"]'); } + get accountsAudioNotificationsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_audioNotifications"]'); } get accountsDesktopNotifications() { return browser.element('[name="Accounts_Default_User_Preferences_desktopNotifications"]'); } + get accountsDesktopNotificationsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_desktopNotifications"]'); } get accountsMobileNotifications() { return browser.element('[name="Accounts_Default_User_Preferences_mobileNotifications"]'); } + get accountsMobileNotificationsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_mobileNotifications"]'); } get accountsUnreadAlertTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_unreadAlert"]'); } + get accountsUnreadAlertFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_unreadAlert"]'); } + get accountsUnreadAlertReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_unreadAlert"]'); } get accountsUseEmojisTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_useEmojis"]'); } + get accountsUseEmojisFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_useEmojis"]'); } + get accountsUseEmojisReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_useEmojis"]'); } get accountsConvertAsciiEmojiTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_convertAsciiEmoji"]'); } + get accountsConvertAsciiEmojiFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_convertAsciiEmoji"]'); } + get accountsConvertAsciiEmojiReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_convertAsciiEmoji"]'); } get accountsAutoImageLoadTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_autoImageLoad"]'); } + get accountsAutoImageLoadFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_autoImageLoad"]'); } + get accountsAutoImageLoadReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_autoImageLoad"]'); } get accountsSaveMobileBandwidthTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_saveMobileBandwidth"]'); } + get accountsSaveMobileBandwidthFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_saveMobileBandwidth"]'); } + get accountsSaveMobileBandwidthReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_saveMobileBandwidth"]'); } get accountsCollapseMediaByDefaultTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_collapseMediaByDefault"]'); } + get accountsCollapseMediaByDefaultFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_collapseMediaByDefault"]'); } + get accountsCollapseMediaByDefaultReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_collapseMediaByDefault"]'); } get accountsHideUsernamesTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_hideUsernames"]'); } + get accountsHideUsernamesFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_hideUsernames"]'); } + get accountsHideUsernamesReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_hideUsernames"]'); } get accountsHideRolesTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_hideRoles"]'); } + get accountsHideRolesFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_hideRoles"]'); } + get accountsHideRolesReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_hideRoles"]'); } get accountsHideFlexTabTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_hideFlexTab"]'); } + get accountsHideFlexTabFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_hideFlexTab"]'); } + get accountsHideFlexTabReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_hideFlexTab"]'); } get accountsHideAvatarsTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_hideAvatars"]'); } + get accountsHideAvatarsFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_hideAvatars"]'); } + get accountsHideAvatarsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_hideAvatars"]'); } get accountsMergeChannelsTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_mergeChannels"]'); } + get accountsMergeChannelsFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_mergeChannels"]'); } + get accountsMergeChannelsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_mergeChannels"]'); } get accountsSendOnEnter() { return browser.element('[name="Accounts_Default_User_Preferences_sendOnEnter"]'); } + get accountsSendOnEnterReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_sendOnEnter"]'); } get accountsMessageViewMode() { return browser.element('[name="Accounts_Default_User_Preferences_messageViewMode"]'); } + get accountsMessageViewModeReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_messageViewMode"]'); } get accountsEmailNotificationMode() { return browser.element('[name="Accounts_Default_User_Preferences_emailNotificationMode"]'); } + get accountsEmailNotificationModeReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_emailNotificationMode"]'); } get accountsRoomCounterSidebarTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_roomCounterSidebar"]'); } + get accountsRoomCounterSidebarFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_roomCounterSidebar"]'); } + get accountsRoomCounterSidebarReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_roomCounterSidebar"]'); } get accountsNewRoomNotification() { return browser.element('[name="Accounts_Default_User_Preferences_newRoomNotification"]'); } + get accountsNewRoomNotificationReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_newRoomNotification"]'); } get accountsNewMessageNotification() { return browser.element('[name="Accounts_Default_User_Preferences_newMessageNotification"]'); } + get accountsNewMessageNotificationReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_newMessageNotification"]'); } get accountsMuteFocusedConversationsTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_Default_User_Preferences_muteFocusedConversations"]'); } + get accountsMuteFocusedConversationsFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_Default_User_Preferences_muteFocusedConversations"]'); } + get accountsMuteFocusedConversationsReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_muteFocusedConversations"]'); } get accountsNotificationsSoundVolume() { return browser.element('[name="Accounts_Default_User_Preferences_notificationsSoundVolume"]'); } + get accountsNotificationsSoundVolumeReset() { return browser.element('.reset-setting[data-setting="Accounts_Default_User_Preferences_notificationsSoundVolume"]'); } get accountsRealNameChangeTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_AllowRealNameChange"]'); } + get accountsRealNameChangeFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_AllowRealNameChange"]'); } get accountsUsernameChangeTrue() { return browser.element('label:nth-of-type(1) [name="Accounts_AllowUsernameChange"]'); } + get accountsUsernameChangeFalse() { return browser.element('label:nth-of-type(2) [name="Accounts_AllowUsernameChange"]'); } checkUserList(user) { diff --git a/tests/pageobjects/discussion.page.js b/tests/pageobjects/discussion.page.js index 2996d37648b93ed2e73d1207576a6786ed0489ed..7e3994196f0bff89c19736adc36a45d595830682 100644 --- a/tests/pageobjects/discussion.page.js +++ b/tests/pageobjects/discussion.page.js @@ -1,5 +1,4 @@ import Page from './Page'; - import sideNav from './side-nav.page'; import flexTab from './flex-tab.page'; import global from './global'; diff --git a/tests/pageobjects/flex-tab.page.js b/tests/pageobjects/flex-tab.page.js index 326b41461af0b9abb6dddb2aecfa3f967e8de197..1591323b62ee7555fb786c0e5b84d33b940b56e7 100644 --- a/tests/pageobjects/flex-tab.page.js +++ b/tests/pageobjects/flex-tab.page.js @@ -2,104 +2,174 @@ import Page from './Page'; import Global from './global'; class FlexTab extends Page { - get moreActions() { return browser.element('.rc-room-actions__button.js-more') ; } + get moreActions() { return browser.element('.rc-room-actions__button.js-more'); } + // Channel Info Tab get channelTab() { return browser.element('.tab-button:not(.hidden) .tab-button-icon--info-circled'); } + get channelSettings() { return browser.element('.channel-settings'); } + get channelSettingName() { return browser.element('.channel-settings .rc-user-info__name'); } + get archiveBtn() { return browser.element('.clearfix:last-child .icon-pencil'); } + get archiveRadio() { return browser.element('.editing'); } + get archiveSave() { return browser.element('.save'); } + get editNameBtn() { return browser.element('[data-edit="name"]'); } + get editTopicBtn() { return browser.element('[data-edit="topic"]'); } + get editAnnouncementBtn() { return browser.element('[data-edit="announcement"]'); } + get editDescriptionBtn() { return browser.element('[data-edit="description"]'); } + get editNotificationBtn() { return browser.element('[data-edit="desktopNotifications"]'); } + get editMobilePushBtn() { return browser.element('[data-edit="mobilePushNotifications"]'); } + get editEmailNotificationBtn() { return browser.element('[data-edit="emailNotifications"]'); } + get editUnreadAlertBtn() { return browser.element('[data-edit="unreadAlert"]'); } + get editNameTextInput() { return browser.element('.channel-settings input[name="name"]'); } + get editTopicTextInput() { return browser.element('.channel-settings input[name="topic"]'); } + get editAnnouncementTextInput() { return browser.element('.channel-settings input[name="announcement"]'); } + get editDescriptionTextInput() { return browser.element('.channel-settings input[name="description"]'); } + get editNameSave() { return browser.element('.channel-settings .save'); } + get deleteBtn() { return browser.element('.channel-settings .js-delete'); } // Members Tab get membersTab() { return browser.element('.tab-button:not(.hidden) .tab-button-icon--team'); } + get membersTabContent() { return browser.element('.animated'); } + get userSearchBar() { return browser.element('#user-add-search'); } + get removeUserBtn() { return browser.element('.remove-user'); } + get setOwnerBtn() { return browser.element('.set-owner'); } + get setModeratorBtn() { return browser.element('.set-moderator'); } + get muteUserBtn() { return browser.element('.mute-user'); } + get viewAllBtn() { return browser.element('.button.back'); } + get startVideoCall() { return browser.element('.start-video-call'); } + get startAudioCall() { return browser.element('.start-audio-call'); } + get showAll() { return browser.element('.see-all'); } + get membersUserInfo() { return browser.element('.flex-tab-container .info'); } + get avatarImage() { return browser.element('.flex-tab-container .avatar-image'); } + get memberUserName() { return browser.element('.info h3'); } + get memberRealName() { return browser.element('.info p'); } // Search Tab get searchTab() { return browser.element('.tab-button:not(.hidden) .tab-button-icon--magnifier'); } + get searchTabContent() { return browser.element('.rocket-search-result'); } + get messageSearchBar() { return browser.element('#message-search'); } + get searchResult() { return browser.element('.new-day'); } // Notifications Tab get notificationsTab() { return browser.element('.rc-popover__item[data-id=push-notifications]'); } + get notificationsSettings() { return browser.element('.push-notifications'); } // Files Tab get filesTab() { return browser.element('.rc-popover__item[data-id=uploaded-files-list], .tab-button[data-id=uploaded-files-list]'); } + get fileItem() { return browser.element('.uploaded-files-list ul:first-child'); } + get filesTabContent() { return browser.element('.uploaded-files-list'); } + get fileDelete() { return browser.element('.uploaded-files-list ul:first-child .file-delete'); } + get fileDownload() { return browser.element('.uploaded-files-list ul:first-child .file-download'); } + get fileName() { return browser.element('.uploaded-files-list ul:first-child .room-file-item'); } // Mentions Tab get mentionsTab() { return browser.element('.rc-popover__item[data-id=mentions], .tab-button[data-id=mentions]'); } + get mentionsTabContent() { return browser.element('.mentioned-messages-list'); } // Starred Tab get starredTab() { return browser.element('.rc-popover__item[data-id=starred-messages], .tab-button[data-id=starred-messages]'); } + get starredTabContent() { return browser.element('.starred-messages-list'); } // Pinned Tab get pinnedTab() { return browser.element('.rc-popover__item[data-id=pinned-messages], .tab-button[data-id=pinned-messages]'); } + get pinnedTabContent() { return browser.element('.pinned-messages-list'); } get firstSetting() { return browser.element('.clearfix li:nth-child(1) .current-setting'); } + get secondSetting() { return browser.element('.clearfix li:nth-child(2) .current-setting'); } + get thirdSetting() { return browser.element('.clearfix li:nth-child(3) .current-setting'); } + get fourthSetting() { return browser.element('.clearfix li:nth-child(4) .current-setting'); } // admin view flextab items get usersSendInvitationTab() { return browser.element('.tab-button:not(.hidden) .tab-button-icon--send'); } + get usersAddUserTab() { return browser.element('.tab-button:not(.hidden) .tab-button-icon--plus'); } + get usersSendInvitationTextArea() { return browser.element('#inviteEmails'); } + get usersButtonCancel() { return browser.element('.button.cancel'); } + get usersSendInvitationSend() { return browser.element('.button.send'); } + get usersButtonSave() { return browser.element('.button.save'); } + get usersAddUserName() { return browser.element('#name'); } + get usersAddUserUsername() { return browser.element('#username'); } + get usersAddUserEmail() { return browser.element('#email'); } + get usersAddUserRoleList() { return browser.element('#roleSelect'); } + get usersAddUserPassword() { return browser.element('#password'); } + get usersAddUserRoleButton() { return browser.element('#addRole'); } + get usersAddUserVerifiedCheckbox() { return browser.element('#verified'); } + get usersAddUserChangePasswordCheckbox() { return browser.element('#changePassword'); } + get usersAddUserDefaultChannelCheckbox() { return browser.element('#joinDefaultChannels'); } + get usersAddUserWelcomeEmailCheckbox() { return browser.element('#sendWelcomeEmail'); } + get usersAddUserRandomPassword() { return browser.element('#randomPassword'); } + get emojiNewAliases() { return browser.element('#aliases'); } + get emojiNewImageInput() { return browser.element('#image'); } + get usersView() { return browser.element('.rc-user-info-action'); } + get usersActivate() { return browser.element('.rc-popover__item[data-id=activate]'); } + get usersDeactivate() { return browser.element('.rc-popover__item[data-id=deactivate]'); } getUserEl(username) { return browser.element(`.flex-tab button[title="${ username }"] > p`); } diff --git a/tests/pageobjects/global.js b/tests/pageobjects/global.js index a3a2c9b12ba18a21938cf20c1e455a91743f1c9b..52ac7e144adb50beff88254a4e880ceac1d3a04f 100644 --- a/tests/pageobjects/global.js +++ b/tests/pageobjects/global.js @@ -1,13 +1,21 @@ class Global { // Modal get modalOverlay() { return browser.element('.rc-modal-wrapper'); } + get modal() { return browser.element('.rc-modal'); } + get modalConfirm() { return browser.element('.rc-modal .js-confirm'); } + get modalCancel() { return browser.element('.rc-modal .js-modal'); } + get modalPasswordField() { return browser.element('.rc-modal [type="password"]'); } + get modalFileName() { return browser.element('.rc-modal #file-name'); } + get modalFileDescription() { return browser.element('.rc-modal #file-description'); } + get modalFilePreview() { return browser.element('.rc-modal .upload-preview-file'); } + get modalFileTitle() { return browser.element('.rc-modal .upload-preview-title'); } get toastAlert() { return browser.element('.toast'); } diff --git a/tests/pageobjects/login.page.js b/tests/pageobjects/login.page.js index c18e974521e69670eca408ff530aab42a0b75b23..11e5c46bde3f8aa4ac0e37bc60d06bfd9fbf5ed2 100644 --- a/tests/pageobjects/login.page.js +++ b/tests/pageobjects/login.page.js @@ -3,23 +3,37 @@ import mainContent from './main-content.page'; class LoginPage extends Page { get registerButton() { return browser.element('button.register'); } + get forgotPasswordButton() { return browser.element('.forgot-password'); } + get backToLoginButton() { return browser.element('.back-to-login'); } + get submitButton() { return browser.element('.login'); } get emailOrUsernameField() { return browser.element('[name=emailOrUsername]'); } + get nameField() { return browser.element('[name=name]'); } + get emailField() { return browser.element('[name=email]'); } + get passwordField() { return browser.element('[name=pass]'); } + get confirmPasswordField() { return browser.element('[name=confirm-pass]'); } + get reasonField() { return browser.element('[name=reason]'); } + get inputUsername() { return browser.element('form#login-card input#username'); } get emailOrUsernameInvalidText() { return browser.element('[name=emailOrUsername]~.input-error'); } + get nameInvalidText() { return browser.element('[name=name]~.input-error'); } + get emailInvalidText() { return browser.element('[name=email]~.input-error'); } + get passwordInvalidText() { return browser.element('[name=pass]~.input-error'); } + get confirmPasswordInvalidText() { return browser.element('[name=confirm-pass]~.input-error'); } + get registrationSucceededCard() { return browser.element('#login-card h2'); } open() { diff --git a/tests/pageobjects/main-content.page.js b/tests/pageobjects/main-content.page.js index d34fe5b869b1e197fdaa4fb334ff99f4bbeaf036..0ac20cff2369093b7b5f7721057cb7b01fc8e910 100644 --- a/tests/pageobjects/main-content.page.js +++ b/tests/pageobjects/main-content.page.js @@ -1,70 +1,118 @@ import Page from './Page'; class MainContent extends Page { - get mainContent() { return browser.element('.main-content'); } // Main Content Header (Channel Title Area) get emptyFavoriteStar() { return browser.element('.rc-header__toggle-favorite.empty'); } + get favoriteStar() { return browser.element('.rc-header__toggle-favorite.favorite-room'); } + get channelTitle() { return browser.element('.rc-header__name'); } // Main Content Footer (Message Input Area) get messageInput() { return browser.element('.js-input-message'); } + get sendBtn() { return browser.element('.rc-message-box__icon.js-send'); } + get messageBoxActions() { return browser.element('.rc-message-box__icon'); } + get recordBtn() { return browser.element('.js-audio-message-record'); } + get videoCamBtn() { return browser.element('.message-buttons .icon-videocam'); } + get emojiBtn() { return browser.element('.rc-message-box__icon.emoji-picker-icon'); } + get messagePopUp() { return browser.element('.message-popup'); } + get messagePopUpTitle() { return browser.element('.message-popup-title'); } + get messagePopUpItems() { return browser.element('.message-popup-items'); } + get messagePopUpFirstItem() { return browser.element('.popup-item.selected'); } + get mentionAllPopUp() { return browser.element('.popup-item[data-id="all"]'); } + get joinChannelBtn() { return browser.element('.button.join'); } // Messages get lastMessageUser() { return browser.element('.message:last-child .title .user-card-message'); } + get lastMessage() { return browser.element('.message:last-child .body'); } + get lastMessageDesc() { return browser.element('.message:last-child .body .attachment-description'); } + get lastMessageRoleAdded() { return browser.element('.message:last-child.subscription-role-added .body'); } + get beforeLastMessage() { return browser.element('.message:nth-last-child(2) .body'); } + get lastMessageUserTag() { return browser.element('.message:last-child .role-tag'); } + get lastMessageImg() { return browser.element('.message:last-child .attachment-image img'); } + get lastMessageTextAttachment() { return browser.element('.message:last-child .attachment-text'); } + get beforeLastMessageQuote() { return browser.element('.message:nth-last-child(2)'); } + get lastMessageQuote() { return browser.element('.message:last-child'); } + get messageOptionsBtn() { return browser.element('.message:last-child .message-actions__menu'); } + get messageActionMenu() { return browser.element('.rc-popover .rc-popover__content'); } + get messageReply() { return browser.element('[data-id="reply-in-thread"][data-type="message-action"]'); } + get messageEdit() { return browser.element('[data-id="edit-message"][data-type="message-action"]'); } + get messageDelete() { return browser.element('[data-id="delete-message"][data-type="message-action"]'); } + get messagePermalink() { return browser.element('[data-id="permalink"][data-type="message-action"]'); } + get messageCopy() { return browser.element('[data-id="copy"][data-type="message-action"]'); } + get messageQuote() { return browser.element('[data-id="quote-message"][data-type="message-action"]'); } + get messageStar() { return browser.element('[data-id="star-message"][data-type="message-action"]'); } + get messageUnread() { return browser.element('[data-id="mark-message-as-unread"][data-type="message-action"]'); } + // get messageReaction() { return browser.element('.message-actions__button[data-message-action="reaction-message"]'); } get messagePin() { return browser.element('[data-id="pin-message"][data-type="message-action"]'); } // get messageClose() { return browser.element('[data-id="rc-popover-close"][data-type="message-action"]'); } // Emojis get emojiPickerMainScreen() { return browser.element('.emoji-picker'); } + get emojiPickerPeopleIcon() { return browser.element('.emoji-picker .icon-people'); } + get emojiPickerNatureIcon() { return browser.element('.emoji-picker .icon-nature'); } + get emojiPickerFoodIcon() { return browser.element('.emoji-picker .icon-food'); } + get emojiPickerActivityIcon() { return browser.element('.emoji-picker .icon-activity'); } + get emojiPickerTravelIcon() { return browser.element('.emoji-picker .icon-travel'); } + get emojiPickerObjectsIcon() { return browser.element('.emoji-picker .icon-objects'); } + get emojiPickerSymbolsIcon() { return browser.element('.emoji-picker .icon-symbols'); } + get emojiPickerFlagsIcon() { return browser.element('.emoji-picker .icon-flags'); } + get emojiPickerModifierIcon() { return browser.element('.emoji-picker .icon-symbols'); } + get emojiPickerChangeTone() { return browser.element('.emoji-picker .change-tone'); } + get emojiPickerCustomIcon() { return browser.element('.emoji-picker .icon-rocket'); } + get emojiPickerRecentIcon() { return browser.element('.emoji-picker .icon-recent'); } + get emojiPickerFilter() { return browser.element('.emoji-picker .js-emojipicker-search'); } + get emojiPickerEmojiContainer() { return browser.element('.emoji-picker .emojis'); } + get emojiGrinning() { return browser.element('.emoji-picker .emoji-grinning'); } + get emojiSmile() { return browser.element('.emoji-picker .emoji-smile'); } // Popover @@ -107,7 +155,6 @@ class MainContent extends Page { } waitForLastMessageTextAttachmentEqualsText(text) { - browser.waitForVisible('.message:last-child .attachment-text', 5000); return browser.getText('.message:last-child .attachment-text') === text; } diff --git a/tests/pageobjects/preferences-main-content.page.js b/tests/pageobjects/preferences-main-content.page.js index 8f9e15bf17386f367a75afc8216c6f15ba6803c2..f2cbdb6837b04e6aa12c8cd4c5ee2c29e846c0f3 100644 --- a/tests/pageobjects/preferences-main-content.page.js +++ b/tests/pageobjects/preferences-main-content.page.js @@ -2,16 +2,25 @@ import Page from './Page'; class PreferencesMainContent extends Page { get formTextInput() { return browser.element('.rocket-form'); } + get realNameTextInput() { return browser.element('input[name="realname"]'); } + get userNameTextInput() { return browser.element('input[name="username"]'); } + get emailTextInput() { return browser.element('[name="email"]'); } + get passwordTextInput() { return browser.element('[name="password"]'); } + get resendVerificationEmailBtn() { return browser.element('#resend-verification-email'); } + get avatarFileInput() { return browser.element('.avatar-file-input'); } + get useUploadedAvatar() { return browser.element('.avatar-suggestion-item:nth-of-type(2) .select-service'); } + get submitBtn() { return browser.element('.rc-button[type="submit"]'); } realNameTextInputEnabled() { return browser.isEnabled('input[name="realname"]'); } + userNameTextInputEnabled() { return browser.isEnabled('input[name="username"]'); } changeUsername(userName) { diff --git a/tests/pageobjects/settings.js b/tests/pageobjects/settings.js index b01c620789193570daa855e7c953cb8fd8c46e11..e1f3794c5473f381bece23feb03752a502ef504b 100644 --- a/tests/pageobjects/settings.js +++ b/tests/pageobjects/settings.js @@ -17,8 +17,8 @@ function api(path) { export async function getSettingValue(name) { let credentials = { - ['X-Auth-Token']: undefined, - ['X-User-Id']: undefined, + 'X-Auth-Token': undefined, + 'X-User-Id': undefined, }; // login @@ -28,8 +28,8 @@ export async function getSettingValue(name) { .expect(200); credentials = { - ['X-Auth-Token']: reponseLogin.body.data.authToken, - ['X-User-Id']: reponseLogin.body.data.userId, + 'X-Auth-Token': reponseLogin.body.data.authToken, + 'X-User-Id': reponseLogin.body.data.userId, }; const responseGetSetting = await request.get(api(`settings/${ name }`)) @@ -44,4 +44,3 @@ export async function getSettingValue(name) { return responseGetSetting.body.value; } - diff --git a/tests/pageobjects/setup-wizard.page.js b/tests/pageobjects/setup-wizard.page.js index d037d138a45ef0205e0baebdf24496de4e68d9d9..296f178bfc2055d0a4547b67cf701c8a002eb085 100644 --- a/tests/pageobjects/setup-wizard.page.js +++ b/tests/pageobjects/setup-wizard.page.js @@ -4,17 +4,29 @@ import { adminEmail, adminPassword } from '../data/user'; class SetupWizard extends Page { get nextButton() { return browser.element('.setup-wizard-forms__footer-next:enabled'); } + get goToWorkspace() { return browser.element('button.js-finish'); } + get organizationType() { return browser.element('select[name="Organization_Type"]'); } + get organizationName() { return browser.element('input[name="Organization_Name"]'); } + get industry() { return browser.element('select[name="Industry"]'); } + get size() { return browser.element('select[name="Size"]'); } + get country() { return browser.element('select[name="Country"]'); } + get website() { return browser.element('input[name="Website"]'); } + get siteName() { return browser.element('input[name="Site_Name"]'); } + get language() { return browser.element('select[name="Language"]'); } + get serverType() { return browser.element('select[name="Server_Type"]'); } + get registeredServer() { return browser.element('input[name="registerServer"][value="true"]'); } + get standaloneServer() { return browser.element('input[name="registerServer"][value="false"]'); } login() { diff --git a/tests/pageobjects/side-nav.page.js b/tests/pageobjects/side-nav.page.js index baed6e3b07a5dd2425c768ebe6131483c3d4b34c..6cf4b2f3c89401bc592e8bc7fb0afd463f1a433f 100644 --- a/tests/pageobjects/side-nav.page.js +++ b/tests/pageobjects/side-nav.page.js @@ -3,49 +3,77 @@ import Page from './Page'; class SideNav extends Page { // New channel get channelType() { return browser.element('.create-channel__content .rc-switch__button'); } + get channelReadOnly() { return browser.elements('.create-channel__switches .rc-switch__button').value[1]; } + get channelName() { return browser.element('.create-channel__content input[name="name"]'); } + get saveChannelBtn() { return browser.element('.rc-modal__content [data-button="create"]'); } // Account box getPopOverContent() { return browser.element('.rc-popover__content'); } + get accountBoxUserName() { return browser.element('.sidebar__account-username'); } + get accountBoxUserAvatar() { return browser.element('.sidebar__account .avatar-image'); } + get accountMenu() { return browser.element('.sidebar__account'); } + get sidebarHeader() { return browser.element('.sidebar__header'); } + get sidebarUserMenu() { return browser.element('.sidebar__header .avatar'); } + get sidebarMenu() { return browser.element('.sidebar__toolbar-button-icon--menu'); } + get popOverContent() { return browser.element('.rc-popover__content'); } + get statusOnline() { return browser.element('.rc-popover__item--online'); } + get statusAway() { return browser.element('.rc-popover__item--away'); } + get statusBusy() { return browser.element('.rc-popover__item--busy'); } + get statusOffline() { return browser.element('.rc-popover__item--offline'); } + get account() { return browser.element('[data-id="account"][data-type="open"]'); } + get admin() { return browser.element('[data-id="administration"][data-type="open"]'); } + get logout() { return browser.element('[data-id="logout"][data-type="open"]'); } + get sideNavBar() { return browser.element('.sidebar'); } // Toolbar get spotlightSearchIcon() { return browser.element('.sidebar__toolbar-button-icon--magnifier'); } + get spotlightSearch() { return browser.element('.toolbar__search input'); } + get spotlightSearchPopUp() { return browser.element('.rooms-list__toolbar-search'); } + get newChannelBtnToolbar() { return browser.element('.sidebar__toolbar-button-icon--edit-rounded'); } get newChannelBtn() { return browser.element('.rc-popover__icon-element--hashtag'); } + get newDiscussionBtn() { return browser.element('.rc-popover__icon-element--discussion'); } get newChannelIcon() { return browser.element('.toolbar__icon.toolbar__search-create-channel'); } // Rooms List get general() { return this.getChannelFromList('general'); } + get channelLeave() { return browser.element('.leave-room'); } + get channelHoverIcon() { return browser.element('.rooms-list > .wrapper > ul [title="general"] .icon-eye-off'); } + get moreChannels() { return browser.element('.rooms-list .more-channels'); } // Account get preferences() { return browser.element('[href="/account/preferences"]'); } + get profile() { return browser.element('[href="/account/profile"]'); } + get avatar() { return browser.element('[href="/changeavatar"]'); } + get preferencesClose() { return browser.element('.sidebar-flex__close-button[data-action="close"]'); } get burgerBtn() { return browser.element('.burger'); } @@ -53,7 +81,9 @@ class SideNav extends Page { get sidebarWrap() { return browser.element('.sidebar-wrap'); } get firstSidebarItem() { return browser.element('.sidebar-item'); } + get firstSidebarItemMenu() { return browser.element('.sidebar-item__menu'); } + get popoverOverlay() { return browser.element('.rc-popover.rc-popover--sidebar-item'); } // Opens a channel via rooms list