diff --git a/.circleci/config.yml b/.circleci/config.yml index f7d4d7ca0929..739cee66a47d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,17 +45,11 @@ test-save-npm-cache: &test-save-npm-cache test-docker-image: &test-docker-image circleci/node:8.11-stretch-browsers -test: &test +test-with-oplog: &test-with-oplog <<: *defaults - environment: &test-environment + environment: TEST_MODE: "true" MONGO_URL: mongodb://localhost:27017/rocketchat - - -test-with-oplog: &test-with-oplog - <<: *test - environment: - <<: *test-environment MONGO_OPLOG_URL: mongodb://localhost:27017/local steps: @@ -69,19 +63,6 @@ test-with-oplog: &test-with-oplog - save_cache: *test-save-npm-cache - store_artifacts: *test-store_artifacts -test-without-oplog: &test-without-oplog - <<: *test - steps: - - attach_workspace: *attach_workspace - - checkout - - run: *test-install-dependencies - - restore_cache: *test-restore-npm-cache - - run: *test-npm-install - - run: *test-run - - save_cache: *test-save-npm-cache - - store_artifacts: *test-store_artifacts - - version: 2 jobs: build: @@ -136,6 +117,9 @@ jobs: # rm -rf node_modules # rm -f package-lock.json meteor npm install + cd packages/rocketchat-livechat/.app + meteor npm install + cd - - run: name: Lint @@ -248,32 +232,6 @@ jobs: - image: mongo:4.0 command: [mongod, --noprealloc, --smallfiles, --replSet=rs0] - - test-without-oplog-mongo-3-2: - <<: *test-without-oplog - docker: - - image: *test-docker-image - - image: mongo:3.2 - - test-without-oplog-mongo-3-4: - <<: *test-without-oplog - docker: - - image: *test-docker-image - - image: mongo:3.4 - - test-without-oplog-mongo-3-6: - <<: *test-without-oplog - docker: - - image: *test-docker-image - - image: mongo:3.6 - - test-without-oplog-mongo-4-0: - <<: *test-without-oplog - docker: - - image: *test-docker-image - - image: mongo:4.0 - - deploy: <<: *defaults docker: @@ -449,20 +407,12 @@ workflows: only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - test-with-oplog-mongo-3-6: *test-mongo-no-pr - test-with-oplog-mongo-4-0: *test-mongo - - test-without-oplog-mongo-3-2: *test-mongo-no-pr - - test-without-oplog-mongo-3-4: *test-mongo-no-pr - - test-without-oplog-mongo-3-6: *test-mongo-no-pr - - test-without-oplog-mongo-4-0: *test-mongo-no-pr - deploy: requires: - test-with-oplog-mongo-3-2 - test-with-oplog-mongo-3-4 - test-with-oplog-mongo-3-6 - test-with-oplog-mongo-4-0 - - test-without-oplog-mongo-3-2 - - test-without-oplog-mongo-3-4 - - test-without-oplog-mongo-3-6 - - test-without-oplog-mongo-4-0 filters: branches: only: develop diff --git a/.eslintrc b/.eslintrc index 74f9766d2044..e3663d24a88f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,24 @@ { "extends": ["@rocket.chat/eslint-config"], "parser": "babel-eslint", + "rules": { + "import/no-unresolved": [2, { + "commonjs": true, + "amd": true, + "ignore": [ + "^meteor\/.+$" + ] + }], + "import/named": 0, + "import/namespace": 0, + "import/default": 0, + "import/export": 2, + "import/no-cycle": 0, + "import/no-useless-path-segments": 2, + "import/no-duplicates": 2, + "import/no-named-as-default": 0, + "import/no-named-as-default-member": 0 + }, "globals": { "__meteor_bootstrap__" : false, "__meteor_runtime_config__" : false, diff --git a/app/api/server/api.js b/app/api/server/api.js index e87b8ded3884..2d5a544e4265 100644 --- a/app/api/server/api.js +++ b/app/api/server/api.js @@ -6,9 +6,9 @@ import { Restivus } from 'meteor/nimble:restivus'; import { Logger } from '../../logger'; import { settings } from '../../settings'; import { metrics } from '../../metrics'; -import { hasPermission } from '../../authorization'; +import { hasPermission, hasAllPermission } from '../../authorization'; import { RateLimiter } from 'meteor/rate-limit'; -import { hasAllPermission } from '../../authorization'; + import _ from 'underscore'; const logger = new Logger('API', {}); diff --git a/app/apps/client/admin/appManage.js b/app/apps/client/admin/appManage.js index c1b05ddf5216..252f706d3202 100644 --- a/app/apps/client/admin/appManage.js +++ b/app/apps/client/admin/appManage.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 { TAPi18n } from 'meteor/tap:i18n'; -import { TAPi18next } from 'meteor/tap:i18n'; +import { TAPi18n, TAPi18next } from 'meteor/tap:i18n'; import { Tracker } from 'meteor/tracker'; + import { isEmail, APIClient } from '../../../utils'; import { settings } from '../../../settings'; import { Markdown } from '../../../markdown/client'; diff --git a/app/assets/server/assets.js b/app/assets/server/assets.js index 2ca5279c0685..4c8767587360 100644 --- a/app/assets/server/assets.js +++ b/app/assets/server/assets.js @@ -1,5 +1,5 @@ import { Meteor } from 'meteor/meteor'; -import { WebApp } from 'meteor/webapp'; +import { WebApp, WebAppInternals } from 'meteor/webapp'; import { settings } from '../../settings'; import { Settings } from '../../models'; import { getURL } from '../../utils/lib/getURL'; @@ -7,7 +7,7 @@ import { mime } from '../../utils/lib/mimeTypes'; import { hasPermission } from '../../authorization'; import { RocketChatFile } from '../../file'; import { WebAppHashing } from 'meteor/webapp-hashing'; -import { WebAppInternals } from 'meteor/webapp'; + import _ from 'underscore'; import sizeOf from 'image-size'; import crypto from 'crypto'; diff --git a/app/bigbluebutton/index.js b/app/bigbluebutton/index.js index a09f5ed378d9..ba58589ba3d7 100644 --- a/app/bigbluebutton/index.js +++ b/app/bigbluebutton/index.js @@ -1 +1 @@ -export * from './server/bigbluebutton-api'; +export { default } from './server/bigbluebutton-api'; diff --git a/app/bot-helpers/index.js b/app/bot-helpers/index.js index ca39cd0df4b1..f5778a23b606 100644 --- a/app/bot-helpers/index.js +++ b/app/bot-helpers/index.js @@ -1 +1 @@ -export * from './server/index'; +import './server/index'; diff --git a/app/emoji-custom/client/lib/emojiCustom.js b/app/emoji-custom/client/lib/emojiCustom.js index 9b70def17a03..97a0f5e778a0 100644 --- a/app/emoji-custom/client/lib/emojiCustom.js +++ b/app/emoji-custom/client/lib/emojiCustom.js @@ -1,7 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Session } from 'meteor/session'; -import { isSetNotNull } from '../lib/function-isSet'; +import { isSetNotNull } from './function-isSet'; import { RoomManager, call } from '../../../ui-utils'; import { emoji, EmojiPicker } from '../../../emoji'; import { CachedCollectionManager } from '../../../ui-cached-collection'; diff --git a/app/emoji/client/emojiParser.js b/app/emoji/client/emojiParser.js index 809b3c41569a..503de3c1194a 100644 --- a/app/emoji/client/emojiParser.js +++ b/app/emoji/client/emojiParser.js @@ -38,7 +38,7 @@ Tracker.autorun(() => { continue; } - if (s.trim(childNode.innerText) === '') { + if (s.trim(childNode.nodeValue) === '') { continue; } diff --git a/app/federation/server/PeerClient.js b/app/federation/server/PeerClient.js index 7e479aa90a09..65e34a0aac55 100644 --- a/app/federation/server/PeerClient.js +++ b/app/federation/server/PeerClient.js @@ -7,7 +7,7 @@ import { FederationEvents, FederationKeys, Messages, Rooms, Subscriptions, Users import { updateStatus } from './settingsUpdater'; import { logger } from './logger'; import { FederatedMessage, FederatedRoom, FederatedUser } from './federatedResources'; -import { Federation } from './'; +import { Federation } from '.'; export class PeerClient { constructor() { diff --git a/app/federation/server/PeerDNS.js b/app/federation/server/PeerDNS.js index 1959cfa6ab11..0862df91656e 100644 --- a/app/federation/server/PeerDNS.js +++ b/app/federation/server/PeerDNS.js @@ -4,7 +4,7 @@ import { FederationDNSCache } from '../../models'; import { logger } from './logger'; import { updateStatus } from './settingsUpdater'; -import { Federation } from './'; +import { Federation } from '.'; const dnsResolveSRV = Meteor.wrapAsync(dns.resolveSrv); const dnsResolveTXT = Meteor.wrapAsync(dns.resolveTxt); diff --git a/app/federation/server/PeerHTTP/PeerHTTP.js b/app/federation/server/PeerHTTP/PeerHTTP.js index f45e59eb0706..cf8d90328cb3 100644 --- a/app/federation/server/PeerHTTP/PeerHTTP.js +++ b/app/federation/server/PeerHTTP/PeerHTTP.js @@ -2,7 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; import { logger } from '../logger'; -import { Federation } from '../'; +import { Federation } from '..'; import { skipRetryOnSpecificError, delay } from './utils'; diff --git a/app/federation/server/PeerServer/PeerServer.js b/app/federation/server/PeerServer/PeerServer.js index 6f7e8f84f1ba..ebe3eed39949 100644 --- a/app/federation/server/PeerServer/PeerServer.js +++ b/app/federation/server/PeerServer/PeerServer.js @@ -5,7 +5,7 @@ import { Rooms, Subscriptions } from '../../../models'; import { FederatedMessage, FederatedRoom, FederatedUser } from '../federatedResources'; import { logger } from '../logger.js'; -import { Federation } from '../'; +import { Federation } from '..'; export class PeerServer { constructor() { diff --git a/app/federation/server/PeerServer/routes/uploads.js b/app/federation/server/PeerServer/routes/uploads.js index 696a10096529..a076259d9140 100644 --- a/app/federation/server/PeerServer/routes/uploads.js +++ b/app/federation/server/PeerServer/routes/uploads.js @@ -3,7 +3,7 @@ import { API } from '../../../../api'; import { Uploads } from '../../../../models'; import { FileUpload } from '../../../../file-upload'; -import { Federation } from '../../'; +import { Federation } from '../..'; API.v1.addRoute('federation.uploads', { authRequired: false }, { get() { diff --git a/app/federation/server/PeerServer/routes/users.js b/app/federation/server/PeerServer/routes/users.js index 4e95e5fd5f33..3442e76b7158 100644 --- a/app/federation/server/PeerServer/routes/users.js +++ b/app/federation/server/PeerServer/routes/users.js @@ -2,7 +2,7 @@ import { API } from '../../../../api'; import { Users } from '../../../../models'; import { FederatedUser } from '../../federatedResources'; -import { Federation } from '../../'; +import { Federation } from '../..'; API.v1.addRoute('federation.users', { authRequired: false }, { get() { diff --git a/app/federation/server/federatedResources/FederatedMessage.js b/app/federation/server/federatedResources/FederatedMessage.js index 97cb4c273c19..e606bbcd39a2 100644 --- a/app/federation/server/federatedResources/FederatedMessage.js +++ b/app/federation/server/federatedResources/FederatedMessage.js @@ -6,7 +6,7 @@ import { FileUpload } from '../../../file-upload'; import { FederatedResource } from './FederatedResource'; import { FederatedRoom } from './FederatedRoom'; import { FederatedUser } from './FederatedUser'; -import { Federation } from '../'; +import { Federation } from '..'; export class FederatedMessage extends FederatedResource { constructor(localPeerIdentifier, message) { diff --git a/app/federation/server/methods/addUser.js b/app/federation/server/methods/addUser.js index 45f83096d67b..46bcba87bb39 100644 --- a/app/federation/server/methods/addUser.js +++ b/app/federation/server/methods/addUser.js @@ -1,7 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Users } from '../../../models'; -import { Federation } from '../'; +import { Federation } from '..'; import { logger } from '../logger'; export function addUser(identifier) { diff --git a/app/federation/server/methods/searchUsers.js b/app/federation/server/methods/searchUsers.js index 7fe711f45b23..b27d411213b0 100644 --- a/app/federation/server/methods/searchUsers.js +++ b/app/federation/server/methods/searchUsers.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import { Federation } from '../'; +import { Federation } from '..'; export function searchUsers(identifier) { if (!Meteor.userId()) { diff --git a/app/file-upload/server/config/AmazonS3.js b/app/file-upload/server/config/AmazonS3.js index 532cd2b281ac..31fdfc79b3cd 100644 --- a/app/file-upload/server/config/AmazonS3.js +++ b/app/file-upload/server/config/AmazonS3.js @@ -1,7 +1,7 @@ import _ from 'underscore'; import { settings } from '../../../settings'; -import { FileUploadClass } from '../lib/FileUpload'; -import { FileUpload } from '../lib/FileUpload'; +import { FileUploadClass, FileUpload } from '../lib/FileUpload'; + import '../../ufs/AmazonS3/server.js'; import http from 'http'; import https from 'https'; diff --git a/app/lazy-load/client/lazyloadImage.js b/app/lazy-load/client/lazyloadImage.js index 4798d80363bb..352ff679a49b 100644 --- a/app/lazy-load/client/lazyloadImage.js +++ b/app/lazy-load/client/lazyloadImage.js @@ -1,7 +1,7 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; import './lazyloadImage.html'; -import { addImage } from './'; +import { addImage } from '.'; const emptyImageEncoded = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8+/u3PQAJJAM0dIyWdgAAAABJRU5ErkJggg=='; diff --git a/app/ldap/server/ldap.js b/app/ldap/server/ldap.js index 925279cc1f3b..0af7687477b7 100644 --- a/app/ldap/server/ldap.js +++ b/app/ldap/server/ldap.js @@ -3,7 +3,6 @@ import { settings } from '../../settings'; import { Logger } from '../../logger'; import ldapjs from 'ldapjs'; import Bunyan from 'bunyan'; -import ldapEscape from 'ldap-escape'; const logger = new Logger('LDAP', { sections: { @@ -183,7 +182,6 @@ export default class LDAP { } getUserFilter(username) { - username = ldapEscape.filter`${ username }`; const filter = []; if (this.options.User_Search_Filter !== '') { @@ -320,9 +318,6 @@ export default class LDAP { } isUserInGroup(username, userdn) { - username = ldapEscape.filter`${ username }`; - userdn = ldapEscape.dn`${ userdn }`; - if (!this.options.group_filter_enabled) { return true; } @@ -484,7 +479,6 @@ export default class LDAP { } authSync(dn, password) { - dn = ldapEscape.dn`${ dn }`; logger.auth.info('Authenticating', dn); try { diff --git a/app/ldap/server/loginHandler.js b/app/ldap/server/loginHandler.js index 7d87f4341f94..ed5134932719 100644 --- a/app/ldap/server/loginHandler.js +++ b/app/ldap/server/loginHandler.js @@ -7,6 +7,8 @@ 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', {}); function fallbackDefaultAccountSystem(bind, username, password) { @@ -46,23 +48,25 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { const ldap = new LDAP(); let ldapUser; + const escapedUsername = ldapEscape.filter`${ loginRequest.username }`; + try { ldap.connectSync(); - const users = ldap.searchUsersSync(loginRequest.username); + const users = ldap.searchUsersSync(escapedUsername); if (users.length !== 1) { - logger.info('Search returned', users.length, 'record(s) for', loginRequest.username); + logger.info('Search returned', users.length, 'record(s) for', escapedUsername); throw new Error('User not Found'); } if (ldap.authSync(users[0].dn, loginRequest.ldapPass) === true) { - if (ldap.isUserInGroup(loginRequest.username, users[0].dn)) { + if (ldap.isUserInGroup(escapedUsername, users[0].dn)) { ldapUser = users[0]; } else { throw new Error('User not in a valid group'); } } else { - logger.info('Wrong password for', loginRequest.username); + logger.info('Wrong password for', escapedUsername); } } catch (error) { logger.error(error); diff --git a/app/lib/lib/roomTypes/private.js b/app/lib/lib/roomTypes/private.js index 53a48914c946..4dc389911df0 100644 --- a/app/lib/lib/roomTypes/private.js +++ b/app/lib/lib/roomTypes/private.js @@ -3,10 +3,10 @@ import { ChatRoom, ChatSubscription } from '../../../models'; import { openRoom } from '../../../ui-utils'; import { settings } from '../../../settings'; import { hasAtLeastOnePermission, hasPermission } from '../../../authorization'; -import { getUserPreference, RoomSettingsEnum, RoomTypeConfig, RoomTypeRouteConfig, UiTextContext } from '../../../utils'; +import { getUserPreference, RoomSettingsEnum, RoomTypeConfig, RoomTypeRouteConfig, UiTextContext, roomTypes } from '../../../utils'; import { getRoomAvatarURL } from '../../../utils/lib/getRoomAvatarURL'; import { getAvatarURL } from '../../../utils/lib/getAvatarURL'; -import { roomTypes } from '../../../utils'; + export class PrivateRoomRoute extends RoomTypeRouteConfig { constructor() { diff --git a/app/lib/server/functions/notifications/mobile.js b/app/lib/server/functions/notifications/mobile.js index de4fe7f286ff..030285198b75 100644 --- a/app/lib/server/functions/notifications/mobile.js +++ b/app/lib/server/functions/notifications/mobile.js @@ -18,7 +18,7 @@ Meteor.startup(() => { }); async function getBadgeCount(userId) { - const [result] = await SubscriptionRaw.aggregate([ + const [result = {}] = await SubscriptionRaw.aggregate([ { $match: { 'u._id': userId } }, { $group: { diff --git a/app/lib/server/index.js b/app/lib/server/index.js index 2ca58a15f606..8dec3f3b38d2 100644 --- a/app/lib/server/index.js +++ b/app/lib/server/index.js @@ -1,4 +1,3 @@ -export { hostname } from '../lib/startup/settingsOnLoadSiteUrl'; export * from './lib'; export * from './functions'; import './startup/email'; diff --git a/app/lib/server/lib/sendNotificationsOnMessage.js b/app/lib/server/lib/sendNotificationsOnMessage.js index 52d31597ab00..624077aad1bb 100644 --- a/app/lib/server/lib/sendNotificationsOnMessage.js +++ b/app/lib/server/lib/sendNotificationsOnMessage.js @@ -5,7 +5,7 @@ import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { Subscriptions } from '../../../models'; import { roomTypes } from '../../../utils'; -import { callJoinRoom, messageContainsHighlight, parseMessageTextPerUser, replaceMentionedUsernamesWithFullNames } from '../functions/notifications/'; +import { callJoinRoom, messageContainsHighlight, parseMessageTextPerUser, replaceMentionedUsernamesWithFullNames } from '../functions/notifications'; import { sendEmail, shouldNotifyEmail } from '../functions/notifications/email'; import { sendSinglePush, shouldNotifyMobile } from '../functions/notifications/mobile'; import { notifyDesktopUser, shouldNotifyDesktop } from '../functions/notifications/desktop'; diff --git a/app/lib/server/startup/settings.js b/app/lib/server/startup/settings.js index 630daf1845ba..e219fcf36ca4 100644 --- a/app/lib/server/startup/settings.js +++ b/app/lib/server/startup/settings.js @@ -811,10 +811,6 @@ settings.addGroup('General', function() { type: 'string', public: false, }); - this.add('Force_Disable_OpLog_For_Cache', false, { - type: 'boolean', - public: false, - }); this.add('Restart', 'restart_server', { type: 'action', actionText: 'Restart_the_server', diff --git a/app/lib/server/startup/settingsOnLoadDirectReply.js b/app/lib/server/startup/settingsOnLoadDirectReply.js index 7cc0b77cc3c5..884e3aaa169a 100644 --- a/app/lib/server/startup/settingsOnLoadDirectReply.js +++ b/app/lib/server/startup/settingsOnLoadDirectReply.js @@ -1,8 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings'; import _ from 'underscore'; -import { IMAPIntercepter, POP3Helper } from '../lib/interceptDirectReplyEmails.js'; -import { POP3 } from '../lib/interceptDirectReplyEmails'; +import { IMAPIntercepter, POP3Helper, POP3 } from '../lib/interceptDirectReplyEmails.js'; + let IMAP; let _POP3Helper; diff --git a/app/livechat/client/views/sideNav/livechat.js b/app/livechat/client/views/sideNav/livechat.js index 4730819a1697..2019c39082da 100644 --- a/app/livechat/client/views/sideNav/livechat.js +++ b/app/livechat/client/views/sideNav/livechat.js @@ -3,12 +3,12 @@ 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 } from '../../../../models'; +import { ChatSubscription, Users } from '../../../../models'; import { KonchatNotification } from '../../../../ui'; import { settings } from '../../../../settings'; import { hasRole } from '../../../../authorization'; import { modal } from '../../../../ui-utils'; -import { Users } from '../../../../models'; + import { t, handleError, getUserPreference, roomTypes } from '../../../../utils'; import { LivechatInquiry } from '../../../lib/LivechatInquiry'; diff --git a/app/livechat/server/index.js b/app/livechat/server/index.js index 70994cc2be10..3458109384d3 100644 --- a/app/livechat/server/index.js +++ b/app/livechat/server/index.js @@ -54,6 +54,7 @@ import './methods/startVideoCall'; import './methods/startFileUploadRoom'; import './methods/transfer'; import './methods/webhookTest'; +import './methods/setUpConnection'; import './methods/takeInquiry'; import './methods/returnAsInquiry'; import './methods/saveOfficeHours'; diff --git a/app/livechat/server/methods/setUpConnection.js b/app/livechat/server/methods/setUpConnection.js new file mode 100644 index 000000000000..bb040ff62131 --- /dev/null +++ b/app/livechat/server/methods/setUpConnection.js @@ -0,0 +1,21 @@ +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import { Livechat } from '../lib/Livechat'; + +Meteor.methods({ + 'livechat:setUpConnection'(data) { + + check(data, { + token: String, + }); + + const { token } = data; + + if (!this.connection.livechatToken) { + this.connection.livechatToken = token; + this.connection.onClose(() => { + Livechat.notifyGuestStatusChanged(token, 'offline'); + }); + } + }, +}); diff --git a/app/livechat/server/roomType.js b/app/livechat/server/roomType.js index 068a3da2adbb..3bbe342fb349 100644 --- a/app/livechat/server/roomType.js +++ b/app/livechat/server/roomType.js @@ -1,7 +1,7 @@ -import { Rooms } from '../../models'; +import { Rooms, LivechatVisitors } from '../../models'; import { roomTypes } from '../../utils'; import LivechatRoomType from '../lib/LivechatRoomType'; -import { LivechatVisitors } from '../../models'; + class LivechatRoomTypeServer extends LivechatRoomType { getMsgSender(senderId) { diff --git a/app/message-attachments/client/index.js b/app/message-attachments/client/index.js index 7dc6bfe9281b..f3cd8f6e320f 100644 --- a/app/message-attachments/client/index.js +++ b/app/message-attachments/client/index.js @@ -1,10 +1,10 @@ import './messageAttachment.html'; import './messageAttachment'; import './renderField.html'; -import './renderField'; - import { registerFieldTemplate } from './renderField'; + + export { registerFieldTemplate, }; diff --git a/app/models/server/models/_BaseDb.js b/app/models/server/models/_BaseDb.js index b287cd432e8f..c5c79c8fbc5a 100644 --- a/app/models/server/models/_BaseDb.js +++ b/app/models/server/models/_BaseDb.js @@ -2,7 +2,6 @@ import { Match } from 'meteor/check'; import { Mongo, MongoInternals } from 'meteor/mongo'; import _ from 'underscore'; import { EventEmitter } from 'events'; -import { settings } from '../../../settings/server/functions/settings'; const baseName = 'rocketchat_'; @@ -14,8 +13,7 @@ try { console.log(e); } -const isOplogAvailable = MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle && !!MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry; -let isOplogEnabled = isOplogAvailable; +const isOplogEnabled = MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle && !!MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry; export class BaseDb extends EventEmitter { constructor(model, baseModel) { @@ -36,7 +34,6 @@ export class BaseDb extends EventEmitter { this.wrapModel(); let alreadyListeningToOplog = false; - this.listenSettings(); // When someone start listening for changes we start oplog if available this.on('newListener', (event/* , listener*/) => { if (event === 'change' && alreadyListeningToOplog === false) { @@ -58,12 +55,6 @@ export class BaseDb extends EventEmitter { this.tryEnsureIndex({ _updatedAt: 1 }); } - listenSettings() { - settings.get('Force_Disable_OpLog_For_Cache', (key, value) => { - isOplogEnabled = isOplogAvailable && value === false; - }); - } - get baseName() { return baseName; } @@ -142,10 +133,6 @@ export class BaseDb extends EventEmitter { } processOplogRecord(action) { - if (isOplogEnabled === false) { - return; - } - if (action.op.op === 'i') { this.emit('change', { action: 'insert', @@ -214,66 +201,13 @@ export class BaseDb extends EventEmitter { record._id = result; - if (!isOplogEnabled && this.listenerCount('change') > 0) { - this.emit('change', { - action: 'insert', - clientAction: 'inserted', - id: result, - data: _.extend({}, record), - oplog: false, - }); - } - return result; } update(query, update, options = {}) { this.setUpdatedAt(update, true, query); - let ids = []; - if (!isOplogEnabled && this.listenerCount('change') > 0) { - const findOptions = { fields: { _id: 1 } }; - let records = options.multi ? this.find(query, findOptions).fetch() : this.findOne(query, findOptions) || []; - if (!Array.isArray(records)) { - records = [records]; - } - - ids = records.map((item) => item._id); - if (options.upsert !== true && this.updateHasPositionalOperator(update) === false) { - query = { - _id: { - $in: ids, - }, - }; - } - } - - // TODO: CACHE: Can we use findAndModify here when oplog is disabled? - const result = this.originals.update(query, update, options); - - if (!isOplogEnabled && this.listenerCount('change') > 0) { - if (options.upsert === true && result.insertedId) { - this.emit('change', { - action: 'insert', - clientAction: 'inserted', - id: result.insertedId, - oplog: false, - }); - - return result; - } - - for (const id of ids) { - this.emit('change', { - action: 'update', - clientAction: 'updated', - id, - oplog: false, - }); - } - } - - return result; + return this.originals.update(query, update, options); } upsert(query, update, options = {}) { @@ -297,21 +231,7 @@ export class BaseDb extends EventEmitter { query = { _id: { $in: ids } }; - const result = this.originals.remove(query); - - if (!isOplogEnabled && this.listenerCount('change') > 0) { - for (const record of records) { - this.emit('change', { - action: 'remove', - clientAction: 'removed', - id: record._id, - data: _.extend({}, record), - oplog: false, - }); - } - } - - return result; + return this.originals.remove(query); } insertOrUpsert(...args) { diff --git a/app/search/server/index.js b/app/search/server/index.js index 2557161112e3..12edd159209c 100644 --- a/app/search/server/index.js +++ b/app/search/server/index.js @@ -1,10 +1,10 @@ import SearchProvider from './model/provider'; -import './service/providerService.js'; +import { searchProviderService } from './service/providerService.js'; import './service/validationService.js'; import './events/events.js'; import './provider/defaultProvider.js'; -import { searchProviderService } from './service/providerService'; + export { searchProviderService, diff --git a/app/search/server/service/providerService.js b/app/search/server/service/providerService.js index 730d02134373..04ee935f8b81 100644 --- a/app/search/server/service/providerService.js +++ b/app/search/server/service/providerService.js @@ -1,7 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings'; import _ from 'underscore'; -import { validationService } from '../service/validationService'; +import { validationService } from './validationService'; import SearchLogger from '../logger/logger'; class SearchProviderService { diff --git a/app/statistics/server/functions/get.js b/app/statistics/server/functions/get.js index 0224bb002824..2553ba87fca1 100644 --- a/app/statistics/server/functions/get.js +++ b/app/statistics/server/functions/get.js @@ -138,7 +138,7 @@ statistics.get = function _getStatistics() { const { mongo } = MongoInternals.defaultRemoteCollectionDriver(); - if (mongo._oplogHandle && mongo._oplogHandle.onOplogEntry && settings.get('Force_Disable_OpLog_For_Cache') !== true) { + if (mongo._oplogHandle && mongo._oplogHandle.onOplogEntry) { statistics.oplogEnabled = true; } diff --git a/app/theme/client/imports/components/contextual-bar.css b/app/theme/client/imports/components/contextual-bar.css index 67ac24cf86d0..e288f0def187 100644 --- a/app/theme/client/imports/components/contextual-bar.css +++ b/app/theme/client/imports/components/contextual-bar.css @@ -113,6 +113,11 @@ font-size: 20px; } + + &--empty { + border-bottom: none; + background: none; + } } & .search-form .rc-input__icon-svg { diff --git a/app/theme/client/imports/components/messages.css b/app/theme/client/imports/components/messages.css index 19a4edb1c60a..a1542ccdf027 100644 --- a/app/theme/client/imports/components/messages.css +++ b/app/theme/client/imports/components/messages.css @@ -125,6 +125,8 @@ color: inherit !important; + border: unset !important; + background-color: unset !important; font-family: inherit !important; diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index bff94cd7f1f7..c5e9f3cb4064 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -2899,26 +2899,6 @@ rc-old select, opacity: 1; - & .inline-image { - display: inline-block; - - border-radius: 3px; - background-repeat: no-repeat; - background-position: center left; - background-size: contain; - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); - - line-height: 0; - - & img { - max-width: 100%; - max-height: 200px; - - cursor: pointer; - object-fit: contain; - } - } - & > h1 { font-size: 3em; line-height: 1em; @@ -2997,6 +2977,26 @@ rc-old select, font-weight: 400; } + & .inline-image { + display: inline-block; + + border-radius: 3px; + background-repeat: no-repeat; + background-position: center left; + background-size: contain; + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); + + line-height: 0; + + & img { + max-width: 100%; + max-height: 200px; + + cursor: pointer; + object-fit: contain; + } + } + &.livechat_navigation_history { & .thumb, & .user, @@ -5011,7 +5011,6 @@ rc-old select, flex-direction: column; height: 100%; - padding: 20px; } &__header { diff --git a/app/threads/client/flextab/thread.html b/app/threads/client/flextab/thread.html index 5dee194d0461..842d934429dd 100644 --- a/app/threads/client/flextab/thread.html +++ b/app/threads/client/flextab/thread.html @@ -3,7 +3,7 @@
@@ -16,7 +16,7 @@