From b14213d32965a407e7a16d94d7fe8f507053e7dc Mon Sep 17 00:00:00 2001 From: Ben Cooke Date: Fri, 15 Mar 2024 09:40:05 -0400 Subject: [PATCH 1/6] [MM-56491] Allow sysadmins to LDAP sync SAML users when SamlSettings.EnableSyncWithLdap is true (#25886) Co-authored-by: Mattermost Build --- server/channels/api4/ldap.go | 2 +- server/channels/api4/ldap_test.go | 24 +++++++++++++++++++ .../system_users_list_actions/index.tsx | 13 +++++----- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/server/channels/api4/ldap.go b/server/channels/api4/ldap.go index 67beb67cce..84e91797db 100644 --- a/server/channels/api4/ldap.go +++ b/server/channels/api4/ldap.go @@ -433,7 +433,7 @@ func addUserToGroupSyncables(c *Context, w http.ResponseWriter, r *http.Request) return } - if user.AuthService != model.UserAuthServiceLdap { + if user.AuthService != model.UserAuthServiceLdap && (user.AuthService != model.UserAuthServiceSaml || !*c.App.Config().SamlSettings.EnableSyncWithLdap) { c.Err = model.NewAppError("addUserToGroupSyncables", "api.user.add_user_to_group_syncables.not_ldap_user.app_error", nil, "", http.StatusBadRequest) return } diff --git a/server/channels/api4/ldap_test.go b/server/channels/api4/ldap_test.go index 150fe413ac..a35c1c890a 100644 --- a/server/channels/api4/ldap_test.go +++ b/server/channels/api4/ldap_test.go @@ -309,4 +309,28 @@ func TestAddUserToGroupSyncables(t *testing.T) { resp, err = th.SystemAdminClient.AddUserToGroupSyncables(context.Background(), user.Id) require.NoError(t, err) CheckOKStatus(t, resp) + + t.Run("should sync SAML users when SamlSettings.EnableSyncWithLdap is true", func(t *testing.T) { + id = model.NewId() + user = &model.User{ + Email: "test123@localhost", + Username: model.NewId(), + AuthData: &id, + AuthService: model.UserAuthServiceSaml, + } + user, err = th.App.Srv().Store().User().Save(th.Context, user) + require.NoError(t, err) + + resp, err = th.Client.AddUserToGroupSyncables(context.Background(), user.Id) + require.Error(t, err) + CheckForbiddenStatus(t, resp) + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.SamlSettings.EnableSyncWithLdap = true + }) + + resp, err = th.SystemAdminClient.AddUserToGroupSyncables(context.Background(), user.Id) + require.NoError(t, err) + CheckOKStatus(t, resp) + }) } diff --git a/webapp/channels/src/components/admin_console/system_users/system_users_list_actions/index.tsx b/webapp/channels/src/components/admin_console/system_users/system_users_list_actions/index.tsx index 84fecff353..f9b6bbe682 100644 --- a/webapp/channels/src/components/admin_console/system_users/system_users_list_actions/index.tsx +++ b/webapp/channels/src/components/admin_console/system_users/system_users_list_actions/index.tsx @@ -12,7 +12,8 @@ import type {UserProfile} from '@mattermost/types/users'; import {updateUserActive} from 'mattermost-redux/actions/users'; import {Permissions} from 'mattermost-redux/constants'; import General from 'mattermost-redux/constants/general'; -import {getConfig, getLicense} from 'mattermost-redux/selectors/entities/general'; +import {getConfig} from 'mattermost-redux/selectors/entities/admin'; +import {getLicense} from 'mattermost-redux/selectors/entities/general'; import {isSystemAdmin, isGuest} from 'mattermost-redux/utils/user_utils'; import {adminResetMfa} from 'actions/admin_actions'; @@ -208,7 +209,7 @@ export function SystemUsersListAction({user, currentUser, tableId, rowIndex, onE }} /> - {config.EnableUserAccessTokens === 'true' && + {config.ServiceSettings?.EnableUserAccessTokens && } - {user.mfa_active && config.EnableMultifactorAuthentication && + {user.mfa_active && config.ServiceSettings?.EnableMultifactorAuthentication && } - {Boolean(user.auth_service) && config.ExperimentalEnableAuthenticationTransfer === 'true' && + {Boolean(user.auth_service) && config.ServiceSettings?.ExperimentalEnableAuthenticationTransfer && } - {!isGuest(user.roles) && user.id !== currentUser.id && isLicensed && config.EnableGuestAccounts === 'true' && + {!isGuest(user.roles) && user.id !== currentUser.id && isLicensed && config.GuestAccountsSettings?.Enable && } - {user.auth_service === Constants.LDAP_SERVICE && + {(user.auth_service === Constants.LDAP_SERVICE || (user.auth_service === Constants.SAML_SERVICE && config.SamlSettings?.EnableSyncWithLdap)) && Date: Fri, 15 Mar 2024 14:28:57 -0400 Subject: [PATCH 2/6] Fix incorrect translation string (#26492) --- .../virtualized_thread_viewer/thread_viewer_row.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/webapp/channels/src/components/threading/virtualized_thread_viewer/thread_viewer_row.tsx b/webapp/channels/src/components/threading/virtualized_thread_viewer/thread_viewer_row.tsx index 8377229c01..6916b80050 100644 --- a/webapp/channels/src/components/threading/virtualized_thread_viewer/thread_viewer_row.tsx +++ b/webapp/channels/src/components/threading/virtualized_thread_viewer/thread_viewer_row.tsx @@ -83,8 +83,10 @@ function ThreadViewerRow({
From 9dc5572f53388e950db68540e884474aa10ec31f Mon Sep 17 00:00:00 2001 From: Devin Binnie <52460000+devinbinnie@users.noreply.github.com> Date: Sat, 16 Mar 2024 13:55:56 -0400 Subject: [PATCH 3/6] [MM-57076] Stop removing local drafts when calling `removeDraft` for servers with synced drafts (#26481) * [MM-57076] Stop removing local drafts when calling `removeDraft` for servers with synced drafts * Fix tests --- webapp/channels/src/actions/views/drafts.test.ts | 13 +++++++++++++ webapp/channels/src/actions/views/drafts.ts | 6 +++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/webapp/channels/src/actions/views/drafts.test.ts b/webapp/channels/src/actions/views/drafts.test.ts index 361e92799b..4c706c2fc8 100644 --- a/webapp/channels/src/actions/views/drafts.test.ts +++ b/webapp/channels/src/actions/views/drafts.test.ts @@ -164,6 +164,19 @@ describe('draft actions', () => { describe('removeDraft', () => { it('calls setGlobalItem action correctly', async () => { + store = mockStore({ + ...initialState, + entities: { + ...initialState.entities, + general: { + ...initialState.entities.general, + config: { + ...initialState.entities.general.config, + AllowSyncedDrafts: 'false', + }, + }, + }, + }); await store.dispatch(removeDraft(key, channelId)); const testStore = mockStore(initialState); diff --git a/webapp/channels/src/actions/views/drafts.ts b/webapp/channels/src/actions/views/drafts.ts index 127227d7be..41921b728d 100644 --- a/webapp/channels/src/actions/views/drafts.ts +++ b/webapp/channels/src/actions/views/drafts.ts @@ -105,9 +105,6 @@ export function removeDraft(key: string, channelId: string, rootId = ''): Action // set draft to empty to re-render the component await dispatch(setGlobalItem(key, {message: '', fileInfos: [], uploadsInProgress: []})); - // remove draft from storage - await dispatch(removeGlobalItem(key)); - if (syncedDraftsAreAllowedAndEnabled(state)) { const connectionId = getConnectionId(getState()); @@ -119,6 +116,9 @@ export function removeDraft(key: string, channelId: string, rootId = ''): Action error, }; } + } else { + // only remove draft from storage for local drafts + await dispatch(removeGlobalItem(key)); } return {data: true}; }; From 3b8ba01fd96e1a54dfe323ac8bae21918df22251 Mon Sep 17 00:00:00 2001 From: Matthew Birtch Date: Sun, 17 Mar 2024 11:55:37 -0400 Subject: [PATCH 4/6] Add css variables for border radius (#26491) --- .../components/widgets/admin_console/admin_panel.scss | 9 ++++++--- webapp/channels/src/sass/base/_css_variables.scss | 8 ++++++++ webapp/channels/src/sass/components/_alerts.scss | 2 +- webapp/channels/src/sass/components/_buttons.scss | 4 ++-- .../src/sass/components/_dnd-pickers-dropdown-menu.scss | 2 +- .../sass/components/_edit-post-time-limit-button.scss | 2 +- webapp/channels/src/sass/components/_emoticons.scss | 3 +-- webapp/channels/src/sass/components/_inputs.scss | 2 +- webapp/channels/src/sass/components/_popover.scss | 2 +- webapp/channels/src/sass/components/_scrollbar.scss | 2 +- webapp/channels/src/sass/routes/_about-modal.scss | 2 +- webapp/channels/src/sass/routes/_admin-console.scss | 2 +- webapp/channels/src/sass/utils/_variables.scss | 1 - 13 files changed, 25 insertions(+), 16 deletions(-) diff --git a/webapp/channels/src/components/widgets/admin_console/admin_panel.scss b/webapp/channels/src/components/widgets/admin_console/admin_panel.scss index 6a80df556a..bee34c8a79 100644 --- a/webapp/channels/src/components/widgets/admin_console/admin_panel.scss +++ b/webapp/channels/src/components/widgets/admin_console/admin_panel.scss @@ -1,11 +1,13 @@ @import 'utils/module'; .AdminPanel { + overflow: hidden; padding: 0; - border: solid 1px alpha-color($black, 0.1); - border-radius: $border-rad; + border: solid 1px rgba(var(--center-channel-color-rgb), 0.12); + border-radius: var(--radius-s); margin: 2em 0 1em; - box-shadow: 0 1px 2px 0 alpha-color($black, 0.5); + background-color: var(--center-channel-bg); + box-shadow: var(--elevation-1); font-size: 0.95em; .AdminPanel__content { @@ -35,6 +37,7 @@ align-items: center; justify-content: space-between; padding: 20px; + border-radius: var(--radius-s) var(--radius-s) 0 0; background: $white; h3 { diff --git a/webapp/channels/src/sass/base/_css_variables.scss b/webapp/channels/src/sass/base/_css_variables.scss index 8c49ca2f43..470744db2e 100644 --- a/webapp/channels/src/sass/base/_css_variables.scss +++ b/webapp/channels/src/sass/base/_css_variables.scss @@ -78,6 +78,14 @@ --elevation-5: 0 12px 32px 0 rgba(0, 0, 0, 0.12); --elevation-6: 0 20px 32px 0 rgba(0, 0, 0, 0.12); + //Corner Radius variables + --radius-xs: 2px; + --radius-s: 4px; + --radius-m: 8px; + --radius-l: 12px; + --radius-xl: 16px; + --radius-full: 50%; + // Global Header variables --global-header-background: var(--sidebar-teambar-bg); --global-header-text: var(--sidebar-header-text-color); diff --git a/webapp/channels/src/sass/components/_alerts.scss b/webapp/channels/src/sass/components/_alerts.scss index 6df079d24f..bf630362cf 100644 --- a/webapp/channels/src/sass/components/_alerts.scss +++ b/webapp/channels/src/sass/components/_alerts.scss @@ -2,7 +2,7 @@ .alert { padding: 8px 12px; - border-radius: $border-rad; + border-radius: var(--radius-s); .alert-transparent { border-color: rgba(var(--center-channel-color-rgb), 0.12); diff --git a/webapp/channels/src/sass/components/_buttons.scss b/webapp/channels/src/sass/components/_buttons.scss index 99ed18476e..5a44068b56 100644 --- a/webapp/channels/src/sass/components/_buttons.scss +++ b/webapp/channels/src/sass/components/_buttons.scss @@ -26,7 +26,7 @@ button { display: inline-block; width: 8px; height: 8px; - border-radius: 50%; + border-radius: var(--radius-full); margin: 0 0 0 40px; background: #f74343; } @@ -40,7 +40,7 @@ button { justify-content: center; padding: 0 20px; border: none; - border-radius: $border-rad * 2; + border-radius: var(--radius-s); font-size: 14px; font-weight: 600; gap: 8px; diff --git a/webapp/channels/src/sass/components/_dnd-pickers-dropdown-menu.scss b/webapp/channels/src/sass/components/_dnd-pickers-dropdown-menu.scss index 11a5379d2b..1bb34cee84 100644 --- a/webapp/channels/src/sass/components/_dnd-pickers-dropdown-menu.scss +++ b/webapp/channels/src/sass/components/_dnd-pickers-dropdown-menu.scss @@ -16,7 +16,7 @@ .btn { height: 4rem; padding: 0 2rem; - border-radius: $border-rad * 2; + border-radius: var(--radius-s); font-size: 14px; font-weight: 600; } diff --git a/webapp/channels/src/sass/components/_edit-post-time-limit-button.scss b/webapp/channels/src/sass/components/_edit-post-time-limit-button.scss index c378221ae9..fe6ef929ba 100644 --- a/webapp/channels/src/sass/components/_edit-post-time-limit-button.scss +++ b/webapp/channels/src/sass/components/_edit-post-time-limit-button.scss @@ -2,7 +2,7 @@ height: 26px; padding: 0 8px; border-color: #5b6672; - border-radius: $border-rad * 2; + border-radius: var(--radius-s); background: transparent; color: #5b6672; transition: all 0.15s ease; diff --git a/webapp/channels/src/sass/components/_emoticons.scss b/webapp/channels/src/sass/components/_emoticons.scss index be6c602201..b9c822ee07 100644 --- a/webapp/channels/src/sass/components/_emoticons.scss +++ b/webapp/channels/src/sass/components/_emoticons.scss @@ -90,8 +90,7 @@ width: 350px; flex-direction: column; border: 1px solid; - border-radius: $border-rad; - border-radius: 4px; + border-radius: var(--radius-s); margin-right: 3px; background: var(--center-channel-bg); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); diff --git a/webapp/channels/src/sass/components/_inputs.scss b/webapp/channels/src/sass/components/_inputs.scss index 062ffcad32..9ba0fa9b3b 100644 --- a/webapp/channels/src/sass/components/_inputs.scss +++ b/webapp/channels/src/sass/components/_inputs.scss @@ -30,7 +30,7 @@ } .form-control { - border-radius: $border-rad; + border-radius: var(--radius-xs); text-align: left; &:focus { diff --git a/webapp/channels/src/sass/components/_popover.scss b/webapp/channels/src/sass/components/_popover.scss index ce84597e75..a1a15779ee 100644 --- a/webapp/channels/src/sass/components/_popover.scss +++ b/webapp/channels/src/sass/components/_popover.scss @@ -14,7 +14,7 @@ .popover { padding: 0; - border-radius: $border-rad * 2; + border-radius: var(--radius-s); background: var(--center-channel-bg); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); color: var(--center-channel-color); diff --git a/webapp/channels/src/sass/components/_scrollbar.scss b/webapp/channels/src/sass/components/_scrollbar.scss index 66b72145c7..67d271772b 100644 --- a/webapp/channels/src/sass/components/_scrollbar.scss +++ b/webapp/channels/src/sass/components/_scrollbar.scss @@ -10,7 +10,7 @@ } ::-webkit-scrollbar-thumb { - border-radius: $border-rad * 2; + border-radius: var(--radius-s); background: rgba(var(--center-channel-color-rgb), 0.4); } diff --git a/webapp/channels/src/sass/routes/_about-modal.scss b/webapp/channels/src/sass/routes/_about-modal.scss index 174ae6af99..212ecf5865 100644 --- a/webapp/channels/src/sass/routes/_about-modal.scss +++ b/webapp/channels/src/sass/routes/_about-modal.scss @@ -2,7 +2,7 @@ .modal { .modal-content { - border-radius: $border-rad; + border-radius: var(--radius-s); box-shadow: 0 0 10px rgba($black, 0.5); } diff --git a/webapp/channels/src/sass/routes/_admin-console.scss b/webapp/channels/src/sass/routes/_admin-console.scss index 52bbaa7813..ed793e70ff 100644 --- a/webapp/channels/src/sass/routes/_admin-console.scss +++ b/webapp/channels/src/sass/routes/_admin-console.scss @@ -491,7 +491,7 @@ height: 34px; align-items: center; justify-content: center; - border-radius: $border-rad; + border-radius: var(--radius-s); margin: 0 10px 0 0; text-decoration: none; transition: all 0.15s ease; diff --git a/webapp/channels/src/sass/utils/_variables.scss b/webapp/channels/src/sass/utils/_variables.scss index 57822d0602..f530ab4cca 100644 --- a/webapp/channels/src/sass/utils/_variables.scss +++ b/webapp/channels/src/sass/utils/_variables.scss @@ -26,7 +26,6 @@ $announcement-bar-height: 40px; $backstage-bar-height: 43px; // Random variables -$border-rad: 2px; $emoji-per-row: 9; // needs to match variable `EMOJI_PER_ROW` in emoji_picker.jsx // Transition timing defaults From a5c2f37d183c49a952ad4aa59ef1e68a7052d8cb Mon Sep 17 00:00:00 2001 From: Asaad Mahmood Date: Mon, 18 Mar 2024 14:34:19 +0500 Subject: [PATCH 5/6] MM-57116 - Updating multi select height (#26473) --- webapp/channels/src/sass/components/_multi-select.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/channels/src/sass/components/_multi-select.scss b/webapp/channels/src/sass/components/_multi-select.scss index bf577f92c1..c32121816a 100644 --- a/webapp/channels/src/sass/components/_multi-select.scss +++ b/webapp/channels/src/sass/components/_multi-select.scss @@ -3,7 +3,7 @@ .multi-select__container { display: flex; width: 100%; - height: 40px; + min-height: 40px; justify-content: space-between; padding: 0 15px; From 79b1e9d20081504a6caf57cdb9e9cb4a8d0552f5 Mon Sep 17 00:00:00 2001 From: M-ZubairAhmed Date: Mon, 18 Mar 2024 11:22:46 +0000 Subject: [PATCH 6/6] [MM-56594] Upgrade from Node-18.10(Maintaince) to Node-20.11(LTS) (#26335) --- .nvmrc | 2 +- webapp/package-lock.json | 2 +- webapp/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index aacb518104..a3597ecbd1 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.17 +20.11 diff --git a/webapp/package-lock.json b/webapp/package-lock.json index ddf8c39187..e5d8aed019 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -46,7 +46,7 @@ "webpack-dev-server": "4.13.3" }, "engines": { - "node": "^18.10.0", + "node": ">=18.10.0", "npm": "^9.0.0 || ^10.0.0" } }, diff --git a/webapp/package.json b/webapp/package.json index 84d69ae4c2..d6cd719d3d 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -2,7 +2,7 @@ "name": "@mattermost/webapp", "private": true, "engines": { - "node": "^18.10.0", + "node": ">=18.10.0", "npm": "^9.0.0 || ^10.0.0" }, "scripts": {