From d53e264b83ccc971236123853e4b68c9eb6beeb4 Mon Sep 17 00:00:00 2001 From: Diego Sampaio <chinello@gmail.com> Date: Fri, 10 May 2019 12:02:59 -0300 Subject: [PATCH] New eslint rules (#14332) * Fix new eslint rules * Fix eslint rules: no-unsafe-finally no-await-in-loop * More and more rules * Fix changes after lint fixes * Fix import orders * New eslint rules operator-linebreak new-parens * New eslint rule: no-useless-computed-key * New eslint rule: no-useless-constructor * Fix after develop merge * Update lint package and fix new code --- .scripts/fix-i18n.js | 3 +- .scripts/logs.js | 3 +- .scripts/md.js | 7 +- .scripts/set-version.js | 3 +- .scripts/start.js | 7 +- .scripts/version.js | 3 +- app/2fa/client/TOTPPassword.js | 3 +- app/2fa/client/accountSecurity.js | 5 +- app/2fa/server/lib/totp.js | 3 +- app/2fa/server/loginHandler.js | 3 +- app/2fa/server/methods/disable.js | 1 + app/2fa/server/methods/enable.js | 1 + app/2fa/server/methods/regenerateCodes.js | 1 + app/2fa/server/methods/validateTempToken.js | 1 + app/2fa/server/startup/settings.js | 2 - app/action-links/both/lib/actionLinks.js | 1 + app/action-links/client/init.js | 2 +- app/action-links/client/lib/actionLinks.js | 1 + app/action-links/server/actionLinkHandler.js | 1 + app/analytics/client/loadScript.js | 1 + app/analytics/client/trackEvents.js | 3 +- app/api/server/api.js | 15 +- app/api/server/helpers/deprecationWarning.js | 1 - app/api/server/helpers/getLoggedInUser.js | 1 + app/api/server/helpers/getUserFromParams.js | 1 + app/api/server/helpers/insertUserObject.js | 1 - app/api/server/helpers/isUserFromParams.js | 8 +- app/api/server/helpers/parseJsonQuery.js | 3 +- app/api/server/index.js | 3 +- app/api/server/v1/assets.js | 5 +- app/api/server/v1/channels.js | 16 +- app/api/server/v1/chat.js | 9 +- app/api/server/v1/commands.js | 3 +- app/api/server/v1/e2e.js | 5 +- app/api/server/v1/emoji-custom.js | 4 +- app/api/server/v1/groups.js | 23 +- app/api/server/v1/im.js | 13 +- app/api/server/v1/import.js | 3 +- app/api/server/v1/integrations.js | 5 +- app/api/server/v1/misc.js | 3 +- app/api/server/v1/permissions.js | 5 +- app/api/server/v1/push.js | 15 +- app/api/server/v1/roles.js | 1 + app/api/server/v1/rooms.js | 9 +- app/api/server/v1/settings.js | 7 +- app/api/server/v1/stats.js | 3 +- app/api/server/v1/subscriptions.js | 5 +- app/api/server/v1/users.js | 11 +- app/api/server/v1/video-conference.js | 1 + app/apps/client/admin/appInstall.js | 1 + app/apps/client/admin/appLogs.js | 6 +- app/apps/client/admin/appManage.js | 22 +- app/apps/client/admin/appWhatIsIt.js | 1 + app/apps/client/admin/apps.js | 1 + app/apps/client/admin/marketplace.js | 2 +- .../admin/modalTemplates/iframeModal.js | 1 + app/apps/client/communication/websockets.js | 1 + app/apps/client/index.js | 4 +- app/apps/client/orchestrator.js | 5 +- app/apps/server/bridges/commands.js | 3 +- app/apps/server/bridges/environmental.js | 4 +- app/apps/server/bridges/listeners.js | 8 +- app/apps/server/bridges/messages.js | 1 + app/apps/server/bridges/rooms.js | 3 +- app/apps/server/communication/methods.js | 1 + app/apps/server/communication/rest.js | 41 +- app/apps/server/converters/messages.js | 1 + app/apps/server/converters/rooms.js | 3 +- app/apps/server/converters/settings.js | 3 +- app/apps/server/converters/users.js | 3 +- app/apps/server/orchestrator.js | 7 +- app/apps/server/tests/messages.tests.js | 27 +- .../server/tests/mocks/data/messages.data.js | 1 - .../tests/mocks/models/Messages.mock.js | 44 +- .../server/tests/mocks/models/Users.mock.js | 24 +- .../server/tests/mocks/orchestrator.mock.js | 1 - app/assets/server/assets.js | 20 +- app/authorization/client/hasPermission.js | 4 +- app/authorization/client/route.js | 1 + app/authorization/client/startup.js | 4 +- app/authorization/client/usersNameChanged.js | 1 + app/authorization/client/views/permissions.js | 4 +- .../client/views/permissionsRole.js | 11 +- .../server/functions/addUserRoles.js | 5 +- .../server/functions/canAccessRoom.js | 2 +- .../server/functions/canSendMessage.js | 3 +- .../server/functions/getUsersInRole.js | 1 - .../server/functions/removeUserFromRoles.js | 5 +- .../server/methods/addPermissionToRole.js | 1 + .../server/methods/addUserToRole.js | 3 +- .../server/methods/deleteRole.js | 1 + .../methods/removeRoleFromPermission.js | 1 + .../server/methods/removeUserFromRole.js | 3 +- app/authorization/server/methods/saveRole.js | 1 + .../server/publications/permissions.js | 1 + .../server/publications/roles.js | 1 + .../server/publications/usersInRole.js | 1 + app/authorization/server/startup.js | 141 ++-- app/autolinker/client/client.js | 3 +- app/autolinker/server/settings.js | 1 + app/autotranslate/client/index.js | 3 +- app/autotranslate/client/lib/actionButton.js | 8 +- app/autotranslate/client/lib/autotranslate.js | 5 +- app/autotranslate/client/lib/tabBar.js | 1 + .../client/views/autoTranslateFlexTab.js | 9 +- app/autotranslate/server/autotranslate.js | 20 +- .../server/methods/getSupportedLanguages.js | 1 + .../server/methods/saveSettings.js | 1 + .../server/methods/translateMessage.js | 1 + app/autotranslate/server/permissions.js | 1 + app/autotranslate/server/settings.js | 1 + app/blockstack/server/loginHandler.js | 7 +- app/blockstack/server/routes.js | 1 + app/blockstack/server/settings.js | 3 +- app/blockstack/server/tokenHandler.js | 1 + app/blockstack/server/userHandler.js | 3 +- app/bot-helpers/server/index.js | 42 +- app/bot-helpers/server/settings.js | 1 + app/callbacks/lib/callbacks.js | 5 +- app/cas/client/cas_client.js | 8 +- app/cas/server/cas_rocketchat.js | 20 +- app/cas/server/cas_server.js | 20 +- .../client/lib/startup.js | 1 + .../client/views/mailMessagesInstructions.js | 9 +- .../server/lib/startup.js | 1 + .../server/methods/mailMessages.js | 5 +- app/channel-settings/client/index.js | 3 +- .../client/lib/ChannelSettings.js | 2 +- .../client/startup/messageTypes.js | 3 +- app/channel-settings/client/startup/tabBar.js | 1 + .../client/startup/trackSettingsChange.js | 1 + .../client/views/channelSettings.js | 13 +- .../server/functions/saveReactWhenReadOnly.js | 1 + .../server/functions/saveRoomAnnouncement.js | 1 + .../server/functions/saveRoomCustomFields.js | 1 + .../server/functions/saveRoomDescription.js | 1 + .../server/functions/saveRoomName.js | 1 + .../server/functions/saveRoomReadOnly.js | 1 + .../functions/saveRoomSystemMessages.js | 1 + .../server/functions/saveRoomTokens.js | 1 + .../server/functions/saveRoomTopic.js | 1 + .../server/functions/saveRoomType.js | 1 + .../server/functions/saveStreamingOptions.js | 1 + app/channel-settings/server/index.js | 3 +- .../server/methods/saveRoomSettings.js | 4 +- app/channel-settings/server/startup.js | 1 + app/chatpal-search/client/route.js | 1 + app/chatpal-search/client/template/admin.js | 7 +- app/chatpal-search/client/template/result.js | 3 +- app/chatpal-search/server/provider/index.js | 61 +- .../server/provider/provider.js | 36 +- app/chatpal-search/server/utils/utils.js | 6 +- app/cloud/client/admin/callback.js | 5 +- app/cloud/client/admin/cloud.js | 6 +- app/cloud/client/index.js | 1 + .../functions/checkUserHasCloudLogin.js | 2 +- .../server/functions/connectWorkspace.js | 5 +- .../functions/finishOAuthAuthorization.js | 4 +- .../functions/getOAuthAuthorizationUrl.js | 4 +- .../functions/getUserCloudAccessToken.js | 5 +- .../functions/getWorkspaceAccessToken.js | 5 +- .../server/functions/getWorkspaceLicense.js | 3 +- .../functions/retrieveRegistrationStatus.js | 2 +- .../functions/startRegisterWorkspace.js | 8 +- app/cloud/server/functions/syncWorkspace.js | 7 +- .../server/functions/unregisterWorkspace.js | 2 +- app/cloud/server/functions/userLoggedOut.js | 1 - app/cloud/server/functions/userLogout.js | 3 +- app/cloud/server/index.js | 1 - app/cloud/server/methods.js | 5 +- app/colors/client/client.js | 3 +- app/cors/lib/common.js | 1 + app/cors/server/cors.js | 11 +- app/crowd/server/crowd.js | 7 +- app/crowd/server/index.js | 1 - app/crowd/server/settings.js | 1 + .../client/custom_oauth_client.js | 5 +- .../server/custom_oauth_server.js | 11 +- app/custom-sounds/client/admin/adminSounds.js | 15 +- app/custom-sounds/client/admin/soundEdit.js | 6 +- app/custom-sounds/client/admin/soundInfo.js | 1 + app/custom-sounds/client/index.js | 3 +- app/custom-sounds/client/lib/CustomSounds.js | 3 +- .../client/notifications/deleteCustomSound.js | 1 + .../client/notifications/updateCustomSound.js | 1 + .../server/methods/deleteCustomSound.js | 1 + .../server/methods/insertOrUpdateSound.js | 24 +- .../server/methods/listCustomSounds.js | 1 + .../server/methods/uploadCustomSound.js | 1 + .../server/publications/customSounds.js | 3 +- .../server/startup/custom-sounds.js | 6 +- .../server/startup/permissions.js | 1 + .../client/createDiscussionMessageAction.js | 8 +- .../client/discussionFromMessageBox.js | 1 - .../client/views/DiscussionTabbar.js | 1 + .../views/creationDialog/CreateDiscussion.js | 12 +- app/discussion/lib/discussionRoomType.js | 1 + app/discussion/server/authorization.js | 1 + app/discussion/server/config.js | 1 + .../server/hooks/joinDiscussionOnMessage.js | 1 - .../hooks/propagateDiscussionMetadata.js | 2 +- .../server/methods/createDiscussion.js | 1 - app/discussion/server/permissions.js | 1 + app/dolphin/lib/common.js | 3 +- app/drupal/lib/common.js | 1 + app/e2e/client/accountEncryption.js | 10 +- app/e2e/client/events.js | 1 + app/e2e/client/helper.js | 22 +- app/e2e/client/rocketchat.e2e.js | 13 +- app/e2e/client/rocketchat.e2e.room.js | 10 +- app/e2e/client/tabbar.js | 3 +- app/e2e/server/methods/fetchMyKeys.js | 1 + .../methods/getUsersOfRoomWithoutKey.js | 1 + .../server/methods/requestSubscriptionKeys.js | 5 +- app/e2e/server/methods/resetUserE2EKey.js | 1 + app/e2e/server/methods/setRoomKeyID.js | 1 + .../methods/setUserPublicAndPivateKeys.js | 1 + app/e2e/server/methods/updateGroupKey.js | 1 + app/emoji-custom/client/admin/adminEmoji.js | 11 +- app/emoji-custom/client/admin/emojiEdit.js | 4 +- app/emoji-custom/client/admin/emojiInfo.js | 20 +- app/emoji-custom/client/lib/emojiCustom.js | 1 + app/emoji-custom/client/lib/function-isSet.js | 6 +- .../client/notifications/deleteEmojiCustom.js | 1 + .../client/notifications/updateEmojiCustom.js | 1 + .../server/methods/deleteEmojiCustom.js | 1 + .../server/methods/insertOrUpdateEmoji.js | 62 +- .../server/methods/listEmojiCustom.js | 1 + .../server/methods/uploadEmojiCustom.js | 1 + .../server/publications/fullEmojiData.js | 3 +- .../server/startup/emoji-custom.js | 6 +- app/emoji-emojione/lib/rocketchat.js | 8 +- app/emoji-emojione/server/callbacks.js | 3 +- app/emoji/client/emojiParser.js | 1 - app/emoji/client/emojiPicker.js | 9 +- app/emoji/client/function-isSet.js | 6 +- app/emoji/client/index.js | 2 +- app/emoji/client/lib/EmojiPicker.js | 3 +- app/emoji/client/lib/emojiRenderer.js | 3 +- .../server/lib/RocketChat.ErrorHandler.js | 3 +- app/favico/client/index.js | 1 - app/federation/client/admin/dashboard.js | 2 +- app/federation/server/PeerClient.js | 12 +- app/federation/server/PeerDNS.js | 5 +- app/federation/server/PeerHTTP/PeerHTTP.js | 3 +- app/federation/server/PeerPinger.js | 7 +- .../server/PeerServer/PeerServer.js | 2 +- .../server/PeerServer/routes/events.js | 2 +- .../server/PeerServer/routes/uploads.js | 2 +- .../server/PeerServer/routes/users.js | 1 - .../federatedResources/FederatedMessage.js | 4 +- .../federatedResources/FederatedRoom.js | 4 +- .../federatedResources/FederatedUser.js | 2 +- app/federation/server/federation-settings.js | 1 + app/federation/server/index.js | 8 +- app/federation/server/methods/addUser.js | 2 + app/federation/server/methods/dashboard.js | 1 + app/federation/server/methods/ping.js | 1 + .../client/lib/fileUploadHandler.js | 4 +- app/file-upload/lib/FileUploadBase.js | 3 +- app/file-upload/server/config/AmazonS3.js | 7 +- app/file-upload/server/config/FileSystem.js | 10 +- .../server/config/GoogleStorage.js | 6 +- app/file-upload/server/config/GridFS.js | 4 +- app/file-upload/server/config/Webdav.js | 1 + .../server/config/_configUploadStorage.js | 3 +- app/file-upload/server/lib/FileUpload.js | 10 +- app/file-upload/server/lib/proxy.js | 6 +- app/file-upload/server/lib/requests.js | 4 +- .../server/methods/getS3FileUrl.js | 1 + .../server/methods/sendFileMessage.js | 3 +- app/file-upload/ufs/AmazonS3/server.js | 4 +- app/file-upload/ufs/GoogleStorage/server.js | 1 - app/file-upload/ufs/Webdav/server.js | 9 +- app/file/server/file.server.js | 9 +- app/github-enterprise/lib/common.js | 1 + app/gitlab/lib/common.js | 1 + app/google-vision/client/googlevision.js | 1 + app/google-vision/server/googlevision.js | 5 +- app/google-vision/server/settings.js | 1 + app/grant-facebook/server/index.js | 3 +- app/grant-github/server/index.js | 3 +- app/grant-google/server/index.js | 3 +- app/grant/server/authenticate.js | 9 +- app/grant/server/error.js | 3 - app/grant/server/grant.js | 2 +- app/grant/server/providers.js | 2 +- app/grant/server/settings.js | 5 +- app/graphql/server/api.js | 3 +- .../server/mocks/accounts/graphql-api.js | 6 +- .../server/resolvers/accounts/index.js | 3 +- .../resolvers/accounts/oauthProviders.js | 3 +- .../server/resolvers/channels/Channel-type.js | 2 +- .../resolvers/channels/channelByName.js | 3 +- .../server/resolvers/channels/channels.js | 5 +- .../resolvers/channels/channelsByUser.js | 3 +- .../resolvers/channels/deleteChannel.js | 2 +- .../resolvers/channels/directChannel.js | 3 +- .../server/resolvers/channels/hideChannel.js | 2 +- .../server/resolvers/channels/leaveChannel.js | 2 +- .../server/resolvers/messages/Message-type.js | 2 +- .../messages/addReactionToMessage.js | 2 +- .../resolvers/messages/chatMessageAdded.js | 4 +- .../resolvers/messages/deleteMessage.js | 2 +- .../server/resolvers/messages/editMessage.js | 2 +- .../server/resolvers/messages/messages.js | 1 - .../server/resolvers/users/User-type.js | 4 +- .../server/resolvers/users/setStatus.js | 1 - app/highlight-words/client/client.js | 3 +- app/highlight-words/client/helper.js | 1 - app/highlight-words/tests/helper.tests.js | 1 + app/iframe-login/client/iframe_client.js | 3 +- app/iframe-login/server/iframe_rocketchat.js | 1 + app/importer-csv/server/adder.js | 2 +- app/importer-csv/server/importer.js | 3 +- .../server/adder.js | 2 +- .../server/importer.js | 33 +- app/importer-hipchat/server/adder.js | 2 +- app/importer-hipchat/server/importer.js | 22 +- app/importer-slack-users/server/adder.js | 2 +- app/importer-slack-users/server/importer.js | 1 + app/importer-slack/server/adder.js | 2 +- app/importer-slack/server/importer.js | 9 +- .../client/ImporterWebsocketReceiver.js | 1 + app/importer/client/admin/adminImport.js | 3 + .../client/admin/adminImportHistory.js | 9 +- .../client/admin/adminImportPrepare.js | 17 +- .../client/admin/adminImportProgress.js | 5 +- app/importer/client/index.js | 2 +- app/importer/server/classes/ImporterBase.js | 20 +- app/importer/server/index.js | 6 +- .../methods/downloadPublicImportFile.js | 7 +- .../server/methods/getImportFileData.js | 25 +- .../server/methods/getImportProgress.js | 2 + .../methods/getLatestImportOperations.js | 1 + .../server/methods/getSelectionData.js | 2 + app/importer/server/methods/prepareImport.js | 5 +- app/importer/server/methods/restartImport.js | 2 + app/importer/server/methods/setupImporter.js | 2 + app/importer/server/methods/startImport.js | 2 + .../server/methods/uploadImportFile.js | 2 + app/importer/server/models/Imports.js | 2 +- .../server/startup/setImportsToInvalid.js | 1 + app/importer/server/startup/store.js | 1 + app/integrations/client/route.js | 1 + app/integrations/client/views/integrations.js | 3 +- .../client/views/integrationsIncoming.js | 28 +- .../client/views/integrationsNew.js | 1 + .../client/views/integrationsOutgoing.js | 12 +- .../views/integrationsOutgoingHistory.js | 20 +- app/integrations/server/api/api.js | 25 +- app/integrations/server/lib/triggerHandler.js | 24 +- app/integrations/server/lib/validation.js | 6 +- .../server/methods/clearIntegrationHistory.js | 1 + .../incoming/addIncomingIntegration.js | 6 +- .../incoming/deleteIncomingIntegration.js | 3 +- .../incoming/updateIncomingIntegration.js | 6 +- .../outgoing/addOutgoingIntegration.js | 1 + .../outgoing/deleteOutgoingIntegration.js | 1 + .../outgoing/replayOutgoingIntegration.js | 1 + .../outgoing/updateOutgoingIntegration.js | 1 + .../server/publications/integrationHistory.js | 6 +- .../server/publications/integrations.js | 6 +- app/irc/server/irc-bridge/index.js | 5 +- .../irc-bridge/localHandlers/onCreateUser.js | 1 + .../irc-bridge/localHandlers/onLogin.js | 1 + .../irc-bridge/peerHandlers/disconnected.js | 1 + .../irc-bridge/peerHandlers/userRegistered.js | 1 + app/irc/server/irc-settings.js | 1 + app/irc/server/irc.js | 3 +- app/irc/server/methods/resetIrcConnection.js | 3 +- app/irc/server/servers/RFC2813/index.js | 8 +- .../servers/RFC2813/localCommandHandlers.js | 15 +- .../server/servers/RFC2813/parseMessage.js | 2 +- app/issuelinks/client/client.js | 3 +- app/katex/lib/katex.js | 20 +- app/katex/server/index.js | 1 + app/katex/server/settings.js | 1 + app/lazy-load/client/index.js | 1 - app/lazy-load/client/lazyloadImage.js | 4 +- app/ldap/server/ldap.js | 16 +- app/ldap/server/loginHandler.js | 7 +- app/ldap/server/sync.js | 20 +- app/ldap/server/syncUsers.js | 3 +- app/ldap/server/testConnection.js | 3 +- app/lib/client/CustomTranslations.js | 3 +- app/lib/client/OAuthProxy.js | 1 + app/lib/client/UserDeleted.js | 1 + app/lib/client/defaultTabBars.js | 1 + app/lib/client/index.js | 1 + app/lib/client/lib/LoginPresence.js | 1 + app/lib/client/lib/RocketChatAnnouncement.js | 6 + app/lib/client/lib/formatDate.js | 1 - app/lib/client/lib/settings.js | 1 + app/lib/client/lib/startup/commands.js | 1 + app/lib/client/lib/userRoles.js | 1 + app/lib/client/methods/sendMessage.js | 3 +- app/lib/client/views/customFieldsForm.js | 3 +- app/lib/lib/MessageTypes.js | 1 + app/lib/lib/roomTypes/conversation.js | 1 + app/lib/lib/roomTypes/direct.js | 8 +- app/lib/lib/roomTypes/favorite.js | 2 + app/lib/lib/roomTypes/private.js | 1 + app/lib/lib/roomTypes/public.js | 1 + app/lib/lib/roomTypes/unread.js | 1 + app/lib/lib/startup/settingsOnLoadSiteUrl.js | 1 + .../functions/addUserToDefaultChannels.js | 2 - app/lib/server/functions/addUserToRoom.js | 1 + app/lib/server/functions/archiveRoom.js | 1 + app/lib/server/functions/attachMessage.js | 1 + .../functions/checkEmailAvailability.js | 2 +- .../functions/checkUsernameAvailability.js | 2 +- app/lib/server/functions/cleanRoomHistory.js | 5 +- app/lib/server/functions/createRoom.js | 5 +- app/lib/server/functions/deleteMessage.js | 1 + app/lib/server/functions/deleteRoom.js | 1 + app/lib/server/functions/deleteUser.js | 1 + .../functions/getAvatarSuggestionForUser.js | 1 + app/lib/server/functions/getFullUserData.js | 1 + .../getRoomByNameOrIdWithOptionToJoin.js | 3 +- .../server/functions/getUsernameSuggestion.js | 2 +- app/lib/server/functions/insertMessage.js | 1 + .../server/functions/notifications/email.js | 2 +- .../server/functions/notifications/index.js | 3 +- .../server/functions/notifications/mobile.js | 3 +- .../server/functions/processWebhookMessage.js | 9 +- .../server/functions/removeUserFromRoom.js | 1 + app/lib/server/functions/saveCustomFields.js | 4 +- .../saveCustomFieldsWithoutValidation.js | 5 +- app/lib/server/functions/saveUser.js | 6 +- app/lib/server/functions/sendMessage.js | 2 +- app/lib/server/functions/setEmail.js | 4 +- app/lib/server/functions/setRealName.js | 3 +- app/lib/server/functions/setUserAvatar.js | 3 +- app/lib/server/functions/setUsername.js | 4 +- app/lib/server/functions/updateMessage.js | 1 + .../server/functions/validateCustomFields.js | 3 +- app/lib/server/index.js | 5 +- app/lib/server/lib/RateLimiter.js | 16 +- app/lib/server/lib/bugsnag.js | 3 +- app/lib/server/lib/configLogger.js | 5 +- app/lib/server/lib/debug.js | 11 +- .../server/lib/defaultBlockedDomainsList.js | 1 - app/lib/server/lib/index.js | 6 +- .../server/lib/interceptDirectReplyEmails.js | 8 +- app/lib/server/lib/notifyUsersOnMessage.js | 9 +- app/lib/server/lib/passwordPolicy.js | 20 +- app/lib/server/lib/processDirectEmail.js | 5 +- .../server/lib/sendNotificationsOnMessage.js | 4 +- app/lib/server/lib/validateEmailDomain.js | 8 +- app/lib/server/methods/addOAuthService.js | 4 +- app/lib/server/methods/addUsersToRoom.js | 1 + app/lib/server/methods/archiveRoom.js | 2 +- app/lib/server/methods/blockUser.js | 2 +- .../methods/checkRegistrationSecretURL.js | 2 +- .../methods/checkUsernameAvailability.js | 1 + app/lib/server/methods/cleanRoomHistory.js | 1 + app/lib/server/methods/createChannel.js | 1 + app/lib/server/methods/createPrivateGroup.js | 1 + app/lib/server/methods/createToken.js | 1 + app/lib/server/methods/deleteMessage.js | 5 +- .../server/methods/deleteUserOwnAccount.js | 4 +- .../methods/executeSlashCommandPreview.js | 1 + app/lib/server/methods/filterATAllTag.js | 14 +- app/lib/server/methods/filterATHereTag.js | 10 +- app/lib/server/methods/filterBadWords.js | 3 +- app/lib/server/methods/getChannelHistory.js | 3 +- app/lib/server/methods/getFullUserData.js | 1 + app/lib/server/methods/getMessages.js | 1 + app/lib/server/methods/getRoomJoinCode.js | 1 + app/lib/server/methods/getRoomRoles.js | 14 +- app/lib/server/methods/getServerInfo.js | 1 + app/lib/server/methods/getSingleMessage.js | 1 + .../server/methods/getSlashCommandPreviews.js | 1 + app/lib/server/methods/getUserRoles.js | 4 +- .../server/methods/getUsernameSuggestion.js | 1 + app/lib/server/methods/insertOrUpdateUser.js | 2 +- app/lib/server/methods/joinDefaultChannels.js | 1 + app/lib/server/methods/joinRoom.js | 1 + app/lib/server/methods/leaveRoom.js | 2 +- app/lib/server/methods/refreshOAuthService.js | 3 +- app/lib/server/methods/removeOAuthService.js | 4 +- app/lib/server/methods/restartServer.js | 1 + app/lib/server/methods/robotMethods.js | 3 +- app/lib/server/methods/saveSetting.js | 1 + app/lib/server/methods/saveSettings.js | 1 + app/lib/server/methods/sendInvitationEmail.js | 1 + app/lib/server/methods/sendMessage.js | 6 +- app/lib/server/methods/sendSMTPTestEmail.js | 1 + app/lib/server/methods/setAdminStatus.js | 5 +- app/lib/server/methods/setEmail.js | 4 +- app/lib/server/methods/setRealName.js | 2 +- app/lib/server/methods/setUsername.js | 3 +- app/lib/server/methods/unarchiveRoom.js | 2 +- app/lib/server/methods/unblockUser.js | 2 +- app/lib/server/methods/updateMessage.js | 6 +- app/lib/server/oauth/facebook.js | 7 +- app/lib/server/oauth/google.js | 3 +- app/lib/server/oauth/oauth.js | 2 - app/lib/server/oauth/proxy.js | 5 +- app/lib/server/oauth/twitter.js | 5 +- app/lib/server/publications/settings.js | 1 + app/lib/server/startup/email.js | 1 - app/lib/server/startup/oAuthServicesUpdate.js | 3 +- app/lib/server/startup/rateLimiter.js | 1 + app/lib/server/startup/robots.js | 1 + app/lib/server/startup/settings.js | 13 +- .../server/startup/settingsOnLoadCdnPrefix.js | 5 +- .../startup/settingsOnLoadDirectReply.js | 3 +- app/lib/server/startup/settingsOnLoadSMTP.js | 3 +- app/lib/tests/server.tests.js | 4 +- app/livechat/client/lib/dataHandler.js | 14 +- app/livechat/client/lib/dateHandler.js | 38 +- app/livechat/client/route.js | 1 + .../client/startup/notifyUnreadRooms.js | 5 +- .../views/app/analytics/livechatAnalytics.js | 5 +- .../livechatAnalyticsCustomDaterange.js | 3 +- .../analytics/livechatAnalyticsDaterange.js | 5 +- .../analytics/livechatRealTimeMonitoring.js | 3 +- .../livechatIntegrationFacebook.js | 1 + .../livechatIntegrationWebhook.js | 7 +- .../client/views/app/livechatAppearance.js | 10 +- .../client/views/app/livechatCurrentChats.js | 3 +- .../views/app/livechatCustomFieldForm.js | 3 +- .../client/views/app/livechatCustomFields.js | 1 + .../views/app/livechatDepartmentForm.js | 5 +- .../client/views/app/livechatDepartments.js | 1 + .../client/views/app/livechatInstallation.js | 3 +- .../client/views/app/livechatOfficeHours.js | 6 +- .../client/views/app/livechatQueue.js | 1 + .../client/views/app/livechatReadOnly.js | 2 +- .../client/views/app/livechatTriggers.js | 1 + .../client/views/app/livechatTriggersForm.js | 3 +- .../client/views/app/livechatUsers.js | 5 +- .../client/views/app/tabbar/externalSearch.js | 1 + .../client/views/app/tabbar/visitorEdit.js | 3 +- .../client/views/app/tabbar/visitorForward.js | 3 +- .../client/views/app/tabbar/visitorHistory.js | 3 +- .../client/views/app/tabbar/visitorInfo.js | 10 +- .../views/app/tabbar/visitorNavigation.js | 3 +- .../app/triggers/livechatTriggerAction.js | 3 +- .../app/triggers/livechatTriggerCondition.js | 2 +- app/livechat/client/views/sideNav/livechat.js | 1 + .../client/views/sideNav/livechatFlex.js | 1 + .../imports/server/rest/departments.js | 1 + app/livechat/imports/server/rest/facebook.js | 2 + app/livechat/imports/server/rest/sms.js | 1 + app/livechat/imports/server/rest/upload.js | 8 +- app/livechat/imports/server/rest/users.js | 11 +- app/livechat/lib/LivechatExternalMessage.js | 1 + app/livechat/lib/LivechatInquiry.js | 3 +- app/livechat/lib/LivechatRoomType.js | 3 +- app/livechat/lib/messageTypes.js | 3 +- app/livechat/server/agentStatus.js | 3 +- app/livechat/server/api/lib/livechat.js | 5 +- app/livechat/server/api/v1/agent.js | 1 + app/livechat/server/api/v1/config.js | 3 +- app/livechat/server/api/v1/customField.js | 2 +- app/livechat/server/api/v1/message.js | 2 +- app/livechat/server/api/v1/offlineMessage.js | 1 + app/livechat/server/api/v1/pageVisited.js | 3 +- app/livechat/server/api/v1/room.js | 1 + app/livechat/server/api/v1/transcript.js | 1 + app/livechat/server/api/v1/videoCall.js | 1 + app/livechat/server/api/v1/visitor.js | 1 + app/livechat/server/config.js | 2 +- app/livechat/server/hooks/RDStation.js | 1 + app/livechat/server/hooks/externalMessage.js | 5 +- .../server/hooks/markRoomResponded.js | 1 + .../server/hooks/saveAnalyticsData.js | 11 +- app/livechat/server/hooks/sendToFacebook.js | 1 - app/livechat/server/index.js | 3 +- app/livechat/server/lib/Analytics.js | 25 +- app/livechat/server/lib/Livechat.js | 33 +- app/livechat/server/lib/OfficeClock.js | 1 + app/livechat/server/lib/OmniChannel.js | 1 + app/livechat/server/lib/QueueMethods.js | 7 +- app/livechat/server/livechat.js | 2 +- app/livechat/server/methods/addAgent.js | 1 + app/livechat/server/methods/addManager.js | 1 + .../server/methods/changeLivechatStatus.js | 1 + app/livechat/server/methods/closeByVisitor.js | 1 + app/livechat/server/methods/closeRoom.js | 1 + app/livechat/server/methods/facebook.js | 1 + app/livechat/server/methods/getAgentData.js | 1 + .../server/methods/getAgentOverviewData.js | 1 + .../server/methods/getAnalyticsChartData.js | 1 + .../methods/getAnalyticsOverviewData.js | 1 + .../server/methods/getCustomFields.js | 1 + .../server/methods/getFirstRoomMessage.js | 1 + app/livechat/server/methods/getInitialData.js | 5 +- app/livechat/server/methods/getNextAgent.js | 1 + app/livechat/server/methods/loadHistory.js | 1 + app/livechat/server/methods/loginByToken.js | 1 + app/livechat/server/methods/pageVisited.js | 1 + app/livechat/server/methods/registerGuest.js | 1 + app/livechat/server/methods/removeAgent.js | 1 + .../server/methods/removeCustomField.js | 1 + .../server/methods/removeDepartment.js | 1 + app/livechat/server/methods/removeManager.js | 1 + app/livechat/server/methods/removeRoom.js | 1 + app/livechat/server/methods/removeTrigger.js | 1 + .../server/methods/returnAsInquiry.js | 1 + app/livechat/server/methods/saveAppearance.js | 3 +- .../server/methods/saveCustomField.js | 1 + app/livechat/server/methods/saveDepartment.js | 1 + app/livechat/server/methods/saveInfo.js | 1 + .../server/methods/saveIntegration.js | 5 +- .../server/methods/saveOfficeHours.js | 1 + .../server/methods/saveSurveyFeedback.js | 3 +- app/livechat/server/methods/saveTrigger.js | 4 +- app/livechat/server/methods/searchAgent.js | 3 +- .../server/methods/sendFileLivechatMessage.js | 1 + .../server/methods/sendMessageLivechat.js | 1 + .../server/methods/sendOfflineMessage.js | 1 + app/livechat/server/methods/sendTranscript.js | 1 + app/livechat/server/methods/setCustomField.js | 6 +- .../server/methods/setDepartmentForVisitor.js | 1 + .../server/methods/setUpConnection.js | 2 +- .../server/methods/startFileUploadRoom.js | 1 + app/livechat/server/methods/startVideoCall.js | 2 +- app/livechat/server/methods/takeInquiry.js | 1 + app/livechat/server/methods/transfer.js | 1 + app/livechat/server/methods/webhookTest.js | 7 +- app/livechat/server/permissions.js | 3 +- .../server/publications/customFields.js | 4 +- .../server/publications/departmentAgents.js | 1 + .../server/publications/externalMessages.js | 1 + .../server/publications/livechatAgents.js | 1 + .../server/publications/livechatAppearance.js | 1 + .../publications/livechatDepartments.js | 5 +- .../server/publications/livechatInquiries.js | 4 +- .../publications/livechatIntegration.js | 1 + .../server/publications/livechatManagers.js | 1 + .../server/publications/livechatMonitoring.js | 1 + .../publications/livechatOfficeHours.js | 1 + .../server/publications/livechatQueue.js | 1 + .../server/publications/livechatRooms.js | 1 + .../server/publications/livechatTriggers.js | 4 +- .../server/publications/livechatVisitors.js | 1 + .../server/publications/visitorHistory.js | 1 + .../server/publications/visitorInfo.js | 4 +- .../server/publications/visitorPageVisited.js | 2 +- app/livechat/server/sendMessageBySMS.js | 1 - app/livechat/server/startup.js | 1 + app/livechat/server/unclosedLivechats.js | 7 +- app/livechat/server/visitorStatus.js | 1 + app/livestream/client/oauth.js | 3 +- app/livestream/client/tabBar.js | 3 +- app/livestream/client/views/broadcastView.js | 16 +- app/livestream/client/views/liveStreamTab.js | 18 +- app/livestream/server/functions/livestream.js | 21 +- app/livestream/server/methods.js | 17 +- app/livestream/server/routes.js | 14 +- app/livestream/server/settings.js | 2 +- app/logger/client/ansispan.js | 29 +- app/logger/client/logger.js | 22 +- app/logger/client/viewLogs.js | 1 + app/logger/client/views/viewLogs.js | 7 +- app/logger/server/server.js | 28 +- app/mail-messages/client/views/mailer.js | 3 +- .../server/functions/sendMail.js | 3 +- app/mail-messages/server/methods/sendMail.js | 1 + .../server/methods/unsubscribe.js | 1 + app/mail-messages/server/startup.js | 1 + app/mailer/server/api.js | 8 +- app/mapview/client/mapview.js | 3 +- app/mapview/server/settings.js | 1 + app/markdown/lib/markdown.js | 8 +- app/markdown/lib/parser/marked/marked.js | 3 +- app/markdown/lib/parser/original/code.js | 11 +- app/markdown/lib/parser/original/markdown.js | 3 +- app/markdown/server/index.js | 1 + app/markdown/server/settings.js | 1 + app/markdown/tests/client.mocks.js | 1 + app/markdown/tests/client.tests.js | 2 + app/mentions-flextab/client/actionButton.js | 1 + app/mentions-flextab/client/tabBar.js | 1 + .../client/views/mentionsFlexTab.js | 2 + .../server/publications/mentionedMessages.js | 1 + app/mentions/client/client.js | 1 + app/mentions/lib/MentionsParser.js | 6 +- app/mentions/server/Mentions.js | 11 + .../methods/getUserMentionsByChannel.js | 1 + app/mentions/server/server.js | 7 +- app/mentions/tests/client.tests.js | 9 +- app/mentions/tests/server.tests.js | 8 +- app/message-attachments/client/index.js | 1 - .../client/messageAttachment.js | 8 +- .../client/actionButton.js | 1 + .../server/unreadMessages.js | 3 +- app/message-pin/client/actionButton.js | 3 +- app/message-pin/client/messageType.js | 1 + app/message-pin/client/pinMessage.js | 1 + app/message-pin/client/tabBar.js | 1 + .../client/views/pinnedMessages.js | 1 + app/message-pin/server/pinMessage.js | 1 + .../server/publications/pinnedMessages.js | 1 + app/message-pin/server/settings.js | 1 + app/message-pin/server/startup/indexes.js | 1 + app/message-snippet/client/messageType.js | 3 +- .../client/page/snippetPage.js | 5 +- app/message-snippet/client/router.js | 1 + app/message-snippet/client/snippetMessage.js | 7 +- app/message-snippet/client/tabBar/tabBar.js | 1 + .../client/tabBar/views/snippetedMessages.js | 3 +- .../server/methods/snippetMessage.js | 1 + .../server/publications/snippetedMessage.js | 1 + .../publications/snippetedMessagesByRoom.js | 1 + app/message-snippet/server/requests.js | 2 +- .../server/startup/settings.js | 2 +- app/message-star/client/actionButton.js | 4 +- app/message-star/client/starMessage.js | 1 + app/message-star/client/tabBar.js | 1 + .../client/views/starredMessages.js | 1 + .../server/publications/starredMessages.js | 1 + app/message-star/server/settings.js | 1 + app/message-star/server/starMessage.js | 1 + app/message-star/server/startup/indexes.js | 1 + .../client/saml_client.js | 6 +- .../server/saml_rocketchat.js | 34 +- .../server/saml_server.js | 17 +- app/meteor-accounts-saml/server/saml_utils.js | 81 +- app/metrics/server/callbacksMetrics.js | 4 +- app/metrics/server/lib/metrics.js | 4 +- app/metrics/server/lib/statsTracker.js | 3 +- app/migrations/server/migrations.js | 15 +- app/models/client/index.js | 3 +- app/models/client/models/Roles.js | 1 + app/models/client/models/Subscriptions.js | 3 +- app/models/client/models/_Base.js | 5 +- app/models/server/models/Avatars.js | 13 +- app/models/server/models/ExportOperations.js | 7 +- app/models/server/models/FederationEvents.js | 1 + app/models/server/models/FederationPeers.js | 1 + .../server/models/IntegrationHistory.js | 2 +- app/models/server/models/Integrations.js | 1 + .../server/models/LivechatCustomField.js | 3 +- .../server/models/LivechatDepartment.js | 3 +- .../server/models/LivechatDepartmentAgents.js | 6 +- .../server/models/LivechatOfficeHour.js | 17 +- .../server/models/LivechatPageVisited.js | 2 +- app/models/server/models/LivechatVisitors.js | 5 +- app/models/server/models/Messages.js | 27 +- app/models/server/models/OEmbedCache.js | 2 +- app/models/server/models/Permissions.js | 4 - app/models/server/models/Reports.js | 4 +- app/models/server/models/Roles.js | 1 + app/models/server/models/Rooms.js | 13 +- app/models/server/models/Sessions.js | 22 +- app/models/server/models/Sessions.tests.js | 369 ++++----- app/models/server/models/Settings.js | 5 +- app/models/server/models/Subscriptions.js | 42 +- app/models/server/models/Uploads.js | 4 +- app/models/server/models/UserDataFiles.js | 7 +- app/models/server/models/Users.js | 26 +- app/models/server/models/WebdavAccounts.js | 1 - app/models/server/models/_Base.js | 6 +- app/models/server/models/_BaseDb.js | 14 +- app/notifications/client/lib/Notifications.js | 13 +- app/notifications/server/lib/Notifications.js | 1 + app/nrr/client/nrr.js | 1 - .../client/admin/route.js | 3 +- .../client/admin/views/oauthApp.js | 4 +- .../client/admin/views/oauthApps.js | 4 +- .../client/oauth/oauth2-client.js | 5 +- .../server/admin/methods/addOAuthApp.js | 5 +- .../server/admin/methods/deleteOAuthApp.js | 1 + .../server/admin/methods/updateOAuthApp.js | 5 +- .../server/admin/publications/oauthApps.js | 1 + .../server/oauth/default-services.js | 2 +- .../server/oauth/oauth2-server.js | 3 +- app/oembed/client/oembedAudioWidget.js | 4 +- app/oembed/client/oembedFrameWidget.js | 4 +- app/oembed/client/oembedImageWidget.js | 4 +- app/oembed/client/oembedUrlWidget.js | 6 +- app/oembed/client/oembedVideoWidget.js | 8 +- app/oembed/client/oembedYoutubeWidget.js | 6 +- app/oembed/server/jumpToMessage.js | 10 +- app/oembed/server/providers.js | 10 +- app/oembed/server/server.js | 58 +- app/otr/client/rocketchat.otr.js | 72 +- app/otr/client/rocketchat.otr.room.js | 7 +- app/otr/client/tabBar.js | 3 +- app/otr/client/views/otrFlexTab.js | 1 + .../server/methods/deleteOldOTRMessages.js | 1 + app/otr/server/methods/updateOTRAck.js | 1 + app/push-notifications/client/tabBar.js | 1 + .../client/views/pushNotificationsFlexTab.js | 4 +- .../server/lib/PushNotification.js | 3 +- .../methods/saveNotificationSettings.js | 1 + app/reactions/client/init.js | 12 +- app/reactions/client/methods/setReaction.js | 11 +- app/reactions/server/setReaction.js | 7 +- .../server/cronPruneMessages.js | 5 +- .../server/startup/settings.js | 1 - app/search/client/provider/result.js | 4 +- app/search/client/search/search.js | 16 +- app/search/server/events/events.js | 1 - app/search/server/index.js | 1 - app/search/server/model/provider.js | 4 - app/search/server/provider/defaultProvider.js | 4 +- app/search/server/service/providerService.js | 20 +- .../server/service/validationService.js | 5 +- app/settings/client/lib/settings.js | 1 + app/settings/lib/settings.js | 35 +- app/settings/server/functions/settings.js | 15 +- app/setup-wizard/client/final.js | 2 +- app/setup-wizard/client/setupWizard.js | 20 +- .../server/getSetupWizardParameters.js | 1 + app/slackbridge/server/RocketAdapter.js | 13 +- app/slackbridge/server/SlackAPI.js | 2 - app/slackbridge/server/SlackAdapter.js | 56 +- app/slackbridge/server/settings.js | 1 + app/slackbridge/server/slackbridge.js | 5 +- .../server/slackbridge_import.server.js | 3 +- app/slashcommand-asciiarts/lib/gimme.js | 1 + app/slashcommand-asciiarts/lib/lenny.js | 1 + app/slashcommand-asciiarts/lib/shrug.js | 1 + app/slashcommand-asciiarts/lib/tableflip.js | 1 + app/slashcommand-asciiarts/lib/unflip.js | 1 + .../server/server.js | 1 + app/slashcommands-create/server/server.js | 1 + app/slashcommands-help/server/server.js | 4 +- app/slashcommands-hide/server/hide.js | 7 +- app/slashcommands-invite/server/server.js | 11 +- app/slashcommands-inviteall/server/server.js | 2 +- app/slashcommands-join/server/server.js | 4 +- app/slashcommands-kick/server/server.js | 5 +- app/slashcommands-leave/server/leave.js | 3 +- app/slashcommands-me/server/me.js | 3 +- app/slashcommands-msg/server/server.js | 5 +- app/slashcommands-mute/server/mute.js | 5 +- app/slashcommands-mute/server/unmute.js | 6 +- app/slashcommands-open/client/client.js | 2 +- app/slashcommands-topic/lib/topic.js | 4 +- .../server/server.js | 1 + app/slider/client/rocketchat-slider.js | 1 - .../server/functions/generateEml.js | 8 +- .../server/functions/sendEmail.js | 3 +- app/smarsh-connector/server/settings.js | 3 +- app/smarsh-connector/server/startup.js | 5 +- app/sms/server/SMS.js | 1 + app/sms/server/index.js | 3 +- app/sms/server/services/twilio.js | 7 +- app/sms/server/services/voxtelesys.js | 5 +- app/sms/server/settings.js | 1 + app/spotify/lib/client/widget.js | 3 +- app/spotify/lib/spotify.js | 11 +- app/statistics/server/functions/get.js | 3 +- app/statistics/server/functions/save.js | 2 +- app/statistics/server/index.js | 3 +- app/statistics/server/lib/SAUMonitor.js | 7 +- app/statistics/server/lib/UAParserCustom.js | 5 +- .../server/lib/UAParserCustom.tests.js | 7 +- .../server/methods/getStatistics.js | 4 +- app/theme/server/server.js | 7 +- app/theme/server/variables.js | 2 +- app/threads/client/flextab/thread.js | 7 +- app/threads/client/flextab/threadlist.js | 1 + app/threads/client/flextab/threads.js | 4 - app/threads/client/index.js | 1 - .../server/hooks/afterdeletemessage.js | 3 - app/threads/server/hooks/aftersavemessage.js | 4 +- app/threads/server/methods/followMessage.js | 1 - .../server/methods/getThreadMessages.js | 3 +- app/threads/server/methods/getThreadsList.js | 1 - app/threads/server/methods/unfollowMessage.js | 1 - app/threads/server/settings.js | 1 + app/tokenpass/client/roomType.js | 1 + app/tokenpass/client/startup.js | 1 + app/tokenpass/client/tokenChannelsList.js | 1 + .../client/tokenpassChannelSettings.js | 14 +- app/tokenpass/lib/common.js | 1 + app/tokenpass/server/cronRemoveUsers.js | 3 +- .../getProtectedTokenpassBalances.js | 1 + .../functions/getPublicTokenpassBalances.js | 1 + .../functions/saveRoomTokensMinimumBalance.js | 3 +- .../functions/updateUserTokenpassBalances.js | 5 +- app/tokenpass/server/index.js | 3 +- .../server/methods/findTokenChannels.js | 1 + .../server/methods/getChannelTokenpass.js | 1 + app/tokenpass/server/startup.js | 5 +- app/tooltip/client/rocketchat-tooltip.js | 1 - app/ui-account/client/account.js | 1 + app/ui-account/client/accountFlex.js | 1 + app/ui-account/client/accountIntegrations.js | 3 +- app/ui-account/client/accountPreferences.js | 7 +- app/ui-account/client/accountProfile.js | 36 +- app/ui-account/client/avatar/avatar.js | 1 + app/ui-account/client/avatar/prompt.js | 9 +- app/ui-admin/client/admin.js | 18 +- app/ui-admin/client/adminFlex.js | 4 +- app/ui-admin/client/adminInfo.js | 8 +- app/ui-admin/client/rooms/adminRoomInfo.js | 24 +- app/ui-admin/client/rooms/adminRooms.js | 12 +- .../client/rooms/channelSettingsDefault.js | 8 +- app/ui-admin/client/users/adminInviteUser.js | 5 +- .../client/users/adminUserChannels.js | 5 +- app/ui-admin/client/users/adminUsers.js | 9 +- .../server/publications/adminRooms.js | 12 +- .../client/models/CachedCollection.js | 11 +- app/ui-clean-history/client/lib/startup.js | 1 + .../client/views/cleanHistory.js | 10 +- app/ui-flextab/client/flexTabBar.js | 17 +- app/ui-flextab/client/tabs/inviteUsers.js | 9 +- app/ui-flextab/client/tabs/membersList.js | 20 +- .../client/tabs/uploadedFilesList.js | 7 +- app/ui-flextab/client/tabs/userActions.js | 71 +- app/ui-flextab/client/tabs/userEdit.js | 14 +- app/ui-flextab/client/tabs/userInfo.js | 23 +- app/ui-login/client/login/footer.js | 1 + app/ui-login/client/login/form.js | 78 +- app/ui-login/client/login/header.js | 1 + app/ui-login/client/login/layout.js | 1 + app/ui-login/client/login/services.js | 3 +- .../client/reset-password/resetPassword.js | 3 +- app/ui-login/client/username/layout.js | 1 + app/ui-login/client/username/username.js | 5 +- app/ui-master/client/main.js | 17 +- app/ui-master/public/generateHTML.js | 3 - app/ui-master/public/generateSprite.js | 2 - app/ui-master/server/inject.js | 23 +- app/ui-message/client/message.js | 16 +- .../client/messageBox/messageBox.js | 27 +- .../client/messageBox/messageBoxActions.js | 18 +- .../messageBox/messageBoxAudioMessage.js | 17 +- .../client/messageBox/messageBoxAutogrow.js | 17 +- .../messageBox/messageBoxNotSubscribed.js | 11 +- .../client/messageBox/messageBoxReadOnly.js | 1 + .../client/messageBox/messageBoxTyping.js | 1 + app/ui-message/client/popup/messagePopup.js | 18 +- .../client/popup/messagePopupChannel.js | 1 + .../client/popup/messagePopupConfig.js | 13 +- .../popup/messagePopupSlashCommandPreview.js | 3 +- app/ui-sidenav/client/chatRoomItem.js | 3 +- app/ui-sidenav/client/roomList.js | 3 +- app/ui-sidenav/client/sideNav.js | 7 +- app/ui-sidenav/client/sidebarHeader.js | 6 +- app/ui-sidenav/client/sidebarItem.js | 10 +- app/ui-sidenav/client/sortlist.js | 3 +- app/ui-sidenav/client/toolbar.js | 11 +- app/ui-utils/client/lib/AccountBox.js | 6 +- app/ui-utils/client/lib/AdminBox.js | 4 +- app/ui-utils/client/lib/ChannelActions.js | 3 +- app/ui-utils/client/lib/IframeLogin.js | 3 +- app/ui-utils/client/lib/Layout.js | 4 +- app/ui-utils/client/lib/MessageAction.js | 11 +- app/ui-utils/client/lib/RocketChatTabBar.js | 1 + app/ui-utils/client/lib/RoomHistoryManager.js | 114 ++- app/ui-utils/client/lib/RoomManager.js | 38 +- app/ui-utils/client/lib/SideNav.js | 16 +- app/ui-utils/client/lib/TabBar.js | 16 +- app/ui-utils/client/lib/alerts.js | 2 +- app/ui-utils/client/lib/avatar.js | 9 +- app/ui-utils/client/lib/callMethod.js | 1 + app/ui-utils/client/lib/fireGlobalEvent.js | 3 +- app/ui-utils/client/lib/menu.js | 26 +- app/ui-utils/client/lib/messageBox.js | 5 +- app/ui-utils/client/lib/modal.js | 2 +- app/ui-utils/client/lib/openRoom.js | 18 +- app/ui-utils/client/lib/popout.js | 3 +- app/ui-utils/client/lib/popover.js | 7 +- app/ui-utils/client/lib/prependReplies.js | 1 + app/ui-utils/client/lib/readMessages.js | 18 +- app/ui-utils/client/lib/renderMessageBody.js | 6 +- app/ui-utils/lib/Message.js | 7 +- app/ui-utils/lib/MessageProperties.js | 9 +- app/ui-utils/lib/MessageTypes.js | 6 +- app/ui-utils/tests/server.tests.js | 1 + app/ui-vrecord/client/VRecDialog.js | 16 +- app/ui-vrecord/client/vrecord.js | 9 +- app/ui/client/components/header/header.js | 1 + app/ui/client/components/header/headerRoom.js | 3 +- app/ui/client/components/icon.js | 3 +- app/ui/client/components/popupList.js | 3 +- app/ui/client/components/selectDropdown.js | 4 +- app/ui/client/index.js | 17 +- app/ui/client/lib/accounts.js | 3 +- app/ui/client/lib/chatMessages.js | 18 +- .../lib/codeMirror/codeMirrorComponent.js | 4 +- app/ui/client/lib/collections.js | 1 + app/ui/client/lib/fileUpload.js | 3 +- app/ui/client/lib/iframeCommands.js | 3 +- app/ui/client/lib/menu.js | 3 +- app/ui/client/lib/msgTyping.js | 10 +- app/ui/client/lib/notification.js | 11 +- app/ui/client/lib/parentTemplate.js | 2 +- app/ui/client/lib/recorderjs/audioEncoder.js | 3 +- app/ui/client/lib/recorderjs/audioRecorder.js | 8 +- app/ui/client/lib/recorderjs/videoRecorder.js | 10 +- app/ui/client/lib/rocket.js | 8 +- app/ui/client/views/app/burger.js | 1 + app/ui/client/views/app/createChannel.js | 19 +- app/ui/client/views/app/directory.js | 7 +- app/ui/client/views/app/helpers.js | 4 +- app/ui/client/views/app/home.js | 1 + app/ui/client/views/app/photoswipe.js | 4 +- app/ui/client/views/app/room.js | 61 +- app/ui/client/views/app/roomSearch.js | 1 + app/ui/client/views/app/secretURL.js | 1 + .../client/views/app/tests/helpers.tests.js | 1 + .../views/app/videoCall/videoButtons.js | 1 + .../client/views/app/videoCall/videoCall.js | 11 +- app/ui/client/views/cmsPage.js | 1 + app/ui/client/views/fxos.js | 1 - .../server/cronProcessDownloads.js | 20 +- .../server/startup/settings.js | 3 - app/utils/client/lib/CustomTranslations.js | 1 + app/utils/client/lib/canDeleteMessage.js | 2 - app/utils/client/lib/handleError.js | 2 +- app/utils/client/lib/roomTypes.js | 19 +- app/utils/lib/RoomTypeConfig.js | 13 +- app/utils/lib/RoomTypesCommon.js | 3 +- app/utils/lib/fileUploadRestrictions.js | 19 +- app/utils/lib/getRoomAvatarURL.js | 2 +- app/utils/lib/getURL.js | 3 +- app/utils/lib/getUserAvatarURL.js | 3 +- app/utils/lib/getUserPreference.js | 4 +- app/utils/lib/getValidRoomName.js | 1 + app/utils/lib/placeholders.js | 5 +- app/utils/lib/roomExit.js | 1 + app/utils/lib/tapi18n.js | 9 +- app/utils/lib/templateVarHandler.js | 30 +- app/utils/server/functions/getMongoInfo.js | 3 - app/utils/server/lib/roomTypes.js | 8 +- app/version-check/client/index.js | 1 + .../server/functions/checkVersionUpdate.js | 7 +- .../server/functions/getNewUpdates.js | 4 +- app/version-check/server/index.js | 1 + .../server/methods/banner_dismiss.js | 1 + app/videobridge/client/actionLink.js | 3 +- app/videobridge/client/tabBar.js | 2 +- app/videobridge/client/views/videoFlexTab.js | 1 + .../client/views/videoFlexTabBbb.js | 1 + app/videobridge/lib/messageType.js | 1 + app/videobridge/server/methods/bbb.js | 6 +- .../server/methods/jitsiSetTimeout.js | 7 +- app/videobridge/server/settings.js | 4 +- app/webdav/client/actionButton.js | 3 +- app/webdav/client/addWebdavAccount.js | 5 +- app/webdav/client/selectWebdavAccount.js | 1 + .../client/startup/messageBoxActions.js | 1 + app/webdav/client/webdavFilePicker.js | 3 +- app/webdav/server/methods/addWebdavAccount.js | 5 +- .../server/methods/getFileFromWebdav.js | 3 +- .../server/methods/getWebdavFileList.js | 3 +- .../server/methods/removeWebdavAccount.js | 1 + .../server/methods/uploadFileToWebdav.js | 8 +- .../server/publications/webdavAccounts.js | 3 +- app/webrtc/client/WebRTCClass.js | 14 +- app/webrtc/client/screenShare.js | 2 +- app/wordpress/lib/common.js | 5 +- app/wordpress/server/startup.js | 1 - client/methods/deleteMessage.js | 1 + client/methods/hideRoom.js | 1 + client/methods/openRoom.js | 1 + client/methods/setUserActiveStatus.js | 1 + client/methods/toggleFavorite.js | 1 + client/methods/updateMessage.js | 10 +- client/notifications/UsersNameChanged.js | 1 + client/notifications/notification.js | 4 +- client/notifications/updateAvatar.js | 1 + client/notifications/updateUserState.js | 1 + client/routes/adminRouter.js | 2 +- client/routes/roomRoute.js | 2 +- client/routes/router.js | 2 +- client/startup/emailVerification.js | 3 +- client/startup/i18n.js | 3 +- client/startup/roomObserve.js | 1 + client/startup/startup.js | 5 +- client/startup/unread.js | 1 + client/startup/userSetUtcOffset.js | 3 +- client/startup/usersObserve.js | 1 + imports/message-read-receipt/client/main.js | 1 + .../message-read-receipt/client/message.js | 1 + .../client/readReceipts.js | 3 +- .../server/api/methods/getReadReceipts.js | 1 + imports/message-read-receipt/server/hooks.js | 3 +- .../server/lib/ReadReceipt.js | 1 + .../client/personalAccessTokens.js | 5 +- .../server/api/methods/generateToken.js | 1 + .../server/api/methods/regenerateToken.js | 1 + .../server/api/methods/removeToken.js | 1 + .../personal-access-tokens/server/index.js | 2 - .../publications/personalAccessTokens.js | 1 + package-lock.json | 700 ++++++++++++++++-- package.json | 2 +- .../client/autocomplete-client.js | 23 +- .../meteor-autocomplete/client/templates.js | 4 +- .../client/index.js | 4 +- .../.app/client/lib/CustomFields.js | 1 + .../.app/client/lib/LivechatFileUpload.js | 6 +- .../.app/client/lib/LivechatVideoCall.js | 5 +- .../.app/client/lib/_livechat.js | 55 +- .../.app/client/lib/chatMessages.js | 3 +- .../.app/client/lib/commands.js | 5 +- .../.app/client/lib/fromApp/Notifications.js | 16 +- .../client/lib/fromApp/RoomHistoryManager.js | 111 +-- .../.app/client/lib/hooks.js | 1 + .../.app/client/lib/msgTyping.js | 10 +- .../.app/client/lib/tapi18n.js | 18 +- .../.app/client/lib/triggers.js | 1 + .../client/methods/sendMessageExternal.js | 3 +- .../.app/client/routes/router.js | 3 +- .../.app/client/startup/visitor.js | 1 + .../.app/client/views/avatar.js | 1 + .../.app/client/views/livechatWindow.js | 6 +- .../.app/client/views/message.js | 5 +- .../.app/client/views/messages.js | 9 +- .../.app/client/views/offlineForm.js | 10 +- .../.app/client/views/options.js | 1 + .../.app/client/views/register.js | 50 +- .../.app/client/views/survey.js | 1 + .../.app/client/views/switchDepartment.js | 1 + .../.app/imports/client/visitor.js | 1 - .../plugin/build-livechat.js | 1 + .../plugin/compile-version.js | 3 +- private/node_scripts/auto-translate.js | 9 +- private/node_scripts/check-unused-i18n.js | 1 + .../unsubscribe_csv/unsubscribe.js | 4 +- server/configuration/accounts_meld.js | 1 + server/lib/accounts.js | 1 + server/lib/cordova.js | 3 +- server/lib/roomFiles.js | 1 + server/methods/OEmbedCacheCleanup.js | 1 + server/methods/addAllUserToRoom.js | 13 +- server/methods/addRoomLeader.js | 1 + server/methods/addRoomModerator.js | 1 + server/methods/addRoomOwner.js | 1 + server/methods/afterVerifyEmail.js | 3 +- server/methods/browseChannels.js | 4 +- server/methods/canAccessRoom.js | 2 +- server/methods/channelsList.js | 5 +- server/methods/createDirectMessage.js | 2 +- server/methods/deleteFileMessage.js | 1 + server/methods/deleteUser.js | 1 + server/methods/eraseRoom.js | 1 + server/methods/getAvatarSuggestion.js | 1 + server/methods/getRoomById.js | 1 + server/methods/getRoomIdByNameOrId.js | 1 + server/methods/getRoomNameById.js | 1 + server/methods/getTotalChannels.js | 1 + server/methods/getUsersOfRoom.js | 7 +- server/methods/hideRoom.js | 1 + server/methods/ignoreUser.js | 1 + server/methods/loadHistory.js | 1 + server/methods/loadMissedMessages.js | 1 + server/methods/loadNextMessages.js | 1 + server/methods/loadSurroundingMessages.js | 3 +- server/methods/logoutCleanUp.js | 1 + server/methods/messageSearch.js | 5 +- server/methods/migrate.js | 1 + server/methods/muteUserInRoom.js | 1 + server/methods/openRoom.js | 1 + server/methods/readMessages.js | 1 + server/methods/registerUser.js | 20 +- server/methods/removeRoomLeader.js | 1 + server/methods/removeRoomModerator.js | 1 + server/methods/removeRoomOwner.js | 1 + server/methods/removeUserFromRoom.js | 1 + server/methods/reportMessage.js | 1 + server/methods/requestDataDownload.js | 8 +- server/methods/resetAvatar.js | 1 + server/methods/roomNameExists.js | 1 + server/methods/saveUserPreferences.js | 1 + server/methods/saveUserProfile.js | 3 +- server/methods/sendConfirmationEmail.js | 4 +- server/methods/sendForgotPasswordEmail.js | 2 +- server/methods/setAvatarFromService.js | 1 + server/methods/setUserActiveStatus.js | 2 +- server/methods/setUserPassword.js | 1 + server/methods/toogleFavorite.js | 1 + server/methods/unmuteUserInRoom.js | 1 + server/methods/userSetUtcOffset.js | 1 + server/publications/activeUsers.js | 1 + .../channelAndPrivateAutocomplete.js | 1 + server/publications/fullUserData.js | 1 + server/publications/messages.js | 2 +- server/publications/room.js | 3 +- server/publications/roomFiles.js | 1 + .../publications/roomFilesWithSearchText.js | 1 + .../publications/roomSubscriptionsByRole.js | 1 + server/publications/spotlight.js | 6 +- server/publications/subscription.js | 1 + server/publications/userAutocomplete.js | 3 +- server/publications/userChannels.js | 1 + server/publications/userData.js | 1 + server/routes/avatar/room.js | 6 +- server/routes/avatar/user.js | 9 +- server/routes/avatar/utils.js | 3 +- server/startup/cron.js | 3 +- server/startup/initialData.js | 19 +- server/startup/migrations/v001.js | 3 +- server/startup/migrations/v003.js | 3 +- server/startup/migrations/v004.js | 2 +- server/startup/migrations/v005.js | 6 +- server/startup/migrations/v007.js | 3 +- server/startup/migrations/v009.js | 1 + server/startup/migrations/v010.js | 3 +- server/startup/migrations/v012.js | 1 + server/startup/migrations/v015.js | 3 +- server/startup/migrations/v018.js | 1 + server/startup/migrations/v019.js | 14 +- server/startup/migrations/v027.js | 1 - server/startup/migrations/v029.js | 14 +- server/startup/migrations/v030.js | 2 +- server/startup/migrations/v036.js | 4 +- server/startup/migrations/v037.js | 1 - server/startup/migrations/v042.js | 1 + server/startup/migrations/v045.js | 3 +- server/startup/migrations/v048.js | 2 - server/startup/migrations/v049.js | 1 - server/startup/migrations/v055.js | 3 +- server/startup/migrations/v060.js | 3 +- server/startup/migrations/v063.js | 4 +- server/startup/migrations/v064.js | 3 +- server/startup/migrations/v065.js | 1 - server/startup/migrations/v066.js | 1 - server/startup/migrations/v068.js | 1 - server/startup/migrations/v075.js | 4 +- server/startup/migrations/v077.js | 1 - server/startup/migrations/v084.js | 2 - server/startup/migrations/v093.js | 1 - server/startup/migrations/v099.js | 6 +- server/startup/migrations/v100.js | 2 +- server/startup/migrations/v101.js | 2 +- server/startup/migrations/v103.js | 2 +- server/startup/migrations/v104.js | 12 +- server/startup/migrations/v106.js | 1 + server/startup/migrations/v107.js | 4 +- server/startup/migrations/v113.js | 2 +- server/startup/migrations/v118.js | 6 +- server/startup/migrations/v120.js | 2 +- server/startup/migrations/v121.js | 1 - server/startup/migrations/v123.js | 9 +- server/startup/migrations/v127.js | 2 - server/startup/migrations/v130.js | 1 + server/startup/migrations/v131.js | 14 +- server/startup/migrations/v134.js | 2 - server/startup/migrations/v139.js | 1 - server/startup/migrations/v140.js | 1 - server/startup/migrations/xrun.js | 1 + server/startup/presence.js | 4 +- server/startup/serverRunning.js | 8 +- server/stream/messages.js | 3 +- server/stream/streamBroadcast.js | 14 +- tests/data/api-data.js | 9 +- tests/data/rooms.helper.js | 4 +- tests/end-to-end/api/00-miscellaneous.js | 8 +- tests/end-to-end/api/01-users.js | 9 +- tests/end-to-end/api/02-channels.js | 8 +- tests/end-to-end/api/03-groups.js | 8 +- tests/end-to-end/api/05-chat.js | 6 - tests/end-to-end/api/09-rooms.js | 10 +- tests/end-to-end/api/10-subscriptions.js | 2 +- tests/end-to-end/api/11-graphql.js | 10 +- tests/end-to-end/api/12-emoji-custom.js | 1 + tests/end-to-end/ui/03-user-creation.js | 2 - .../end-to-end/ui/04-main-elements-render.js | 5 +- tests/end-to-end/ui/05-channel-creation.js | 3 +- tests/end-to-end/ui/06-messaging.js | 2 - tests/end-to-end/ui/07-emoji.js | 2 - tests/end-to-end/ui/08-resolutions.js | 13 +- tests/end-to-end/ui/09-channel.js | 6 - tests/end-to-end/ui/10-user-preferences.js | 5 +- tests/end-to-end/ui/11-admin.js | 2 - tests/end-to-end/ui/12-settings.js | 60 +- tests/end-to-end/ui/13-permissions.js | 2 - tests/end-to-end/ui/14-message-popup.js | 3 +- tests/end-to-end/ui/15-discussion.js | 3 +- tests/pageobjects/administration.page.js | 147 ++++ tests/pageobjects/discussion.page.js | 1 - tests/pageobjects/flex-tab.page.js | 72 +- tests/pageobjects/global.js | 8 + tests/pageobjects/login.page.js | 14 + tests/pageobjects/main-content.page.js | 51 +- .../preferences-main-content.page.js | 9 + tests/pageobjects/settings.js | 9 +- tests/pageobjects/setup-wizard.page.js | 12 + tests/pageobjects/side-nav.page.js | 30 + 1281 files changed, 4931 insertions(+), 3493 deletions(-) diff --git a/.scripts/fix-i18n.js b/.scripts/fix-i18n.js index a4866809068..ad8210d7cd3 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 be65d91454b..a1acf80b817 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 6f927f192cc..ac935873a69 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 abd5f8a2719..6524ce70017 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 8c1854d9180..5d75151e225 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 79f523ab48d..461003c2d58 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 0cf6d8b9e9e..7a26863faad 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 4e9bc5573d1..027da271a65 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 a1ad86147fe..fcdf46f3bbd 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 4067521d2c4..3afc20b6cf2 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 096db7084cf..fe6e554305d 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 35954a5b3df..ef34662436e 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 cd723e66db8..bfdc8d955d7 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 39ccc904365..71565b0d42e 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 e83bcd8e4c9..51ccf2ac68f 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 384cc450201..c87c712e079 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 4f85d99d9d5..2865be4279c 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 1c5b61dc4b9..4391eda94af 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 8940e1c8150..067f727e3dd 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 a07c8cb1ac9..50d25859814 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 acbbd13494f..cc86418dca6 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 2d5a544e426..6de8ca4bd80 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 52590c041f0..fdcc98f4b1d 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 2acd73c71e8..1ce74a93e2f 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 51af7c1d4e4..c97d6f34e1e 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 1e52665d114..f6674720c06 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 a96779c2eed..605f598bd43 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 f752fe918d2..d7eafe0f6da 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 483de425347..da65a35e850 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 a80d5044c1c..eacf92ae31c 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 6b1308dd8e5..813141f338e 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 d7258c8e74d..733b9614da5 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 61c1be7ea67..80e75fa2b6f 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 c4974add477..f7a6f49108a 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 79e54e62e47..f638f025b69 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 dba67aa913a..e90577da047 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 5b57ddea674..6927963592b 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 a68788a40a5..0ee09ae5789 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 a7e9fff127f..b4e69cbf148 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 8f792eeb6c8..ca1dcee6f9b 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 e0d0d55f3f5..c5d79053328 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 fa5b2a70f65..6c1c9959011 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 78858819e5b..67a992427a6 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 0191f6bd9e1..7cab7a10977 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 284bf7558fb..1fd8dba80c0 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 d745cda1ee4..2f74a209294 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 9bdfd2e6da7..8ffa8711a33 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 3726c1ecec9..13f3e38bce3 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 af6d1a7813b..51d0b883049 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 474b5e84ec0..8ff298c54fe 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 090bd4aa34a..bcd621370cd 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 e385abc66de..286dd35e4ab 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 a916eb25819..dd63716de0f 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 f310e08022f..683df77ef6a 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 4ce55170681..e06de068ab2 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 be84a750ebe..bc1029a56f7 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 905c369650c..1da0efecccf 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 f98839294a8..4ee0430ecc5 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 96962bbd0e0..0ade72a4811 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 a4895106dfd..827c2606d2c 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 ae8879a36bb..28d8b3654eb 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 d8a08d0a944..26f0b716308 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 5ba76526a84..062efcd64b8 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 4d9f4e0d163..250f25aa22c 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 986f13717fc..16170105caa 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 b6124ccf621..0bd7e1efff6 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 b3851d0e3bd..2abaedd58b9 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 e889d75d32c..59c16e40ba9 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 f8c77203ff8..82ffcd2b2f0 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 803d40f9973..bccbfa0fce5 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 b186e7ea4b9..60b0f874de6 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 6373f8a7f5c..9dee0c68bcd 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 736c03f1e8c..975b294d41d 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 bcb84a92da7..d21fb5a69ad 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 1622c5398cc..2604a0cb958 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 a0ec3410f02..6429b7a182e 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 4c876758736..280dc99c17c 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 33cee33364f..7820772cd45 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 48a54e14777..5d54d53c888 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 f7ca7b7a889..cfdacbe8813 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 2409ab5ccc3..c498ca472b3 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 2d34fad1698..d7c4900228b 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 1a7af89bd2c..e76cac546cf 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 49962c40632..46302e81eb8 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 246fbada423..118149ada06 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 5bff36f09e4..96fa41ef325 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 255a1948597..27c369acf9f 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 8f2b207e6d1..b08c2778add 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 7ec25d35d68..91af0a77400 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 84e34fc6804..1c53476a93b 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 aa34b9b76f1..a11c56516e1 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 0f83861be2a..11c4b3db1f1 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 241f97ff935..79aab87ba21 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 4d7271932a3..bbe217af78d 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 e98d745d58a..77a5e2f35e9 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 868174a7c11..379bca0fbc9 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 9bb6f251432..5d52c862f76 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 0ec0476ec9d..8d57052b66d 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 2b6d46cc58c..b7e7f905bbc 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 d8b3a32eae2..81e65d05c0d 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 9852ca56728..c1deaf68e64 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 16b10073987..66fd562ca65 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 9b2c02c4a42..93753239b24 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 d3077ec0c63..f527022009a 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 6f2e0f787ef..3add779473b 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 d362c5656d2..13c77caf4c9 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 a5314246498..2f44877a7e1 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 16544597def..c7a9adcc208 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 c57abe6d631..26ea7cf301a 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 aadd3fbb44a..64ce0028fa8 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 1045144ccef..0bc6c22cdd5 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 83b5a71a60a..de00f0d1ccf 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 1f19ecb8c69..ee4c7cc087d 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 be4f0095aaf..f5e79db6497 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 bfe1afe7ccc..32cd176086f 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 4b3bdd28c58..8078d5358c7 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 ec853a1d35b..e88fef7641d 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 fc5206c17d0..dc4f5640c94 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 206bd201afd..58976407692 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 2f451f1929c..7046f4d024e 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 45f5fd61b6d..0a6ec78e520 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 c3d60a2a5af..410fd4f16e0 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 0ed7a682f79..60986fc628b 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 861e371c144..a141dc7bc5a 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 c96f5ac6e6c..a04875ad90d 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 c68cfa63d4f..d911210a25f 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 5f84cf2870b..9834b106c9d 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 b705c206b20..26467705ec4 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 c0128c87ef3..5b73ce3ffba 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 798dff511e3..2a3d794c404 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 3b4c423725a..4dc05e611fc 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 806cd5682d6..04d010a3394 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 c50d4c3aadb..97d20782b23 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 4c31a9b11d8..07df9e4edf4 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 da8fea1b187..0252a2de676 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 72a7a310b5c..89860061ac3 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 27c73524a11..1584febd2e3 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 b5d88c96c8b..baf8dff166b 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 7fb229e0d12..c1a2ba92f00 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 ad68265b9cf..3c634a9996a 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 a12bbef2c15..89ba7c5ec91 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 e848be23b80..9bf6cb4503b 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 5b5490314de..473d6b26c2b 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 9b86dcca63f..abbd2bf327f 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 d8fa642ca68..45738633fd7 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 be9f1e4fb0e..698723ebe99 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 74cf84c8673..cb028195306 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 c4c2a201ae2..bcbf71c873e 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 f9d1bf9353f..08c3512905d 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 66f8774d7e5..4195805d53b 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 1ba32fb25a0..a46d935c725 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 d30ba0415c6..91b1ffe64f2 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 1a5fbabf5e8..de860026192 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 2084644ddd7..4eeb6ce7302 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 73262bf3de6..d0241a21c12 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 ca738ab83c4..39743627152 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 923271b9482..5ec79dbdb7e 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 71892a34d3f..5bf24cb9992 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 b0f3b687989..e5ff7f0f8d2 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 e1e05b570dd..3be0f726b12 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 d8af1aa97a1..5ae3552e000 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 2506f45f36b..d769895ecfa 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 b4843af6d36..562238c466c 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 c4e3f97b23f..e6c98490bde 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 90bba1be418..93f1cddbc13 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 3898d371dfb..a1102b1505d 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 5ae712357be..6e08b878eb6 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 1ec06eb3f72..5dea9eb0781 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 c80ef818b9c..4a2e16941c0 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 15943159023..b648f2ffaa8 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 d9a4dcc890b..5f76a7c453a 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 bcfc13ea69f..e9e53068854 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 16d972f80d9..8d59968807a 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 11a2daac047..5dc92542603 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 33b6eab8d4f..9203d22fa08 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 a82016b47a8..234344bdd12 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 f17b8e24961..780f22370bf 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 a6289d872e4..9976e3f66f7 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 80e25477512..0f1609dd106 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 3ebbeb66bfa..f28aa360b42 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 a15f03af6c0..4467e57e8e5 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 5d0ef124474..ca11995874f 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 79f477ae423..3d32b19e74f 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 b35063245c5..59b9d0929a9 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 ab91a113d4a..813c7dfbd44 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 9057f752ce1..ba26d32673b 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 2e0a61395e3..36ea5839736 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 05a72f0a03d..90bf6db2043 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 04c57c8dc31..7d3d48d361b 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 31163a5076b..9f94960206c 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 934798cb170..7417d90e568 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 fc27ecb7989..7a9ba36a56c 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 cd3a43ea9b2..7c974fc8d61 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 dbade46fc93..964d1f384f0 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 64e74c98d36..ff73ab8ff64 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 e28f2a4264c..a786507c330 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 b229e638a26..f6b33073f8c 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 68204b6da6c..6835305ed82 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 5155c5769c7..abdcaac9a58 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 755850edbb4..08eb79071dc 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 c4b9ece7b9e..902965ca23e 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 f4b7358ab5e..78535311ad9 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 4e89b97c667..49bfe798b0b 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 5c0582012e6..36c95452a97 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 9777d32d9c8..f46259e8de3 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 60fc2aa3ec5..da1071b15c3 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 fea692b5bd0..c59b20594b8 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 96dbd1de96d..bf1de708da6 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 3ac3cf6ebad..7fe0e867840 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 3ca4c811dde..d4f59fdcbc2 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 21edfaadafe..00cae6e5782 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 5777b16e7e0..f50e8578f81 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 eb448b098e9..a686af5e88c 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 c3b42675e97..2a381c2eea8 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 f48ca2f0a58..b1259a32b70 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 dfcc04a8b73..a273e803b93 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 42ca627f3b1..f1c4604babd 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 18471e38c9a..78123f8a0ad 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 d18d6141157..3d64e3b189c 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 e112e2ecec8..b226ea27c47 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 91d43e45807..cb84c0053b6 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 97a0f5e778a..2ae2ef02a2b 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 1dd2e6e7e8a..f5805689690 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 ecdb80e417d..ebc66d17916 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 338ccbbc726..feaa701ee74 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 02c80d6ce36..b9623960ea2 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 32b7c1f7f60..0b39008574b 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 1c7f0072bc8..d06b382af85 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 b32173c17ef..c9c902cdd49 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 6d49ceb42cc..b2771a914ae 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 807f67b7295..8110fc0667e 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 b3ce738c157..d581d96d792 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 36a374c967e..7cc1b2844c3 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 503de3c1194..a271dfdff60 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 b17264c0fad..4448901badc 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 1dd2e6e7e8a..f5805689690 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 255bcdfbb6f..b0ac0d5a373 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 97f6a0a28da..35e44854935 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 4c8ded7a245..d4b2ba2f499 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 ee6845ebafe..a542d801fe7 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 a762961a1e6..239a252e455 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 eb4f6d55d47..1979e798b26 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 a1b49b970b9..8b6a0b144b3 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 7ed27f6cbce..c3356aaa8bb 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 dfccab7c26a..fbcb1e72962 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 c6d18fd7bff..aa3bcbfa8a4 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 f09083e9bcc..73c51ba053e 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 83153a829c7..45153c80bd7 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 a076259d914..ec24f75ca2b 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 3442e76b715..89006ad583a 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 e606bbcd39a..92d98a0ada2 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 1f47e1e37b6..494edb1f96c 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 74f40bbf316..de6a7fee065 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 d7f5b03f970..7a1b200fd0e 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 92f10a86234..834a67c10f6 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 4ae95f51299..9a0d7a3ceaa 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 0e359ab209d..b05dd122a42 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 9e8782789e3..30cace3ad96 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 9804c0ecca3..fe13fdcbb96 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 e3e08b49d1b..cbd8cb699d8 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 31fdfc79b3c..c262351fc0d 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 e9b3b003c02..6589d657665 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 57ab5c5577c..0af606ead1f 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 f849d77b009..95bfafb5d96 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 84d2e00ce39..85def43bdf7 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 f3940013903..3fb54925db7 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 00e6e5830ea..3464f4aede3 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 f193d8ec97c..0ac8d52d97e 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 b0793af4b9b..039231a0d5c 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 9c68fa54832..9cd915c5e77 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 2bd882a95ed..cdf9aef166f 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 b1442e07c92..656bfb2c065 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 00426dbd2f3..b350caa6df3 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 9319927836b..ccfcf25deec 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 2484f4d7965..dce6d9a0c97 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 11d021b6f92..7b50bc78d47 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 959ba8f70fa..14410b4723f 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 cefb9f234ac..e63133fe90c 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 d59b87a4c8b..658ef00f263 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 a8639886b48..ae5a41dd917 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 b95e147134c..be3e0759abf 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 51b6428d457..e01741e304f 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 ef685eff355..5c4aa9dad0d 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 ccaef8f1822..48f7b097620 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 16ab38913db..249319e6b91 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 191e547b76d..b6a256a32e3 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 ba9de5d65fe..59735448e46 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 2d426a614ed..c5145b5649e 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 9da7e0e705e..60e56262e10 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 d45aa90d2da..4dc6a6783ec 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 57b837ec61b..8d49638291a 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 0719d944174..7928e07705e 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 a0aab1087f2..c21d7102ca8 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 14b70378b5e..21fb67f9515 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 80a357154ce..638504a3b5e 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 51848b16082..09cff667577 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 8eeff88e88c..3c3aaca6de9 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 20ab63ec987..a23219814f1 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 12083caf47c..b0865c7e4fb 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 0df7d8bf0eb..8448e778b53 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 7f83e8ff72f..5f9bd1cbc69 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 0960963d66a..a90b8e57f49 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 e8b6ebe4e41..f8e3e54c455 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 c91f5dc4ac2..feb2374ba29 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 818702bcd15..9511a3dfc10 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 03f6daee8bc..e52e2d0ac78 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 c9c4add527f..0abf0c5751e 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 e66ebf11ae1..d4a68da651a 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 b2e811b3b87..a3ce4425d47 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 a82bbdc2a4e..5afd122b6f9 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 16e3812138b..28c5fd07516 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 48e72e251ec..d4c718fb405 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 794be76c18c..b23285be8e6 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 8ab31878fb7..da1eaacdd03 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 5eeed2a1867..fdc715c38cf 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 097a5071306..11f9a8e7b4b 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 cb905639e25..768f13a961e 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 3a5d8b47362..7379752371a 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 b3a8968be21..2573e9ba63b 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 6d23f6939b1..1651465e5d4 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 42e60bb918a..9895fd07990 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 6442d31dfa4..d8499b517f0 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 0df63a0c8ee..6c91c32532b 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 1d834134c29..83c70b32388 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 9848f308b6e..834a3ecf66d 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 d6cd8e56838..8458d8dbbb1 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 fab8cb853f7..82cf2be0254 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 d1d1d79e40d..cc05d750398 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 437226a18ed..ff06c8ee496 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 603741f29be..27792029a2b 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 7d69bb18fc8..489bcabf5c8 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 2b1c0defdd6..956e75acc79 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 b51b3829cd2..3dcfccd497b 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 9eb52cdb915..4bde28d663e 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 2d1a587dd70..af710a67ecc 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 c17f5988aa0..782e0316a67 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 4776e427645..1444d8af8c3 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 6d35bbf5f7e..94f486bf6d9 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 1ea4baac800..1d965382554 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 82b97ced3bf..19e13da783f 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 4417acf2a5f..54f2e04ae8b 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 585156e02ec..1bba254a81c 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 4c03a8c816d..2622f2eb6c0 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 faaba0b8aac..70aa8f293df 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 8d70059e94d..944188db98c 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 e394652c3a3..aaf73c2b183 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 65cb3399a28..e419033ff40 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 8198ccb6e30..e5e6c54c528 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 c649502303f..ba136d3fbc3 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 96a36c88d99..02252347c46 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 9360669bc44..4d87a4d679d 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 ff3eb684177..b8b28cdad19 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 4a0380366ef..0cfcc38ef52 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 7e7e2a16e97..98604cf7aec 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 92526bcdbac..f6b72b9801a 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 f6f8618459a..b4f4fa104dc 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 bb85c49c2bc..46af5d49fc1 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 d7294f55350..adfe1c8b0f9 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 098cea08113..7853d8830fa 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 8efd460e977..aea7cafcf80 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 bf63ff7debe..1695ed5a7f3 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 1c9cca70669..32114c5e919 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 1ea723978b0..4bd51562636 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 255d9946b70..fe8fd7b770c 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 1549a703c9a..7ca9450ffa6 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 30af7c62d7e..972d587084f 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 0a30933857c..f4e2efe6d6b 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 739f822e7da..44363d14342 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 f82b2df2028..9ad6ad0ca5f 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 92f2bbed835..dd6c4449ab0 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 0abb366e0f6..f29076a347b 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 981b74ffd8e..3b8a2f63cd6 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 ba6a9ec9bcf..ddbb450b14c 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 4199e66972a..15e7a616b87 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 bf10fa9be64..f9fe1bc9d53 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 4083fe92f38..3a6f9a26ab6 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 ee368f15c03..abd6cf881ec 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 9700ced5578..43f1fbbd0b1 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 81e10d75750..463e58cc16f 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 605ed4a5782..c711f73ebb9 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 0af7687477b..c18370b09ce 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 ed513493271..6fab6014541 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 3b94bd9a43b..550c079a697 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 ddfcae4d866..8713c8973e5 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 5c5c30c763a..1511a944e23 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 6c052a25ab5..2530da32269 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 d99608f0375..544737c906c 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 3ba6d1c70ae..c68ef53e521 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 d8071d009e2..e2e157443ff 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 b9a0bfa6f57..f67950d96ca 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 60a6549e914..18ed539df83 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 53235d45d4f..16f6fc1e5c0 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 e1ae40d7935..19d211b996c 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 5ceef5efedc..62806990bd6 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 5fbcf3dbf20..0d9a7179ae9 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 bd155ff88f3..c0414276b40 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 8d0cad76345..4ba64c0059a 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 103c6d73cca..1a7fbc2f733 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 9967b313e7e..012d76f0360 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 3c35787677f..7e1ca775bd1 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 0e5cd8db866..a8a000b7dfd 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 8eea9b564d4..fc4e39a64e8 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 4dc389911df..ee095a937f2 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 60216d9a194..50813c912a7 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 f4a81450f3c..0422f8a4668 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 d398b6fca5c..2fb003f72df 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 7777744be50..c7a2a0b2c5b 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 e108b2a72c2..09da986640c 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 c59702f7966..cc63b650de7 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 8a8901d81ac..4abffd1ebf3 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 8382962497c..1c327dd95c9 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 5ab313b0460..e881786805a 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 58d64a456d6..6aacf66444e 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 79c4671a559..445bc7f913c 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 c2e3c34958c..e74ff6d7d1b 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 e33c6ef3a2e..8d113906d8b 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 94c629e5f17..537732d1617 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 687e5c5f79a..2960145bfb9 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 14538b57eb4..41e476aace4 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 bae1f1cb3cf..7306b487424 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 fc2420f86d4..e7be6544a07 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 0331326243a..35c7ccec150 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 7ec82b8529d..0f696cba6f2 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 3627a294844..92a3733961f 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 030285198b7..58d1aabc2c7 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 d08a744133f..c51f4fb85b9 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 1baec02eb7d..8a81100bb13 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 90a700d7ae4..ca70a7f3a58 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 9b5149834a3..8bca7c6119d 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 1dd48066911..1d478416ee0 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 e629f2858a1..290218f14e3 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 5bdf8b4b2c0..982194ae78e 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 b1bde3c715a..40262fd612b 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 1f3ed06702d..4e7ec6201c9 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 9e8a5502359..087e36bce30 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 167472f3834..5dd785c9ab3 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 1e9da50f016..fc3834f29fd 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 8dec3f3b38d..dfbf8f7b010 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 9ff5af7aad6..c0f1074c82b 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 b734817afe6..c707d7e2ca7 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 b4bb239c7b6..3039cc62859 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 d7c4e5c5bff..4344a20ea8a 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 73334b3c9b9..2d5e73d30f7 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 f43ce7aa240..958e8b04d09 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 1845bbcf73f..bd70f16774f 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 925df7ec550..e5c4dd7dfa5 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 a190e8cb5d3..c426fbd4cc1 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 fa751e32aee..f9394dbd2c1 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 23cb99c0aca..db544f05850 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 cce61e2f642..95384753718 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 e86ad045d30..109c0b8732e 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 a3a2c6c9af4..98e2e7fea5e 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 fc939a11000..3bc7ee6634b 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 102bbaead7c..aeb622e6569 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 1c142a4672a..ab411be95d1 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 994d71a3abc..caaa899e7b1 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 6d937f265a3..37dfb105c0e 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 53d442b2f55..5b4628c13cd 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 f99f8e8c360..6ed5a8638f3 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 881f2055a2a..de562cb4d22 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 28d0149e168..9d8878b8d2b 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 b6d5692042d..62c27450c3a 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 7baaad79fdd..887721dcfb1 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 c1721cb54e5..3966a5c90bd 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 9b917bc8b08..e105a8d76aa 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 f7c4b6f594e..e7bb4464282 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 c55579d63ed..f506686d1f8 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 9661f032b10..07ae554acb4 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 6f950748a1a..e9e24d31d43 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 adc4fa7cc83..da58b6b86e8 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 fc92f5a1a4a..779ae94215f 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 97aa99eb7b4..2c76421adb5 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 74625cf76f9..ac8ee4f23b1 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 6052720c20b..a6435932173 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 1bd48b9bf97..b6b190a73b3 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 1e736489136..c4da7a7188a 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 aba6e0bc648..5ef24412641 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 2f1cdbdf24b..f0e3dae60ff 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 3d8a72e3cab..a82773b6dfe 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 1140b2065b2..cdd6210d88a 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 59eced263e5..234c5f377df 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 f4ab2eaf5ee..228f0128663 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 0a84437791f..d694b833f74 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 dffe2f04682..d93d3fa57bf 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 cb6b1a60380..5eedf7e4c0e 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 e1028b995ce..7446f76f4c3 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 efe8e86773b..a8f8e21c827 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 cbc50c642e7..67b20c05327 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 0da49f5fa5f..8d9ef7cde0d 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 a3bdea0306a..9ea6d5259d3 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 2a6e99cad53..e7ccd00c29b 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 4deb66420df..9969f25a151 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 2047f51ccc4..5a8ed788d8f 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 3399c150428..e584ce1044d 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 b06c3cc0b8a..3b3522feebd 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 7721dea7f3c..3b90cc484f7 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 a86468b55d7..f19aa01c622 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 7bccf948776..848aa1c1c1b 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 be9b1284070..5b83b4239d9 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 0a022b4ec48..35517df1915 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 67ebca49049..d93499fb57f 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 ffdc31a4574..dec4c0a6d4a 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 c86347a4b3d..7b891f44ac7 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 3e408138608..e5ff4455f71 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 e4ff5076011..826e25000b3 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 db6ff94a948..9969166ab5d 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 66f25ffc185..9287ff71b87 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 820eabbd9d4..3c3e62bb356 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 884e3aaa169..73675065cb5 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 2beef6a6f76..4ad9b806933 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 87f18fb2a21..fab781ed667 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 76ea2eb097b..abba76521c5 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 e6ebc213246..ac7d4167aa5 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 fa0eb1167a4..18cacc6c1bf 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 e2256129ccf..ce0c05d5245 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 0071f8d3b13..894b9940c4c 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 040c55811a0..d2c11e9cc44 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 115cc813fea..fa0f851a357 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 1f2b448cc5c..d45da0d4c10 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 abd9eea03dd..f76f0733cc1 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 26ba9f57cb9..c1470419aca 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 f19b3d1e9f5..307abd3f30a 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 7bf92b3e52d..4190b37b754 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 38ef0b3d991..c3ac8eb67b1 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 7c393e86ca4..7d23b002c84 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 5a807d3c10d..a319d728e7c 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 49400dd8bd3..b984e565063 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 2e468c95f1d..45aea09287d 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 04844d35e89..34de2ee6d02 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 7050de8e0b1..873bcc07bb9 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 7f1cf2403fd..ec74925be8c 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 0b690001e55..0cde3fd5479 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 fbd4a5ebeb1..d8e34be2871 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 df35acd776c..2843ecd6d80 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 75b844e6ade..e98b788f622 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 55acc81f09c..e417b833910 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 3b8dda292e0..ab7a6cf0d84 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 cb7760a6a87..1767d3b0cf5 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 c3edee3358b..50bfcaddd6b 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 c0c8a59d134..9c8360c4be2 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 527a2ed9011..c68add97101 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 6a6490853ce..02c8ce64a44 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 a49ed44d595..8e2056f58e3 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 6848f07f931..f8692b40284 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 337c4d523ed..2c6b0b85e7f 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 9637f386952..ab2283a51e0 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 5eec0dd39b5..c0f6f9f1804 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 6ec96c1d494..fc0b4ca4338 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 6da74562a86..5730b46f228 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 b391143680a..cf8eedae67c 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 9da291e925e..bce2b7aa4d3 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 3bcf7528998..7a2a17defa4 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 aeb53a6d5ae..6bef53f4d6f 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 f9e499ffa47..aea4ed01284 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 5c98328ae44..67239db91bd 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 ec091fa43b3..a0cc1678c35 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 23ef0330f10..76951c75560 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 d210a0913cc..bcdb1dd7899 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 d3f1c8ed0a9..4ed05a8f619 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 8f97520933d..26e8794a7c3 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 1182717e28b..4b35cd3adb6 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 707d619d715..a024d52078f 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 c517d546a4e..b93fd3b93ed 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 7845b4ffe26..0aaa231da65 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 f7adf1550db..6dcfd98da68 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 193ad780edc..ec72d838583 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 5254ae34877..bc60b1c1c9e 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 2597deaeeaa..91b9448be49 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 7a4c2a9a621..4f629f901aa 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 28654284748..582fa0d9cc3 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 1977dffe270..30cafd9859a 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 3458109384d..a81a5274b78 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 4e9e5b88d78..d5e5f7abf80 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 c716b84ee32..78cc92c317d 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 8c5c96d2ea3..03a6e352f8b 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 b1eb1139b0d..fae27bb1e02 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 aed907b4f6f..3dc0b51af62 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 84b6edc7beb..b23ec41b373 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 21b6884ffe6..14b5467e303 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 dc4cb052de0..38b60240646 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 31a302e139b..e6125083036 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 c3829f232b2..bd9354bb837 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 7d49719a046..f24e678350a 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 075165f3bf7..7d17161fe93 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 77bdf81adbd..4e4c2d171af 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 e6c325a9195..7722de1bacb 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 918ff200d1a..efe2a852905 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 0958c808501..4f41291d804 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 8d202052048..df39364bcce 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 2bac3b053b4..7ff74d6da09 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 4099074a86a..67c6798ac49 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 6946c01d003..3776f85cf63 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 060a5c6b549..395ea3ea5a9 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 18bbad251dd..9320b1f424d 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 114108f87fc..c9c88e95ddc 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 46995a54931..7622747f434 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 e6bc9fcf0cc..ade5412cb7e 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 a53efa59ee0..98018741bf7 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 d08fee85340..2dd1515f30c 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 9fa635e7d6b..b479d867803 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 13ef3aa62d0..f060d91dcad 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 164f0f56b4f..f39431b578b 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 2a7c5971bb4..6dae070a1d9 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 18ac479061a..34eecd65e46 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 8a41b25e1dc..9f6520b4d56 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 067f49592ae..95c9e87e5e0 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 4318fd163c7..08e74ce364a 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 b4097b76e53..521b01e9dac 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 87477792907..0c41d719035 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 5b5a571178d..47167e9c96c 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 8452a42ea9d..6be81479bad 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 c5fec0a236d..8fe28ebd3a0 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 9095d2971b4..e0724d7e318 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 e3b7e7b5672..47c2dad856c 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 d9dde597fed..e390785d2e4 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 2ba0aa49343..3bc83b95aa1 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 1e840732e3c..b1d0ddb6eb3 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 3ba3690b431..4578338f07b 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 bb040ff6213..21dd64263ef 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 6d70dbf1584..2779af23d2b 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 45c636ce912..5b91fce6e32 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 0ad662b1a87..ad4935ec605 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 1b08e5a6406..8c2952ce3b5 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 7f88b722c92..45a642a6617 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 d8e9153549d..15391361952 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 95283a4f4f3..255ff58e143 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 f55b2b21491..1631e6af59f 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 106962b81da..ac4af8a5a84 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 874b35af4e1..b2048e3ad8e 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 1d304d1696b..285d3cfefd0 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 c89de01ce74..98619d39642 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 356e1364f7e..2ca27608932 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 d9d80fd3caf..45df6fa6e5a 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 eefcf21f1d5..9a064efcb4d 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 7257184e4fb..85eba2622a5 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 6962b7898d4..42b964eeada 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 2940473890c..92a4e7fae5e 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 37eaebf30f3..bba937e12a0 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 185dd444d2c..21c3c824f9e 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 5521d96a32f..8803da19962 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 2309a169792..4a7159196d4 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 054eb358d47..197832f0819 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 ae875b6f8f3..062d370aad1 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 551c2263cde..1715cd6e133 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 0c6bd346b87..c76325cb4e0 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 5c06a018f3e..29c96b68e1b 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 18775e7da01..466d82c8efc 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 fa3ea4713e6..e81ff871387 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 640a7ecde7b..1ebd068b271 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 4033c56856f..4fbe6fc554f 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 0bb608f54cf..9722540a942 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 a5e6f8ab5f7..acd31e13866 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 ae8e6e62b25..c18e7c4ab9b 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 cc860cd019f..8668217d19a 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 149cd418085..5fc796efa87 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 62340cd080d..1ccf35296f7 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 92556c3dc87..61eb0bf9c11 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 8185bf6a6f0..112a947fc70 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 feecd66d7c1..82382c1ada0 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 d7750a2d606..8e9bc460dc3 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 e21205cc319..0f8f7e56698 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 5e1db39d6d0..04bc2800831 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 5dcc9b729ae..9fef1529968 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 c5bb3e8c9d5..180b3652b00 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 ed0993fcad5..10dd89d2b8c 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 c8044be6476..d47ae99e890 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 a1695c1aaac..d12382a3690 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 0fb4ea239ac..f009c15f872 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 5881a5f1bec..eb97f464427 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 08577708a07..b61e681a0e5 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 8a790336476..7a061858055 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 7ac8f4f2064..09517cd6fd4 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 f4d1855ab52..03cdcc2fdd6 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 14d16c7e774..71f3dc02c7f 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 49776387379..6838ac52162 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 f6f5a2495c3..dcbe7f9a90e 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 63eca8abccb..1e68f74d7ed 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 07bd5de8480..afad4b9d86e 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 37ae334f143..ed3fad676e9 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 fcf047545e7..8eaa292347e 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 7030dcdf18a..910c8a1f2f0 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 0921f66e2b3..f82ec3f0aef 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 0d03dfdcc01..e604af6fa9b 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 d648ed811d0..bdcc5252790 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 3012b300379..bd610978785 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 d3af918771a..5854ec14ba6 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 675fa273eac..30bc0756498 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 f3cd8f6e320..c0f9e1f5294 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 7caf9b5bd1a..edda441cfe3 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 620e97abec6..43a40fa8d3e 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 f5f0421f2ba..4eee05fd230 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 9f17bd36f89..1d10fdea1a4 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 a178d84f46e..29effe5e839 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 4fe5ead345d..7822c2875a2 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 11c121f4f15..2830549a1fe 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 dc4bc2ee11c..2a1d13ee349 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 19b59cb6fe6..8af0fbe99b9 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 8d41d8fe750..7dce895eb76 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 e5ee9ac276a..c2af7eaf276 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 96e78ad44d2..2036ca0b294 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 f96968f1e54..7c5240ac385 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 05a5f96dffa..208b8e5b38c 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 b982e9e9eb3..a93b5593088 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 c8c75a16c7f..6a7f0a10702 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 4a5c4606274..465518bd424 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 660c08769f9..a463f8f237d 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 351aed9da5f..f33d59cfe68 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 6a5fe838cd9..968d7e84401 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 9dd0073c072..a9caf315de4 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 2e404817849..19cc7c47005 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 1293ed4f166..04047eb56bf 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 229a2a8037b..50566794330 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 04d15d194cb..03c52935f91 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 2e915e48c7d..dbf6af6c4b8 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 0326db20f72..75858a9fbc9 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 9973adbf94c..f02411e1b10 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 05ec4f0f1d6..a951d82fc27 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 7b063d012d6..9ec8893d328 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 464dbc66180..b4ade9b0dd0 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 c4d1e44ebb3..6c95bb8a8f3 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 2ee0e2fe056..771e7463558 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 db5699fe334..f212f5afb5a 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 bda6ec72e6f..b910ff6c15d 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 4d9e2f0d0d2..8402f6fa9f8 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 9d93284faed..6ce3cf53df7 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 5073e303bf6..5ef117991f4 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 04cd0eaa949..a797c1aeed2 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 a990bd5fc08..8f5c7cf75a3 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 7b52f72f5f3..0d720ac90f9 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 5d2f9198daf..661aa004920 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 c8f9f0eafb8..4c81d84ae86 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 1859f3d29a6..d1dcecdcc97 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 5a0d1dc60f6..a72fdc486e2 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 b0955f82029..82a09247c0e 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 e2d712ce6ee..75acdcd44e7 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 bda9b16c538..817deae0d78 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 2d9128c99cd..0db8901b959 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 cf0ae022ee2..10414f1aa61 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 120813aab43..984107ba3cc 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 f590ab954d0..7899b6500c9 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 45a5ef8d4de..ceb24ca79dc 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 f6668e7e938..6b6e3bf7d70 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 c34f73c7b4d..1c185600fc1 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 4e1169271d9..77bd5dba99a 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 444d30b1c63..db4383b9cd3 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 216893605b1..defeabe5b59 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 09fd9dc6da9..4d2ab019f19 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 474f1db9f35..579d1572088 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 5023f36e14c..fee61378f8b 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 8b3b30c50e6..10e3d1cc71b 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 a90f7075369..e1c9c590dfa 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 84103918784..fcf605c4b74 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 9b915999d28..93813847b88 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 12f45b373b8..f9fa5fe4879 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 7fe3a2b4950..a877188ff03 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 38046d55b31..b5372c23d7a 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 f1ce436cdd5..b3d8f4875bf 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 3dc855cb546..87abf5aed68 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 c5c79c8fbc5..cd774981ffb 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 e9dd1853189..feb3bfd4680 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 ab9ff5d8531..8dfd97b2d3c 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 00c1cdba2d9..80feb407d92 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 229074dfd0a..df568f2bca6 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 3b59a9bfcfa..1ef9f76d328 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 701367de936..75ac3a749b3 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 f1d82952a8a..c763233e57e 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 3a3614dbaf1..a5ef900f34b 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 e08bbfdfb15..6c0b1e665de 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 50292d4bc06..6043a34a23f 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 498155b1e27..e6f105c7e9e 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 4925ed314ca..d39489c9ec8 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 fbc6fed4e63..7f0480c1c83 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 f1eae8cada3..f5c5cc8902f 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 dee89ca5ef8..e92989976fd 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 fc7dcdd1d20..b292a56e2bb 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 943d33b44a3..2f2f8a4b4fa 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 be7764b4510..4b7c4d4864c 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 2e8d2557c62..041ab2753e4 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 5158913cd4b..4c14414f339 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 b5cacfd5305..7a25e771032 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 37a3c4deaf1..0d5a68917da 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 54d08825997..e2f9645a245 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 4383f1deb3a..0a852d1eb63 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 b5fa4bf30c8..9df91860dd9 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 09420e7eccc..f15f69e4b20 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 6f560ba0fc0..cce842e976a 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 fafb36fa3d2..fc48adca642 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 41e728ac1a9..ed742ddb685 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 f255ce84e67..ecae06e7c84 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 c8195835ff5..fcc9b376d88 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 d63d9af941f..3ddd80299e6 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 a896f59b2c9..942f61b80ff 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 e411dcac92f..ea031039daf 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 38cad11bc4b..9a608de8934 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 3d057a6dd12..cccb3c1f529 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 2280709c4a4..b6b7946a6d6 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 5a477adb179..aa64d32da6b 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 22be63831cc..7e1d475e78b 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 b739b81ddf6..82fac3527e8 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 12edd159209..e0fd6273a18 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 6e8c8716f91..84f5c85e497 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 2b28cc6cbbc..2a731bb8656 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 04ee935f8b8..ac913f8cfb4 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 a872eda5056..fb3c1dd4674 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 3e49f44a826..2ad2d4954f2 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 ee0bfe604e8..ab5595f90ac 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 a0a53a69ceb..7fdebdcc582 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 a0de3155524..24dacde539b 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 0d6d8dd1e32..9cebce0ebed 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 9124d6ed16d..b2a178e4be3 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 bb395160dd8..bc1d730663c 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 a4825cfd05a..a09af11c8e8 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 46fa69f694c..7874a780b69 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 06421b51263..9a93cab2132 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 953453b874b..0c3e7b9e6d4 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 5693839cfc5..3c5e29f03ca 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 1b0ece10ed9..d37d2a60dda 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 59f39c8c756..fc77875bf20 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 776f99577e3..6179f9e2f9b 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 fc054e18b58..a41c416aab6 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 0cc6c3c47e2..ceaec3c18cf 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 f4da898c8db..493c4a0d35d 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 a3fb8fe3b71..619a19f2f75 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 a8773215e79..85f9c55bd54 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 20940e37dcc..00e0ab82a9c 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 ceb56462645..cc68561dc3f 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 f6e3fa6076b..97a63d8fea2 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 fb43c3cb0d3..ef6bb96377c 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 d6e554fddf6..159503c23b6 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 4e42e13d917..5f21152fba2 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 15321e8ba0a..63aa554be6d 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 937021a3710..a0090669925 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 9dfcd272c20..3b577654231 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 2618890d367..25e79d6442d 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 a31118ccc60..6f7482b89c1 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 07a8a941fd2..1bc495e8f27 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 6ddd880c6c9..3d04f7b8b40 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 098146dac1d..ea7edb3000a 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 105ec20b5b2..e60ae2de2b9 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 6c5b59e29ef..9b69b05b3ac 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 2eac794cbb7..ae9379380a8 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 763a4eb7a20..d0d356322da 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 0d4adbc91b8..a812307f5a4 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 2fbb08a89b7..9b8c02811d0 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 12d256cc7bb..b4221c2b2f4 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 93adfcd37ad..b0c55b8482c 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 fdbb74fc5d3..49441fbcad7 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 d5678ed1e96..275afdb287d 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 2e2bcea6d02..33310ef25a6 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 96c1f02eb1c..4b4898a2c9a 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 04bb113c7f0..506dd61e3e1 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 d3ea6b2089f..7d5d1f16ea3 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 338c4b923bd..88b983e1b96 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 6557fe73ca9..e3dff8b5a7a 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 e32c9263b1d..0d7b2da16f3 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 58d99c7a8e6..e5bfbf6305e 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 7520ca248c3..e6afc217f7a 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 1214f7d7ddf..afa654c04a3 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 d4549c1d4bd..015e2eea89c 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 3a88fb8eed7..64c0dc28d1a 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 b9b5e1b5a9a..781933a6d32 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 5331d52fbc5..0ed0f40c78e 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 e7d3ac93d03..40d7c159f74 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 b6c35842455..dd9bcf03c46 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 f855babeabb..4ab2e59e294 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 b2e2cb1c26f..dda18338870 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 61f2dd01e9d..f32b38887ca 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 4e602747f5a..743d9bd5e71 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 644f9a33e88..edc965aaca8 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 c58735e9eca..ba751ad6c83 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 2167827595c..1fb9b642e44 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 4c9cbf9545c..724bd6b966c 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 da312c3bde7..541d45476aa 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 a1820059f09..02d34320749 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 7edf7d1db60..751308b6354 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 93c3c3a055b..c5e0c478bf4 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 d3b3a94d032..427a8d13135 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 c0d31a2d7fa..e2067468114 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 9fe7972e852..3b76e88a42a 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 98577e23a02..ba1cf78e093 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 93039a49c42..0a597f8df89 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 bd446bfb80f..baf277f4263 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 6d5384f71ce..459cac9111f 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 ac902791736..412948a99c2 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 004a483693b..64fa7f578c1 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 14dfd8fdfb2..0a47182934e 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 c610e04b809..a8d9d3916bc 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 835f11d19db..247fc078517 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 d6ee828ea62..65316723704 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 b16e4e71f56..c4b0a902829 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 664253c818f..1d5d651e991 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 f2ad5770a40..0167a036e68 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 0cbbf324548..98929d9c833 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 296842b9f75..0fb0397debc 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 9315413c6ab..53695b9af36 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 b40d0f7aa9a..e757c47d05e 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 e98394d0487..d584a3af210 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 a7079d540e8..d765d45e9c9 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 ccc6101cd16..3eeacc50e7a 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 648250b393b..099f89586af 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 f50d43fc849..f40e92f00e3 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 72672d5b7a1..a8c3276d271 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 019463c3c34..2c7b1ffaa12 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 c988e6de42f..b4b59f6f5d5 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 663df68860a..a2f34329e77 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 af132d5c0fa..d4f1cc8bdfe 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 b83f2b27d67..1b62302acd4 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 dc4a2bfc80e..48b4d4128e6 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 1b43da8c88c..c543da62370 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 cb888b400b5..499422177e8 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 4c85bb8a817..c328fd6f056 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 6ca2466a6a5..454ec5de57e 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 b3f8e95b1c0..cabba10d0a3 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 96586ecf72f..d7ee161b54c 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 3bb39ee47e9..e836872201c 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 99ca7acce3a..0d80072be5e 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 626018b20aa..6e9361d8379 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 670aa9b5bd0..3cea5221d7b 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 5d82c1a29b1..12bafe6517a 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 0371c0a8470..2b27dfd8c98 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 729eb69e11c..a11a5ce3eaa 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 457cb109f3b..77b7e5b08c8 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 5fd028f0ce1..0552c076980 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 31803d19ea6..1624574b180 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 947c1d7b367..73e1af18b2b 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 472f0fb1c62..9dd7ca8d75a 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 ecaf049bd3f..e61f515a823 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 054acd98b14..99e6cf8006a 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 75cb1b1c1f3..0b0f75833ba 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 2d012911926..a20d93326a6 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 715f909adce..9a1d07a9d6a 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 471d11ca557..386af6ac741 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 19efbb86285..0a2f7967b4b 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 6ee4e8e614b..11de8dceca4 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 b0f9e1b0d9c..8ed6a44125f 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 780df40c96b..801c415babe 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 4d82198b5d4..9fd08cec6ca 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 d16ab2d4113..bf92589668f 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 22e8bdcac6d..a35519ed0c6 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 2e82468248b..352498763a2 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 5bb94df0e1d..23144008b15 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 9998ae91ecd..d8bcbfaaa78 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 f10ab7f5bb4..1090db25561 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 d4978f9b7d1..f6f1856ffa5 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 ae4623ada8b..1fb6493a6fc 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 caa389d33d3..973328debff 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 8e96e34ddf5..73dc3f46ec1 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 57265258253..3bbf948ddfc 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 12e6c126c95..f3cdc94372a 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 c15da4b54aa..d9303c6933f 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 87136266282..8613132c3c9 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 5f4d720c9cd..116e9c8bdc5 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 9cf8908034e..761b965ea44 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 fb45088f0e7..c92f713578e 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 a1ea442ec0e..4d026179ee8 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 5a4ca263d67..9b5f3e9d5af 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 2b992660a31..c179a29496b 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 6bee4bd534d..068dc28e7be 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 3da205910b4..8a2a36827c7 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 9022af53f67..07170159f4f 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 50b8bdbaf46..0cbab721858 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 2b88d702e0a..1b5fd5d4aa1 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 f7fbdd75d5b..300384d7e65 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 b7a944eeca0..eb9b3a8fd5e 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 3731f907bb6..aa288db73d6 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 0992d15c21c..68685ea0543 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 91ab4501d3b..36ff9c9830d 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 467215901bb..3b33ae4ce28 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 8e4191e005a..5907dddaa87 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 c715bbbbcf4..a1592b60602 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 9ce0c98098c..5da5d5d3c34 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 544a6c75771..daea0e04b81 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 555755f677f..8fef0596d4e 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 d60a765c023..ff7e5f13350 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 b94f9c5ea1f..779ea70f163 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 cec7fc0af18..37b9a89b22a 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 71937cd6a55..45a8df18645 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 00ac6e838b1..9c9c1b40be4 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 6fccbb22708..773a60d2de5 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 8c84d5ff439..b854deb325c 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 60cd4ab84ef..e1a1e07f111 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 9c53bec1dc0..18df31be28b 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 8e587cb577a..b421603cbdf 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 facd647d60b..83dfe611db0 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 732fc661364..b8619b56632 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 28c4a09af94..b6085d60ab4 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 c7f43e3d302..253ce7f7da7 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 fb2d2a03569..9c0fd2feaaa 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 52e6102cbe9..8dbe7c4c4a7 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 9675bb6f018..a06ce2b6e5c 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 0726d8458f9..0c09d44ecc4 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 80ce4b8ab66..81fbd0bb36b 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 4fbbc2f45ac..3ff6a24fd32 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 ab97dabaddc..af251012b70 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 16295a0d29d..ba4af117e7f 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 c73bb977039..09b6abf0252 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 7f51fd7d92e..ade5be9ca31 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 adc22287e76..c221fcb35cf 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 36827a40551..02def0b8c97 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 c77fb4c736a..b1c5f39bdab 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 6adc7baca6e..d78a778c622 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 cf5440edcdf..110a050454e 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 1a0ea2f39d6..08a83c496c5 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 f7674ede587..442d2140ee4 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 39558923caa..63d55648cf3 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 fef0a8167cd..72847ba83a5 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 a903827fe2d..bd76ea49e1a 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 fb13e50988a..8b2c5165aca 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 ab17aa85cd1..1996a7718d8 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 9270d46a97a..22305afb0b5 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 abe8adcffc2..9e54e8cacf4 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 ba448d23924..96fdcf0e549 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 df3a66eb785..ac87d16863c 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 438a0b13068..a98d5f716d1 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 576eee8ebe7..c35b3a881e5 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 5f5f449c853..aa3fc898a70 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 3ffb8e1c88a..1498dc77b1f 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 0310234fe7e..82f0905f571 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 c9785eb34e8..1cb3ad7bd80 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 5436d7d5cac..fdc8d31b2a1 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 b68db8eddb7..ffb93e7312a 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 ada0fe375ea..6b66ee3e76b 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 77a11c881a8..665913b5787 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 8b8070ca896..463a48ed34e 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 b8137afe0d9..49baab0536d 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 3e8c5a13d61..d4b2adcab3d 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 51282acc7cb..2409e39f484 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 b775e1e9397..702c74e1e85 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 1694e5b4167..f2f35cb622e 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 601ad375a17..acf5998dbff 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 9eac456984b..217aaf49252 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 8adeb233ac0..dffb509114f 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 42345646868..a6617d8b8a5 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 8abfa4d9db3..05889999291 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 d7ce80ec454..a12581da360 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 0d97b899553..2ad1871fa3f 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 8f7a708cdee..04b1d6030ed 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 763940e55c4..71b892f4f7e 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 60c68517308..cfb7f90e8d5 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 62656975cc5..76d520d0ce8 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 1d7bcb3c067..8cdb66a3047 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 d94fddf1f54..18125501c86 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 95d60169787..0ccfcb1760a 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 5484e683d40..fc6edd3edfd 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 60ac0fd2e69..2834eb52de2 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 c5d417da38e..c4a7d78fadb 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 a637abd612a..3f48d845eda 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 cf461ae8e8d..d7305f0f64c 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 a6f5f776850..7460d87050a 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 b67c8b303a3..9a067fa4e4e 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 3bef0bcd60f..09af52fb423 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 66f14ed9579..827d1fb3eba 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 dc77951554e..909342850d2 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 b239d6d0a5a..871a515d0e8 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 f2ae46a1bed..2badef099b8 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 9b93fe9e4cf..832dc3a49d2 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 cc242a2c05e..78a529c86f8 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 99121d34b71..eaebed8199c 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 e6a4ebbeec3..ff4a4a99d64 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 904cd9b9dc3..f51e3046be1 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 8af9032ce10..7cba85af027 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 67dfabfd806..ca374de4816 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 2dd3bf6a63f..8fc2684842c 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 b2e8c047754..faaaa30fb7d 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 7d13cbf5e0e..4cacb323836 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 ef0c29aef73..522dcb99bb6 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 105cf8493f6..15dfc0237f5 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 acc0f762ad9..690817dbf62 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 4dfd9f458e8..57ddf034822 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 8214a993f6d..4dd658b8565 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 eed7ec00551..1393e2fcd42 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 abc28c9068c..640ad63275e 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 7ce89fec7b6..710ae971089 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 4bc6292d648..af2ac527556 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 e1f6274d508..09956e86488 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 2b406ba32bc..76c7c4ce8f7 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 df05373d3d7..b8890c53d31 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 fdc0d0d4204..f73448b92d3 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 29e8388868a..eee2b1f3d79 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 c826a9a4444..a631a12afea 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 6fea0b65e1f..3216f4ddb02 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 17a714a5062..100c6e71bc2 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 5fc71b0fe23..3745c2b048a 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 d0b60b6afa2..5a304b6b798 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 d384c4a8a2e..20815977fa0 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 71be1107a94..cff965bd494 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 3eee2efc0db..d529ba6f23f 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 a881cdc4ae6..a4daef73379 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 6f39c688cb2..f8b9efda71c 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 81782c33ecd..e1c0416c714 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 144d68e62d9..4d104379c7a 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 f9968cfe222..9a0da0eafb2 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 05e749a0df3..89d16be71e5 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 4643ebf3a45..bdbb2e971d4 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 c9c0999ed76..76871f73d0d 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 95880c92e25..5988b486555 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 76268455eef..16931592533 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 4dcdab90799..3ed14a00e2c 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 aec7846d3dd..325f5269523 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 4f66f2aec9f..04f4c61d2a6 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 1231daad287..cab9b9f47fb 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 57ce066d5b7..c4a8b55b7e2 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 bdd46364e4a..4e2010f2f85 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 29723d521ee..a555db944fd 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 ae4fca72112..55c8620365d 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 f30e4cc806c..f43f0507e4f 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 3fc7c01b663..3464e77fd55 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 6358874a7db..0512c71950c 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 0ded2996ce6..69381c49747 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 06ea6dd5a8d..b698dfd0a33 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 436758697a4..0a9e61f8f4d 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 b8ba4742642..c791fc2288b 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 ee7306c5a50..bee093dfd66 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 1bf5b1a1168..6331c981414 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 c31e5b6a68c..b14c6e8921a 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 c1aaf04ef70..836333f6be1 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 16461f3a8ed..cae2c077b28 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 8e3a9b6cd5d..19da988d165 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 5b5cf98a141..b9be97d0a86 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 f5bdbc8b73e..f134375f0ca 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 a78fbd91fea..954de0116a8 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 24821494e20..139b1be0262 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 16130d2d395..c9a47e50d17 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 57a27a0e4fa..363921fdf30 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 19152166329..f7a716ac1ca 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 dce33adcd46..168cc4aba10 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 8270f05d77b..d8379b2030c 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 fce2764c4a7..548abf36a98 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 69bf8cc9f24..04a593768e2 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 5935dfd133a..b6e0080f3a1 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 88aaa93df4c..107a8bfab46 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 e23f7ed2d11..2d8d9ffb3c7 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 ee270af0fa6..008a2505f81 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 cbb85ef93f1..cbf39337185 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 6577182ea1b..2fb89543598 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 ba946c2e4e9..18353d1a45c 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 bab9b7ea840..9c8f1d266ab 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 ffea46ee513..5be022bc14b 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 d4ac947e91c..53f27ad5b47 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 4550d824e2f..9bae89ab1de 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 43e3d977316..8718bbf4dbb 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 897483d6950..81f596d520b 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 d1145c5fdc2..0fcfaff4165 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 02d4524f3e7..dda28c79a08 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 b1beddd89aa..8c632eb8ac4 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 d4dc0ee006a..c907c0fbcd1 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 b0e9d3d628a..f4187c84a0c 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 13a773e1102..5079e23b0dc 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 1ebc69f5059..7136447873e 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 23ac57766ad..180f9f4b3e1 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 37d3fd17a12..db6cba739aa 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 6251d25852f..f58674c598e 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 466eb433c37..e0301756b89 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 464d3c5f5ad..9f39ce95543 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 bd327f6c8ed..61ca1129a9f 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 331bf783d1a..3301524d34e 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 47a99242e3b..83464419607 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 90aebe4c38c..b0576c3d207 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 eea88e224af..ae00b1aeb2f 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 a818c5da2e8..2dbd82e6cb8 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 69bc4f52d77..45839078e7a 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 13c66136b8a..9ff33ef8426 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 f1d444bf59e..604d68c72ec 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 77bea775507..f60b0aefc43 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 5bb3e5e68dd..ef2c2a5d167 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 fd389a20a52..04408d12180 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 429fdf4ccc0..788ee9281d0 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 a2ee55be978..5749d0e5869 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 91fdb918b33..c8ba6c8c340 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 c93cd2c2d4a..2d1a7aeb8a5 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 2577af9e4ed..2328d79d54c 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 8f5c91eb941..5ebcc135a2a 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 82293eae4de..9cc84bf82f9 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 b90cadd03a9..759c2148390 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 ad33d8c1a23..f99bef47aff 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 180def537d0..c6e33e28351 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 bda54b0bd32..17cb499dd9b 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 aa6d2e9ccc5..30151581250 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 ac0ce3cff1f..625eb8a5fcd 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 48cc90ca99f..570e04ea906 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 ff954170170..3f425819320 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 7d0d975beaa..f7f26d13a01 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 8d6d56feab5..17ed6963437 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 faa3b5e9318..93e313facf6 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 15b1bafce93..182de0eaf38 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 36f315f9aee..e7911b4356b 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 e67e106975c..ac7a3777857 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 200db4b3c01..c8438a98a48 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 ac27c73be82..450e211e54c 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 20ed189044c..ac93faca256 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 0db31ea180f..9334b53de4a 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 7149871300e..4f7c178ad81 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 3c24330b58b..a204992ca07 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 6dd91abeaf1..f92b833c1ee 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 29b62da5352..e8de574f6ea 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 81d6e02165a..911bd32e0c9 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 c823c7f5b4e..bb6a4ab1efe 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 c15edc15865..bed0fffa3ae 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 98574e9688e..f98905072dd 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 b6b96a037c9..e4c26c261bb 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 d048552a4df..a535696eb06 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 0410e14eded..42654204029 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 5a8181a121b..8da8cc5a0d1 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 0e5deed8a79..5fe4c2d341b 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 49fd58e71c6..19ab5fc4e52 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 61038bf4396..0879bee544c 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 c8a4d32d6a5..d064c4a300b 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 e73d28b5a26..a4f97e7bf80 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 8ce42c36482..93cd5ea9171 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 69578835174..dc95a49cbae 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 806520def56..478fdf2ef74 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 50e624e8ee3..b8c1334a78d 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 802153d692c..a30d5748b0e 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 51b57b203c9..c7bc9cdb719 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 d9be7e5a7c5..2daff7bc3c5 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 4b5b4bcc79c..659e88dcba9 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 b5d73f096db..3016bdf6764 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 96b5aea12e7..afa87af46dc 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 d111515a8a5..d07f46a0d83 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 0eaa26b0c54..4d55e352035 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 25b88b9cebd..d6bd48a95cb 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 b9cafc473ee..14b57c5e5ad 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 e36683c8847..29f8b87624e 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 6a67b1b2ccd..c872be47c4d 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 df216ca8626..acf9dec63b8 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 8d7244fbfc7..b59a4fd91da 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 7606bfc9ed6..8daa7da3d2b 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 9fc8740e9ef..5e88205a3f6 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 011027cb926..fbecd5acd8f 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 a88641621de..05f10274820 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 657f746b390..fd1ec51a14c 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 ef4241cab12..cc83895cea3 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 a919d7aeba3..9ba4366bafd 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 37944478374..1e88c3fb391 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 05efa66a12c..0d0da59f899 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 8c7ee9e7037..764f609b72b 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 99b676b2c1f..1e2f3cc0646 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 83226bf7355..f64b845b0a4 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 3cd2bcd3f5c..0d047991e8f 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 11ae56f0f1d..ab449121543 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 bb8a984902d..58cd2cfeafb 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 efa35de8077..f21166d7ac1 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 609b2caaa2c..7489bacc3ca 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 e57abac7f49..10abc5b7a78 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 bed6084a791..31174413b13 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 205ed8f978f..d04f155a9e3 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 9d379b3d066..f5a2cb0c734 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 92773d95ce5..02fb2a52f28 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 f3213591d6e..9c995969fbf 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 1dba5d0a756..aa27be53a9a 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 285334a6c63..10a6c00dcd8 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 40d3a5925fe..d5eeee2dacc 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 0bc80ac621a..d32cf2ff32a 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 65eda7a4bd2..04e8f9ea7c9 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 f9c31ac030c..2a33745d11c 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 a88a9305e94..6a82aa8f6b7 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 258e4d02b9f..ca307a57735 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 16ff9c7e38e..057c6022b1a 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 8ad2f644f99..97996cd4a9e 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 3c61dccf673..ed408391808 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 cd150f0e2ef..13f0142c17d 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 63fb8ed609a..a2b70a7adba 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 52bf414ffff..d13099dae9e 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 a5ccd1d96c4..edd015ea758 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 ea9ffd4561d..96e56ccdcae 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 acdf4db4731..0df8dd83f9b 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 39224039f54..5256e27436d 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 1301e3c681b..7b9823845b4 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 1b5f49ba501..545f3940ed5 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 781dedfdf10..fe2e7d166e7 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 5d94a9dc634..3687002fdcf 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 21a77825f9d..15a3a674601 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 2996d37648b..7e3994196f0 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 326b41461af..1591323b62e 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 a3a2c9b12ba..52ac7e144ad 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 c18e974521e..11e5c46bde3 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 d34fe5b869b..0ac20cff236 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 8f9e15bf173..f2cbdb6837b 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 b01c6207891..e1f3794c547 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 d037d138a45..296f178bfc2 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 baed6e3b07a..6cf4b2f3c89 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 -- GitLab