From 1c4576f67e5941f5de6ab0ccdcf3e680b9ee8c7d Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sun, 21 Feb 2021 00:25:54 -0300 Subject: [PATCH 001/149] Bump version to 3.12.0-rc.0 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 1109 ++++++++++++++++++++++++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 505 +++++++++++ app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 1620 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 42293005907e..36efb6271d87 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-develop +ENV RC_VERSION 3.12.0-rc.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index aa889cac9931..0cdadf392555 100644 --- a/.github/history.json +++ b/.github/history.json @@ -55308,6 +55308,1115 @@ ] } ] + }, + "3.12.0-rc.0": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0-alpha.4655", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20838", + "title": "[NEW] Cloud Workspace bridge", + "userLogin": "d-gubert", + "description": "Adds the new CloudWorkspace functionality.\r\n\r\nIt allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway.\r\n\r\nhttps://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/382", + "milestone": "3.12.0", + "contributors": [ + "d-gubert", + "geekgonecrazy" + ] + }, + { + "pr": "20832", + "title": "[NEW] Statistics about language usage", + "userLogin": "g-thome", + "description": "track what languages get picked the most as preferred ui language.", + "contributors": [ + "g-thome", + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "20014", + "title": "[FIX] Custom OAuth provider creation from env vars", + "userLogin": "pierreozoux", + "contributors": [ + "pierreozoux", + "web-flow" + ] + }, + { + "pr": "20843", + "title": "Bump Livechat Widget", + "userLogin": "renatobecker", + "description": "Update Livechat version to `1.8.0` .", + "milestone": "3.12.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "20738", + "title": "Improve: Add more API tests", + "userLogin": "r0zbot", + "description": "Add end-to-end tests for untested endpoints.", + "contributors": [ + "r0zbot", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "20834", + "title": "[FIX] Atlassian Crowd login with 2FA enabled", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "20840", + "title": "[FIX] CAS login failing due to TOTP requirement", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "20696", + "title": "[FIX] CORS config not accepting multiple origins", + "userLogin": "g-thome", + "description": "always include only one value in access-control-allow-origin", + "contributors": [ + "g-thome", + "sampaiodiego" + ] + }, + { + "pr": "20833", + "title": "[FIX] height prop on departments agents table", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/108572412-fbf83f80-72f0-11eb-801a-5f659000325d.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20815", + "title": "[FIX] Quoted messages from message links when user has no permission ", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "20830", + "title": "[FIX] Omnichannel agents are unable to access the chat queue on the sidebar", + "userLogin": "rafaelblink", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20216", + "title": "[FIX] Several Slack Importer issues", + "userLogin": "pierre-lehnen-rc", + "description": "- Fix: Slack Importer crashes when importing a large users.json file\r\n- Fix: Slack importer crashes when messages have invalid mentions\r\n- Skip listing all users on the preparation screen when the user count is too large.\r\n- Split avatar download into a separate process.\r\n- Update room's last message when the import is complete.\r\n- Prevent invalid or duplicated channel names\r\n- Improve message error handling.\r\n- Reduce max allowed BSON size to avoid possible issues in some servers.\r\n- Improve handling of very large channel files.", + "milestone": "3.12.0", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "20826", + "title": "Regression: Fix loadHistory method being called multiple times", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20772", + "title": "[FIX] Adding the accidentally deleted tag template, used by other templates", + "userLogin": "yash-rajpal", + "description": "Adding back accidentally deleted tag Template.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20829", + "title": "Regression: Fix notification worker not firing", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20800", + "title": "[FIX] Remove warning problems from console", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20739", + "title": "[FIX] Missing height on departments agents table", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/107807002-510ee100-6d46-11eb-86e9-d65da7ab4129.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20744", + "title": "[FIX] Missing setting to control when to send the ReplyTo field in email notifications", + "userLogin": "matheusbsilva137", + "description": "- Add a new setting (\"Add Reply-To header\") in the Email settings' page to control when the Reply-To header is used in e-mail notifications;\r\n- The new setting is turned off (`false` value) by default.", + "contributors": [ + "matheusbsilva137", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20827", + "title": "[IMPROVE] Make message field required in Omnichannel Triggers form", + "userLogin": "rafaelblink", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20814", + "title": "[IMPROVE] New chat started system message for Omnichannel conversations", + "userLogin": "rafaelblink", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20549", + "title": "[NEW] Button to unset Slackbridge's importIds", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "20740", + "title": "[FIX] External systems not being able to change Omnichannel Inquiry priorities ", + "userLogin": "renatobecker", + "description": "Due to a wrong property name, external applications were not able to change the priority of Omnichannel Inquires.", + "milestone": "3.11.2", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "20727", + "title": "[FIX] Room owner not being able to override global retention policy", + "userLogin": "g-thome", + "description": "use correct permissions to check if room owner can override global retention policy", + "milestone": "3.11.2", + "contributors": [ + "g-thome" + ] + }, + { + "pr": "20725", + "title": "[FIX] Threads Issues", + "userLogin": "ggazzo", + "milestone": "3.11.2", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20447", + "title": "[IMPROVE] Add symbol to indicate apps' required settings in the UI", + "userLogin": "matheusbsilva137", + "description": "- Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank;\r\n![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png)\r\n\r\n - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank.\r\n![prt_screen_required_app_settings](https://user-images.githubusercontent.com/36537004/106014879-ae473900-609c-11eb-9b9e-95de7bbf20a5.png)", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "20704", + "title": "[FIX] E2E issues", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20793", + "title": "[IMPROVE] Customize announcement", + "userLogin": "im-adithya", + "description": "Included new variables in customizable ones", + "contributors": [ + "im-adithya", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "20757", + "title": "Language update from LingoHub πŸ€– on 2021-02-15Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego" + ] + }, + { + "pr": "20573", + "title": "[IMPROVE] Selector for default custom oauth key field", + "userLogin": "paulobernardoaf", + "milestone": "3.12.0", + "contributors": [ + "paulobernardoaf", + "web-flow" + ] + }, + { + "pr": "20663", + "title": "[FIX] Event emitter warning", + "userLogin": "sampaiodiego", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20666", + "title": "[FIX] Increasing unread counter twice for new threads in DMs or with mentions", + "userLogin": "KevLehman", + "description": "- Unread messages count won't be incremented when the message sent is on a thread (thread count is treated different)", + "contributors": [ + null + ] + }, + { + "pr": "20801", + "title": "[FIX] Message payload from `__my_messages__` stream", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20799", + "title": "Mixed client and server code on Storybook", + "userLogin": "tassoevan", + "description": "For Storybook to work, we've mocked all modules under `**/server/`, thus making them suitable to hold all code that refers Node.js modules. This implies some duplication, between `client/` and `server/` modules, mediated by modules under `libs/`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "20606", + "title": "[FIX] Default Attachments - Show Full Attachment.Text with Markdown", + "userLogin": "aditya-mitra", + "description": "Removed truncating of text in `Attachment.Text`. \r\nAdded `Attachment.Text` to be parsed to markdown by default.\r\n\r\n### Earlier\r\n![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/106910840-a126eb80-6727-11eb-8bd6-d86383dd9181.png)", + "contributors": [ + "aditya-mitra", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "19954", + "title": "[IMPROVE] Added auto-focus for better user-experience.", + "userLogin": "Darshilp326", + "contributors": [ + "Darshilp326", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20185", + "title": "[FIX] Remove duplicate getCommonRoomEvents() event binding for starredMessages", + "userLogin": "aKn1ghtOut", + "description": "The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below.\r\nI removed the top events call that only bound the getCommonRoomEvents(). Therefore, only one call for the same is left, which is at the end of the file. Having the events bound just once removes the bugs mentioned.", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "19645", + "title": "[FIX] star icon was visible after unstarring a message", + "userLogin": "bhavayAnand9", + "contributors": [ + "bhavayAnand9", + "sampaiodiego", + "web-flow", + "MartinSchoeler" + ] + }, + { + "pr": "20785", + "title": "[FIX] Admin cannot clear user details like bio or nickname", + "userLogin": "yash-rajpal", + "description": "When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available.\r\n\r\nSo unsetting data if data isn't available to save. Will also fix bio and other fields. :)", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20618", + "title": "[FIX] Default Attachments - Remove Extra Margin in Field Attachments", + "userLogin": "aditya-mitra", + "description": "A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed.\r\n\r\n### Earlier\r\n\r\n![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/107057196-3219c780-67f9-11eb-84db-e4a0addfc168.png)", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20408", + "title": "[FIX] Selected messages don't get unselected", + "userLogin": "im-adithya", + "description": "https://user-images.githubusercontent.com/64399555/105844776-c157fb80-5fff-11eb-90cc-94e9f69649b6.mp4", + "contributors": [ + "im-adithya", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "20750", + "title": "[IMPROVE] Better Presentation of Blockquotes", + "userLogin": "aditya-mitra", + "description": "Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability.\r\n\r\n### Before\r\n\r\n![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/107858471-480f3400-6e5a-11eb-9ccb-3f1be2fed0a4.png)", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "17968", + "title": "[FIX] Incorrect display of \"Reply in Direct Message\" in MessageAction", + "userLogin": "abrom", + "description": "[FIX] Incorrect display of \"Reply in Direct Message\" in MessageAction", + "milestone": "3.10.0", + "contributors": [ + "abrom", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20737", + "title": "[FIX] Save user password and email from My Account", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20745", + "title": "[FIX] Don't ask again not rendering", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20390", + "title": "[FIX] Retry icon comes out of the div", + "userLogin": "im-adithya", + "description": "Changed the height of the div container.", + "contributors": [ + "im-adithya", + "web-flow", + "tiagoevanp" + ] + }, + { + "pr": "20798", + "title": "[FIX] Regenerate token modal on top of 2FA modal", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20366", + "title": "[IMPROVE] Check Livechat message length through REST API endpoint", + "userLogin": "yash-rajpal", + "description": "Added checks for message length for livechat message api, it shouldn't exceed specified character limit.", + "milestone": "3.12.0", + "contributors": [ + "yash-rajpal", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20607", + "title": "Chore: Disable Sessions Aggregates tests locally", + "userLogin": "KevLehman", + "description": "Disable Session aggregates tests in local environments\r\nFor context, refer to: #20161", + "contributors": [ + null, + "KevLehman" + ] + }, + { + "pr": "20735", + "title": "Exclude user's own password from /me endpoint", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "20403", + "title": "[FIX] Added check for view admin permission page", + "userLogin": "yash-rajpal", + "description": "Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page.\r\nI am also able to see permissions page for open workspace of Rocket chat.\r\n![image](https://user-images.githubusercontent.com/58601732/105829728-bfd00880-5fea-11eb-9121-6c53a752f140.png)", + "contributors": [ + "yash-rajpal", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20726", + "title": "[FIX] Mark messages inside a thread as unread", + "userLogin": "im-adithya", + "description": "Added threads to mark unread action button.", + "contributors": [ + "im-adithya", + "web-flow" + ] + }, + { + "pr": "20733", + "title": "[IMPROVE] Update rc-scrollbars", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20722", + "title": "[FIX] OAuth Login not working on Firefox", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20706", + "title": "Chore: Push correct Docker tag of service images", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20720", + "title": "[FIX] Sending user to home after logging in from resume token query param", + "userLogin": "sampaiodiego", + "description": "Do not redirect to `/home` anymore after logging in with `resumeToken`.", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20670", + "title": "[FIX] New Integration page was not being displayed", + "userLogin": "yash-rajpal", + "milestone": "3.12.0", + "contributors": [ + "yash-rajpal", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20713", + "title": "[FIX] Icon for OTR messages", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20709", + "title": "Chore: update RC with the latest fuselage-polyfills", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20605", + "title": "[FIX] Notification worker stopping on error", + "userLogin": "sampaiodiego", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20456", + "title": "[FIX] Add tooltips to Thread header buttons", + "userLogin": "aKn1ghtOut", + "description": "Added tooltips to \"Expand\" and \"Follow Message\"/\"Unfollow Message\" in ThreadView for coherency.", + "milestone": "3.12.0", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20680", + "title": "[FIX] Room's last message's update date format on IE", + "userLogin": "dougfabris", + "description": "The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below:\r\n\r\n![image](https://user-images.githubusercontent.com/27704687/107578007-f2285b00-6bd1-11eb-9250-1e76ae67f9c9.png)", + "contributors": [ + "dougfabris", + "web-flow" + ] + }, + { + "pr": "20661", + "title": "Added toast message after deleting file.", + "userLogin": "Darshilp326", + "description": "https://user-images.githubusercontent.com/55157259/107410849-d1a9c380-6b33-11eb-8d10-3d225dc7a9db.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20545", + "title": "Chore: Remove node-sprite-generator dependency", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20679", + "title": "[FIX] Hide system messages not working on second save", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "20662", + "title": "[FIX] Omnichannel Routing System not assigning chats to Bot agents", + "userLogin": "renatobecker", + "description": "The `Omnichannel Routing System` is no longer assigning chats to `bot` agents when the `bot` agent is the default agent of the inquiry.", + "milestone": "3.11.1", + "contributors": [ + "renatobecker", + "web-flow" + ] + }, + { + "pr": "19778", + "title": "[IMPROVE] Rewrite Call as React component ", + "userLogin": "tiagoevanp", + "milestone": "3.11.0", + "contributors": [ + "tiagoevanp", + "ggazzo", + "tassoevan" + ] + }, + { + "pr": "20665", + "title": "[FIX] Server-side marked parsing", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20653", + "title": "[FIX] Livechat bridge permission checkers", + "userLogin": "d-gubert", + "description": "Update to latest patch version of the Apps-Engine with a fix for the Livechat bridge, as seen in https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/379", + "milestone": "3.11.1", + "contributors": [ + "d-gubert", + "lolimay", + "web-flow" + ] + }, + { + "pr": "20481", + "title": "[FIX] Users autocomplete showing duplicated results", + "userLogin": "Darshilp326", + "description": "Added new query for outside room users so that room members are not shown twice.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106174582-33c10b00-61bb-11eb-9716-377ef7bba34e.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20585", + "title": "[FIX] Attachment download from title fixed", + "userLogin": "yash-rajpal", + "description": "Added target = '_self' to attachment link, this seems to fix the problem, without this attribute, error page is displayed.", + "milestone": "3.11.1", + "contributors": [ + "yash-rajpal", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "19934", + "title": "[IMPROVE] Adds tooltip for sidebar header icons", + "userLogin": "RonLek", + "description": "Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that.\r\n\r\n![Screenshot from 2020-12-22 15-17-41](https://user-images.githubusercontent.com/28918901/102874804-f2756700-4468-11eb-8324-b7f3194e62fe.png)", + "milestone": "3.11.0", + "contributors": [ + "RonLek" + ] + }, + { + "pr": "20617", + "title": "Rewrite: CreateChannel modal component", + "userLogin": "tiagoevanp", + "description": "![image](https://user-images.githubusercontent.com/17487063/107058434-5f438700-67b3-11eb-8cf2-1ad3d5008aa8.png)", + "contributors": [ + "tiagoevanp", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20654", + "title": "[FIX] Gif images aspect ratio on preview", + "userLogin": "tiagoevanp", + "milestone": "3.11.1", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20237", + "title": "[FIX] - Cancel button on Room Notification don't close contextualBar", + "userLogin": "dougfabris", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20651", + "title": "[FIX] Links not opening in new tabs", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "20649", + "title": "[FIX] Room Scroll to Bottom", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20652", + "title": "Regression: Discussions inside direct messages not rendering", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20381", + "title": "[FIX] Announcement with multiple lines fixed.", + "userLogin": "yash-rajpal", + "description": "Announcements with multiple lines used to break UI for announcements bar. Fixed it by replacing all break lines in announcement with empty space (\" \") . The announcement modal would work as usual and show all break lines.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20329", + "title": "[FIX] Fix Empty highlighted words field", + "userLogin": "yash-rajpal", + "description": "Able to Empty the highlighted text field in preferences", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20592", + "title": "[FIX] OTR issue", + "userLogin": "ggazzo", + "description": "Since the users are not being stored at the user collection anymore (thats a good thing actually), there is no such record to to fetch and show the username.", + "milestone": "3.10.6", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20611", + "title": "[FIX] Update NPS banner when changing score", + "userLogin": "sampaiodiego", + "milestone": "3.11.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20625", + "title": "Remove `uiKitText` reference", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "20624", + "title": "[FIX] List of Omnichannel triggers is not listing data", + "userLogin": "rafaelblink", + "description": "### Before\r\n![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png)\r\n\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/2493803/107095261-3b019d80-67e7-11eb-8425-8612b03ac50a.png)", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink" + ] + }, + { + "pr": "20616", + "title": "Regression: Header Styles", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20613", + "title": "[FIX] Regular status mutating custom status", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20484", + "title": "[FIX] Channel mentions showing user subscribed channels twice", + "userLogin": "Darshilp326", + "description": "Channel mention shows user subscribed channels twice.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106183033-b353d780-61c5-11eb-8aab-1dbb62b02ff8.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20612", + "title": "[IMPROVE] Change header based on room type", + "userLogin": "dougfabris", + "description": "It brings more flexibility, allowing us to use different hooks and different components for each header", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20609", + "title": "[NEW] Header with Breadcrumbs", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/106945019-1386d400-6706-11eb-90db-c12b50f260d5.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20250", + "title": "Chore: Change error message when marking empty chat as unread", + "userLogin": "lucassartor", + "contributors": [ + "lucassartor" + ] + }, + { + "pr": "20519", + "title": "Chore: Improve performance of messages’ watcher", + "userLogin": "rodrigok", + "milestone": "3.12.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "20550", + "title": "RoomFiles hook", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20586", + "title": "[FIX] ESLint Warning - react-hooks/exhaustive-deps", + "userLogin": "aditya-mitra", + "description": "Added the required dep (`label`) in `useMemo` to fix eslint warning `react-hooks/exhaustive-deps`.", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20584", + "title": "[NEW] useUserData Hook", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20320", + "title": "[FIX] Filters are not being applied correctly in Omnichannel Current Chats list", + "userLogin": "rafaelblink", + "description": "### Before\r\n![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png)\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png)\r\n\r\n![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png)\r\n\r\n![image](https://user-images.githubusercontent.com/2493803/106494751-90f9dc80-6499-11eb-901b-5e4dbdc678ba.png)", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink", + "web-flow", + "renatobecker" + ] + }, + { + "pr": "20297", + "title": "[FIX] Add debouncing to add users search field.", + "userLogin": "Darshilp326", + "description": "BEFORE\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4\r\n\r\n\r\nAFTER\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105350757-a2c5bf00-5c11-11eb-91db-25c0b9e01a28.mp4", + "contributors": [ + "Darshilp326", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "20356", + "title": "[FIX] Changed password input field for password access in edit room info.", + "userLogin": "Darshilp326", + "description": "Password field would be secured with asterisks in edit room info\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4\r\n\r\n.", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20179", + "title": "[FIX] Remove duplicate getCommonRoomEvents() event binding for pinnedMessages", + "userLogin": "aKn1ghtOut", + "description": "The getCommonRoomEvents() returned functions were bound to the pinnedMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below.", + "contributors": [ + "aKn1ghtOut", + "web-flow" + ] + }, + { + "pr": "20341", + "title": "[FIX] User statuses in admin user info panel", + "userLogin": "RonLek", + "description": "Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. \r\nAlso, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses.\r\n\r\nhttps://user-images.githubusercontent.com/28918901/105624438-b8bcc500-5e47-11eb-8d1e-3a4180da1304.mp4", + "contributors": [ + "RonLek" + ] + }, + { + "pr": "20193", + "title": "[FIX] Blank Personal Access Token Bug", + "userLogin": "RonLek", + "description": "Adds error when personal access token is blank thereby disallowing the creation of one.\r\n\r\nhttps://user-images.githubusercontent.com/28918901/104483631-5adde100-55ee-11eb-9938-64146bce127e.mp4", + "contributors": [ + "RonLek", + "web-flow" + ] + }, + { + "pr": "20339", + "title": "[FIX] Feedback on bulk invite", + "userLogin": "aKn1ghtOut", + "description": "Resolved structure where no response was being received. Changed from callback to async/await.\r\nAdded error in case of empty submission, or if no valid emails were found.\r\n\r\nhttps://user-images.githubusercontent.com/38764067/105613964-dfe5a900-5deb-11eb-80f2-21fc8dee57c0.mp4", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20337", + "title": "[IMPROVE] Added disable button check for send invite button", + "userLogin": "yash-rajpal", + "description": "Added Disable check for send invite button. If the text field is empty button would be disabled, and after any valid email is filled, button would get enabled", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20358", + "title": "[FIX]Selected hide system messages would now be viewed in vertical bar.", + "userLogin": "Darshilp326", + "description": "All selected hide system messages are now in vertical Bar.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105642624-d5411780-5eb0-11eb-8848-93e4b02629cb.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20426", + "title": "[FIX] Typo in Message Character Limit", + "userLogin": "aditya-mitra", + "description": "Changed the spelling of *Characther* to *Character*", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20444", + "title": "[FIX] Unset tshow on deleted messages", + "userLogin": "aKn1ghtOut", + "description": "When setting 'Message_ShowDeletedStatus' is set to true, deleting a message with `tshow: true` causes a bug on the frontend. This issue should, however, never be logically possible as a 'removed' message should not have tshow anyway. Hence, this PR unsets that when the message is set to \"Message Removed\".", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20305", + "title": "[FIX] Added Bio Structure for UserCard, rendering Skeleton View on loading Instead of [Object][Object] ", + "userLogin": "yash-rajpal", + "description": "Added Bio Structure for rendering Skeleton View on loading UserCard.", + "milestone": "3.11.0", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20392", + "title": "[IMPROVE] Replace react-window for react-virtuoso package", + "userLogin": "tiagoevanp", + "description": "Remove:\r\n- react-window\r\n- react-window-infinite-loader\r\n- simplebar-react\r\n\r\nInclude:\r\n- react-virtuoso\r\n- rc-scrollbars", + "milestone": "3.12.0", + "contributors": [ + "tiagoevanp", + "ggazzo", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20470", + "title": "[IMPROVE] Added Markdown links to custom status.", + "userLogin": "yash-rajpal", + "description": "Added markdown links to user's custom status.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20473", + "title": "[IMPROVE] Added key prop, removing unwanted warnings", + "userLogin": "yash-rajpal", + "description": "Removes warnings listed on the issue", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20498", + "title": "[FIX] Removed tooltip in kebab menu options.", + "userLogin": "Darshilp326", + "description": "Removed tooltip as it was not needed.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106246146-a53ca000-6233-11eb-9874-cbd1b4331bc0.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20308", + "title": "[IMPROVE] Add visual validation on users admin forms", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "gabriellsh" + ] + }, + { + "pr": "20508", + "title": "Wrong method used while starring", + "userLogin": "im-adithya", + "description": "Changed the method from pinMessage to starMessage", + "contributors": [ + "im-adithya", + "web-flow" + ] + }, + { + "pr": "20046", + "title": "Chore: Try building micro services early on CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "renatobecker", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "20533", + "title": "Merge master into develop & Set version to 3.12.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + } + ] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index b3de6abc0e83..f09cf57be9ce 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-develop/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0-rc.0/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index db0a95cf9fe0..d9fdbb75ae2d 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-develop +version: 3.12.0-rc.0 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index ae6f7fccf532..70bf16c98b9b 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,509 @@ +# 3.12.0 (Under Release Candidate Process) + +## 3.12.0-rc.0 +`2021-02-21 Β· 5 πŸŽ‰ Β· 17 πŸš€ Β· 69 πŸ› Β· 22 πŸ” Β· 29 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` + +### πŸŽ‰ New features + + +- Button to unset Slackbridge's importIds ([#20549](https://github.com/RocketChat/Rocket.Chat/pull/20549)) + +- Cloud Workspace bridge ([#20838](https://github.com/RocketChat/Rocket.Chat/pull/20838)) + + Adds the new CloudWorkspace functionality. + + It allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway. + + https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/382 + +- Header with Breadcrumbs ([#20609](https://github.com/RocketChat/Rocket.Chat/pull/20609)) + + ![image](https://user-images.githubusercontent.com/27704687/106945019-1386d400-6706-11eb-90db-c12b50f260d5.png) + +- Statistics about language usage ([#20832](https://github.com/RocketChat/Rocket.Chat/pull/20832)) + + track what languages get picked the most as preferred ui language. + +- useUserData Hook ([#20584](https://github.com/RocketChat/Rocket.Chat/pull/20584)) + +### πŸš€ Improvements + + +- Add symbol to indicate apps' required settings in the UI ([#20447](https://github.com/RocketChat/Rocket.Chat/pull/20447)) + + - Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank; + ![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png) + + - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank. + ![prt_screen_required_app_settings](https://user-images.githubusercontent.com/36537004/106014879-ae473900-609c-11eb-9b9e-95de7bbf20a5.png) + +- Add visual validation on users admin forms ([#20308](https://github.com/RocketChat/Rocket.Chat/pull/20308)) + +- Added auto-focus for better user-experience. ([#19954](https://github.com/RocketChat/Rocket.Chat/pull/19954) by [@Darshilp326](https://github.com/Darshilp326)) + +- Added disable button check for send invite button ([#20337](https://github.com/RocketChat/Rocket.Chat/pull/20337) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added Disable check for send invite button. If the text field is empty button would be disabled, and after any valid email is filled, button would get enabled + +- Added key prop, removing unwanted warnings ([#20473](https://github.com/RocketChat/Rocket.Chat/pull/20473) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Removes warnings listed on the issue + +- Added Markdown links to custom status. ([#20470](https://github.com/RocketChat/Rocket.Chat/pull/20470) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added markdown links to user's custom status. + +- Adds tooltip for sidebar header icons ([#19934](https://github.com/RocketChat/Rocket.Chat/pull/19934) by [@RonLek](https://github.com/RonLek)) + + Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that. + + ![Screenshot from 2020-12-22 15-17-41](https://user-images.githubusercontent.com/28918901/102874804-f2756700-4468-11eb-8324-b7f3194e62fe.png) + +- Better Presentation of Blockquotes ([#20750](https://github.com/RocketChat/Rocket.Chat/pull/20750) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability. + + ### Before + + ![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/107858471-480f3400-6e5a-11eb-9ccb-3f1be2fed0a4.png) + +- Change header based on room type ([#20612](https://github.com/RocketChat/Rocket.Chat/pull/20612)) + + It brings more flexibility, allowing us to use different hooks and different components for each header + +- Check Livechat message length through REST API endpoint ([#20366](https://github.com/RocketChat/Rocket.Chat/pull/20366) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added checks for message length for livechat message api, it shouldn't exceed specified character limit. + +- Customize announcement ([#20793](https://github.com/RocketChat/Rocket.Chat/pull/20793) by [@im-adithya](https://github.com/im-adithya)) + + Included new variables in customizable ones + +- Make message field required in Omnichannel Triggers form ([#20827](https://github.com/RocketChat/Rocket.Chat/pull/20827)) + +- New chat started system message for Omnichannel conversations ([#20814](https://github.com/RocketChat/Rocket.Chat/pull/20814)) + +- Replace react-window for react-virtuoso package ([#20392](https://github.com/RocketChat/Rocket.Chat/pull/20392)) + + Remove: + - react-window + - react-window-infinite-loader + - simplebar-react + + Include: + - react-virtuoso + - rc-scrollbars + +- Rewrite Call as React component ([#19778](https://github.com/RocketChat/Rocket.Chat/pull/19778)) + +- Selector for default custom oauth key field ([#20573](https://github.com/RocketChat/Rocket.Chat/pull/20573) by [@paulobernardoaf](https://github.com/paulobernardoaf)) + +- Update rc-scrollbars ([#20733](https://github.com/RocketChat/Rocket.Chat/pull/20733)) + +### πŸ› Bug fixes + + +- - Cancel button on Room Notification don't close contextualBar ([#20237](https://github.com/RocketChat/Rocket.Chat/pull/20237)) + +- Add debouncing to add users search field. ([#20297](https://github.com/RocketChat/Rocket.Chat/pull/20297) by [@Darshilp326](https://github.com/Darshilp326)) + + BEFORE + + https://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4 + + + AFTER + + https://user-images.githubusercontent.com/55157259/105350757-a2c5bf00-5c11-11eb-91db-25c0b9e01a28.mp4 + +- Add tooltips to Thread header buttons ([#20456](https://github.com/RocketChat/Rocket.Chat/pull/20456) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + Added tooltips to "Expand" and "Follow Message"/"Unfollow Message" in ThreadView for coherency. + +- Added Bio Structure for UserCard, rendering Skeleton View on loading Instead of [Object][Object] ([#20305](https://github.com/RocketChat/Rocket.Chat/pull/20305) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added Bio Structure for rendering Skeleton View on loading UserCard. + +- Added check for view admin permission page ([#20403](https://github.com/RocketChat/Rocket.Chat/pull/20403) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page. + I am also able to see permissions page for open workspace of Rocket chat. + ![image](https://user-images.githubusercontent.com/58601732/105829728-bfd00880-5fea-11eb-9121-6c53a752f140.png) + +- Adding the accidentally deleted tag template, used by other templates ([#20772](https://github.com/RocketChat/Rocket.Chat/pull/20772) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Adding back accidentally deleted tag Template. + +- Admin cannot clear user details like bio or nickname ([#20785](https://github.com/RocketChat/Rocket.Chat/pull/20785) by [@yash-rajpal](https://github.com/yash-rajpal)) + + When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available. + + So unsetting data if data isn't available to save. Will also fix bio and other fields. :) + +- Announcement with multiple lines fixed. ([#20381](https://github.com/RocketChat/Rocket.Chat/pull/20381) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Announcements with multiple lines used to break UI for announcements bar. Fixed it by replacing all break lines in announcement with empty space (" ") . The announcement modal would work as usual and show all break lines. + +- Atlassian Crowd login with 2FA enabled ([#20834](https://github.com/RocketChat/Rocket.Chat/pull/20834)) + +- Attachment download from title fixed ([#20585](https://github.com/RocketChat/Rocket.Chat/pull/20585) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added target = '_self' to attachment link, this seems to fix the problem, without this attribute, error page is displayed. + +- Blank Personal Access Token Bug ([#20193](https://github.com/RocketChat/Rocket.Chat/pull/20193) by [@RonLek](https://github.com/RonLek)) + + Adds error when personal access token is blank thereby disallowing the creation of one. + + https://user-images.githubusercontent.com/28918901/104483631-5adde100-55ee-11eb-9938-64146bce127e.mp4 + +- CAS login failing due to TOTP requirement ([#20840](https://github.com/RocketChat/Rocket.Chat/pull/20840)) + +- Changed password input field for password access in edit room info. ([#20356](https://github.com/RocketChat/Rocket.Chat/pull/20356) by [@Darshilp326](https://github.com/Darshilp326)) + + Password field would be secured with asterisks in edit room info + + https://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4 + + . + +- Channel mentions showing user subscribed channels twice ([#20484](https://github.com/RocketChat/Rocket.Chat/pull/20484) by [@Darshilp326](https://github.com/Darshilp326)) + + Channel mention shows user subscribed channels twice. + + https://user-images.githubusercontent.com/55157259/106183033-b353d780-61c5-11eb-8aab-1dbb62b02ff8.mp4 + +- CORS config not accepting multiple origins ([#20696](https://github.com/RocketChat/Rocket.Chat/pull/20696)) + + always include only one value in access-control-allow-origin + +- Custom OAuth provider creation from env vars ([#20014](https://github.com/RocketChat/Rocket.Chat/pull/20014) by [@pierreozoux](https://github.com/pierreozoux)) + +- Default Attachments - Remove Extra Margin in Field Attachments ([#20618](https://github.com/RocketChat/Rocket.Chat/pull/20618) by [@aditya-mitra](https://github.com/aditya-mitra)) + + A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed. + + ### Earlier + + ![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/107057196-3219c780-67f9-11eb-84db-e4a0addfc168.png) + +- Default Attachments - Show Full Attachment.Text with Markdown ([#20606](https://github.com/RocketChat/Rocket.Chat/pull/20606) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Removed truncating of text in `Attachment.Text`. + Added `Attachment.Text` to be parsed to markdown by default. + + ### Earlier + ![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/106910840-a126eb80-6727-11eb-8bd6-d86383dd9181.png) + +- Don't ask again not rendering ([#20745](https://github.com/RocketChat/Rocket.Chat/pull/20745)) + +- E2E issues ([#20704](https://github.com/RocketChat/Rocket.Chat/pull/20704)) + +- ESLint Warning - react-hooks/exhaustive-deps ([#20586](https://github.com/RocketChat/Rocket.Chat/pull/20586) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Added the required dep (`label`) in `useMemo` to fix eslint warning `react-hooks/exhaustive-deps`. + +- Event emitter warning ([#20663](https://github.com/RocketChat/Rocket.Chat/pull/20663)) + +- External systems not being able to change Omnichannel Inquiry priorities ([#20740](https://github.com/RocketChat/Rocket.Chat/pull/20740)) + + Due to a wrong property name, external applications were not able to change the priority of Omnichannel Inquires. + +- Feedback on bulk invite ([#20339](https://github.com/RocketChat/Rocket.Chat/pull/20339) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + Resolved structure where no response was being received. Changed from callback to async/await. + Added error in case of empty submission, or if no valid emails were found. + + https://user-images.githubusercontent.com/38764067/105613964-dfe5a900-5deb-11eb-80f2-21fc8dee57c0.mp4 + +- Filters are not being applied correctly in Omnichannel Current Chats list ([#20320](https://github.com/RocketChat/Rocket.Chat/pull/20320)) + + ### Before + ![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png) + + ### After + ![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png) + + ![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png) + + ![image](https://user-images.githubusercontent.com/2493803/106494751-90f9dc80-6499-11eb-901b-5e4dbdc678ba.png) + +- Fix Empty highlighted words field ([#20329](https://github.com/RocketChat/Rocket.Chat/pull/20329) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Able to Empty the highlighted text field in preferences + +- Gif images aspect ratio on preview ([#20654](https://github.com/RocketChat/Rocket.Chat/pull/20654)) + +- height prop on departments agents table ([#20833](https://github.com/RocketChat/Rocket.Chat/pull/20833)) + + ![image](https://user-images.githubusercontent.com/27704687/108572412-fbf83f80-72f0-11eb-801a-5f659000325d.png) + +- Hide system messages not working on second save ([#20679](https://github.com/RocketChat/Rocket.Chat/pull/20679)) + +- Icon for OTR messages ([#20713](https://github.com/RocketChat/Rocket.Chat/pull/20713)) + +- Incorrect display of "Reply in Direct Message" in MessageAction ([#17968](https://github.com/RocketChat/Rocket.Chat/pull/17968) by [@abrom](https://github.com/abrom)) + + [FIX] Incorrect display of "Reply in Direct Message" in MessageAction + +- Increasing unread counter twice for new threads in DMs or with mentions ([#20666](https://github.com/RocketChat/Rocket.Chat/pull/20666)) + + - Unread messages count won't be incremented when the message sent is on a thread (thread count is treated different) + +- Links not opening in new tabs ([#20651](https://github.com/RocketChat/Rocket.Chat/pull/20651)) + +- List of Omnichannel triggers is not listing data ([#20624](https://github.com/RocketChat/Rocket.Chat/pull/20624)) + + ### Before + ![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png) + + + ### After + ![image](https://user-images.githubusercontent.com/2493803/107095261-3b019d80-67e7-11eb-8425-8612b03ac50a.png) + +- Livechat bridge permission checkers ([#20653](https://github.com/RocketChat/Rocket.Chat/pull/20653)) + + Update to latest patch version of the Apps-Engine with a fix for the Livechat bridge, as seen in https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/379 + +- Mark messages inside a thread as unread ([#20726](https://github.com/RocketChat/Rocket.Chat/pull/20726) by [@im-adithya](https://github.com/im-adithya)) + + Added threads to mark unread action button. + +- Message payload from `__my_messages__` stream ([#20801](https://github.com/RocketChat/Rocket.Chat/pull/20801)) + +- Missing height on departments agents table ([#20739](https://github.com/RocketChat/Rocket.Chat/pull/20739)) + + ![image](https://user-images.githubusercontent.com/27704687/107807002-510ee100-6d46-11eb-86e9-d65da7ab4129.png) + +- Missing setting to control when to send the ReplyTo field in email notifications ([#20744](https://github.com/RocketChat/Rocket.Chat/pull/20744)) + + - Add a new setting ("Add Reply-To header") in the Email settings' page to control when the Reply-To header is used in e-mail notifications; + - The new setting is turned off (`false` value) by default. + +- New Integration page was not being displayed ([#20670](https://github.com/RocketChat/Rocket.Chat/pull/20670) by [@yash-rajpal](https://github.com/yash-rajpal)) + +- Notification worker stopping on error ([#20605](https://github.com/RocketChat/Rocket.Chat/pull/20605)) + +- OAuth Login not working on Firefox ([#20722](https://github.com/RocketChat/Rocket.Chat/pull/20722)) + +- Omnichannel agents are unable to access the chat queue on the sidebar ([#20830](https://github.com/RocketChat/Rocket.Chat/pull/20830)) + +- Omnichannel Routing System not assigning chats to Bot agents ([#20662](https://github.com/RocketChat/Rocket.Chat/pull/20662)) + + The `Omnichannel Routing System` is no longer assigning chats to `bot` agents when the `bot` agent is the default agent of the inquiry. + +- OTR issue ([#20592](https://github.com/RocketChat/Rocket.Chat/pull/20592)) + + Since the users are not being stored at the user collection anymore (thats a good thing actually), there is no such record to to fetch and show the username. + +- Quoted messages from message links when user has no permission ([#20815](https://github.com/RocketChat/Rocket.Chat/pull/20815)) + +- Regenerate token modal on top of 2FA modal ([#20798](https://github.com/RocketChat/Rocket.Chat/pull/20798)) + +- Regular status mutating custom status ([#20613](https://github.com/RocketChat/Rocket.Chat/pull/20613)) + +- Remove duplicate getCommonRoomEvents() event binding for pinnedMessages ([#20179](https://github.com/RocketChat/Rocket.Chat/pull/20179) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + The getCommonRoomEvents() returned functions were bound to the pinnedMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. + +- Remove duplicate getCommonRoomEvents() event binding for starredMessages ([#20185](https://github.com/RocketChat/Rocket.Chat/pull/20185) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. + I removed the top events call that only bound the getCommonRoomEvents(). Therefore, only one call for the same is left, which is at the end of the file. Having the events bound just once removes the bugs mentioned. + +- Remove warning problems from console ([#20800](https://github.com/RocketChat/Rocket.Chat/pull/20800)) + +- Removed tooltip in kebab menu options. ([#20498](https://github.com/RocketChat/Rocket.Chat/pull/20498) by [@Darshilp326](https://github.com/Darshilp326)) + + Removed tooltip as it was not needed. + + https://user-images.githubusercontent.com/55157259/106246146-a53ca000-6233-11eb-9874-cbd1b4331bc0.mp4 + +- Retry icon comes out of the div ([#20390](https://github.com/RocketChat/Rocket.Chat/pull/20390) by [@im-adithya](https://github.com/im-adithya)) + + Changed the height of the div container. + +- Room owner not being able to override global retention policy ([#20727](https://github.com/RocketChat/Rocket.Chat/pull/20727)) + + use correct permissions to check if room owner can override global retention policy + +- Room Scroll to Bottom ([#20649](https://github.com/RocketChat/Rocket.Chat/pull/20649)) + +- Room's last message's update date format on IE ([#20680](https://github.com/RocketChat/Rocket.Chat/pull/20680)) + + The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below: + + ![image](https://user-images.githubusercontent.com/27704687/107578007-f2285b00-6bd1-11eb-9250-1e76ae67f9c9.png) + +- Save user password and email from My Account ([#20737](https://github.com/RocketChat/Rocket.Chat/pull/20737)) + +- Selected hide system messages would now be viewed in vertical bar. ([#20358](https://github.com/RocketChat/Rocket.Chat/pull/20358) by [@Darshilp326](https://github.com/Darshilp326)) + + All selected hide system messages are now in vertical Bar. + + https://user-images.githubusercontent.com/55157259/105642624-d5411780-5eb0-11eb-8848-93e4b02629cb.mp4 + +- Selected messages don't get unselected ([#20408](https://github.com/RocketChat/Rocket.Chat/pull/20408) by [@im-adithya](https://github.com/im-adithya)) + + https://user-images.githubusercontent.com/64399555/105844776-c157fb80-5fff-11eb-90cc-94e9f69649b6.mp4 + +- Sending user to home after logging in from resume token query param ([#20720](https://github.com/RocketChat/Rocket.Chat/pull/20720)) + + Do not redirect to `/home` anymore after logging in with `resumeToken`. + +- Server-side marked parsing ([#20665](https://github.com/RocketChat/Rocket.Chat/pull/20665)) + +- Several Slack Importer issues ([#20216](https://github.com/RocketChat/Rocket.Chat/pull/20216)) + + - Fix: Slack Importer crashes when importing a large users.json file + - Fix: Slack importer crashes when messages have invalid mentions + - Skip listing all users on the preparation screen when the user count is too large. + - Split avatar download into a separate process. + - Update room's last message when the import is complete. + - Prevent invalid or duplicated channel names + - Improve message error handling. + - Reduce max allowed BSON size to avoid possible issues in some servers. + - Improve handling of very large channel files. + +- star icon was visible after unstarring a message ([#19645](https://github.com/RocketChat/Rocket.Chat/pull/19645) by [@bhavayAnand9](https://github.com/bhavayAnand9)) + +- Threads Issues ([#20725](https://github.com/RocketChat/Rocket.Chat/pull/20725)) + +- Typo in Message Character Limit ([#20426](https://github.com/RocketChat/Rocket.Chat/pull/20426) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Changed the spelling of *Characther* to *Character* + +- Unset tshow on deleted messages ([#20444](https://github.com/RocketChat/Rocket.Chat/pull/20444) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + When setting 'Message_ShowDeletedStatus' is set to true, deleting a message with `tshow: true` causes a bug on the frontend. This issue should, however, never be logically possible as a 'removed' message should not have tshow anyway. Hence, this PR unsets that when the message is set to "Message Removed". + +- Update NPS banner when changing score ([#20611](https://github.com/RocketChat/Rocket.Chat/pull/20611)) + +- User statuses in admin user info panel ([#20341](https://github.com/RocketChat/Rocket.Chat/pull/20341) by [@RonLek](https://github.com/RonLek)) + + Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. + Also, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses. + + https://user-images.githubusercontent.com/28918901/105624438-b8bcc500-5e47-11eb-8d1e-3a4180da1304.mp4 + +- Users autocomplete showing duplicated results ([#20481](https://github.com/RocketChat/Rocket.Chat/pull/20481) by [@Darshilp326](https://github.com/Darshilp326)) + + Added new query for outside room users so that room members are not shown twice. + + https://user-images.githubusercontent.com/55157259/106174582-33c10b00-61bb-11eb-9716-377ef7bba34e.mp4 + +
+πŸ” Minor changes + + +- Added toast message after deleting file. ([#20661](https://github.com/RocketChat/Rocket.Chat/pull/20661) by [@Darshilp326](https://github.com/Darshilp326)) + + https://user-images.githubusercontent.com/55157259/107410849-d1a9c380-6b33-11eb-8d10-3d225dc7a9db.mp4 + +- Bump Livechat Widget ([#20843](https://github.com/RocketChat/Rocket.Chat/pull/20843)) + + Update Livechat version to `1.8.0` . + +- Chore: Change error message when marking empty chat as unread ([#20250](https://github.com/RocketChat/Rocket.Chat/pull/20250)) + +- Chore: Disable Sessions Aggregates tests locally ([#20607](https://github.com/RocketChat/Rocket.Chat/pull/20607)) + + Disable Session aggregates tests in local environments + For context, refer to: #20161 + +- Chore: Improve performance of messages’ watcher ([#20519](https://github.com/RocketChat/Rocket.Chat/pull/20519)) + +- Chore: Push correct Docker tag of service images ([#20706](https://github.com/RocketChat/Rocket.Chat/pull/20706)) + +- Chore: Remove node-sprite-generator dependency ([#20545](https://github.com/RocketChat/Rocket.Chat/pull/20545)) + +- Chore: Try building micro services early on CI ([#20046](https://github.com/RocketChat/Rocket.Chat/pull/20046)) + +- Chore: update RC with the latest fuselage-polyfills ([#20709](https://github.com/RocketChat/Rocket.Chat/pull/20709)) + +- Exclude user's own password from /me endpoint ([#20735](https://github.com/RocketChat/Rocket.Chat/pull/20735)) + +- Improve: Add more API tests ([#20738](https://github.com/RocketChat/Rocket.Chat/pull/20738)) + + Add end-to-end tests for untested endpoints. + +- Language update from LingoHub πŸ€– on 2021-02-15Z ([#20757](https://github.com/RocketChat/Rocket.Chat/pull/20757)) + +- Merge master into develop & Set version to 3.12.0-develop ([#20533](https://github.com/RocketChat/Rocket.Chat/pull/20533)) + +- Mixed client and server code on Storybook ([#20799](https://github.com/RocketChat/Rocket.Chat/pull/20799)) + + For Storybook to work, we've mocked all modules under `**/server/`, thus making them suitable to hold all code that refers Node.js modules. This implies some duplication, between `client/` and `server/` modules, mediated by modules under `libs/`. + +- Regression: Discussions inside direct messages not rendering ([#20652](https://github.com/RocketChat/Rocket.Chat/pull/20652)) + +- Regression: Fix loadHistory method being called multiple times ([#20826](https://github.com/RocketChat/Rocket.Chat/pull/20826)) + +- Regression: Fix notification worker not firing ([#20829](https://github.com/RocketChat/Rocket.Chat/pull/20829)) + +- Regression: Header Styles ([#20616](https://github.com/RocketChat/Rocket.Chat/pull/20616)) + +- Remove `uiKitText` reference ([#20625](https://github.com/RocketChat/Rocket.Chat/pull/20625)) + +- Rewrite: CreateChannel modal component ([#20617](https://github.com/RocketChat/Rocket.Chat/pull/20617)) + + ![image](https://user-images.githubusercontent.com/17487063/107058434-5f438700-67b3-11eb-8cf2-1ad3d5008aa8.png) + +- RoomFiles hook ([#20550](https://github.com/RocketChat/Rocket.Chat/pull/20550)) + +- Wrong method used while starring ([#20508](https://github.com/RocketChat/Rocket.Chat/pull/20508) by [@im-adithya](https://github.com/im-adithya)) + + Changed the method from pinMessage to starMessage + +
+ +### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Contributors 😍 + +- [@Darshilp326](https://github.com/Darshilp326) +- [@RonLek](https://github.com/RonLek) +- [@aKn1ghtOut](https://github.com/aKn1ghtOut) +- [@abrom](https://github.com/abrom) +- [@aditya-mitra](https://github.com/aditya-mitra) +- [@bhavayAnand9](https://github.com/bhavayAnand9) +- [@im-adithya](https://github.com/im-adithya) +- [@paulobernardoaf](https://github.com/paulobernardoaf) +- [@pierreozoux](https://github.com/pierreozoux) +- [@yash-rajpal](https://github.com/yash-rajpal) + +### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ + +- [@KevLehman](https://github.com/KevLehman) +- [@MartinSchoeler](https://github.com/MartinSchoeler) +- [@d-gubert](https://github.com/d-gubert) +- [@dougfabris](https://github.com/dougfabris) +- [@g-thome](https://github.com/g-thome) +- [@gabriellsh](https://github.com/gabriellsh) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@lolimay](https://github.com/lolimay) +- [@lucassartor](https://github.com/lucassartor) +- [@matheusbsilva137](https://github.com/matheusbsilva137) +- [@pierre-lehnen-rc](https://github.com/pierre-lehnen-rc) +- [@r0zbot](https://github.com/r0zbot) +- [@rafaelblink](https://github.com/rafaelblink) +- [@renatobecker](https://github.com/renatobecker) +- [@rodrigok](https://github.com/rodrigok) +- [@sampaiodiego](https://github.com/sampaiodiego) +- [@tassoevan](https://github.com/tassoevan) +- [@tiagoevanp](https://github.com/tiagoevanp) + # 3.11.1 `2021-02-10 Β· 5 πŸ› Β· 6 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index c7842a4ed4c7..f5aace72734b 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-develop" + "version": "3.12.0-rc.0" } diff --git a/package-lock.json b/package-lock.json index be7dde90d028..0046df66476a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-develop", + "version": "3.12.0-rc.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 72654927dff5..50dca8b31409 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-develop", + "version": "3.12.0-rc.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From d1ebf1de1f92dae873ceda76c61d0f2e9852cb04 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 23 Feb 2021 01:47:55 -0300 Subject: [PATCH 002/149] Bump version to 3.12.0-rc.1 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 65 ++++++++++++++++++++++++++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 33 +++++++++++++ app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 104 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 36efb6271d87..5697b41cbdc2 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-rc.0 +ENV RC_VERSION 3.12.0-rc.1 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 0cdadf392555..dd85128aed29 100644 --- a/.github/history.json +++ b/.github/history.json @@ -56417,6 +56417,71 @@ ] } ] + }, + "3.12.0-rc.1": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0-alpha.4655", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20871", + "title": "Regression: Fix scopes not being provided to getWorkspaceAccessToken", + "userLogin": "geekgonecrazy", + "milestone": "3.12.0", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "20869", + "title": "Regression: Keep user custom status after change presence", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20767", + "title": "[FIX] Markdown prop variants", + "userLogin": "dougfabris", + "description": "A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks**", + "contributors": [ + "dougfabris", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20868", + "title": "[FIX] Open Visitor Info when omnichannel chat was open", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20860", + "title": "Regression: Prevent Message Attachment rendering", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20820", + "title": "[FIX] Download buttons on desktop app and CDN being ignored", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + } + ] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index f09cf57be9ce..64ea1e639095 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-rc.0/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0-rc.1/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index d9fdbb75ae2d..4c70ed0905fd 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-rc.0 +version: 3.12.0-rc.1 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index 70bf16c98b9b..441cd7a69e0a 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,39 @@ # 3.12.0 (Under Release Candidate Process) +## 3.12.0-rc.1 +`2021-02-23 Β· 3 πŸ› Β· 3 πŸ” Β· 4 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` + +### πŸ› Bug fixes + + +- Download buttons on desktop app and CDN being ignored ([#20820](https://github.com/RocketChat/Rocket.Chat/pull/20820)) + +- Markdown prop variants ([#20767](https://github.com/RocketChat/Rocket.Chat/pull/20767)) + + A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks** + +- Open Visitor Info when omnichannel chat was open ([#20868](https://github.com/RocketChat/Rocket.Chat/pull/20868)) + +
+πŸ” Minor changes + + +- Regression: Fix scopes not being provided to getWorkspaceAccessToken ([#20871](https://github.com/RocketChat/Rocket.Chat/pull/20871)) + +- Regression: Keep user custom status after change presence ([#20869](https://github.com/RocketChat/Rocket.Chat/pull/20869)) + +- Regression: Prevent Message Attachment rendering ([#20860](https://github.com/RocketChat/Rocket.Chat/pull/20860)) + +
+ +### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ + +- [@dougfabris](https://github.com/dougfabris) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@tiagoevanp](https://github.com/tiagoevanp) + ## 3.12.0-rc.0 `2021-02-21 Β· 5 πŸŽ‰ Β· 17 πŸš€ Β· 69 πŸ› Β· 22 πŸ” Β· 29 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index f5aace72734b..8ba3aa2cc1ef 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-rc.0" + "version": "3.12.0-rc.1" } diff --git a/package-lock.json b/package-lock.json index 0046df66476a..4054b6813c40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-rc.0", + "version": "3.12.0-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 50dca8b31409..80cebe541f37 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-rc.0", + "version": "3.12.0-rc.1", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 8296aa27dab3a4f72fb5f4bff6fb245edc94640d Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sat, 27 Feb 2021 21:36:57 -0300 Subject: [PATCH 003/149] Bump version to 3.12.0-rc.2 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 67 ++++++++++++++++++++++++++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 34 +++++++++++++ app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 107 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 5697b41cbdc2..8f88c9eec757 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-rc.1 +ENV RC_VERSION 3.12.0-rc.2 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index dd85128aed29..227a0080af97 100644 --- a/.github/history.json +++ b/.github/history.json @@ -56482,6 +56482,73 @@ ] } ] + }, + "3.12.0-rc.2": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20912", + "title": "[FIX] Admin Panel pages not visible in Safari", + "userLogin": "tiagoevanp", + "milestone": "3.12.0", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20921", + "title": "Update Apps-Engine version", + "userLogin": "d-gubert", + "description": "Update the Apps-Engine to latest version for the release.", + "milestone": "3.12.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "20922", + "title": "Regression: Messages not being encrypted E2E", + "userLogin": "ggazzo", + "milestone": "3.11.2", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20852", + "title": "Fix: Add network observe plug to snap", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "20853", + "title": "Language update from LingoHub πŸ€– on 2021-02-22Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "20819", + "title": "Added types to Emitters", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + } + ] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 64ea1e639095..5730da1e29ad 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-rc.1/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0-rc.2/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 4c70ed0905fd..8eb97aa98f64 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-rc.1 +version: 3.12.0-rc.2 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index 441cd7a69e0a..02450cc22db6 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,40 @@ # 3.12.0 (Under Release Candidate Process) +## 3.12.0-rc.2 +`2021-02-27 Β· 1 πŸ› Β· 5 πŸ” Β· 5 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` + +### πŸ› Bug fixes + + +- Admin Panel pages not visible in Safari ([#20912](https://github.com/RocketChat/Rocket.Chat/pull/20912)) + +
+πŸ” Minor changes + + +- Added types to Emitters ([#20819](https://github.com/RocketChat/Rocket.Chat/pull/20819)) + +- Fix: Add network observe plug to snap ([#20852](https://github.com/RocketChat/Rocket.Chat/pull/20852)) + +- Language update from LingoHub πŸ€– on 2021-02-22Z ([#20853](https://github.com/RocketChat/Rocket.Chat/pull/20853)) + +- Regression: Messages not being encrypted E2E ([#20922](https://github.com/RocketChat/Rocket.Chat/pull/20922)) + +- Update Apps-Engine version ([#20921](https://github.com/RocketChat/Rocket.Chat/pull/20921)) + + Update the Apps-Engine to latest version for the release. + +
+ +### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ + +- [@d-gubert](https://github.com/d-gubert) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@sampaiodiego](https://github.com/sampaiodiego) +- [@tiagoevanp](https://github.com/tiagoevanp) + ## 3.12.0-rc.1 `2021-02-23 Β· 3 πŸ› Β· 3 πŸ” Β· 4 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 8ba3aa2cc1ef..d3d01b9b7f09 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-rc.1" + "version": "3.12.0-rc.2" } diff --git a/package-lock.json b/package-lock.json index 4054b6813c40..ede0c28efa9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-rc.1", + "version": "3.12.0-rc.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 80cebe541f37..cc96be190833 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-rc.1", + "version": "3.12.0-rc.2", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 7aed2f1af150129c67b96d71efda20feb22cf161 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sat, 27 Feb 2021 23:31:37 -0300 Subject: [PATCH 004/149] Bump version to 3.12.0-rc.3 --- .docker/Dockerfile.rhel | 2 +- .github/history-manual.json | 2 +- .github/history.json | 11 +++++++++++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 12 ++++++++++++ app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 8f88c9eec757..a859d90e7430 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-rc.2 +ENV RC_VERSION 3.12.0-rc.3 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history-manual.json b/.github/history-manual.json index 20ff8f9080ee..da4c6418600d 100644 --- a/.github/history-manual.json +++ b/.github/history-manual.json @@ -57,7 +57,7 @@ "sampaiodiego" ] }], - "3.12.0": [{ + "3.12.0-rc.3": [{ "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", "userLogin": "sampaiodiego", "contributors": [ diff --git a/.github/history.json b/.github/history.json index 227a0080af97..fe737c5ffe45 100644 --- a/.github/history.json +++ b/.github/history.json @@ -56549,6 +56549,17 @@ ] } ] + }, + "3.12.0-rc.3": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 5730da1e29ad..8ef403373532 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-rc.2/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0-rc.3/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 8eb97aa98f64..9b456a2c7165 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-rc.2 +version: 3.12.0-rc.3 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index 02450cc22db6..3fbf4a194df2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,18 @@ # 3.12.0 (Under Release Candidate Process) +## 3.12.0-rc.3 +`2021-02-27 Β· 1 πŸ› Β· 1 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` + +### πŸ› Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ + +- [@sampaiodiego](https://github.com/sampaiodiego) + ## 3.12.0-rc.2 `2021-02-27 Β· 1 πŸ› Β· 5 πŸ” Β· 5 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index d3d01b9b7f09..63aac9764715 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-rc.2" + "version": "3.12.0-rc.3" } diff --git a/package-lock.json b/package-lock.json index ede0c28efa9f..64982cc81646 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-rc.2", + "version": "3.12.0-rc.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cc96be190833..681281266226 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-rc.2", + "version": "3.12.0-rc.3", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 86ce4f389388e8183b5b2a9ddd6e8348aa011278 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sun, 28 Feb 2021 04:15:48 -0300 Subject: [PATCH 005/149] Bump version to 3.12.0-rc.4 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 11 +++++++++++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 3 +++ app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index a859d90e7430..4b3bcb24fd49 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-rc.3 +ENV RC_VERSION 3.12.0-rc.4 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index fe737c5ffe45..1439b42194b7 100644 --- a/.github/history.json +++ b/.github/history.json @@ -56560,6 +56560,17 @@ "4.0" ], "pull_requests": [] + }, + "3.12.0-rc.4": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 8ef403373532..05be856a9536 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-rc.3/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0-rc.4/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 9b456a2c7165..901810a0ddc1 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-rc.3 +version: 3.12.0-rc.4 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index 3fbf4a194df2..f2fcde9625d8 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,9 @@ # 3.12.0 (Under Release Candidate Process) +## 3.12.0-rc.4 +`2021-02-28 Β· ` + ## 3.12.0-rc.3 `2021-02-27 Β· 1 πŸ› Β· 1 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 63aac9764715..6d338b79ed08 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-rc.3" + "version": "3.12.0-rc.4" } diff --git a/package-lock.json b/package-lock.json index 64982cc81646..985764e380e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-rc.3", + "version": "3.12.0-rc.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 681281266226..448ddaaaa4a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-rc.3", + "version": "3.12.0-rc.4", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 17962a63e3488129ab897412582fa04608677617 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sun, 28 Feb 2021 04:16:52 -0300 Subject: [PATCH 006/149] Bump version to 3.12.0 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 11 +++ .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- HISTORY.md | 122 ++++++++----------------- app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 54 insertions(+), 91 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 4b3bcb24fd49..f1ee9d09833d 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0-rc.4 +ENV RC_VERSION 3.12.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 1439b42194b7..f977956d1a66 100644 --- a/.github/history.json +++ b/.github/history.json @@ -56571,6 +56571,17 @@ "4.0" ], "pull_requests": [] + }, + "3.12.0": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] } } } \ No newline at end of file diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 05be856a9536..3f301ad8afae 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0-rc.4/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 901810a0ddc1..9e964854b543 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0-rc.4 +version: 3.12.0 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/HISTORY.md b/HISTORY.md index f2fcde9625d8..6e481b3268ea 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,90 +1,12 @@ -# 3.12.0 (Under Release Candidate Process) +# 3.12.0 +`2021-02-28 Β· 5 πŸŽ‰ Β· 17 πŸš€ Β· 74 πŸ› Β· 30 πŸ” Β· 29 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` -## 3.12.0-rc.4 -`2021-02-28 Β· ` - -## 3.12.0-rc.3 -`2021-02-27 Β· 1 πŸ› Β· 1 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` - -### πŸ› Bug fixes - - -- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) - -### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ - -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.12.0-rc.2 -`2021-02-27 Β· 1 πŸ› Β· 5 πŸ” Β· 5 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` - -### πŸ› Bug fixes - - -- Admin Panel pages not visible in Safari ([#20912](https://github.com/RocketChat/Rocket.Chat/pull/20912)) - -
-πŸ” Minor changes - - -- Added types to Emitters ([#20819](https://github.com/RocketChat/Rocket.Chat/pull/20819)) - -- Fix: Add network observe plug to snap ([#20852](https://github.com/RocketChat/Rocket.Chat/pull/20852)) - -- Language update from LingoHub πŸ€– on 2021-02-22Z ([#20853](https://github.com/RocketChat/Rocket.Chat/pull/20853)) - -- Regression: Messages not being encrypted E2E ([#20922](https://github.com/RocketChat/Rocket.Chat/pull/20922)) - -- Update Apps-Engine version ([#20921](https://github.com/RocketChat/Rocket.Chat/pull/20921)) - - Update the Apps-Engine to latest version for the release. - -
- -### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ - -- [@d-gubert](https://github.com/d-gubert) -- [@geekgonecrazy](https://github.com/geekgonecrazy) -- [@ggazzo](https://github.com/ggazzo) -- [@sampaiodiego](https://github.com/sampaiodiego) -- [@tiagoevanp](https://github.com/tiagoevanp) - -## 3.12.0-rc.1 -`2021-02-23 Β· 3 πŸ› Β· 3 πŸ” Β· 4 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` - -### πŸ› Bug fixes - - -- Download buttons on desktop app and CDN being ignored ([#20820](https://github.com/RocketChat/Rocket.Chat/pull/20820)) - -- Markdown prop variants ([#20767](https://github.com/RocketChat/Rocket.Chat/pull/20767)) - - A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks** - -- Open Visitor Info when omnichannel chat was open ([#20868](https://github.com/RocketChat/Rocket.Chat/pull/20868)) - -
-πŸ” Minor changes - - -- Regression: Fix scopes not being provided to getWorkspaceAccessToken ([#20871](https://github.com/RocketChat/Rocket.Chat/pull/20871)) - -- Regression: Keep user custom status after change presence ([#20869](https://github.com/RocketChat/Rocket.Chat/pull/20869)) - -- Regression: Prevent Message Attachment rendering ([#20860](https://github.com/RocketChat/Rocket.Chat/pull/20860)) - -
- -### πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» Core Team πŸ€“ - -- [@dougfabris](https://github.com/dougfabris) -- [@geekgonecrazy](https://github.com/geekgonecrazy) -- [@ggazzo](https://github.com/ggazzo) -- [@tiagoevanp](https://github.com/tiagoevanp) - -## 3.12.0-rc.0 -`2021-02-21 Β· 5 πŸŽ‰ Β· 17 πŸš€ Β· 69 πŸ› Β· 22 πŸ” Β· 29 πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»` +### Engine versions +- Node: `12.18.4` +- NPM: `6.14.8` +- MongoDB: `3.4, 3.6, 4.0` +- Apps-Engine: `1.23.0` ### πŸŽ‰ New features @@ -227,6 +149,8 @@ So unsetting data if data isn't available to save. Will also fix bio and other fields. :) +- Admin Panel pages not visible in Safari ([#20912](https://github.com/RocketChat/Rocket.Chat/pull/20912)) + - Announcement with multiple lines fixed. ([#20381](https://github.com/RocketChat/Rocket.Chat/pull/20381) by [@yash-rajpal](https://github.com/yash-rajpal)) Announcements with multiple lines used to break UI for announcements bar. Fixed it by replacing all break lines in announcement with empty space (" ") . The announcement modal would work as usual and show all break lines. @@ -291,6 +215,8 @@ - Don't ask again not rendering ([#20745](https://github.com/RocketChat/Rocket.Chat/pull/20745)) +- Download buttons on desktop app and CDN being ignored ([#20820](https://github.com/RocketChat/Rocket.Chat/pull/20820)) + - E2E issues ([#20704](https://github.com/RocketChat/Rocket.Chat/pull/20704)) - ESLint Warning - react-hooks/exhaustive-deps ([#20586](https://github.com/RocketChat/Rocket.Chat/pull/20586) by [@aditya-mitra](https://github.com/aditya-mitra)) @@ -363,6 +289,10 @@ Added threads to mark unread action button. +- Markdown prop variants ([#20767](https://github.com/RocketChat/Rocket.Chat/pull/20767)) + + A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks** + - Message payload from `__my_messages__` stream ([#20801](https://github.com/RocketChat/Rocket.Chat/pull/20801)) - Missing height on departments agents table ([#20739](https://github.com/RocketChat/Rocket.Chat/pull/20739)) @@ -386,6 +316,8 @@ The `Omnichannel Routing System` is no longer assigning chats to `bot` agents when the `bot` agent is the default agent of the inquiry. +- Open Visitor Info when omnichannel chat was open ([#20868](https://github.com/RocketChat/Rocket.Chat/pull/20868)) + - OTR issue ([#20592](https://github.com/RocketChat/Rocket.Chat/pull/20592)) Since the users are not being stored at the user collection anymore (thats a good thing actually), there is no such record to to fetch and show the username. @@ -431,6 +363,8 @@ - Save user password and email from My Account ([#20737](https://github.com/RocketChat/Rocket.Chat/pull/20737)) +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + - Selected hide system messages would now be viewed in vertical bar. ([#20358](https://github.com/RocketChat/Rocket.Chat/pull/20358) by [@Darshilp326](https://github.com/Darshilp326)) All selected hide system messages are now in vertical Bar. @@ -494,6 +428,8 @@ https://user-images.githubusercontent.com/55157259/107410849-d1a9c380-6b33-11eb-8d10-3d225dc7a9db.mp4 +- Added types to Emitters ([#20819](https://github.com/RocketChat/Rocket.Chat/pull/20819)) + - Bump Livechat Widget ([#20843](https://github.com/RocketChat/Rocket.Chat/pull/20843)) Update Livechat version to `1.8.0` . @@ -517,12 +453,16 @@ - Exclude user's own password from /me endpoint ([#20735](https://github.com/RocketChat/Rocket.Chat/pull/20735)) +- Fix: Add network observe plug to snap ([#20852](https://github.com/RocketChat/Rocket.Chat/pull/20852)) + - Improve: Add more API tests ([#20738](https://github.com/RocketChat/Rocket.Chat/pull/20738)) Add end-to-end tests for untested endpoints. - Language update from LingoHub πŸ€– on 2021-02-15Z ([#20757](https://github.com/RocketChat/Rocket.Chat/pull/20757)) +- Language update from LingoHub πŸ€– on 2021-02-22Z ([#20853](https://github.com/RocketChat/Rocket.Chat/pull/20853)) + - Merge master into develop & Set version to 3.12.0-develop ([#20533](https://github.com/RocketChat/Rocket.Chat/pull/20533)) - Mixed client and server code on Storybook ([#20799](https://github.com/RocketChat/Rocket.Chat/pull/20799)) @@ -535,8 +475,16 @@ - Regression: Fix notification worker not firing ([#20829](https://github.com/RocketChat/Rocket.Chat/pull/20829)) +- Regression: Fix scopes not being provided to getWorkspaceAccessToken ([#20871](https://github.com/RocketChat/Rocket.Chat/pull/20871)) + - Regression: Header Styles ([#20616](https://github.com/RocketChat/Rocket.Chat/pull/20616)) +- Regression: Keep user custom status after change presence ([#20869](https://github.com/RocketChat/Rocket.Chat/pull/20869)) + +- Regression: Messages not being encrypted E2E ([#20922](https://github.com/RocketChat/Rocket.Chat/pull/20922)) + +- Regression: Prevent Message Attachment rendering ([#20860](https://github.com/RocketChat/Rocket.Chat/pull/20860)) + - Remove `uiKitText` reference ([#20625](https://github.com/RocketChat/Rocket.Chat/pull/20625)) - Rewrite: CreateChannel modal component ([#20617](https://github.com/RocketChat/Rocket.Chat/pull/20617)) @@ -545,6 +493,10 @@ - RoomFiles hook ([#20550](https://github.com/RocketChat/Rocket.Chat/pull/20550)) +- Update Apps-Engine version ([#20921](https://github.com/RocketChat/Rocket.Chat/pull/20921)) + + Update the Apps-Engine to latest version for the release. + - Wrong method used while starring ([#20508](https://github.com/RocketChat/Rocket.Chat/pull/20508) by [@im-adithya](https://github.com/im-adithya)) Changed the method from pinMessage to starMessage diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 6d338b79ed08..936af68f3ebd 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0-rc.4" + "version": "3.12.0" } diff --git a/package-lock.json b/package-lock.json index 985764e380e9..f38ca178f53c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0-rc.4", + "version": "3.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 448ddaaaa4a6..6b46129c98a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0-rc.4", + "version": "3.12.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 6efe0f2bd764102ac9ded0f4c8f76e1315063642 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 1 Mar 2021 14:02:02 -0300 Subject: [PATCH 007/149] Bump version to 3.13.0-develop --- .docker/Dockerfile.rhel | 2 +- .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index f1ee9d09833d..bcd8f9147481 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.12.0 +ENV RC_VERSION 3.13.0-develop MAINTAINER buildmaster@rocket.chat diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 3f301ad8afae..c6e798324c2e 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.12.0/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.13.0-develop/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 9e964854b543..70d1464602e2 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.12.0 +version: 3.13.0-develop summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 936af68f3ebd..a202ab102246 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.12.0" + "version": "3.13.0-develop" } diff --git a/package-lock.json b/package-lock.json index f38ca178f53c..07658333a6ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.12.0", + "version": "3.13.0-develop", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6b46129c98a6..10084ed72af8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.12.0", + "version": "3.13.0-develop", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 9389ae8d6d39b134613ef8d19b8bbb3f2e301704 Mon Sep 17 00:00:00 2001 From: Robot LingoHub Date: Mon, 1 Mar 2021 08:01:18 +0000 Subject: [PATCH 008/149] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Rocket.Chat Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat User: Robot LingoHub Easy language translations with LingoHub πŸš€ --- packages/rocketchat-i18n/i18n/ca.i18n.json | 61 +++++++++++++--------- packages/rocketchat-i18n/i18n/es.i18n.json | 21 ++++++-- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index 2fe0efc9abd5..c28f5cff1e29 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -105,6 +105,7 @@ "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "Ruta de la identitat", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Token d'identitat enviat mitjanΓ§ant", + "Accounts_OAuth_Custom_Key_Field": "Camp clau", "Accounts_OAuth_Custom_Login_Style": "Estil d'entrada", "Accounts_OAuth_Custom_Map_Channels": "Assignar rols / grups a canals", "Accounts_OAuth_Custom_Merge_Roles": "Fusionar rols de SSO", @@ -195,7 +196,7 @@ "Accounts_Password_Policy_MaxLength": "Longitud mΓ xima", "Accounts_Password_Policy_MaxLength_Description": "Assegura que les contrasenyes no tenen mΓ©s d'aquesta quantitat de carΓ cters. Utilitzeu `-1` per desactivar-lo.", "Accounts_Password_Policy_MinLength": "Longitud mΓ­nima", - "Accounts_Password_Policy_MinLength_Description": "Assegura que les contrasenyes han de tenir almenys aquesta quantitat de carΓ cters. Utilitza `-1` per desactivar.", + "Accounts_Password_Policy_MinLength_Description": "Assegura que les contrasenyes han de tenir al menys aquesta quantitat de carΓ cters. Utilitza `-1` per desactivar.", "Accounts_PasswordReset": "Restablir contrasenya", "Accounts_Registration_AuthenticationServices_Default_Roles": "Rols per defecte per als serveis d'autenticaciΓ³", "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Rols per defecte (separats per comes) que s'assignaran als usuaris quan es registrin a travΓ©s dels serveis d'autenticaciΓ³", @@ -256,6 +257,7 @@ "Add_monitor": "Afegir monitor", "Add_Reaction": "Afegeix reacciΓ³", "Add_Role": "Afegeix rol", + "Add_Sender_To_ReplyTo": "Afegir remitent per respondre", "Add_user": "Afegeix usuari", "Add_User": "Afegeix usuari", "Add_users": "Afegeix usuaris", @@ -353,13 +355,13 @@ "API_Enable_Direct_Message_History_EndPoint": "Activa la consulta de l'historial de missatges directes", "API_Enable_Direct_Message_History_EndPoint_Description": "AixΓ² activa el `/api/v1/im.history.others` que permet veure missatges directes enviats per altres usuaris tot i no formar-ne part.", "API_Enable_Personal_Access_Tokens": "Habilitar els tokens d'accΓ©s personal a l'API REST", - "API_Enable_Personal_Access_Tokens_Description": "Habiliteu els tokens d'accΓ©s personal per usar-les amb l'API REST", + "API_Enable_Personal_Access_Tokens_Description": "Habiliteu tokens d'accΓ©s personal per al seu ΓΊs amb l'API REST", "API_Enable_Rate_Limiter": "Habilitar limitador de freqΓΌΓ¨ncia", "API_Enable_Rate_Limiter_Dev": "Habilitar el limitador de freqΓΌΓ¨ncia en desenvolupament", "API_Enable_Rate_Limiter_Dev_Description": "Hauria limitar la quantitat de trucades als punts finals en l'entorn de desenvolupament?", "API_Enable_Rate_Limiter_Limit_Calls_Default": "Nombre de trucades per defecte al limitador de velocitat", "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Nombre de trucades predeterminades per a cada punt final de l'API REST, permeses dins de la franja de temps definit a continuaciΓ³", - "API_Enable_Rate_Limiter_Limit_Time_Default": "LΓ­mit de temps predeterminat per al lΓ­mit de freqΓΌΓ¨ncia (en ms)", + "API_Enable_Rate_Limiter_Limit_Time_Default": "LΓ­mit de temps predeterminat per al limitador de freqΓΌΓ¨ncia (en ms)", "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Temps d'espera per defecte per limitar el nombre de trucades en cada punt final de l'API REST (en ms)", "API_Enable_Shields": "Activa escuts", "API_Enable_Shields_Description": "Activa els escuts disponibles a `/api/v1/shield.svg`", @@ -370,7 +372,7 @@ "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "Si us plau, deseu la vostra fitxa atentament perquΓ¨ ja no podreu veure-ho desprΓ©s.
Fitxa: __token__
El seu ID d'usuari: __userId__", "API_Personal_Access_Token_Name": "Nom de Token d'accΓ©s personal", "API_Personal_Access_Tokens_Regenerate_It": "Regenerar Token", - "API_Personal_Access_Tokens_Regenerate_Modal": "Si heu perdut o oblidat la vostra Token, podeu regenerar-la, perΓ² recordeu que totes les aplicacions que utilitzen aquesta fitxa s’hauran d’actualitzar", + "API_Personal_Access_Tokens_Regenerate_Modal": "Si va perdre o va oblidar el vostre token, pot tornar a generar-lo, perΓ² recordeu que totes les aplicacions que fan servir aquest token s'han d'actualitzar", "API_Personal_Access_Tokens_Remove_Modal": "Esteu segur que voleu eliminar aquest Token d'accΓ©s personal?", "API_Personal_Access_Tokens_To_REST_API": "Tokens d'accΓ©s personal a l'API REST", "API_Shield_Types": "Tipus d'escut", @@ -723,6 +725,7 @@ "Chat_queued": "Xat en cua", "Chat_removed": "Xat eliminat", "Chat_start": "Inici de xat", + "Chat_started": "Xat iniciat", "Chat_taken": "Xat pres", "Chat_window": "finestra de xat", "Chatops_Enabled": "Activa Chatops", @@ -797,7 +800,7 @@ "Clear_filters": "Esborra els filtres", "clear_history": "Esborra l'historial", "Click_here": "Fes clic aquΓ­", - "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Cliqueu aquΓ­ per a mΓ©s detalls o contacta amb __email__ per a una nova llicΓ¨ncia.", + "Click_here_for_more_details_or_contact_sales_for_a_new_license": " Cliqueu aquΓ­ per obtenir mΓ©s detalls o poseu-vos amb __email__ per obtenir una nova llicΓ¨ncia.", "Click_here_for_more_info": "Fes clic aquΓ­ per a mΓ©s informaciΓ³", "Click_here_to_enter_your_encryption_password": "Feu clic aquΓ­ per a ingressar la contrasenya de xifrat", "Click_here_to_view_and_copy_your_password": "Feu clic aquΓ­ per veure i copiar la vostra contrasenya.", @@ -828,7 +831,7 @@ "Cloud_Apply_license": "Aplicar llicΓ¨ncia", "Cloud_connectivity": "Connectivitat al nΓΊvol", "Cloud_address_to_send_registration_to": "La direcciΓ³ a la qual enviar el correu electrΓ²nic de registre en el nΓΊvol.", - "Cloud_click_here": "DesprΓ©s de copiar el text, veu a la consola Cloud. [Cliqueu aquΓ­](__cloudConsoleUrl__)", + "Cloud_click_here": "DesprΓ©s de copiar el text, aneu a [consola en el nΓΊvol (feu clic aquΓ­)] (__ cloudConsoleUrl__).", "Cloud_console": "Consola en el nΓΊvol", "Cloud_error_code": "Codi: __errorCode__", "Cloud_error_in_authenticating": "Error durant l'autenticaciΓ³", @@ -1379,6 +1382,7 @@ "Dont_ask_me_again_list": "No tornis a demanar-me una altra vegada", "Download_Info": "Descarregar informaciΓ³", "Download_My_Data": "Descarregar les meves dades (HTML)", + "Download_Pending_Avatars": "Descarregar avatars pendents", "Download_Pending_Files": "Descarregar arxius pendents", "Download_Snippet": "Descarrega", "Downloading_file_from_external_URL": "Descarregant arxiu des URL externa", @@ -1778,7 +1782,7 @@ "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy carrega les transmissions d'arxius a travΓ©s del vostre servidor en lloc d'accedir directament a l'URL de l'actiu", "FileUpload_GoogleStorage_Secret": "Secret Google Storage", "FileUpload_GoogleStorage_Secret_Description": "Si us plau, segueix aquestes instruccions i enganxa el resultat aquΓ­.", - "FileUpload_json_web_token_secret_for_files": "Carrega Secret de token web JSON", + "FileUpload_json_web_token_secret_for_files": "Carregar Secret del token web JSON", "FileUpload_json_web_token_secret_for_files_description": "File Upload json web Token Secret (s'utilitza per poder accedir als arxius carregats sense autenticaciΓ³)", "FileUpload_MaxFileSize": "Mida mΓ xima de pujada (en bytes)", "FileUpload_MaxFileSizeDescription": "Establiu-lo a -1 per eliminar la limitaciΓ³ de la mida del fitxer.", @@ -2671,8 +2675,8 @@ "Message_Id": "Identificador del missatge", "Message_Ignored": "Aquest missatge va ser ignorat", "Message_info": "InformaciΓ³ del missatge", - "Message_KeepHistory": "Mantenir l'historial d'per missatge", - "Message_MaxAll": "Mida mΓ xima Channel per a TOTS els missatges", + "Message_KeepHistory": "Mantenir l'historial per missatge", + "Message_MaxAll": "Mida mΓ xima de Channel per a TOTS els missatges", "Message_MaxAllowedSize": "CarΓ cters mΓ xims permesos per missatge", "Message_pinning": "FixaciΓ³ de missatges", "message_pruned": "missatge esborrat", @@ -2697,7 +2701,7 @@ "Message_VideoRecorderEnabled": "Gravadora de vΓ­deo activa", "Message_VideoRecorderEnabledDescription": "Requereix que els fitxers de tipus 'video/webm' siguin admesos a la configuraciΓ³ de 'Puja fitxers'.", "Message_view_mode_info": "AixΓ² canvia l'espai que ocupen els missatges en pantalla.", - "MessageBox_view_mode": "Mode de vista de quadre de missatges", + "MessageBox_view_mode": "Mode de visualitzaciΓ³ de el panell de missatges", "messages": "Missatges", "Messages": "Missatges", "messages_pruned": "missatge esborrat", @@ -2870,7 +2874,7 @@ "Notification_RequireInteraction_Description": "Funciona nomΓ©s amb versions de el navegador Chrome> 50. Utilitza el parΓ metre requireInteraction per mostrar la notificaciΓ³ d'escriptori de forma indefinida fins que l'usuari interactuΓ― amb ella.", "Notifications": "Notificacions", "Notifications_Max_Room_Members": "Nombre mΓ xim de membres de la sala abans de desactivar totes les notificacions de missatges", - "Notifications_Max_Room_Members_Description": "Nombre mΓ xim de membres a la sala quan es desactiven les notificacions de tots els missatges. Els usuaris encara poden canviar la configuraciΓ³ de cada sala per rebre totes les notificacions de forma individual. (0 per desactivar)", + "Notifications_Max_Room_Members_Description": "Nombre mΓ xim de membres a la sala quan es desactiven les notificacions de tots els missatges. Els usuaris encara poden canviar la configuraciΓ³ de cada habitaciΓ³ per rebre totes les notificacions de forma individual. (0 per desactivar)", "Notifications_Muted_Description": "Si esculls silenciar-ho tot, no veurΓ s la sala destacada a la llista quan hi hagi nous missatges, excepte si sΓ³n mencions. Silenciar les notificacions sobreescriurΓ  les opcions de notificaciΓ³.", "Notifications_Preferences": "PreferΓ¨ncies de notificacions", "Notifications_Sound_Volume": "Volum del so de notificacions", @@ -3125,7 +3129,7 @@ "Push_request_content_from_server": "Obtenir el contingut complet d'el missatge de servidor a l'rebre'l", "Push_Setting_Requires_Restart_Alert": "Canviar aquest valor requereix reiniciar Rocket.Chat.", "Push_show_message": "Mostra el missatge a la notificaciΓ³", - "Push_show_username_room": "Mostra el Channel /Grup / Usuari a la NotificaciΓ³", + "Push_show_username_room": "Mostra Channel / grup / nom d'usuari en la notificaciΓ³", "Push_test_push": "Prova", "Query": "Consulta", "Query_description": "Condicions addicionals per a determinar a quins usuaris s'enviarΓ  el missatge de correu-e. Els usuaris des-subscrits s'eliminen automΓ ticament de la consulta. Ha de ser un objecte JSON vΓ lid. Exemple: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", @@ -3145,7 +3149,7 @@ "Read_only_changed_successfully": "NomΓ©s lectura canviat correctament", "Read_only_channel": "Canal de nomΓ©s lectura", "Read_only_group": "Grup de nomΓ©s lectura", - "Real_Estate": "Bens", + "Real_Estate": "BΓ©ns arrels", "Real_Time_Monitoring": "MonitoritzaciΓ³ en temps real", "RealName_Change_Disabled": "El seu administrador de Rocket.Chat ha desactivat el canvi de noms", "Reason_To_Join": "RaΓ³ per unir-se", @@ -3188,6 +3192,7 @@ "Remove_as_leader": "Treure de lΓ­der", "Remove_as_moderator": "Treu de moderador", "Remove_as_owner": "Treu de propietari", + "Remove_Channel_Links": "Eliminar enllaΓ§os de canals", "Remove_custom_oauth": "Esborra OAuth personalitzat", "Remove_from_room": "Treu-lo de la sala", "Remove_last_admin": "Eliminant el darrer admin", @@ -3333,7 +3338,7 @@ "SAML_AuthnRequest_Template_Description": "Les segΓΌents variables estan disponibles:\n - ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificaciΓ³ generada aleatoriamente\n- ** \\ _ \\ _ instant \\ _ \\ _ **: Data i hora actual\n- ** \\ _ \\ _ callbackUrl \\ _ \\ _ **: la URL de devoluciΓ³ de trucada d'Rocket.Chat.\n- ** \\ _ \\ _ entryPoint \\ _ \\ _ **: El valor de l'opciΓ³ __Custom Entry Point __\n- ** \\ _ \\ _ issuer \\ _ \\ _ **: El valor de l'opciΓ³ __Custom Issuer __\n- ** \\ _ \\ _ identifierFormatTag \\ _ \\ _ **: El contingut d'__NameID Policy Template__ si un vΓ lid __Identifier Format__ Γ©s configurado.\n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: El valor de l'opciΓ³ __Identifier Format __\n- ** \\ _ \\ _ authnContextTag \\ _ \\ _ **: El contingut de __AuthnContext Template__ si un vΓ lid __Custom AuthN Context__ Γ©s configurado.\n- ** \\ _ \\ _ authnContextComparison \\ _ \\ _ * *: El valor de l'opciΓ³ __Authn Context Comparison __\n- ** \\ _ \\ _ authnContext \\ _ \\ _ **: El valor de l'opciΓ³ __Custom AuthN Context__", "SAML_Custom_Authn_Context": "Context Authn personalitzat", "SAML_Custom_Authn_Context_Comparison": "ComparaciΓ³ del context d’Authn", - "SAML_Custom_Authn_Context_description": "Deixi aixΓ² buit per ometre el context d'autenticaciΓ³ de la solΒ·licitud. \nPer afegir mΓΊltiples contextos d'autenticaciΓ³, afegiu els addicionals directament a la configuraciΓ³ \n__AuthnContext Template__", + "SAML_Custom_Authn_Context_description": "Deixi aixΓ² buit per ometre el context d'autenticaciΓ³ de la solΒ·licitud. \n\nPer afegir mΓΊltiples contextos d'autenticaciΓ³, afegiu els addicionals directament a la configuraciΓ³ __AuthnContext Template__.", "SAML_Custom_Cert": "Certificat personalitzat", "SAML_Custom_Debug": "Activa la depuraciΓ³", "SAML_Custom_EMail_Field": "Nom del camp de correu electrΓ²nic", @@ -3390,7 +3395,7 @@ "SAML_Section_6_Advanced": "AvanΓ§at", "SAML_Custom_channels_update": "Actualitzeu les subscripcions Room a cada inici de sessiΓ³", "SAML_Custom_channels_update_description": "Garanteix que l'usuari sigui membre de tots els canals en l'asserciΓ³ SAML en cada inici de sessiΓ³.", - "SAML_Custom_include_private_channels_update": "Incloure Rooms privades en la subscripciΓ³ del Room", + "SAML_Custom_include_private_channels_update": "Incloure Room privades en la subscripciΓ³ de la Room", "SAML_Custom_include_private_channels_update_description": "Afegeix usuari a qualsevol sala privada que existeixi en l'asserciΓ³ SAML.", "Saturday": "dissabte", "Save": "Desa", @@ -3552,6 +3557,7 @@ "Slack_Users": "CSV d'usuaris de Slack", "SlackBridge_APIToken": "API Tokens", "SlackBridge_APIToken_Description": "Podeu configurar diversos servidors slack afegint un sΓ­mbol API per lΓ­nia.", + "Slackbridge_channel_links_removed_successfully": "Els enllaΓ§os de canal de Slackbridge s'han eliminat correctament.", "SlackBridge_error": "Hi ha hagut un error a SlackBridge mentre importava els missatges a %s: %s", "SlackBridge_finish": "SlackBridge ha finalitat la importaciΓ³ a %s. Si us plau, refresqueu per veure tots els missatges.", "SlackBridge_Out_All": "SlackBridge Out de tot", @@ -3560,6 +3566,7 @@ "SlackBridge_Out_Channels_Description": "Escull els canals dels quals es reenviaran els missatges a Slack", "SlackBridge_Out_Enabled": "SlackBridge Out actiu", "SlackBridge_Out_Enabled_Description": "Escull si SlackBridge ha de reenviar els missatges a Slack", + "SlackBridge_Remove_Channel_Links_Description": "Elimina l'enllaΓ§ intern entre els canals de Rocket.Chat i els canals de Slack. Posteriorment, els enllaΓ§os es tornaran a crear en funciΓ³ dels noms dels canals.", "SlackBridge_start": "@%s ha iniciat una importaciΓ³ SlackBridge a `#%s`. Us avisarem quan finalitzi.", "Slash_Gimme_Description": "Mostra ΰΌΌ ぀ β—•_β—• ༽぀ abans del teu missatge", "Slash_LennyFace_Description": "Mostra ( Ν‘Β° ΝœΚ– Ν‘Β°) desprΓ©s del teu missatge", @@ -3709,13 +3716,13 @@ "The_application_name_is_required": "Es requereix el nom de l'aplicaciΓ³", "The_channel_name_is_required": "Es requereix el nom del canal", "The_emails_are_being_sent": "Els missatges de correu-e s'estan enviant.", - "The_empty_room__roomName__will_be_removed_automatically": "The empty room __roomName__ will be removed automatically.", + "The_empty_room__roomName__will_be_removed_automatically": "La sala buida __ roomName __ s'eliminarΓ  automΓ ticament.", "The_field_is_required": "El camp %s Γ©s obligatori.", "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "L'ajust de mida de les imatges no funcionarΓ  perquΓ¨ no podem detectar ni ImageMagick ni GraphicsMagick al servidor.", "The_message_is_a_discussion_you_will_not_be_able_to_recover": "El missatge Γ©s una discussiΓ³, no podrΓ  recuperar els missatges!", "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "Les notificacions mΓ²bils es deshabilitaron per a tots els usuaris, aneu a \"Admin> Push\" per habilitar Push inici novament", "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "No es concedeixen els permisos necessaris del navegador per compartir la ubicaciΓ³", - "The_peer__peer__does_not_exist": "El parell __peer__ no existeix.", + "The_peer__peer__does_not_exist": "El peer __peer__ no existeix.", "The_redirectUri_is_required": "Es requereix l'adreΓ§a URI de redireccionament", "The_selected_user_is_not_a_monitor": "L'usuari seleccionat no Γ©s un monitor", "The_selected_user_is_not_an_agent": "L'usuari seleccionat no Γ©s un agent", @@ -3744,6 +3751,10 @@ "theme-color-rc-color-alert-message-secondary-background": "Fons secundari del missatge d'alerta", "theme-color-rc-color-alert-message-warning": "Advertiment de missatge d'alerta", "theme-color-rc-color-alert-message-warning-background": "Fons d'advertΓ¨ncia del missatge d'alerta", + "theme-color-rc-color-announcement-text": "Color de el text de l'anunci", + "theme-color-rc-color-announcement-background": "Color de fons de l'anunci", + "theme-color-rc-color-announcement-text-hover": "Posar el cursor sobre el color de el text de l'anunci", + "theme-color-rc-color-announcement-background-hover": "Anunci Color de fons Posar el cursor", "theme-color-rc-color-button-primary": "BotΓ³ primari", "theme-color-rc-color-button-primary-light": "BotΓ³ primari clar", "theme-color-rc-color-content": "Contingut", @@ -3794,14 +3805,14 @@ "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Aquesta adreΓ§a de correu-e ja s'ha utilitzat perΓ² no s'ha verificat. Si us plau, canviΓ― la contrasenya.", "This_is_a_desktop_notification": "AixΓ² Γ©s una notificaciΓ³ d'escriptori", "This_is_a_push_test_messsage": "AixΓ² Γ©s un missatge push de prova", - "This_message_was_rejected_by__peer__peer": "Aquest missatge ha estat rebutjat per __peer__ peer.", + "This_message_was_rejected_by__peer__peer": "Aquest missatge va ser rebutjat per __ peer __ peer.", "This_monitor_was_already_selected": "Aquest monitor ja estava seleccionat", "This_month": "Aquest mes", "This_room_has_been_archived_by__username_": "__username__ ha arxivat aquesta sala.", "This_room_has_been_unarchived_by__username_": "__username__ ha desarxivat aquesta sala.", "This_week": "Aquesta setmana", "thread": "fil", - "Thread_message": "Comentari al missatge de *__username__*: _ __msg__ _", + "Thread_message": "Comentat al missatge de * __ username __ 's * missatge: _ __msg__ _", "Threads": "Fils", "Thursday": "dijous", "Time_in_seconds": "Temps en segons", @@ -3861,9 +3872,9 @@ "Trigger_Words": "Paraules d'activaciΓ³", "Triggers": "Activadors (triggers)", "Troubleshoot": "ResoluciΓ³ de problemes", - "Troubleshoot_Description": "Aquestes configuracions estan dissenyades per habilitar nomΓ©s amb la guia dels equips de suport o desenvolupament de Rocket.Chat. No els tocs si no saps el que estΓ s fent!", + "Troubleshoot_Description": "Aquestes configuracions estan dissenyades per habilitar nomΓ©s amb la guia dels equips de suport o desenvolupament de Rocket.Chat. No els toqui si no sap el que estΓ  fent!", "Troubleshoot_Disable_Data_Exporter_Processor": "Desactiva el processador de l'exportador de dades", - "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Aquesta configuraciΓ³ detΓ© el processament de totes les solΒ·licituds d'exportaciΓ³ dels usuaris, de manera que no rebran l'enllaΓ§ per descarregar les seves dades!", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Aquesta configuraciΓ³ detΓ© el processament de totes les solΒ·licituds d'exportaciΓ³ dels usuaris, de manera que no rebran l'enllaΓ§ per descarregar les seves dades.", "Troubleshoot_Disable_Instance_Broadcast": "Desactiva la retransmissiΓ³ d'instΓ ncies", "Troubleshoot_Disable_Instance_Broadcast_Alert": "Aquesta configuraciΓ³ evita que les instΓ ncies de Rocket.Chat enviΓ―n esdeveniments a les altres instΓ ncies, 'pot causar problemes de sincronitzaciΓ³ i mal comportament!", "Troubleshoot_Disable_Livechat_Activity_Monitor": "Desactiva el monitor d'activitats de Livechat", @@ -3942,7 +3953,7 @@ "Unstar_Message": "Esborra el destacat", "Update": "ActualitzaciΓ³", "Update_EnableChecker": "Habilitar el Update Checker", - "Update_EnableChecker_Description": "Comprova automΓ ticament si hi ha noves actualitzacions / missatges importants dels desenvolupadors de Rocket.Chat i rep notificacions quan estan disponibles. La notificaciΓ³ apareix una vegada per nova versiΓ³ com un banner en quΓ¨ es pot fer clic i com un missatge de el bot Rocket.Cat, tots dos visibles nomΓ©s per a administradors.", + "Update_EnableChecker_Description": "Comprova automΓ ticament si hi ha noves actualitzacions / missatges importants dels desenvolupadors de Rocket.Chat i rep notificacions quan estan disponibles. La notificaciΓ³ apareix una vegada per nova versiΓ³ com un banner en quΓ¨ es pot fer clic i com un missatge de el bot Rocket.Cat, tots dos visibles nomΓ©s per als administradors.", "Update_every": "Actualitzar cada", "Update_LatestAvailableVersion": "Actualitza la darrera versiΓ³ disponible", "Update_to_version": "Actualitzar a __version__", @@ -3959,7 +3970,7 @@ "Uploading_file": "Pujant l'arxiu...", "Uptime": "Temps en funcionament", "URL": "URL", - "URL_room_hash": "Habilitar hash de nom de sala", + "URL_room_hash": "Activa el nom hash de la sala", "URL_room_hash_description": "Recomanat per habilitar si la instΓ ncia de Jitsi no fa servir cap mecanisme d'autenticaciΓ³.", "URL_room_prefix": "Prefix de sala URL", "URL_room_suffix": "Sufix de sala URL", @@ -4052,8 +4063,8 @@ "UserDataDownload_EmailBody": "El fitxer de dades ja estΓ  preparat per baixar. Feu clic a aquΓ­per baixar-lo.", "UserDataDownload_EmailSubject": "El seu arxiu de dades estΓ  a punt per descarregar", "UserDataDownload_Requested": "Descarregar el fitxer solΒ·licitat", - "UserDataDownload_Requested_Text": "El seu arxiu de dades serΓ  generat. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha __pending_operations__ operacions en cua abans que s'executi la seva.", - "UserDataDownload_RequestExisted_Text": "El seu arxiu de dades ja estΓ  enviada generat. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hola ha __pending_operations__ operacions en cua abans que s'executi la seva.", + "UserDataDownload_Requested_Text": "Es generarΓ  el seu arxiu de dades. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha --pending_operations__ operacions en cua per a executar abans que les seves.", + "UserDataDownload_RequestExisted_Text": "El seu arxiu de dades ja s'estΓ  generant. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha __pending_operations__ operacions en cua per a executar abans que les seves", "Username": "Nom d'usuari", "Username_already_exist": "Nom d'usuari ja existeix. Proveu amb un altre nom d'usuari.", "Username_and_message_must_not_be_empty": "El nom d'usuari i el missatge no han d'estar buits.", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index f0986f32109a..b23d7495b5e6 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -105,6 +105,7 @@ "Accounts_OAuth_Custom_id": "Id", "Accounts_OAuth_Custom_Identity_Path": "Ruta de Identidad", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Token de identidad enviado a travΓ©s de", + "Accounts_OAuth_Custom_Key_Field": "Campo clave", "Accounts_OAuth_Custom_Login_Style": "Estilos del login", "Accounts_OAuth_Custom_Map_Channels": "Asignar roles/grupos a canales", "Accounts_OAuth_Custom_Merge_Roles": "Fusionar roles de SSO", @@ -256,6 +257,7 @@ "Add_monitor": "AΓ±adir monitor", "Add_Reaction": "AΓ±adir reacciΓ³n", "Add_Role": "Agregar Rol", + "Add_Sender_To_ReplyTo": "Agregar remitente para responder", "Add_user": "Agregar Usuario", "Add_User": "AΓ±adir usuario", "Add_users": "AΓ±adir usuarios", @@ -357,7 +359,7 @@ "API_Enable_Rate_Limiter": "Habilitar limitador de frecuencia", "API_Enable_Rate_Limiter_Dev": "Habilitar lΓ­mite de frecuencia en desarrollo", "API_Enable_Rate_Limiter_Dev_Description": "ΒΏDeberΓ­a limitar la cantidad de llamadas a los puntos finales en el entorno de desarrollo?", - "API_Enable_Rate_Limiter_Limit_Calls_Default": "NΓΊmero predeterminado de llamadas al lΓ­mite de frecuencia", + "API_Enable_Rate_Limiter_Limit_Calls_Default": "NΓΊmero predeterminado de llamadas al lΓ­mite de velocidad", "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "NΓΊmero de llamadas predeterminadas para cada punto final de la API REST, permitidas dentro del rango de tiempo definido a continuaciΓ³n", "API_Enable_Rate_Limiter_Limit_Time_Default": "LΓ­mite de tiempo predeterminado para el lΓ­mite de frecuencia (en ms)", "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Tiempo de espera predeterminado para limitar el nΓΊmero de llamadas en cada punto final de la API REST (en ms)", @@ -723,6 +725,7 @@ "Chat_queued": "Chat en cola", "Chat_removed": "Chat eliminado", "Chat_start": "Inicio de chat", + "Chat_started": "Chat iniciado", "Chat_taken": "Chat tomado", "Chat_window": "Ventana de chat", "Chatops_Enabled": "Habilitar Chatops", @@ -1379,6 +1382,7 @@ "Dont_ask_me_again_list": "No me preguntes de nuevo", "Download_Info": "Descargar informaciΓ³n", "Download_My_Data": "Descargar mis datos (HTML)", + "Download_Pending_Avatars": "Descargar avatares pendientes", "Download_Pending_Files": "Descargar archivos pendientes", "Download_Snippet": "Descargar", "Downloading_file_from_external_URL": "Descargando archivo desde URL externa", @@ -1778,7 +1782,7 @@ "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy carga transmisiones de archivos a travΓ©s de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_GoogleStorage_Secret": "Secreto de almacenamiento de Google", "FileUpload_GoogleStorage_Secret_Description": "Siga estas instrucciones y pegue el resultado aquΓ­.", - "FileUpload_json_web_token_secret_for_files": "Subir archivo con la clave del Json Web Token ", + "FileUpload_json_web_token_secret_for_files": "Subir archivo Secreto del token web Json", "FileUpload_json_web_token_secret_for_files_description": "File Upload Json Web Token Secret (se utiliza para poder acceder a los archivos cargados sin autenticaciΓ³n)", "FileUpload_MaxFileSize": "TamaΓ±o Maximo de Subida (en bytes)", "FileUpload_MaxFileSizeDescription": "EstablΓ©zcalo en -1 para eliminar la limitaciΓ³n del tamaΓ±o del archivo.", @@ -2924,7 +2928,7 @@ "Omnichannel_External_Frame": "Marco externo", "Omnichannel_External_Frame_Enabled": "Marco externo habilitado", "Omnichannel_External_Frame_Encryption_JWK": "Clave de cifrado (JWK)", - "Omnichannel_External_Frame_Encryption_JWK_Description": "Si se proporciona, cifrarΓ‘ el token del usuario con la clave proporcionada y el sistema externo tendrΓ‘ que descifrar los datos para acceder al token", + "Omnichannel_External_Frame_Encryption_JWK_Description": "Si se proporciona, cifrarΓ‘ el token del usuario con la clave proporcionada y el sistema externo deberΓ‘ descifrar los datos para acceder al token.", "Omnichannel_External_Frame_URL": "URL del marco externo", "On": "Activar", "online": "en lΓ­nea", @@ -3117,7 +3121,7 @@ "Push_apn_passphrase": "Frase de contraseΓ±a APN", "Push_enable": "Habilitar", "Push_enable_gateway": "Habilitar Puerta de Enlace", - "Push_enable_gateway_Description": "Debe aceptar registrar su servidor (Asistente de configuraciΓ³n> InformaciΓ³n de la organizaciΓ³n> Registrar servidor) y nuestros tΓ©rminos de privacidad (Asistente de configuraciΓ³n> InformaciΓ³n de la nube> Acuerdo de tΓ©rminos de privacidad del servicio de nube) para habilitar esta configuraciΓ³n y usar nuestra puerta de enlace", + "Push_enable_gateway_Description": "Debe aceptar registrar su servidor (Asistente de configuraciΓ³n> InformaciΓ³n de la organizaciΓ³n> Registrar servidor) y nuestros tΓ©rminos de privacidad (Asistente de configuraciΓ³n> InformaciΓ³n de la nube> Acuerdo de tΓ©rminos de privacidad del servicio en la nube) para habilitar esta configuraciΓ³n y usar nuestra puerta de enlace", "Push_gateway": "Puerta de Enlace", "Push_gateway_description": "Se pueden utilizar varias lΓ­neas para especificar varias puertas de enlace", "Push_gcm_api_key": "Llave del API GCM", @@ -3189,6 +3193,7 @@ "Remove_as_leader": "Eliminar como lΓ­der", "Remove_as_moderator": "Retirar como moderador", "Remove_as_owner": "Retirar como propietario", + "Remove_Channel_Links": "Eliminar enlaces de canales", "Remove_custom_oauth": "Eliminar oauth personalizado", "Remove_from_room": "Eliminar de la sala", "Remove_last_admin": "Eliminando el ΓΊltimo administrador", @@ -3553,6 +3558,7 @@ "Slack_Users": "CSV de los usuarios de Slack", "SlackBridge_APIToken": "API Tokens", "SlackBridge_APIToken_Description": "Puede configurar varios servidores slack agregando un token API por lΓ­nea.", + "Slackbridge_channel_links_removed_successfully": "Los enlaces del canal de Slackbridge se han eliminado correctamente.", "SlackBridge_error": "SlackBridge obtuvo un error al importar sus mensajes en %s: %s", "SlackBridge_finish": "SlackBridge ha terminado de importar los mensajes en%s. Por favor, vuelva a cargar para ver todos los mensajes.", "SlackBridge_Out_All": "SlackBridge Out All", @@ -3561,6 +3567,7 @@ "SlackBridge_Out_Channels_Description": "Elige quΓ© canales enviarΓ‘n mensajes a Slack", "SlackBridge_Out_Enabled": "SlackBridge Out habilitado", "SlackBridge_Out_Enabled_Description": "Elija si SlackBridge tambiΓ©n debe enviar sus mensajes a Slack", + "SlackBridge_Remove_Channel_Links_Description": "Elimina el enlace interno entre los canales de Rocket.Chat y los canales de Slack. Posteriormente, los enlaces se volverΓ‘n a crear en funciΓ³n de los nombres de los canales.", "SlackBridge_start": "@%s ha iniciado una importaciΓ³n de SlackBridge en `#%s`. Le avisaremos cuando haya terminado.", "Slash_Gimme_Description": "Muestra (぀ β—•_β—•) ぀ antes de su mensaje", "Slash_LennyFace_Description": "Muestra (Ν‘ Β° ΝœΚ– Ν‘ Β°) despuΓ©s de su mensaje", @@ -3745,6 +3752,10 @@ "theme-color-rc-color-alert-message-secondary-background": "Fondo secundario del mensaje de alerta", "theme-color-rc-color-alert-message-warning": "Advertencia de mensaje de alerta", "theme-color-rc-color-alert-message-warning-background": "Fondo de advertencia de mensaje de alerta", + "theme-color-rc-color-announcement-text": "Color del texto del anuncio", + "theme-color-rc-color-announcement-background": "Color de fondo del anuncio", + "theme-color-rc-color-announcement-text-hover": "Colocar el cursor sobre el color del texto del anuncio", + "theme-color-rc-color-announcement-background-hover": "Anuncio Color de fondo Colocar el cursor", "theme-color-rc-color-button-primary": "BotΓ³n primario", "theme-color-rc-color-button-primary-light": "BotΓ³n Luz primaria", "theme-color-rc-color-content": "Contenido", @@ -4053,7 +4064,7 @@ "UserDataDownload_EmailBody": "Su archivo de datos ahora estΓ‘ listo para descargar. Haga clic en aquΓ­para descargarlo.", "UserDataDownload_EmailSubject": "Su archivo de datos estΓ‘ listo para descargar", "UserDataDownload_Requested": "Descargar archivo solicitado", - "UserDataDownload_Requested_Text": "Su archivo de datos serΓ‘ generado. Se enviarΓ‘ un enlace para descargarlo a su direcciΓ³n de correo electrΓ³nico cuando estΓ© listo. Hay __pending_operations__ operaciones en cola antes de que se ejecute la suya.", + "UserDataDownload_Requested_Text": "Se generarΓ‘ su archivo de datos. Se enviarΓ‘ un enlace para descargarlo a su direcciΓ³n de correo electrΓ³nico cuando estΓ© listo. Hay __pending_operations__ operaciones en cola para ejecutar antes que las suyas.", "UserDataDownload_RequestExisted_Text": "Su archivo de datos ya estΓ‘ siendo generado. Se enviarΓ‘ un enlace para descargarlo a su direcciΓ³n de correo electrΓ³nico cuando estΓ© listo. Hay __pending_operations__ operaciones en cola antes de que se ejecute la suya.", "Username": "Nombre de Usuario", "Username_already_exist": "Nombre de usuario ya existe. Intente con otro nombre de usuario.", From b98103c19955b8d5de7d00c1a43786e32b0bf59e Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 2 Mar 2021 09:42:33 -0300 Subject: [PATCH 009/149] Fix variables --- packages/rocketchat-i18n/i18n/ca.i18n.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index c28f5cff1e29..009bb625c6a5 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -831,7 +831,7 @@ "Cloud_Apply_license": "Aplicar llicΓ¨ncia", "Cloud_connectivity": "Connectivitat al nΓΊvol", "Cloud_address_to_send_registration_to": "La direcciΓ³ a la qual enviar el correu electrΓ²nic de registre en el nΓΊvol.", - "Cloud_click_here": "DesprΓ©s de copiar el text, aneu a [consola en el nΓΊvol (feu clic aquΓ­)] (__ cloudConsoleUrl__).", + "Cloud_click_here": "DesprΓ©s de copiar el text, aneu a [consola en el nΓΊvol (feu clic aquΓ­)](__cloudConsoleUrl__).", "Cloud_console": "Consola en el nΓΊvol", "Cloud_error_code": "Codi: __errorCode__", "Cloud_error_in_authenticating": "Error durant l'autenticaciΓ³", @@ -3716,7 +3716,7 @@ "The_application_name_is_required": "Es requereix el nom de l'aplicaciΓ³", "The_channel_name_is_required": "Es requereix el nom del canal", "The_emails_are_being_sent": "Els missatges de correu-e s'estan enviant.", - "The_empty_room__roomName__will_be_removed_automatically": "La sala buida __ roomName __ s'eliminarΓ  automΓ ticament.", + "The_empty_room__roomName__will_be_removed_automatically": "La sala buida __roomName__ s'eliminarΓ  automΓ ticament.", "The_field_is_required": "El camp %s Γ©s obligatori.", "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "L'ajust de mida de les imatges no funcionarΓ  perquΓ¨ no podem detectar ni ImageMagick ni GraphicsMagick al servidor.", "The_message_is_a_discussion_you_will_not_be_able_to_recover": "El missatge Γ©s una discussiΓ³, no podrΓ  recuperar els missatges!", @@ -3805,14 +3805,14 @@ "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Aquesta adreΓ§a de correu-e ja s'ha utilitzat perΓ² no s'ha verificat. Si us plau, canviΓ― la contrasenya.", "This_is_a_desktop_notification": "AixΓ² Γ©s una notificaciΓ³ d'escriptori", "This_is_a_push_test_messsage": "AixΓ² Γ©s un missatge push de prova", - "This_message_was_rejected_by__peer__peer": "Aquest missatge va ser rebutjat per __ peer __ peer.", + "This_message_was_rejected_by__peer__peer": "Aquest missatge va ser rebutjat per __peer__ peer.", "This_monitor_was_already_selected": "Aquest monitor ja estava seleccionat", "This_month": "Aquest mes", "This_room_has_been_archived_by__username_": "__username__ ha arxivat aquesta sala.", "This_room_has_been_unarchived_by__username_": "__username__ ha desarxivat aquesta sala.", "This_week": "Aquesta setmana", "thread": "fil", - "Thread_message": "Comentat al missatge de * __ username __ 's * missatge: _ __msg__ _", + "Thread_message": "Comentat al missatge de *__username__'s* missatge: _ __msg__ _", "Threads": "Fils", "Thursday": "dijous", "Time_in_seconds": "Temps en segons", @@ -4063,7 +4063,7 @@ "UserDataDownload_EmailBody": "El fitxer de dades ja estΓ  preparat per baixar. Feu clic a aquΓ­per baixar-lo.", "UserDataDownload_EmailSubject": "El seu arxiu de dades estΓ  a punt per descarregar", "UserDataDownload_Requested": "Descarregar el fitxer solΒ·licitat", - "UserDataDownload_Requested_Text": "Es generarΓ  el seu arxiu de dades. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha --pending_operations__ operacions en cua per a executar abans que les seves.", + "UserDataDownload_Requested_Text": "Es generarΓ  el seu arxiu de dades. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha __pending_operations__ operacions en cua per a executar abans que les seves.", "UserDataDownload_RequestExisted_Text": "El seu arxiu de dades ja s'estΓ  generant. S'enviarΓ  un enllaΓ§ per descarregar-lo a la seva adreΓ§a de correu electrΓ²nic quan estigui llest. Hi ha __pending_operations__ operacions en cua per a executar abans que les seves", "Username": "Nom d'usuari", "Username_already_exist": "Nom d'usuari ja existeix. Proveu amb un altre nom d'usuari.", @@ -4297,4 +4297,4 @@ "Your_temporary_password_is_password": "La vostra contrasenya temporal Γ©s [contrasenya] .", "Your_TOTP_has_been_reset": "El vostre TOTP de dos factors s'ha restablert.", "Your_workspace_is_ready": "El vostre espai de treball estΓ  a punt per utilitzar πŸŽ‰" -} \ No newline at end of file +} From d40fa74b44cb21dbf6616a22f31e0d17beb3cb0a Mon Sep 17 00:00:00 2001 From: Felipe Cecagno Date: Tue, 2 Mar 2021 10:51:17 -0300 Subject: [PATCH 010/149] [FIX] Iframe flags for audio and video on the BigBlueButton integration (#20879) Fix iframe flags that prevent audio and video to be shared in a session --- app/videobridge/client/views/bbbLiveView.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/videobridge/client/views/bbbLiveView.html b/app/videobridge/client/views/bbbLiveView.html index 2a2f007b7cc5..47c0f4fcd0a3 100644 --- a/app/videobridge/client/views/bbbLiveView.html +++ b/app/videobridge/client/views/bbbLiveView.html @@ -1,3 +1,3 @@ From 791002413f803765d4d6a8613b18ee0bc9d373a3 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 2 Mar 2021 10:51:33 -0300 Subject: [PATCH 011/149] [FIX] Add missing `unreads` field to `users.info` REST endpoint (#20905) --- app/api/server/v1/users.js | 2 +- tests/end-to-end/api/01-users.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index a7d99d933c72..fe2d6f08b63d 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -202,10 +202,10 @@ API.v1.addRoute('users.info', { authRequired: true }, { user.rooms = Subscriptions.findByUserId(user._id, { fields: { rid: 1, - bio: 1, name: 1, t: 1, roles: 1, + unread: 1, }, sort: { t: 1, diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index 8b7501e3b000..52072860f5e8 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -286,6 +286,7 @@ describe('[Users]', function() { .expect((res) => { expect(res.body).to.have.property('success', true); expect(res.body).to.have.nested.property('user.rooms').and.to.be.an('array'); + expect(res.body.user.rooms[0]).to.have.property('unread'); }) .end(done); }); @@ -316,6 +317,7 @@ describe('[Users]', function() { .expect((res) => { expect(res.body).to.have.property('success', true); expect(res.body).to.have.nested.property('user.rooms'); + expect(res.body.user.rooms[0]).to.have.property('unread'); }) .end(done); }); From cfab6c20fdae64d844ccac7227cc8ea328c8b6ae Mon Sep 17 00:00:00 2001 From: yash-rajpal <58601732+yash-rajpal@users.noreply.github.com> Date: Fri, 5 Mar 2021 03:26:07 +0530 Subject: [PATCH 012/149] [FIX] Stopping Jitsi reload (#20973) * removing dep from useMemo * Avoid missing dep in useMemo Co-authored-by: Tasso Evangelista --- client/views/room/contextualBar/Call/Jitsi/CallJitsi.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js index 697a48ebd264..a8aa73d478d8 100644 --- a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js +++ b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js @@ -105,12 +105,13 @@ const CallJitsWithData = ({ rid }) => { } }, [connected, handleClose]); + const rname = useHashName ? uniqueID + rid : encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + const jitsi = useMemo(() => { if (isEnabledTokenAuth && ! accessToken) { return; } - const rname = useHashName ? uniqueID + rid : encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); const jitsiRoomName = prefix + rname + sufix; return new JitsiBridge({ @@ -122,7 +123,7 @@ const CallJitsWithData = ({ rid }) => { desktopSharingChromeExtId, name: user.name || user.username, }, HEARTBEAT); - }, [accessToken, desktopSharingChromeExtId, domain, isEnabledTokenAuth, openNewWindow, prefix, rid, room.name, room.t, room.usernames, ssl, sufix, uniqueID, useHashName, user.name, user.username]); + }, [accessToken, desktopSharingChromeExtId, domain, isEnabledTokenAuth, openNewWindow, prefix, rname, ssl, sufix, user.name, user.username]); const testAndHandleTimeout = useMutableCallback(() => { if (new Date() - new Date(room.jitsiTimeout) > TIMEOUT) { From b37feea7f91328abf13ef12c0e56f4054c6cda71 Mon Sep 17 00:00:00 2001 From: yash-rajpal <58601732+yash-rajpal@users.noreply.github.com> Date: Fri, 5 Mar 2021 04:43:36 +0530 Subject: [PATCH 013/149] [IMPROVE] Close Call contextual bar after starting Jitsi call (#21004) Co-authored-by: Tasso Evangelista --- client/views/room/contextualBar/Call/Jitsi/CallJitsi.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js index a8aa73d478d8..ed2ef75d7094 100644 --- a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js +++ b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js @@ -153,6 +153,9 @@ const CallJitsWithData = ({ rid }) => { const handleYes = useMutableCallback(() => { setAccepted(true); + if (openNewWindow) { + handleClose(); + } }); useLayoutEffect(() => { From e802fa59ce48fdee93a5ef56136b076acb213d87 Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Sat, 6 Mar 2021 23:25:28 -0300 Subject: [PATCH 014/149] [IMPROVE] Better new channel popover (#21018) * [IMPROVE] Better new channel popover * better naming * better export * Separate create room list item --- client/sidebar/header/actions/CreateRoom.js | 102 ++---------------- .../sidebar/header/actions/CreateRoomList.js | 79 ++++++++++++++ .../header/actions/CreateRoomListItem.js | 21 ++++ 3 files changed, 111 insertions(+), 91 deletions(-) create mode 100644 client/sidebar/header/actions/CreateRoomList.js create mode 100644 client/sidebar/header/actions/CreateRoomListItem.js diff --git a/client/sidebar/header/actions/CreateRoom.js b/client/sidebar/header/actions/CreateRoom.js index b07afa6b7b1c..524459c4e1ac 100644 --- a/client/sidebar/header/actions/CreateRoom.js +++ b/client/sidebar/header/actions/CreateRoom.js @@ -1,106 +1,26 @@ -import React, { useMemo } from 'react'; +import React from 'react'; import { Sidebar } from '@rocket.chat/fuselage'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; -import { popover, modal } from '../../../../app/ui-utils'; -import { useAtLeastOnePermission, usePermission } from '../../../contexts/AuthorizationContext'; -import { useSetting } from '../../../contexts/SettingsContext'; -import { useTranslation } from '../../../contexts/TranslationContext'; -import { useSetModal } from '../../../contexts/ModalContext'; -import CreateChannel from '../CreateChannel'; +import { createTemplateForComponent } from '../../../reactAdapters'; +import { popover } from '../../../../app/ui-utils'; +import { useAtLeastOnePermission } from '../../../contexts/AuthorizationContext'; const CREATE_ROOM_PERMISSIONS = ['create-c', 'create-p', 'create-d', 'start-discussion', 'start-discussion-other-user']; -const CREATE_CHANNEL_PERMISSIONS = ['create-c', 'create-p']; +const CreateRoomList = createTemplateForComponent('CreateRoomList', () => import('./CreateRoomList')); -const CREATE_DISCUSSION_PERMISSIONS = ['start-discussion', 'start-discussion-other-user']; - -const openPopover = (e, items) => popover.open({ - columns: [ - { - groups: [ - { - items, - }, - ], - }, - ], +const config = (e) => ({ + template: CreateRoomList, + data: { + options: [], + }, currentTarget: e.currentTarget, offsetVertical: e.currentTarget.clientHeight + 10, }); -const useReactModal = (setModal, Component) => useMutableCallback((e) => { - e.preventDefault(); - - const handleClose = () => { - setModal(null); - }; - - setModal(() => ); -}); - -const useAction = (title, content) => useMutableCallback((e) => { - e.preventDefault(); - modal.open({ - title, - content, - data: { - onCreate() { - modal.close(); - }, - }, - modifier: 'modal', - showConfirmButton: false, - showCancelButton: false, - confirmOnEnter: false, - }); -}); - const CreateRoom = (props) => { - const t = useTranslation(); - const setModal = useSetModal(); - const showCreate = useAtLeastOnePermission(CREATE_ROOM_PERMISSIONS); - - const canCreateChannel = useAtLeastOnePermission(CREATE_CHANNEL_PERMISSIONS); - const canCreateDirectMessages = usePermission('create-d'); - const canCreateDiscussion = useAtLeastOnePermission(CREATE_DISCUSSION_PERMISSIONS); - - const createChannel = useReactModal(setModal, CreateChannel); - const createDirectMessage = useAction(t('Direct_Messages'), 'CreateDirectMessage'); - const createDiscussion = useAction(t('Discussion_title'), 'CreateDiscussion'); - - const discussionEnabled = useSetting('Discussion_enabled'); - - const items = useMemo(() => [ - canCreateChannel && { - icon: 'hashtag', - name: t('Channel'), - qa: 'sidebar-create-channel', - action: createChannel, - }, - canCreateDirectMessages && { - icon: 'team', - name: t('Direct_Messages'), - qa: 'sidebar-create-dm', - action: createDirectMessage, - }, - discussionEnabled && canCreateDiscussion && { - icon: 'discussion', - name: t('Discussion'), - qa: 'sidebar-create-discussion', - action: createDiscussion, - }, - ].filter(Boolean), [canCreateChannel, canCreateDirectMessages, canCreateDiscussion, createChannel, createDirectMessage, createDiscussion, discussionEnabled, t]); - - const onClick = useMutableCallback((e) => { - if (items.length === 1) { - return items[0].action(e); - } - openPopover(e, items); - }); + const onClick = (e) => { popover.open(config(e)); }; return showCreate ? : null; }; diff --git a/client/sidebar/header/actions/CreateRoomList.js b/client/sidebar/header/actions/CreateRoomList.js new file mode 100644 index 000000000000..f0e28758db0b --- /dev/null +++ b/client/sidebar/header/actions/CreateRoomList.js @@ -0,0 +1,79 @@ +import React from 'react'; +import { Box, Margins } from '@rocket.chat/fuselage'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; + + +import { modal } from '../../../../app/ui-utils'; +import { useTranslation } from '../../../contexts/TranslationContext'; +import { useAtLeastOnePermission, usePermission } from '../../../contexts/AuthorizationContext'; +import { useSetting } from '../../../contexts/SettingsContext'; +import { useSetModal } from '../../../contexts/ModalContext'; +import CreateChannel from '../CreateChannel'; +import CreateRoomListItem from './CreateRoomListItem'; + +const CREATE_CHANNEL_PERMISSIONS = ['create-c', 'create-p']; + +const CREATE_DISCUSSION_PERMISSIONS = ['start-discussion', 'start-discussion-other-user']; + +const style = { + textTransform: 'uppercase', +}; + +const useAction = (title, content) => useMutableCallback((e) => { + e.preventDefault(); + modal.open({ + title, + content, + data: { + onCreate() { + modal.close(); + }, + }, + modifier: 'modal', + showConfirmButton: false, + showCancelButton: false, + confirmOnEnter: false, + }); +}); + +const useReactModal = (setModal, Component) => useMutableCallback((e) => { + e.preventDefault(); + + const handleClose = () => { + setModal(null); + }; + + setModal(() => ); +}); + +function CreateRoomList() { + const t = useTranslation(); + const setModal = useSetModal(); + + const canCreateChannel = useAtLeastOnePermission(CREATE_CHANNEL_PERMISSIONS); + const canCreateDirectMessages = usePermission('create-d'); + const canCreateDiscussion = useAtLeastOnePermission(CREATE_DISCUSSION_PERMISSIONS); + + const createChannel = useReactModal(setModal, CreateChannel); + const createDirectMessage = useAction(t('Direct_Messages'), 'CreateDirectMessage'); + const createDiscussion = useAction(t('Discussion_title'), 'CreateDiscussion'); + + const discussionEnabled = useSetting('Discussion_enabled'); + + return
+ + {t('Create_new')} + +
    + + {canCreateChannel && } + {canCreateDirectMessages && } + {discussionEnabled && canCreateDiscussion && } + +
+
; +} + +export default CreateRoomList; diff --git a/client/sidebar/header/actions/CreateRoomListItem.js b/client/sidebar/header/actions/CreateRoomListItem.js new file mode 100644 index 000000000000..47a27ba1a723 --- /dev/null +++ b/client/sidebar/header/actions/CreateRoomListItem.js @@ -0,0 +1,21 @@ +import React from 'react'; +import { Icon, Box, Flex, Margins } from '@rocket.chat/fuselage'; + +export default function CreateRoomListItem({ text, icon, action }) { + return + + + + + + + + + {text} + + + + + + ; +} From 3901dcec3c17de6293014ad9d1fb28aded170d4f Mon Sep 17 00:00:00 2001 From: Douglas Fabris Date: Mon, 8 Mar 2021 09:30:34 -0300 Subject: [PATCH 015/149] [FIX] Missing spaces on attachment (#21020) --- .../Message/Attachments/DefaultAttachment.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/components/Message/Attachments/DefaultAttachment.tsx b/client/components/Message/Attachments/DefaultAttachment.tsx index fa3fb03a3d97..f67faa1540cd 100644 --- a/client/components/Message/Attachments/DefaultAttachment.tsx +++ b/client/components/Message/Attachments/DefaultAttachment.tsx @@ -57,7 +57,15 @@ export const DefaultAttachment: FC = (attachment) => { {!collapsed && <> {attachment.text && {applyMardownFor('text', attachment.text)}} {/* {attachment.fields && ({ ...rest, value: })) : attachment.fields} />} */} - {attachment.fields && ({ ...rest, value: }))} />} + {attachment.fields && { + const cleanValue = (value as string).replace(/(.*)/g, (line: string) => { + if (line.trim() === '') { + return `${ line }
`; + } + return `${ line } `; + }); + return { ...rest, value: }; + })} />} {attachment.image_url && } {/* DEPRECATED */} {isActionAttachment(attachment) && } From 31552ca0093cbff518c29e3a8d1236fe564b9a2c Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Wed, 10 Mar 2021 14:00:25 -0600 Subject: [PATCH 016/149] Chore: Remove `new Buffer` in favor of `Buffer.from` (#20918) --- app/assets/server/assets.js | 2 +- app/custom-sounds/server/methods/uploadCustomSound.js | 2 +- app/emoji-custom/server/methods/uploadEmojiCustom.js | 2 +- app/importer-hipchat/server/importer.js | 2 +- app/importer-slack-users/server/importer.js | 2 +- app/importer/server/classes/ImporterBase.js | 4 ++-- app/importer/server/methods/uploadImportFile.js | 2 +- app/irc/server/servers/RFC2813/index.js | 4 ++-- app/ldap/server/ldap.js | 4 ++-- app/lib/server/functions/setUserAvatar.js | 2 +- app/meteor-accounts-saml/server/lib/ServiceProvider.ts | 2 +- app/meteor-accounts-saml/server/lib/Utils.ts | 2 +- app/webdav/server/methods/uploadFileToWebdav.ts | 2 +- server/routes/avatar/utils.js | 2 +- server/startup/migrations/v002.js | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/assets/server/assets.js b/app/assets/server/assets.js index 8864c8e372fa..cd9c0f0bc6b6 100644 --- a/app/assets/server/assets.js +++ b/app/assets/server/assets.js @@ -209,7 +209,7 @@ export const RocketChatAssets = new class { }); } - const file = new Buffer(binaryContent, 'binary'); + const file = Buffer.from(binaryContent, 'binary'); if (assets[asset].constraints.width || assets[asset].constraints.height) { const dimensions = sizeOf(file); if (assets[asset].constraints.width && assets[asset].constraints.width !== dimensions.width) { diff --git a/app/custom-sounds/server/methods/uploadCustomSound.js b/app/custom-sounds/server/methods/uploadCustomSound.js index ebeecefb1e22..3366bdf636a6 100644 --- a/app/custom-sounds/server/methods/uploadCustomSound.js +++ b/app/custom-sounds/server/methods/uploadCustomSound.js @@ -11,7 +11,7 @@ Meteor.methods({ throw new Meteor.Error('not_authorized'); } - const file = new Buffer(binaryContent, 'binary'); + const file = Buffer.from(binaryContent, 'binary'); const rs = RocketChatFile.bufferToStream(file); RocketChatFileCustomSoundsInstance.deleteFile(`${ soundData._id }.${ soundData.extension }`); diff --git a/app/emoji-custom/server/methods/uploadEmojiCustom.js b/app/emoji-custom/server/methods/uploadEmojiCustom.js index 1f3d4cf4d1c4..0302aa8caa4a 100644 --- a/app/emoji-custom/server/methods/uploadEmojiCustom.js +++ b/app/emoji-custom/server/methods/uploadEmojiCustom.js @@ -15,7 +15,7 @@ Meteor.methods({ emojiData.name = limax(emojiData.name, { replacement: '_' }); // delete aliases for notification purposes. here, it is a string rather than an array delete emojiData.aliases; - const file = new Buffer(binaryContent, 'binary'); + const file = Buffer.from(binaryContent, 'binary'); const rs = RocketChatFile.bufferToStream(file); RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${ emojiData.name }.${ emojiData.extension }`)); diff --git a/app/importer-hipchat/server/importer.js b/app/importer-hipchat/server/importer.js index 49f6b8e2e4d0..acf521f2305d 100644 --- a/app/importer-hipchat/server/importer.js +++ b/app/importer-hipchat/server/importer.js @@ -31,7 +31,7 @@ export class HipChatImporter extends Base { super.prepare(dataURI, sentContentType, fileName, skipTypeCheck); const { image } = RocketChatFile.dataURIParse(dataURI); // const contentType = ref.contentType; - const zip = new this.AdmZip(new Buffer(image, 'base64')); + const zip = new this.AdmZip(Buffer.from(image, 'base64')); const zipEntries = zip.getEntries(); let tempRooms = []; let tempUsers = []; diff --git a/app/importer-slack-users/server/importer.js b/app/importer-slack-users/server/importer.js index 0024842e4361..8f7068caf65c 100644 --- a/app/importer-slack-users/server/importer.js +++ b/app/importer-slack-users/server/importer.js @@ -26,7 +26,7 @@ export class SlackUsersImporter extends Base { super.updateProgress(ProgressStep.PREPARING_USERS); const uriResult = RocketChatFile.dataURIParse(dataURI); - const buf = new Buffer(uriResult.image, 'base64'); + const buf = Buffer.from(uriResult.image, 'base64'); const parsed = this.csvParser(buf.toString()); parsed.forEach((user, index) => { diff --git a/app/importer/server/classes/ImporterBase.js b/app/importer/server/classes/ImporterBase.js index a8c5c3cea55d..df2052eb8d6d 100644 --- a/app/importer/server/classes/ImporterBase.js +++ b/app/importer/server/classes/ImporterBase.js @@ -140,7 +140,7 @@ export class Base { */ prepareUsingLocalFile(fullFilePath) { const file = fs.readFileSync(fullFilePath); - const buffer = Buffer.isBuffer(file) ? file : new Buffer(file); + const buffer = Buffer.isBuffer(file) ? file : Buffer.from(file); const { contentType } = this.importRecord; const fileName = this.importRecord.file; @@ -163,7 +163,7 @@ export class Base { prepare(dataURI, sentContentType, fileName, skipTypeCheck) { this.collection.remove({}); if (!skipTypeCheck) { - const fileType = this.getFileType(new Buffer(dataURI.split(',')[1], 'base64')); + const fileType = this.getFileType(Buffer.from(dataURI.split(',')[1], 'base64')); this.logger.debug('Uploaded file information is:', fileType); this.logger.debug('Expected file type is:', this.info.mimeType); diff --git a/app/importer/server/methods/uploadImportFile.js b/app/importer/server/methods/uploadImportFile.js index 0db5bba69bf2..bdd9aefb178c 100644 --- a/app/importer/server/methods/uploadImportFile.js +++ b/app/importer/server/methods/uploadImportFile.js @@ -34,7 +34,7 @@ Meteor.methods({ importer.instance.startFileUpload(newFileName, contentType); // Save the file on the File Store - const file = new Buffer(binaryContent, 'base64'); + const file = Buffer.from(binaryContent, 'base64'); const readStream = RocketChatFile.bufferToStream(file); const writeStream = RocketChatImportFileInstance.createWriteStream(newFileName, contentType); diff --git a/app/irc/server/servers/RFC2813/index.js b/app/irc/server/servers/RFC2813/index.js index 1325da3851f2..6d6335c4017b 100644 --- a/app/irc/server/servers/RFC2813/index.js +++ b/app/irc/server/servers/RFC2813/index.js @@ -18,7 +18,7 @@ class RFC2813 { this.serverPrefix = null; // Hold the buffer while receiving - this.receiveBuffer = new Buffer(''); + this.receiveBuffer = Buffer.from(''); } /** @@ -136,7 +136,7 @@ class RFC2813 { } // Reset the buffer - this.receiveBuffer = new Buffer(''); + this.receiveBuffer = Buffer.from(''); lines.forEach((line) => { if (line.length && !line.startsWith('\a')) { diff --git a/app/ldap/server/ldap.js b/app/ldap/server/ldap.js index 63c5951b43d2..0dceec62d886 100644 --- a/app/ldap/server/ldap.js +++ b/app/ldap/server/ldap.js @@ -258,14 +258,14 @@ export default class LDAP { if (attribute) { filter = new this.ldapjs.filters.EqualityFilter({ attribute, - value: new Buffer(id, 'hex'), + value: Buffer.from(id, 'hex'), }); } else { const filters = []; Unique_Identifier_Field.forEach((item) => { filters.push(new this.ldapjs.filters.EqualityFilter({ attribute: item, - value: new Buffer(id, 'hex'), + value: Buffer.from(id, 'hex'), })); }); diff --git a/app/lib/server/functions/setUserAvatar.js b/app/lib/server/functions/setUserAvatar.js index bae4c45809af..ecc6e88e895f 100644 --- a/app/lib/server/functions/setUserAvatar.js +++ b/app/lib/server/functions/setUserAvatar.js @@ -51,7 +51,7 @@ export const setUserAvatar = function(user, dataURI, contentType, service) { contentType = fileData.contentType; } - const buffer = new Buffer(image, encoding); + const buffer = Buffer.from(image, encoding); const fileStore = FileUpload.getStore('Avatars'); fileStore.deleteByName(user.username); diff --git a/app/meteor-accounts-saml/server/lib/ServiceProvider.ts b/app/meteor-accounts-saml/server/lib/ServiceProvider.ts index 3733821bcd55..5ab421c7903d 100644 --- a/app/meteor-accounts-saml/server/lib/ServiceProvider.ts +++ b/app/meteor-accounts-saml/server/lib/ServiceProvider.ts @@ -182,7 +182,7 @@ export class SAMLServiceProvider { } public validateResponse(samlResponse: string, callback: IResponseValidateCallback): void { - const xml = new Buffer(samlResponse, 'base64').toString('utf8'); + const xml = Buffer.from(samlResponse, 'base64').toString('utf8'); const parser = new ResponseParser(this.serviceProviderOptions); return parser.validate(xml, callback); diff --git a/app/meteor-accounts-saml/server/lib/Utils.ts b/app/meteor-accounts-saml/server/lib/Utils.ts index 86aa5c7cf310..9acd3331a4b3 100644 --- a/app/meteor-accounts-saml/server/lib/Utils.ts +++ b/app/meteor-accounts-saml/server/lib/Utils.ts @@ -152,7 +152,7 @@ export class SAMLUtils { } public static inflateXml(base64Data: string, successCallback: (xml: string) => void, errorCallback: (err: string | object | null) => void): void { - const buffer = new Buffer(base64Data, 'base64'); + const buffer = Buffer.from(base64Data, 'base64'); zlib.inflateRaw(buffer, (err, decoded) => { if (err) { this.log(`Error while inflating. ${ err }`); diff --git a/app/webdav/server/methods/uploadFileToWebdav.ts b/app/webdav/server/methods/uploadFileToWebdav.ts index a7f295205e5f..b818579dcf1d 100644 --- a/app/webdav/server/methods/uploadFileToWebdav.ts +++ b/app/webdav/server/methods/uploadFileToWebdav.ts @@ -24,7 +24,7 @@ Meteor.methods({ } const uploadFolder = 'Rocket.Chat Uploads/'; - const buffer = new Buffer(fileData); + const buffer = Buffer.from(fileData); try { const cred = getWebdavCredentials(account); diff --git a/server/routes/avatar/utils.js b/server/routes/avatar/utils.js index 0e75fc52f530..21d1a742f25c 100644 --- a/server/routes/avatar/utils.js +++ b/server/routes/avatar/utils.js @@ -15,7 +15,7 @@ export const serveAvatar = (avatar, format, res) => { if (['png', 'jpg', 'jpeg'].includes(format)) { res.setHeader('Content-Type', `image/${ format }`); - sharp(new Buffer(avatar)) + sharp(Buffer.from(avatar)) .toFormat(format) .pipe(res); return; diff --git a/server/startup/migrations/v002.js b/server/startup/migrations/v002.js index cf80409dd16c..005fb77f23d8 100644 --- a/server/startup/migrations/v002.js +++ b/server/startup/migrations/v002.js @@ -29,7 +29,7 @@ Migrations.add({ const dataURI = avatars[service].blob; const { image, contentType } = RocketChatFile.dataURIParse(dataURI); - const rs = RocketChatFile.bufferToStream(new Buffer(image, 'base64')); + const rs = RocketChatFile.bufferToStream(Buffer.from(image, 'base64')); const fileStore = FileUpload.getStore('Avatars'); fileStore.deleteByName(user.username); From 26c79d37598967f9d3496c14d69deda733de4430 Mon Sep 17 00:00:00 2001 From: Daniel Martinez Date: Thu, 11 Mar 2021 14:23:12 -0300 Subject: [PATCH 017/149] Chore: Add tests for Meteor methods (#20901) --- tests/end-to-end/api/24-methods.js | 1102 +++++++++++++++++++++++++++- 1 file changed, 1098 insertions(+), 4 deletions(-) diff --git a/tests/end-to-end/api/24-methods.js b/tests/end-to-end/api/24-methods.js index 91c6cc3346c4..ba319a2926fd 100644 --- a/tests/end-to-end/api/24-methods.js +++ b/tests/end-to-end/api/24-methods.js @@ -1,11 +1,891 @@ import { expect } from 'chai'; import { getCredentials, request, methodCall, api, credentials } from '../../data/api-data.js'; +import { updatePermission } from '../../data/permissions.helper.js'; + describe('Meteor.methods', function() { this.retries(0); - before((done) => getCredentials(done)); + before((done) => getCredentials(done)); + + describe('[@getThreadMessages]', () => { + let rid = false; + let firstMessage = false; + + let channelName = false; + + before('create room', (done) => { + channelName = `methods-test-channel-${ Date.now() }`; + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('send sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + firstMessage = res.body.message; + }) + .end(done); + }); + + before('send sample message into thread', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Second Sample message', + rid, + tmid: firstMessage._id, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('getThreadMessages')) + .send({ + message: JSON.stringify({ + method: 'getThreadMessages', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return message thread', (done) => { + request.post(methodCall('getThreadMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getThreadMessages', + params: [{ tmid: firstMessage._id }], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.equal(2); + }) + .end(done); + }); + }); + + describe('[@getMessages]', () => { + let rid = false; + let firstMessage = false; + let lastMessage = false; + + let channelName = false; + + before('create room', (done) => { + channelName = `methods-test-channel-${ Date.now() }`; + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('send sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + firstMessage = res.body.message; + }) + .end(done); + }); + + before('send another sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Second Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + lastMessage = res.body.message; + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('getMessages')) + .send({ + message: JSON.stringify({ + method: 'getMessages', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if msgIds not specified', (done) => { + request.post(methodCall('getMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getMessages', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('error').that.is.an('object'); + expect(data.error).to.have.a.property('sanitizedError'); + expect(data.error.sanitizedError).to.have.property('error', 400); + }) + .end(done); + }); + + it('should return the first message', (done) => { + request.post(methodCall('getMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getMessages', + params: [[firstMessage._id]], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.equal(1); + }) + .end(done); + }); + + it('should return both messages', (done) => { + request.post(methodCall('getMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getMessages', + params: [[firstMessage._id, lastMessage._id]], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.equal(2); + }) + .end(done); + }); + }); + + describe('[@loadHistory]', () => { + let rid = false; + let postMessageDate = false; + let lastMessage = false; + + let channelName = false; + + before('create room', (done) => { + channelName = `methods-test-channel-${ Date.now() }`; + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('send sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + postMessageDate = { $date: new Date().getTime() }; + }) + .end(done); + }); + + before('send another sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Second Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + lastMessage = res.body.message; + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('loadHistory')) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if roomId not specified', (done) => { + request.post(methodCall('loadHistory')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('error').that.is.an('object'); + expect(data.error).to.have.a.property('sanitizedError'); + expect(data.error.sanitizedError).to.have.property('error', 400); + }) + .end(done); + }); + + it('should return all messages for the specified room', (done) => { + request.post(methodCall('loadHistory')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [rid], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(2); + }) + .end(done); + }); + + it('should return only the first message', (done) => { + request.post(methodCall('loadHistory')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [rid, postMessageDate], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(1); + }) + .end(done); + }); + + it('should return only one message when limit = 1', (done) => { + request.post(methodCall('loadHistory')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [rid, { $date: new Date().getTime() }, 1], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(1); + }) + .end(done); + }); + + it('should return the messages since the last one', (done) => { + request.post(methodCall('loadHistory')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadHistory', + params: [rid, null, 20, lastMessage], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(2); + }) + .end(done); + }); + }); + + describe('[@loadNextMessages]', () => { + let rid = false; + let postMessageDate = false; + const startDate = { $date: new Date().getTime() }; + + let channelName = false; + + before('create room', (done) => { + channelName = `methods-test-channel-${ Date.now() }`; + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('send sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + postMessageDate = { $date: new Date().getTime() }; + }) + .end(done); + }); + + before('send another sample message', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Second Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('loadNextMessages')) + .send({ + message: JSON.stringify({ + method: 'loadNextMessages', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if roomId not specified', (done) => { + request.post(methodCall('loadNextMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadNextMessages', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('error').that.is.an('object'); + expect(data.error).to.have.a.property('sanitizedError'); + expect(data.error.sanitizedError).to.have.property('error', 400); + }) + .end(done); + }); + + it('should return all messages for the specified room', (done) => { + request.post(methodCall('loadNextMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadNextMessages', + params: [rid], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(2); + }) + .end(done); + }); + + it('should return only the latest message', (done) => { + request.post(methodCall('loadNextMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadNextMessages', + params: [rid, postMessageDate], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(1); + }) + .end(done); + }); + + it('should return only one message when limit = 1', (done) => { + request.post(methodCall('loadNextMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadNextMessages', + params: [rid, startDate, 1], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('messages').that.is.an('array'); + expect(data.result.messages.length).to.equal(1); + }) + .end(done); + }); + }); + + describe('[@getUsersOfRoom]', () => { + let testUser; + let rid = false; + + let channelName = false; + + before('create room', (done) => { + channelName = `methods-test-channel-${ Date.now() }`; + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('create test user', (done) => { + const username = `user.test.${ Date.now() }`; + const email = `${ username }@rocket.chat`; + request.post(api('users.create')) + .set(credentials) + .send({ email, name: username, username, password: username }) + .end((err, res) => { + testUser = res.body.user; + done(); + }); + }); + + before('add user to room', (done) => { + request.post(api('groups.invite')) + .set(credentials) + .send({ + roomId: rid, + userId: testUser._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('getUsersOfRoom')) + .send({ + message: JSON.stringify({ + method: 'getUsersOfRoom', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if roomId not specified', (done) => { + request.post(methodCall('getUsersOfRoom')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getUsersOfRoom', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('error').that.is.an('object'); + expect(data.error).to.have.a.property('sanitizedError'); + expect(data.error.sanitizedError).to.have.property('error', 400); + }) + .end(done); + }); + + it('should return the users for the specified room', (done) => { + request.post(methodCall('getUsersOfRoom')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getUsersOfRoom', + params: [rid], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('total', 2); + }) + .end(done); + }); + }); + + describe('[@getUserRoles]', () => { + it('should fail if not logged in', (done) => { + request.post(methodCall('getUserRoles')) + .send({ + message: JSON.stringify({ + method: 'getUserRoles', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return the roles for the current user', (done) => { + request.post(methodCall('getUserRoles')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'getUserRoles', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + }) + .end(done); + }); + }); + + describe('[@listCustomUserStatus]', () => { + it('should fail if not logged in', (done) => { + request.post(methodCall('listCustomUserStatus')) + .send({ + message: JSON.stringify({ + method: 'listCustomUserStatus', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return custom status for the current user', (done) => { + request.post(methodCall('listCustomUserStatus')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'listCustomUserStatus', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + }) + .end(done); + }); + }); + + describe('[@permissions:get]', () => { + const date = { + $date: new Date().getTime(), + }; + + it('should fail if not logged in', (done) => { + request.post(methodCall('permissions:get')) + .send({ + message: JSON.stringify({ + method: 'permissions/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return all permissions', (done) => { + request.post(methodCall('permissions:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'permissions/get', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.be.above(1); + }) + .end(done); + }); + + it('should return all permissions after the given date', (done) => { + request.post(methodCall('permissions:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'permissions/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('update').that.is.an('array'); + }) + .end(done); + }); + }); describe('[@loadMissedMessages]', () => { let rid = false; @@ -16,7 +896,7 @@ describe('Meteor.methods', function() { const channelName = `methods-test-channel-${ Date.now() }`; - before('@loadMissedMessages', (done) => { + before('create test group', (done) => { request.post(api('groups.create')) .set(credentials) .send({ @@ -35,7 +915,7 @@ describe('Meteor.methods', function() { .end(done); }); - before('@loadMissedMessages', (done) => { + before('send sample message', (done) => { request.post(api('chat.sendMessage')) .set(credentials) .send({ @@ -53,7 +933,7 @@ describe('Meteor.methods', function() { .end(done); }); - before('@loadMissedMessages', (done) => { + before('send another sample message', (done) => { request.post(api('chat.sendMessage')) .set(credentials) .send({ @@ -189,4 +1069,218 @@ describe('Meteor.methods', function() { .end(done); }); }); + + describe('[@public-settings:get]', () => { + const date = { + $date: new Date().getTime(), + }; + + it('should fail if not logged in', (done) => { + request.post(methodCall('public-settings:get')) + .send({ + message: JSON.stringify({ + method: 'public-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return the list of public settings', (done) => { + request.post(methodCall('public-settings:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'public-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + }) + .end(done); + }); + }); + + describe('[@private-settings:get]', () => { + const date = { + $date: 0, + }; + + it('should fail if not logged in', (done) => { + request.post(methodCall('private-settings:get')) + .send({ + message: JSON.stringify({ + method: 'private-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return nothing when user doesnt have any permission', (done) => { + updatePermission('view-privileged-setting', []) + .then(updatePermission('edit-privileged-setting', [])) + .then(updatePermission('manage-selected-settings', [])) + .then(() => { + request.post(methodCall('private-settings:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'private-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.be.equal(0); + }) + .end(done); + }); + }); + + it('should return properties when user has any related permissions', (done) => { + updatePermission('view-privileged-setting', ['admin']).then(() => { + request.post(methodCall('private-settings:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'private-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('update').that.is.an('array'); + expect(data.result.update.length).to.not.equal(0); + }) + .end(done); + }); + }); + + it('should return properties when user has all related permissions', (done) => { + updatePermission('view-privileged-setting', ['admin']) + .then(updatePermission('edit-privileged-setting', ['admin'])) + .then(updatePermission('manage-selected-settings', ['admin'])) + .then(() => { + request.post(methodCall('private-settings:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'private-settings/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('update').that.is.an('array'); + expect(data.result.update.length).to.not.equal(0); + }) + .end(done); + }); + }); + }); + + describe('[@subscriptions:get]', () => { + const date = { + $date: new Date().getTime(), + }; + + it('should fail if not logged in', (done) => { + request.post(methodCall('subscriptions:get')) + .send({ + message: JSON.stringify({ + method: 'subscriptions/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return all subscriptions', (done) => { + request.post(methodCall('subscriptions:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'subscriptions/get', + params: [], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('array'); + expect(data.result.length).to.be.above(1); + }) + .end(done); + }); + + it('should return all subscriptions after the given date', (done) => { + request.post(methodCall('subscriptions:get')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'subscriptions/get', + params: [date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.an('object'); + expect(data.result).to.have.a.property('update').that.is.an('array'); + }) + .end(done); + }); + }); }); From 73ea7a1124cd5346c51205db3d0770a57e76eb4c Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 11 Mar 2021 16:45:53 -0300 Subject: [PATCH 018/149] Add AWS region to CI --- .github/workflows/build_and_test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index e946ee7ee7fd..6faffea2b518 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -394,6 +394,7 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: 'us-east-1' GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }} REDHAT_REGISTRY_PID: ${{ secrets.REDHAT_REGISTRY_PID }} REDHAT_REGISTRY_KEY: ${{ secrets.REDHAT_REGISTRY_KEY }} From 04c008e8828785ee22e875229d7dc3d22ff7c67b Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Fri, 12 Mar 2021 15:31:03 -0600 Subject: [PATCH 019/149] Improve: Increase testing coverage (#21015) --- app/settings/server/raw.tests.js | 47 ++++++++ client/lib/minimongo/comparisons.spec.ts | 130 +++++++++++++++++++++++ package-lock.json | 51 +++++---- package.json | 2 + 4 files changed, 212 insertions(+), 18 deletions(-) create mode 100644 app/settings/server/raw.tests.js create mode 100644 client/lib/minimongo/comparisons.spec.ts diff --git a/app/settings/server/raw.tests.js b/app/settings/server/raw.tests.js new file mode 100644 index 000000000000..7a9d6bccd6cf --- /dev/null +++ b/app/settings/server/raw.tests.js @@ -0,0 +1,47 @@ +/* eslint-env mocha */ +import chai, { expect } from 'chai'; +import spies from 'chai-spies'; +import rewire from 'rewire'; + +chai.use(spies); + +describe('Raw Settings', () => { + let rawModule; + const cache = new Map(); + + before('rewire deps', () => { + const spy = chai.spy(async (id) => { + if (id === '1') { return 'some-setting-value'; } + return null; + }); + + rawModule = rewire('./raw'); + rawModule.__set__('setFromDB', spy); + rawModule.__set__('cache', cache); + }); + + it('should get the value from database when it isnt in cache', async () => { + const setting = await rawModule.getValue('1'); + + expect(setting).to.be.equal('some-setting-value'); + }); + + it('should get the value from cache when its available', async () => { + cache.set('2', 'supeer-setting'); + const setting = await rawModule.getValue('2'); + + expect(setting).to.be.equal('supeer-setting'); + }); + + it('should update the value in cache', async () => { + await rawModule.updateValue('2', { value: 'not-super-setting' }); + + expect(cache.get('2')).to.be.equal('not-super-setting'); + }); + + it('should not update the setting if the new value is undefined', async () => { + await rawModule.updateValue('2', {}); + + expect(cache.get('2')).to.be.equal('not-super-setting'); + }); +}); diff --git a/client/lib/minimongo/comparisons.spec.ts b/client/lib/minimongo/comparisons.spec.ts new file mode 100644 index 000000000000..488e091f4e8c --- /dev/null +++ b/client/lib/minimongo/comparisons.spec.ts @@ -0,0 +1,130 @@ +import chai from 'chai'; +import { describe, it } from 'mocha'; + +import { equals, isObject, flatSome, some, isEmptyArray } from './comparisons'; + +describe('Comparisons service', () => { + describe('equals', () => { + it('should return true if two numbers are equal', () => { + chai.expect(equals(1, 1)).to.be.equal(true); + }); + + it('should return false if arguments are null or undefined', () => { + chai.expect(equals(undefined, null)).to.be.equal(false); + chai.expect(equals(null, undefined)).to.be.equal(false); + }); + + it('should return false if arguments arent objects and they are not the same', () => { + chai.expect(equals('not', 'thesame')).to.be.equal(false); + }); + + it('should return true if date objects provided have the same value', () => { + const currentDate = new Date(); + + chai.expect(equals(currentDate, currentDate)).to.be.equal(true); + }); + + it('should return true if 2 equal UInt8Array are provided', () => { + const arr1 = new Uint8Array([1, 2]); + const arr2 = new Uint8Array([1, 2]); + + chai.expect(equals(arr1, arr2)).to.be.equal(true); + }); + + it('should return true if 2 equal arrays are provided', () => { + const arr1 = [1, 2, 4]; + const arr2 = [1, 2, 4]; + + chai.expect(equals(arr1, arr2)).to.be.equal(true); + }); + + it('should return false if 2 arrays with different length are provided', () => { + const arr1 = [1, 4, 5]; + const arr2 = [1, 4, 5, 7]; + + chai.expect(equals(arr1, arr2)).to.be.equal(false); + }); + + it('should return true if the objects provided are "equal"', () => { + const obj = { a: 1 }; + const obj2 = obj; + + chai.expect(equals(obj, obj2)).to.be.equal(true); + }); + + it('should return true if both objects have the same keys', () => { + const obj = { a: 1 }; + const obj2 = { a: 1 }; + + chai.expect(equals(obj, obj2)).to.be.equal(true); + }); + }); + + describe('isObject', () => { + it('should return true if value is an object or function', () => { + const obj = {}; + const func = (a: any): any => a; + + chai.expect(isObject(obj)).to.be.equal(true); + chai.expect(isObject(func)).to.be.equal(true); + }); + + it('should return false for other data types', () => { + chai.expect(isObject(1)).to.be.equal(false); + chai.expect(isObject(true)).to.be.equal(false); + chai.expect(isObject('212')).to.be.equal(false); + }); + }); + + describe('flatSome', () => { + it('should run .some on array', () => { + const arr = [1, 2, 4, 6, 9]; + const isEven = (v: number): boolean => v % 2 === 0; + + chai.expect(flatSome(arr, isEven)).to.be.equal(true); + }); + + it('should run the function on the value when its not an array', () => { + const val = 1; + const isEven = (v: number): boolean => v % 2 === 0; + + chai.expect(flatSome(val, isEven)).to.be.equal(false); + }); + }); + + describe('some', () => { + it('should run .some on array', () => { + const arr = [1, 2, 4, 6, 9]; + const isEven = (v: number | number[]): boolean => { + if (Array.isArray(v)) { return false; } + return v % 2 === 0; + }; + + chai.expect(some(arr, isEven)).to.be.equal(true); + }); + + it('should run the function on the value when its not an array', () => { + const val = 1; + const isEven = (v: number | number[]): boolean => { + if (Array.isArray(v)) { return false; } + return v % 2 === 0; + }; + + chai.expect(some(val, isEven)).to.be.equal(false); + }); + }); + + describe('isEmptyArray', () => { + it('should return true if array is empty', () => { + chai.expect(isEmptyArray([])).to.be.equal(true); + }); + + it('should return false if value is not an array', () => { + chai.expect(isEmptyArray(1)).to.be.equal(false); + }); + + it('should return false if array is not empty', () => { + chai.expect(isEmptyArray([1, 2])).to.be.equal(false); + }); + }); +}); diff --git a/package-lock.json b/package-lock.json index 07658333a6ed..77c56ed8c864 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11125,6 +11125,12 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, + "@types/rewire": { + "version": "2.5.28", + "resolved": "https://registry.npmjs.org/@types/rewire/-/rewire-2.5.28.tgz", + "integrity": "sha512-uD0j/AQOa5le7afuK+u+woi8jNKF1vf3DN0H7LCJhft/lNNibUr7VcAesdgtWfEKveZol3ZG1CJqwx2Bhrnl8w==", + "dev": true + }, "@types/semver": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.3.tgz", @@ -19929,7 +19935,7 @@ }, "chownr": { "version": "1.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true, "optional": true @@ -19964,7 +19970,7 @@ }, "debug": { "version": "4.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, @@ -19995,7 +20001,7 @@ }, "fs-minipass": { "version": "1.2.5", - "resolved": "", + "resolved": false, "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, @@ -20029,7 +20035,7 @@ }, "glob": { "version": "7.1.3", - "resolved": "", + "resolved": false, "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, @@ -20061,7 +20067,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": "", + "resolved": false, "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, @@ -20082,7 +20088,7 @@ }, "inherits": { "version": "2.0.3", - "resolved": "", + "resolved": false, "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true @@ -20130,7 +20136,7 @@ }, "minipass": { "version": "2.3.5", - "resolved": "", + "resolved": false, "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "optional": true, @@ -20141,7 +20147,7 @@ }, "minizlib": { "version": "1.2.1", - "resolved": "", + "resolved": false, "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "optional": true, @@ -20161,7 +20167,7 @@ }, "ms": { "version": "2.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true @@ -20175,7 +20181,7 @@ }, "needle": { "version": "2.3.0", - "resolved": "", + "resolved": false, "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, @@ -20187,7 +20193,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": "", + "resolved": false, "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, @@ -20217,14 +20223,14 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": "", + "resolved": false, "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": "", + "resolved": false, "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, @@ -20304,7 +20310,7 @@ }, "process-nextick-args": { "version": "2.0.0", - "resolved": "", + "resolved": false, "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true @@ -20349,7 +20355,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": "", + "resolved": false, "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, @@ -20380,7 +20386,7 @@ }, "semver": { "version": "5.7.0", - "resolved": "", + "resolved": false, "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true @@ -20440,7 +20446,7 @@ }, "tar": { "version": "4.4.8", - "resolved": "", + "resolved": false, "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, @@ -20480,7 +20486,7 @@ }, "yallist": { "version": "3.0.3", - "resolved": "", + "resolved": false, "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, "optional": true @@ -32243,6 +32249,15 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rewire": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rewire/-/rewire-5.0.0.tgz", + "integrity": "sha512-1zfitNyp9RH5UDyGGLe9/1N0bMlPQ0WrX0Tmg11kMHBpqwPJI4gfPpP7YngFyLbFmhXh19SToAG0sKKEFcOIJA==", + "dev": true, + "requires": { + "eslint": "^6.8.0" + } + }, "rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", diff --git a/package.json b/package.json index 10084ed72af8..297ac09fa736 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "@types/mongodb": "^3.5.26", "@types/node": "^10.12.14", "@types/react-dom": "^16.9.8", + "@types/rewire": "^2.5.28", "@types/semver": "^7.3.3", "@types/toastr": "^2.1.38", "@typescript-eslint/eslint-plugin": "^2.34.0", @@ -115,6 +116,7 @@ "postcss-url": "^8.0.0", "progress": "^2.0.3", "proxyquire": "^2.1.3", + "rewire": "^5.0.0", "simple-git": "^1.107.0", "source-map": "^0.5.7", "stylelint": "^13.6.1", From 978cd3a845b01a164e5b9fd7b82ad41d9a3ef4c8 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 12 Mar 2021 18:32:41 -0300 Subject: [PATCH 020/149] Chore: Meteor update 2.1 (#21061) --- .docker-mongo/Dockerfile | 2 +- .docker/Dockerfile | 2 +- .github/workflows/build_and_test.yml | 14 ++++----- .meteor/packages | 28 ++++++++---------- .meteor/release | 2 +- .meteor/versions | 44 ++++++++++++++-------------- .snapcraft/resources/preparenode | 2 +- 7 files changed, 46 insertions(+), 48 deletions(-) diff --git a/.docker-mongo/Dockerfile b/.docker-mongo/Dockerfile index 672ed4da6ba0..0c2e69a1d385 100644 --- a/.docker-mongo/Dockerfile +++ b/.docker-mongo/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.18.4-buster-slim +FROM node:12.21.0-buster-slim LABEL maintainer="buildmaster@rocket.chat" diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 355b08eb0ab4..ff6fe47826f8 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.18.4-buster-slim +FROM node:12.21.0-buster-slim LABEL maintainer="buildmaster@rocket.chat" diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 6faffea2b518..896257497796 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -30,10 +30,10 @@ jobs: echo "github.event_name: ${{ github.event_name }}" cat $GITHUB_EVENT_PATH - - name: Use Node.js 12.18.4 + - name: Use Node.js 12.21.0 uses: actions/setup-node@v2 with: - node-version: "12.18.4" + node-version: "12.21.0" - uses: actions/checkout@v2 @@ -190,7 +190,7 @@ jobs: strategy: matrix: - node-version: ["12.18.4"] + node-version: ["12.21.0"] mongodb-version: ["3.4", "3.6", "4.0"] steps: @@ -312,10 +312,10 @@ jobs: path: ~/.meteor key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release') }}-${{ hashFiles('.github/workflows/build_and_test.yml') }} - - name: Use Node.js 12.18.4 + - name: Use Node.js 12.21.0 uses: actions/setup-node@v2 with: - node-version: "12.18.4" + node-version: "12.21.0" - name: Install Meteor run: | @@ -542,10 +542,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Use Node.js 12.18.4 + - name: Use Node.js 12.21.0 uses: actions/setup-node@v2 with: - node-version: "12.18.4" + node-version: "12.21.0" - name: Login to DockerHub uses: docker/login-action@v1 diff --git a/.meteor/packages b/.meteor/packages index 2a2c903bbd21..02d1834c4f7b 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -9,29 +9,28 @@ accounts-facebook@1.3.2 accounts-github@1.4.3 accounts-google@1.3.3 accounts-meteor-developer@1.4.2 -accounts-password@1.6.2 +accounts-password@1.7.0 accounts-twitter@1.4.2 blaze-html-templates check@1.3.1 ddp-rate-limiter@1.0.9 ddp-common@1.4.0 -dynamic-import@0.5.2 -ecmascript@0.14.3 -typescript@3.7.6 +dynamic-import@0.6.0 +ecmascript@0.15.0 +typescript@4.1.2 ejson@1.1.1 email@2.0.0 fastclick@1.0.13 http@1.4.2 -jquery@1.11.10 -logging@1.1.20 +logging@1.2.0 meteor-base@1.4.0 mobile-experience@1.1.0 -mongo@1.10.0 +mongo@1.10.1 random@1.2.0 rate-limit@1.0.9 reactive-dict@1.3.0 reactive-var@1.0.11 -reload@1.3.0 +reload@1.3.1 service-configuration@1.0.11 session@1.2.0 shell-server@0.5.0 @@ -47,7 +46,6 @@ rocketchat:version konecty:multiple-instances-status konecty:user-presence -deepwell:bootstrap-datepicker2 dispatch:run-as-user jalik:ufs@1.0.2 jalik:ufs-gridfs@1.0.2 @@ -70,22 +68,22 @@ littledata:synced-cron edgee:slingshot jalik:ufs-local@1.0.2 -accounts-base@1.7.0 +accounts-base@1.8.0 accounts-oauth@1.2.0 -autoupdate@1.6.0 -babel-compiler@7.5.3 +autoupdate@1.7.0 +babel-compiler@7.6.0 google-oauth@1.3.0 htmljs less matb33:collection-hooks meteorhacks:inject-initial -oauth@1.3.0 +oauth@1.3.2 oauth2@1.3.0 routepolicy@1.1.0 sha@1.0.9 templating -webapp@1.9.1 -webapp-hashing@1.0.9 +webapp@1.10.0 +webapp-hashing@1.1.0 rocketchat:oauth2-server rocketchat:i18n rocketchat:postcss diff --git a/.meteor/release b/.meteor/release index 019e3aefb00f..fd169bc4792f 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.11.1 +METEOR@2.1 diff --git a/.meteor/versions b/.meteor/versions index 811fbd386ad1..5bcc27eebe93 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,15 +1,15 @@ -accounts-base@1.7.0 +accounts-base@1.8.0 accounts-facebook@1.3.2 accounts-github@1.4.3 accounts-google@1.3.3 accounts-meteor-developer@1.4.2 accounts-oauth@1.2.0 -accounts-password@1.6.2 +accounts-password@1.7.0 accounts-twitter@1.4.2 aldeed:simple-schema@1.5.4 allow-deny@1.1.0 -autoupdate@1.6.0 -babel-compiler@7.5.3 +autoupdate@1.7.0 +babel-compiler@7.6.0 babel-runtime@1.5.0 base64@1.0.12 binary-heap@1.0.11 @@ -25,16 +25,15 @@ check@1.3.1 coffeescript@1.0.17 dandv:caret-position@2.1.1 ddp@1.4.0 -ddp-client@2.3.3 +ddp-client@2.4.0 ddp-common@1.4.0 ddp-rate-limiter@1.0.9 ddp-server@2.3.2 -deepwell:bootstrap-datepicker2@1.3.0 deps@1.0.12 diff-sequence@1.1.1 dispatch:run-as-user@1.1.1 -dynamic-import@0.5.2 -ecmascript@0.14.3 +dynamic-import@0.6.0 +ecmascript@0.15.0 ecmascript-runtime@0.7.0 ecmascript-runtime-client@0.11.0 ecmascript-runtime-server@0.10.0 @@ -42,7 +41,7 @@ edgee:slingshot@0.7.1 ejson@1.1.1 email@2.0.0 es5-shim@4.8.0 -facebook-oauth@1.7.0 +facebook-oauth@1.7.4 facts-base@1.0.1 fastclick@1.0.13 fetch@0.1.1 @@ -52,7 +51,7 @@ google-oauth@1.3.0 hot-code-push@1.0.4 html-tools@1.0.11 htmljs@1.0.11 -http@1.4.2 +http@1.4.3 id-map@1.1.0 inter-process-messaging@0.1.1 jalik:ufs@1.0.2 @@ -71,25 +70,25 @@ less@3.0.1 littledata:synced-cron@1.5.1 livedata@1.0.18 localstorage@1.2.0 -logging@1.1.20 +logging@1.2.0 matb33:collection-hooks@1.0.1 mdg:validation-error@0.5.1 meteor@1.9.3 meteor-base@1.4.0 -meteor-developer-oauth@1.2.1 +meteor-developer-oauth@1.2.3 meteorhacks:inject-initial@1.0.4 meteorspark:util@0.2.0 minifier-css@1.5.3 minifier-js@2.6.0 -minimongo@1.6.0 +minimongo@1.6.1 mizzao:timesync@0.3.4 mobile-experience@1.1.0 mobile-status-bar@1.1.0 modern-browsers@0.1.5 -modules@0.15.0 +modules@0.16.0 modules-runtime@0.12.0 -mongo@1.10.0 -mongo-decimal@0.1.1 +mongo@1.10.1 +mongo-decimal@0.1.2 mongo-dev-server@1.1.0 mongo-id@1.0.7 mrt:reactive-store@0.0.1 @@ -98,12 +97,12 @@ nimble:restivus@0.8.12 nooitaf:colors@1.1.2_1 npm-bcrypt@0.9.3 npm-mongo@3.8.1 -oauth@1.3.0 +oauth@1.3.2 oauth1@1.3.0 oauth2@1.3.0 observe-sequence@1.0.16 ordered-dict@1.1.0 -ostrio:cookies@2.6.0 +ostrio:cookies@2.7.0 pauli:accounts-linkedin@5.0.0 pauli:linkedin-oauth@5.0.0 promise@0.11.2 @@ -112,9 +111,10 @@ raix:handlebar-helpers@0.2.5 raix:ui-dropped-event@0.0.7 random@1.2.0 rate-limit@1.0.9 +react-fast-refresh@0.1.0 reactive-dict@1.3.0 reactive-var@1.0.11 -reload@1.3.0 +reload@1.3.1 retry@1.1.0 rocketchat:i18n@0.0.1 rocketchat:livechat@0.0.1 @@ -141,9 +141,9 @@ templating-runtime@1.3.2 templating-tools@1.1.2 tracker@1.2.0 twitter-oauth@1.2.0 -typescript@3.7.6 +typescript@4.1.2 ui@1.0.13 underscore@1.0.10 url@1.3.1 -webapp@1.9.1 -webapp-hashing@1.0.9 +webapp@1.10.0 +webapp-hashing@1.1.0 diff --git a/.snapcraft/resources/preparenode b/.snapcraft/resources/preparenode index abe5bba3afa7..1a293dcdac3e 100755 --- a/.snapcraft/resources/preparenode +++ b/.snapcraft/resources/preparenode @@ -1,6 +1,6 @@ #!/bin/bash -node_version="v12.18.4" +node_version="v12.21.0" unamem="$(uname -m)" if [[ $unamem == *aarch64* ]]; then From 0298910e9dfa4093ab44403e5c23914b8c620af3 Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Tue, 16 Mar 2021 15:23:34 -0300 Subject: [PATCH 021/149] [FIX] Use the correct icons for DMs (#21125) * [FIX] Use the correct icons for DMs * Prefer `balloon` icon over `message` icon Co-authored-by: Tasso Evangelista --- app/lib/lib/roomTypes/direct.js | 2 +- client/hooks/useRoomIcon.tsx | 2 +- client/sidebar/header/actions/CreateRoomList.js | 6 +++--- client/views/admin/info/UsageCard.js | 2 +- client/views/admin/users/UserInfoActions.js | 2 +- client/views/room/hooks/useUserInfoActions.js | 2 +- package-lock.json | 7 ++++--- package.json | 2 +- 8 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/lib/lib/roomTypes/direct.js b/app/lib/lib/roomTypes/direct.js index 02863802f806..dc0b7561e138 100644 --- a/app/lib/lib/roomTypes/direct.js +++ b/app/lib/lib/roomTypes/direct.js @@ -40,7 +40,7 @@ export class DirectMessageRoomType extends RoomTypeConfig { getIcon(roomData) { if (this.isGroupChat(roomData)) { - return 'team'; + return 'balloon'; } return this.icon; } diff --git a/client/hooks/useRoomIcon.tsx b/client/hooks/useRoomIcon.tsx index dd3df78be422..5e7eef708228 100644 --- a/client/hooks/useRoomIcon.tsx +++ b/client/hooks/useRoomIcon.tsx @@ -26,7 +26,7 @@ export const useRoomIcon = (room: IRoom, small = true): JSX.Element | { name: st case 'd': const direct = room as unknown as IDirectMessageRoom; if (direct.uids && direct.uids.length > 2) { - return { name: 'baloon-arrow-left' }; + return { name: 'balloon' }; } if (direct.uids && direct.uids.length > 0) { return uid !== room.u._id)[0] || room.u._id } as any } />; diff --git a/client/sidebar/header/actions/CreateRoomList.js b/client/sidebar/header/actions/CreateRoomList.js index f0e28758db0b..6513c88bab1c 100644 --- a/client/sidebar/header/actions/CreateRoomList.js +++ b/client/sidebar/header/actions/CreateRoomList.js @@ -68,9 +68,9 @@ function CreateRoomList() {
    - {canCreateChannel && } - {canCreateDirectMessages && } - {discussionEnabled && canCreateDiscussion && } + {canCreateChannel && } + {canCreateDirectMessages && } + {discussionEnabled && canCreateDiscussion && }
; diff --git a/client/views/admin/info/UsageCard.js b/client/views/admin/info/UsageCard.js index e784c5787f78..b15295e92b0e 100644 --- a/client/views/admin/info/UsageCard.js +++ b/client/views/admin/info/UsageCard.js @@ -108,7 +108,7 @@ const UsageCard = React.memo(function UsageCard({ statistics, isLoading, vertica value={s(() => statistics.totalPrivateGroups)} /> {t('Stats_Total_Direct_Messages')}} + label={<> {t('Stats_Total_Direct_Messages')}} value={s(() => statistics.totalDirect)} /> ({ ...canDirectMessage && { directMessage: { - icon: 'chat', + icon: 'balloon', label: t('Direct_Message'), action: directMessageClick, } }, diff --git a/client/views/room/hooks/useUserInfoActions.js b/client/views/room/hooks/useUserInfoActions.js index 6addbeb7c6f9..5e1593e43f36 100644 --- a/client/views/room/hooks/useUserInfoActions.js +++ b/client/views/room/hooks/useUserInfoActions.js @@ -167,7 +167,7 @@ export const useUserInfoActions = (user = {}, rid) => { const openDirectMessageOption = useMemo(() => shouldOpenDirectMessage && { label: t('Direct_Message'), - icon: 'chat', + icon: 'balloon', action: openDirectDm, }, [openDirectDm, shouldOpenDirectMessage, t]); diff --git a/package-lock.json b/package-lock.json index 77c56ed8c864..49922984aeec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6035,9 +6035,10 @@ } }, "@rocket.chat/icons": { - "version": "0.6.3-dev.179", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.6.3-dev.179.tgz", - "integrity": "sha512-5NsrdR3C90Z0lR7OkgzHGqjDVPxho+LUjrv15F1L/uONp/WdQBo+Z3cGFXUgnLZf5ohX1BgTRRtzHtJPPr7QyQ==" + "version": "0.6.3-dev.202", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.6.3-dev.202.tgz", + "integrity": "sha512-Tsg7wdHWiUunhyWTAa+pO9m6bdM3wLJ+t3jYfSUXn9FsumHsR7f+g4GjSJsHvw65Ly3b5TJcs917YKCtb/h5Gg==", + "dev": true }, "@rocket.chat/livechat": { "version": "1.8.0", diff --git a/package.json b/package.json index 297ac09fa736..dfb75973f9a8 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@babel/register": "^7.12.1", "@octokit/rest": "^16.43.2", "@rocket.chat/eslint-config": "^0.3.0", + "@rocket.chat/icons": "^0.6.3-dev.202", "@rocket.chat/livechat": "^1.8.0", "@settlin/spacebars-loader": "^1.0.8", "@storybook/addon-essentials": "^6.1.11", @@ -144,7 +145,6 @@ "@rocket.chat/fuselage-polyfills": "^0.6.3-dev.181", "@rocket.chat/fuselage-tokens": "^0.21.0", "@rocket.chat/fuselage-ui-kit": "^0.6.3-dev.184", - "@rocket.chat/icons": "^0.6.3-dev.179", "@rocket.chat/mp3-encoder": "^0.6.3-dev.178", "@rocket.chat/ui-kit": "^0.6.3-dev.178", "@slack/client": "^4.12.0", From 9611e2b62fe18aed88c732f2c20c9a16baff0e16 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Wed, 17 Mar 2021 23:05:09 -0300 Subject: [PATCH 022/149] [FIX] Unexpected open or close visitor info (#21094) * fix unexpected open or close visitor info * fix lgtm bot warning Co-authored-by: Tasso Evangelista Co-authored-by: Tasso Evangelista Co-authored-by: Renato Becker --- app/ui/client/views/app/room.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index 25df13abe97d..87614468e85b 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -888,9 +888,10 @@ Meteor.startup(() => { return; } - const room = Rooms.findOne({ _id: rid }); + let room = Rooms.findOne({ _id: rid }, { fields: { t: 1 } }); if (room?.t === 'l') { + room = Tracker.nonreactive(() => Rooms.findOne({ _id: rid })); roomTypes.getConfig(room.t).openCustomProfileTab(this, room, room.v.username); } }); From eba1e9b3146e5102baed000953c2cb51930c345c Mon Sep 17 00:00:00 2001 From: meomay503 Date: Fri, 19 Mar 2021 19:00:57 +0700 Subject: [PATCH 023/149] [NEW] use _rocketchatLogger in Apps debugLog (#21000) --- app/apps/server/orchestrator.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/apps/server/orchestrator.js b/app/apps/server/orchestrator.js index 612fe2bdf8a6..f2b2d52b081c 100644 --- a/app/apps/server/orchestrator.js +++ b/app/apps/server/orchestrator.js @@ -115,8 +115,7 @@ export class AppServerOrchestrator { debugLog(...args) { if (this.isDebugging()) { - // eslint-disable-next-line - console.log(...args); + this.getRocketChatLogger().debug(...args); } } From 49b5f89d70bbc72112fcb52c1db18b1486023925 Mon Sep 17 00:00:00 2001 From: Lucas Sartor Chauvin Date: Fri, 19 Mar 2021 17:24:34 -0300 Subject: [PATCH 024/149] [IMPROVE] Improve Apps permission modal (#21193) * improve modal design * add en and pt-BR translations * fix icon size --- client/views/admin/apps/AppPermissionsReviewModal.js | 11 +++++++---- packages/rocketchat-i18n/i18n/en.i18n.json | 5 +++-- packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 5 +++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/client/views/admin/apps/AppPermissionsReviewModal.js b/client/views/admin/apps/AppPermissionsReviewModal.js index 687f173f9d6c..b8c1efadc79d 100644 --- a/client/views/admin/apps/AppPermissionsReviewModal.js +++ b/client/views/admin/apps/AppPermissionsReviewModal.js @@ -26,17 +26,20 @@ const AppPermissionsReviewModal = ({ return - + {t('Apps_Permissions_Review_Modal_Title')} + + {t('Apps_Permissions_Review_Modal_Subtitle')} +
    { appPermissions.length - ? appPermissions.map((permission) => + ? appPermissions.map((permission, count) =>
  • - { t(`Apps_Permissions_${ permission.name.replace('.', '_') }`) } + { count + 1 } - { t(`Apps_Permissions_${ permission.name.replace('.', '_') }`) } { permission.required && ({ t('required') }) }
  • ) : t('Apps_Permissions_No_Permissions_Required') @@ -46,7 +49,7 @@ const AppPermissionsReviewModal = ({ - + ; diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index a588448c1d0d..ebd6742346ab 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -462,7 +462,8 @@ "Apps_Marketplace_Uninstall_App_Prompt": "Do you really want to uninstall this app?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Uninstall it anyway", "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "This app has an active subscription and uninstalling will not cancel it. If you'd like to do that, please modify your subscription before uninstalling.", - "Apps_Permissions_Review_Modal_Title": "This app requires the following permissions", + "Apps_Permissions_Review_Modal_Title": "Required Permissions", + "Apps_Permissions_Review_Modal_Subtitle": "This app would like access to the following permissions. Do you agree?", "Apps_Permissions_No_Permissions_Required": "The App does not require additional permissions", "Apps_Permissions_user_read": "Access user information", "Apps_Permissions_user_write": "Modify user information", @@ -4298,4 +4299,4 @@ "Your_temporary_password_is_password": "Your temporary password is [password].", "Your_TOTP_has_been_reset": "Your Two Factor TOTP has been reset.", "Your_workspace_is_ready": "Your workspace is ready to use πŸŽ‰" -} \ No newline at end of file +} diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index e50ddf1dca2d..e88be2b5a5d5 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -403,7 +403,8 @@ "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__/ano por usuΓ‘rio", "Apps_Marketplace_Uninstall_App_Prompt": "VocΓͺ quer mesmo desinstalar este aplicativo?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Desinstalar mesmo assim", - "Apps_Permissions_Review_Modal_Title": "Este app necessita das seguintes permissΓ΅es", + "Apps_Permissions_Review_Modal_Title": "PermissΓ΅es NecessΓ‘rias", + "Apps_Permissions_Review_Modal_Subtitle": "Este app gostaria de acessar as seguintes permissΓ΅es. VocΓͺ aceita?", "Apps_Permissions_No_Permissions_Required": "Este app nΓ£o necessita de nenhuma permissΓ£o", "Apps_Permissions_user_read": "Acessar dados de usuΓ‘rios", "Apps_Permissions_user_write": "Alterar dados de usuΓ‘rios", @@ -3641,4 +3642,4 @@ "Your_question": "A sua pergunta", "Your_server_link": "O link do seu servidor", "Your_workspace_is_ready": "O seu espaΓ§o de trabalho estΓ‘ pronto a usar πŸŽ‰" -} \ No newline at end of file +} From c163bf9c58b3c4abfb57b66ce2c1277268b95f94 Mon Sep 17 00:00:00 2001 From: Lucas Sartor Chauvin Date: Fri, 19 Mar 2021 18:21:00 -0300 Subject: [PATCH 025/149] [NEW][APPS] Map description as a room value in Apps (#20811) * map 'description' as a room value * Update Apps-Engine version --- app/apps/server/converters/rooms.js | 1 + package-lock.json | 49 ++++++++++++++++------------- package.json | 2 +- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/app/apps/server/converters/rooms.js b/app/apps/server/converters/rooms.js index df7f43f94c6b..6333058a25b3 100644 --- a/app/apps/server/converters/rooms.js +++ b/app/apps/server/converters/rooms.js @@ -120,6 +120,7 @@ export class AppRoomsConverter { isWaitingResponse: 'waitingResponse', isOpen: 'open', _USERNAMES: '_USERNAMES', + description: 'description', isDefault: (room) => { const result = !!room.default; delete room.default; diff --git a/package-lock.json b/package-lock.json index 49922984aeec..144bcdb39113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5907,9 +5907,9 @@ } }, "@rocket.chat/apps-engine": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.23.0.tgz", - "integrity": "sha512-SDHVt+vDJaUHLk5nyiufhn9GjZbEJtP7ORjqilipB2RK5rtVnlJJJCtO1MgTI/A9LvLJBCESkC7u6PmUDrQ+/A==", + "version": "1.24.0-alpha.4777", + "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.24.0-alpha.4777.tgz", + "integrity": "sha512-c7oiK0G1WvXfY2b16wTfds+WpSYBGQ9U3VW8hD0MXqbiv/TrwsBcGvJo0K9aj/aFM3qP1rqXW7gUE5aCr4h1ZA==", "requires": { "adm-zip": "^0.4.9", "cryptiles": "^4.1.3", @@ -5917,6 +5917,13 @@ "semver": "^5.5.0", "stack-trace": "0.0.10", "uuid": "^3.2.1" + }, + "dependencies": { + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + } } }, "@rocket.chat/css-in-js": { @@ -19936,7 +19943,7 @@ }, "chownr": { "version": "1.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true, "optional": true @@ -19971,7 +19978,7 @@ }, "debug": { "version": "4.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, @@ -20002,7 +20009,7 @@ }, "fs-minipass": { "version": "1.2.5", - "resolved": false, + "resolved": "", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, @@ -20036,7 +20043,7 @@ }, "glob": { "version": "7.1.3", - "resolved": false, + "resolved": "", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, @@ -20068,7 +20075,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": false, + "resolved": "", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, @@ -20089,7 +20096,7 @@ }, "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true @@ -20137,7 +20144,7 @@ }, "minipass": { "version": "2.3.5", - "resolved": false, + "resolved": "", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "optional": true, @@ -20148,7 +20155,7 @@ }, "minizlib": { "version": "1.2.1", - "resolved": false, + "resolved": "", "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "optional": true, @@ -20168,7 +20175,7 @@ }, "ms": { "version": "2.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true @@ -20182,7 +20189,7 @@ }, "needle": { "version": "2.3.0", - "resolved": false, + "resolved": "", "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, @@ -20194,7 +20201,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": false, + "resolved": "", "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, @@ -20224,14 +20231,14 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": false, + "resolved": "", "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": false, + "resolved": "", "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, @@ -20311,7 +20318,7 @@ }, "process-nextick-args": { "version": "2.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true @@ -20356,7 +20363,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": false, + "resolved": "", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, @@ -20387,7 +20394,7 @@ }, "semver": { "version": "5.7.0", - "resolved": false, + "resolved": "", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true @@ -20447,7 +20454,7 @@ }, "tar": { "version": "4.4.8", - "resolved": false, + "resolved": "", "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, @@ -20487,7 +20494,7 @@ }, "yallist": { "version": "3.0.3", - "resolved": false, + "resolved": "", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, "optional": true diff --git a/package.json b/package.json index dfb75973f9a8..ff0c82aaea9f 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "@nivo/heatmap": "^0.61.0", "@nivo/line": "^0.61.1", "@nivo/pie": "^0.61.1", - "@rocket.chat/apps-engine": "1.23.0", + "@rocket.chat/apps-engine": "1.24.0-alpha.4777", "@rocket.chat/css-in-js": "^0.6.3-dev.180", "@rocket.chat/emitter": "^0.6.3-dev.185", "@rocket.chat/fuselage": "^0.6.3-dev.188", From 9bbf11ad53d43dc3a5d870d6df4a3022b6de3440 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 20 Mar 2021 15:44:15 -0300 Subject: [PATCH 026/149] [FIX] Wrong license seats number administration info panel (#21222) * Use active users to display on limit of users for the license on info panel * Print more info about issues with licenses on server --- client/views/admin/info/LicenseCard.js | 2 +- ee/app/license/server/license.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/client/views/admin/info/LicenseCard.js b/client/views/admin/info/LicenseCard.js index fe42b59d37ed..a162ee196ded 100644 --- a/client/views/admin/info/LicenseCard.js +++ b/client/views/admin/info/LicenseCard.js @@ -74,7 +74,7 @@ const LicenseCard = ({ statistics, isLoading }) => { ? : Date: Mon, 22 Mar 2021 12:20:16 -0300 Subject: [PATCH 027/149] [FIX] New Channel popover not closing (#21080) Co-authored-by: Tasso Evangelista --- .../sidebar/header/actions/CreateRoomList.js | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/client/sidebar/header/actions/CreateRoomList.js b/client/sidebar/header/actions/CreateRoomList.js index 6513c88bab1c..9ef80a6a28f4 100644 --- a/client/sidebar/header/actions/CreateRoomList.js +++ b/client/sidebar/header/actions/CreateRoomList.js @@ -2,8 +2,7 @@ import React from 'react'; import { Box, Margins } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; - -import { modal } from '../../../../app/ui-utils'; +import { modal, popover } from '../../../../app/ui-utils'; import { useTranslation } from '../../../contexts/TranslationContext'; import { useAtLeastOnePermission, usePermission } from '../../../contexts/AuthorizationContext'; import { useSetting } from '../../../contexts/SettingsContext'; @@ -21,6 +20,7 @@ const style = { const useAction = (title, content) => useMutableCallback((e) => { e.preventDefault(); + popover.close(); modal.open({ title, content, @@ -36,27 +36,32 @@ const useAction = (title, content) => useMutableCallback((e) => { }); }); -const useReactModal = (setModal, Component) => useMutableCallback((e) => { - e.preventDefault(); +const useReactModal = (Component) => { + const setModal = useSetModal(); - const handleClose = () => { - setModal(null); - }; + return useMutableCallback((e) => { + popover.close(); - setModal(() => ); -}); + e.preventDefault(); + + const handleClose = () => { + setModal(null); + }; + + setModal(() => ); + }); +}; function CreateRoomList() { const t = useTranslation(); - const setModal = useSetModal(); const canCreateChannel = useAtLeastOnePermission(CREATE_CHANNEL_PERMISSIONS); const canCreateDirectMessages = usePermission('create-d'); const canCreateDiscussion = useAtLeastOnePermission(CREATE_DISCUSSION_PERMISSIONS); - const createChannel = useReactModal(setModal, CreateChannel); + const createChannel = useReactModal(CreateChannel); const createDirectMessage = useAction(t('Direct_Messages'), 'CreateDirectMessage'); const createDiscussion = useAction(t('Discussion_title'), 'CreateDiscussion'); From df80c8449239638ff51ba89c07a38705c1de3f47 Mon Sep 17 00:00:00 2001 From: Priya Bihani Date: Tue, 23 Mar 2021 02:22:58 +0530 Subject: [PATCH 028/149] [FIX] Multi Select isn't working in Export Messages (#21236) --- .../contextualBar/ExportMessages/index.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/client/views/room/contextualBar/ExportMessages/index.js b/client/views/room/contextualBar/ExportMessages/index.js index 616dd8aab943..9273840ff109 100644 --- a/client/views/room/contextualBar/ExportMessages/index.js +++ b/client/views/room/contextualBar/ExportMessages/index.js @@ -4,7 +4,6 @@ import { css } from '@rocket.chat/css-in-js'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import VerticalBar from '../../../../components/VerticalBar'; -import { UserAutoComplete } from '../../../../components/AutoComplete'; import { useTranslation } from '../../../../contexts/TranslationContext'; import { useForm } from '../../../../hooks/useForm'; import { useUserRoom } from '../../hooks/useUserRoom'; @@ -12,6 +11,7 @@ import { useEndpoint } from '../../../../contexts/ServerContext'; import { roomTypes, isEmail } from '../../../../../app/utils/client'; import { useToastMessageDispatch } from '../../../../contexts/ToastMessagesContext'; import { useTabBarClose } from '../../providers/ToolboxProvider'; +import UserAutoCompleteMultiple from '../../../../../ee/client/audit/UserAutoCompleteMultiple'; const clickable = css` cursor: pointer; @@ -114,7 +114,7 @@ const MailExportForm = ({ onCancel, rid }) => { const { values, handlers } = useForm({ dateFrom: '', dateTo: '', - toUsers: '', + toUsers: [], additionalEmails: '', subject: t('Mail_Messages_Subject', roomName), }); @@ -165,6 +165,16 @@ const MailExportForm = ({ onCancel, rid }) => { handleSubject, } = handlers; + const onChangeUsers = useMutableCallback((value, action) => { + if (!action) { + if (toUsers.includes(value)) { + return; + } + return handleToUsers([...toUsers, value]); + } + handleToUsers(toUsers.filter((current) => current !== value)); + }); + const roomsExport = useEndpoint('POST', 'rooms.export'); const handleSubmit = async () => { @@ -216,7 +226,10 @@ const MailExportForm = ({ onCancel, rid }) => { {t('To_users')} - + From 9e9979d8068558f2d2edc155782b8529b832d67e Mon Sep 17 00:00:00 2001 From: shrinish123 <56491104+shrinish123@users.noreply.github.com> Date: Tue, 23 Mar 2021 02:36:47 +0530 Subject: [PATCH 029/149] [FIX] Fix the search list showing the last channel (#21160) --- client/sidebar/search/SearchList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/sidebar/search/SearchList.js b/client/sidebar/search/SearchList.js index 2d3d30b012f5..5d6574ff18ee 100644 --- a/client/sidebar/search/SearchList.js +++ b/client/sidebar/search/SearchList.js @@ -177,7 +177,7 @@ const ScrollerWithCustomProps = forwardRef((props, ref) => ( -
    +
    ) } renderTrackHorizontal={(props) =>
    } From c491dcfafab468be6174dddf27654146a1cca1f0 Mon Sep 17 00:00:00 2001 From: Tiago Evangelista Pinto Date: Mon, 22 Mar 2021 18:10:43 -0300 Subject: [PATCH 030/149] [IMPROVE] Set description in create channel modal (#21132) --- client/sidebar/header/CreateChannel.js | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/client/sidebar/header/CreateChannel.js b/client/sidebar/header/CreateChannel.js index c5515e10c478..e6974a31b9ae 100644 --- a/client/sidebar/header/CreateChannel.js +++ b/client/sidebar/header/CreateChannel.js @@ -132,8 +132,6 @@ export default memo(({ }) => { const createChannel = useEndpointActionExperimental('POST', 'channels.create'); const createPrivateChannel = useEndpointActionExperimental('POST', 'groups.create'); - const setChannelDescription = useEndpointActionExperimental('POST', 'channels.setDescription'); - const setPrivateChannelDescription = useEndpointActionExperimental('POST', 'groups.setDescription'); const canCreateChannel = usePermission('create-c'); const canCreatePrivateChannel = usePermission('create-p'); const e2eEnabledForPrivateByDefault = useSetting('E2E_Enabled_Default_PrivateRooms'); @@ -207,6 +205,7 @@ export default memo(({ members: users, readOnly, extraData: { + description, broadcast, encrypted, }, @@ -221,26 +220,8 @@ export default memo(({ goToRoom(roomData.channel._id); } - if (roomData.success && roomData.group && description) { - setPrivateChannelDescription({ description, roomName: roomData.group.name }); - } else if (roomData.success && roomData.channel && description) { - setChannelDescription({ description, roomName: roomData.channel.name }); - } - onClose(); - }, [broadcast, - createChannel, - createPrivateChannel, - description, - encrypted, - name, - onClose, - readOnly, - setChannelDescription, - setPrivateChannelDescription, - type, - users, - ]); + }, [broadcast, createChannel, createPrivateChannel, description, encrypted, name, onClose, readOnly, type, users]); return Date: Tue, 23 Mar 2021 02:48:17 +0530 Subject: [PATCH 031/149] [IMPROVE] fix some grammatical typos in pull request template (#21115) --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 24e70c8f6639..753a651b4c8d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,8 +2,8 @@