From d5e9aa9fb3095f31752d8ffebe66e79ca536d253 Mon Sep 17 00:00:00 2001 From: Miguel de la Cruz Date: Tue, 10 Sep 2024 22:33:00 +0200 Subject: [PATCH] Adds ConnectedWorkspacesSettings configuration block (#27820) * Adds ServerFederationSettings configuration block The Server Federation related configuration properties were located in the `ExperimentalSettings` config block. Now that the feature is going to get out of beta, and foreseeing more configuration properties being added to it, we're moving them to a block of its own. If the properties were set in the old location, their values should be carried over to the new ones. The old properties are left in place and marked as deprecated not to cause issues with the model. * Update System Console to include Server Federation section * Remove system console section * Move the configuration properties to ConnectedWorkspaces * Add ConnectedWorkspacesSettings to the telemetry --------- Co-authored-by: Mattermost Build --- server/channels/api4/apitestlib.go | 2 +- server/channels/api4/shared_channel_test.go | 4 +- server/channels/app/helper_test.go | 2 +- server/channels/app/remote_cluster_test.go | 2 +- server/channels/app/server.go | 4 +- server/channels/app/shared_channel_test.go | 4 +- .../app/slashcommands/command_share_test.go | 4 +- .../channels/app/slashcommands/helper_test.go | 2 +- server/config/client.go | 4 +- server/config/client_test.go | 8 +- .../platform/services/telemetry/telemetry.go | 94 +++++++------- server/public/model/config.go | 115 +++++++++++------- server/public/model/config_test.go | 34 ++++++ .../admin_console/admin_definition.tsx | 13 -- webapp/channels/src/i18n/en.json | 2 - 15 files changed, 171 insertions(+), 123 deletions(-) diff --git a/server/channels/api4/apitestlib.go b/server/channels/api4/apitestlib.go index 75c90fe79ff..60e273400ae 100644 --- a/server/channels/api4/apitestlib.go +++ b/server/channels/api4/apitestlib.go @@ -212,7 +212,7 @@ func setupTestHelper(dbStore store.Store, searchEngine *searchengine.Broker, ent } func getLicense(enterprise bool, cfg *model.Config) *model.License { - if *cfg.ExperimentalSettings.EnableRemoteClusterService || *cfg.ExperimentalSettings.EnableSharedChannels { + if *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService || *cfg.ConnectedWorkspacesSettings.EnableSharedChannels { return model.NewTestLicenseSKU(model.LicenseShortSkuProfessional) } if enterprise { diff --git a/server/channels/api4/shared_channel_test.go b/server/channels/api4/shared_channel_test.go index 90a00d0ec96..8bab8992513 100644 --- a/server/channels/api4/shared_channel_test.go +++ b/server/channels/api4/shared_channel_test.go @@ -24,8 +24,8 @@ var ( func setupForSharedChannels(tb testing.TB) *TestHelper { th := SetupConfig(tb, func(cfg *model.Config) { - *cfg.ExperimentalSettings.EnableRemoteClusterService = true - *cfg.ExperimentalSettings.EnableSharedChannels = true + *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService = true + *cfg.ConnectedWorkspacesSettings.EnableSharedChannels = true }) th.App.UpdateConfig(func(cfg *model.Config) { diff --git a/server/channels/app/helper_test.go b/server/channels/app/helper_test.go index 6c967973bb8..7d0ca2d67d2 100644 --- a/server/channels/app/helper_test.go +++ b/server/channels/app/helper_test.go @@ -145,7 +145,7 @@ func setupTestHelper(dbStore store.Store, enterprise bool, includeCacheLayer boo } func getLicense(enterprise bool, cfg *model.Config) *model.License { - if *cfg.ExperimentalSettings.EnableRemoteClusterService || *cfg.ExperimentalSettings.EnableSharedChannels { + if *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService || *cfg.ConnectedWorkspacesSettings.EnableSharedChannels { return model.NewTestLicenseSKU(model.LicenseShortSkuProfessional) } if enterprise { diff --git a/server/channels/app/remote_cluster_test.go b/server/channels/app/remote_cluster_test.go index 3a98355d6c1..46082a35586 100644 --- a/server/channels/app/remote_cluster_test.go +++ b/server/channels/app/remote_cluster_test.go @@ -15,7 +15,7 @@ import ( func setupRemoteCluster(tb testing.TB) *TestHelper { return SetupConfig(tb, func(cfg *model.Config) { - *cfg.ExperimentalSettings.EnableRemoteClusterService = true + *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService = true }) } diff --git a/server/channels/app/server.go b/server/channels/app/server.go index a2cee70725a..5d6759ca2ee 100644 --- a/server/channels/app/server.go +++ b/server/channels/app/server.go @@ -589,7 +589,7 @@ func (s *Server) startInterClusterServices(license *model.License) error { } // Config check - if !*s.platform.Config().ExperimentalSettings.EnableRemoteClusterService && !*s.platform.Config().ExperimentalSettings.EnableSharedChannels { + if !*s.platform.Config().ConnectedWorkspacesSettings.EnableRemoteClusterService && !*s.platform.Config().ConnectedWorkspacesSettings.EnableSharedChannels { mlog.Debug("Remote Cluster Service disabled via config") return nil } @@ -618,7 +618,7 @@ func (s *Server) startInterClusterServices(license *model.License) error { } // Config check - if !*s.platform.Config().ExperimentalSettings.EnableSharedChannels { + if !*s.platform.Config().ConnectedWorkspacesSettings.EnableSharedChannels { mlog.Debug("Shared Channels Service disabled via config") return nil } diff --git a/server/channels/app/shared_channel_test.go b/server/channels/app/shared_channel_test.go index 4d6e3448cbe..3fcd489e51b 100644 --- a/server/channels/app/shared_channel_test.go +++ b/server/channels/app/shared_channel_test.go @@ -14,8 +14,8 @@ import ( func setupSharedChannels(tb testing.TB) *TestHelper { return SetupConfig(tb, func(cfg *model.Config) { - *cfg.ExperimentalSettings.EnableRemoteClusterService = true - *cfg.ExperimentalSettings.EnableSharedChannels = true + *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService = true + *cfg.ConnectedWorkspacesSettings.EnableSharedChannels = true }) } diff --git a/server/channels/app/slashcommands/command_share_test.go b/server/channels/app/slashcommands/command_share_test.go index cbcee627613..8086493b4ec 100644 --- a/server/channels/app/slashcommands/command_share_test.go +++ b/server/channels/app/slashcommands/command_share_test.go @@ -20,8 +20,8 @@ import ( func setupForSharedChannels(tb testing.TB) *TestHelper { return setupConfig(tb, func(cfg *model.Config) { - *cfg.ExperimentalSettings.EnableRemoteClusterService = true - *cfg.ExperimentalSettings.EnableSharedChannels = true + *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService = true + *cfg.ConnectedWorkspacesSettings.EnableSharedChannels = true }) } diff --git a/server/channels/app/slashcommands/helper_test.go b/server/channels/app/slashcommands/helper_test.go index e75b89c52f0..0ec5973944d 100644 --- a/server/channels/app/slashcommands/helper_test.go +++ b/server/channels/app/slashcommands/helper_test.go @@ -138,7 +138,7 @@ func setupTestHelper(dbStore store.Store, enterprise bool, includeCacheLayer boo } func getLicense(enterprise bool, cfg *model.Config) *model.License { - if *cfg.ExperimentalSettings.EnableRemoteClusterService || *cfg.ExperimentalSettings.EnableSharedChannels { + if *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService || *cfg.ConnectedWorkspacesSettings.EnableSharedChannels { return model.NewTestLicenseSKU(model.LicenseShortSkuProfessional) } if enterprise { diff --git a/server/config/client.go b/server/config/client.go index 77110debd1c..7927c3f0e61 100644 --- a/server/config/client.go +++ b/server/config/client.go @@ -215,8 +215,8 @@ func GenerateClientConfig(c *model.Config, telemetryID string, license *model.Li } if license.HasSharedChannels() { - props["ExperimentalSharedChannels"] = strconv.FormatBool(*c.ExperimentalSettings.EnableSharedChannels) - props["ExperimentalRemoteClusterService"] = strconv.FormatBool(c.FeatureFlags.EnableRemoteClusterService && *c.ExperimentalSettings.EnableRemoteClusterService) + props["ExperimentalSharedChannels"] = strconv.FormatBool(*c.ConnectedWorkspacesSettings.EnableSharedChannels) + props["ExperimentalRemoteClusterService"] = strconv.FormatBool(c.FeatureFlags.EnableRemoteClusterService && *c.ConnectedWorkspacesSettings.EnableRemoteClusterService) } if license.SkuShortName == model.LicenseShortSkuProfessional || license.SkuShortName == model.LicenseShortSkuEnterprise { diff --git a/server/config/client_test.go b/server/config/client_test.go index bd6c9d9923a..9c37f54a625 100644 --- a/server/config/client_test.go +++ b/server/config/client_test.go @@ -189,7 +189,7 @@ func TestGetClientConfig(t *testing.T) { { "Shared channels other license", &model.Config{ - ExperimentalSettings: model.ExperimentalSettings{ + ConnectedWorkspacesSettings: model.ConnectedWorkspacesSettings{ EnableSharedChannels: model.NewPointer(true), }, }, @@ -207,7 +207,7 @@ func TestGetClientConfig(t *testing.T) { { "licensed for shared channels", &model.Config{ - ExperimentalSettings: model.ExperimentalSettings{ + ConnectedWorkspacesSettings: model.ConnectedWorkspacesSettings{ EnableSharedChannels: model.NewPointer(true), }, }, @@ -225,7 +225,7 @@ func TestGetClientConfig(t *testing.T) { { "Shared channels professional license", &model.Config{ - ExperimentalSettings: model.ExperimentalSettings{ + ConnectedWorkspacesSettings: model.ConnectedWorkspacesSettings{ EnableSharedChannels: model.NewPointer(true), }, }, @@ -256,7 +256,7 @@ func TestGetClientConfig(t *testing.T) { { "Shared channels enterprise license", &model.Config{ - ExperimentalSettings: model.ExperimentalSettings{ + ConnectedWorkspacesSettings: model.ConnectedWorkspacesSettings{ EnableSharedChannels: model.NewPointer(true), }, }, diff --git a/server/platform/services/telemetry/telemetry.go b/server/platform/services/telemetry/telemetry.go index 570a445e083..df3fed43cc3 100644 --- a/server/platform/services/telemetry/telemetry.go +++ b/server/platform/services/telemetry/telemetry.go @@ -42,49 +42,50 @@ const ( EnvVarInstallType = "MM_INSTALL_TYPE" - TrackConfigService = "config_service" - TrackConfigTeam = "config_team" - TrackConfigClientReq = "config_client_requirements" - TrackConfigSQL = "config_sql" - TrackConfigLog = "config_log" - TrackConfigAudit = "config_audit" - TrackConfigNotificationLog = "config_notifications_log" - TrackConfigFile = "config_file" - TrackConfigRate = "config_rate" - TrackConfigEmail = "config_email" - TrackConfigPrivacy = "config_privacy" - TrackConfigTheme = "config_theme" - TrackConfigOAuth = "config_oauth" - TrackConfigLDAP = "config_ldap" - TrackConfigCompliance = "config_compliance" - TrackConfigLocalization = "config_localization" - TrackConfigSAML = "config_saml" - TrackConfigPassword = "config_password" - TrackConfigCluster = "config_cluster" - TrackConfigMetrics = "config_metrics" - TrackConfigSupport = "config_support" - TrackConfigNativeApp = "config_nativeapp" - TrackConfigExperimental = "config_experimental" - TrackConfigAnalytics = "config_analytics" - TrackConfigAnnouncement = "config_announcement" - TrackConfigElasticsearch = "config_elasticsearch" - TrackConfigPlugin = "config_plugin" - TrackConfigDataRetention = "config_data_retention" - TrackConfigMessageExport = "config_message_export" - TrackConfigDisplay = "config_display" - TrackConfigGuestAccounts = "config_guest_accounts" - TrackConfigImageProxy = "config_image_proxy" - TrackConfigBleve = "config_bleve" - TrackConfigExport = "config_export" - TrackConfigWrangler = "config_wrangler" - TrackFeatureFlags = "config_feature_flags" - TrackPermissionsGeneral = "permissions_general" - TrackPermissionsSystemScheme = "permissions_system_scheme" - TrackPermissionsTeamSchemes = "permissions_team_schemes" - TrackPermissionsSystemRoles = "permissions_system_roles" - TrackElasticsearch = "elasticsearch" - TrackGroups = "groups" - TrackChannelModeration = "channel_moderation" + TrackConfigService = "config_service" + TrackConfigTeam = "config_team" + TrackConfigClientReq = "config_client_requirements" + TrackConfigSQL = "config_sql" + TrackConfigLog = "config_log" + TrackConfigAudit = "config_audit" + TrackConfigNotificationLog = "config_notifications_log" + TrackConfigFile = "config_file" + TrackConfigRate = "config_rate" + TrackConfigEmail = "config_email" + TrackConfigPrivacy = "config_privacy" + TrackConfigTheme = "config_theme" + TrackConfigOAuth = "config_oauth" + TrackConfigLDAP = "config_ldap" + TrackConfigCompliance = "config_compliance" + TrackConfigLocalization = "config_localization" + TrackConfigSAML = "config_saml" + TrackConfigPassword = "config_password" + TrackConfigCluster = "config_cluster" + TrackConfigMetrics = "config_metrics" + TrackConfigSupport = "config_support" + TrackConfigNativeApp = "config_nativeapp" + TrackConfigExperimental = "config_experimental" + TrackConfigAnalytics = "config_analytics" + TrackConfigAnnouncement = "config_announcement" + TrackConfigElasticsearch = "config_elasticsearch" + TrackConfigPlugin = "config_plugin" + TrackConfigDataRetention = "config_data_retention" + TrackConfigMessageExport = "config_message_export" + TrackConfigDisplay = "config_display" + TrackConfigGuestAccounts = "config_guest_accounts" + TrackConfigImageProxy = "config_image_proxy" + TrackConfigBleve = "config_bleve" + TrackConfigExport = "config_export" + TrackConfigWrangler = "config_wrangler" + TrackConfigConnectedWorkspaces = "config_connected_workspaces" + TrackFeatureFlags = "config_feature_flags" + TrackPermissionsGeneral = "permissions_general" + TrackPermissionsSystemScheme = "permissions_system_scheme" + TrackPermissionsTeamSchemes = "permissions_team_schemes" + TrackPermissionsSystemRoles = "permissions_system_roles" + TrackElasticsearch = "elasticsearch" + TrackGroups = "groups" + TrackChannelModeration = "channel_moderation" TrackActivity = "activity" TrackLicense = "license" @@ -773,8 +774,6 @@ func (ts *TelemetryService) trackConfig() { "isdefault_client_side_cert_check": isDefault(*cfg.ExperimentalSettings.ClientSideCertCheck, model.ClientSideCertCheckPrimaryAuth), "link_metadata_timeout_milliseconds": *cfg.ExperimentalSettings.LinkMetadataTimeoutMilliseconds, "restrict_system_admin": *cfg.ExperimentalSettings.RestrictSystemAdmin, - "enable_shared_channels": *cfg.ExperimentalSettings.EnableSharedChannels, - "enable_remote_cluster_service": *cfg.ExperimentalSettings.EnableRemoteClusterService && cfg.FeatureFlags.EnableRemoteClusterService, "enable_app_bar": !*cfg.ExperimentalSettings.DisableAppBar, "disable_refetching_on_browser_focus": *cfg.ExperimentalSettings.DisableRefetchingOnBrowserFocus, "delay_channel_autocomplete": *cfg.ExperimentalSettings.DelayChannelAutocomplete, @@ -891,6 +890,11 @@ func (ts *TelemetryService) trackConfig() { "move_thread_from_group_message_channel_enable": cfg.WranglerSettings.MoveThreadFromGroupMessageChannelEnable, }) + ts.SendTelemetry(TrackConfigConnectedWorkspaces, map[string]any{ + "enable_shared_channels": *cfg.ConnectedWorkspacesSettings.EnableSharedChannels, + "enable_remote_cluster_service": *cfg.ConnectedWorkspacesSettings.EnableRemoteClusterService && cfg.FeatureFlags.EnableRemoteClusterService, + }) + // Convert feature flags to map[string]any for sending flags := cfg.FeatureFlags.ToMap() interfaceFlags := make(map[string]any) diff --git a/server/public/model/config.go b/server/public/model/config.go index bdcac297820..4eb2b4e8c13 100644 --- a/server/public/model/config.go +++ b/server/public/model/config.go @@ -1068,8 +1068,8 @@ type ExperimentalSettings struct { ClientSideCertCheck *string `access:"experimental_features,cloud_restrictable"` LinkMetadataTimeoutMilliseconds *int64 `access:"experimental_features,write_restrictable,cloud_restrictable"` RestrictSystemAdmin *bool `access:"experimental_features,write_restrictable"` - EnableSharedChannels *bool `access:"experimental_features"` - EnableRemoteClusterService *bool `access:"experimental_features"` + EnableSharedChannels *bool `access:"experimental_features"` // Deprecated: use `ConnectedWorkspacesSettings.EnableSharedChannels` + EnableRemoteClusterService *bool `access:"experimental_features"` // Deprecated: use `ConnectedWorkspacesSettings.EnableRemoteClusterService` DisableAppBar *bool `access:"experimental_features"` DisableRefetchingOnBrowserFocus *bool `access:"experimental_features"` DelayChannelAutocomplete *bool `access:"experimental_features"` @@ -3242,6 +3242,29 @@ func (w *WranglerSettings) IsValid() *AppError { return nil } +type ConnectedWorkspacesSettings struct { + EnableSharedChannels *bool + EnableRemoteClusterService *bool +} + +func (c *ConnectedWorkspacesSettings) SetDefaults(isUpdate bool, e ExperimentalSettings) { + if c.EnableSharedChannels == nil { + if isUpdate && e.EnableSharedChannels != nil { + c.EnableSharedChannels = e.EnableSharedChannels + } else { + c.EnableSharedChannels = NewPointer(false) + } + } + + if c.EnableRemoteClusterService == nil { + if isUpdate && e.EnableRemoteClusterService != nil { + c.EnableRemoteClusterService = e.EnableRemoteClusterService + } else { + c.EnableRemoteClusterService = NewPointer(false) + } + } +} + type GlobalRelayMessageExportSettings struct { CustomerType *string `access:"compliance_compliance_export"` // must be either A9, A10 or CUSTOM, dictates SMTP server url SMTPUsername *string `access:"compliance_compliance_export"` @@ -3497,49 +3520,50 @@ const ConfigAccessTagAnySysConsoleRead = "*_read" // Product bool `access:write_restrictable` // } type Config struct { - ServiceSettings ServiceSettings - TeamSettings TeamSettings - ClientRequirements ClientRequirements - SqlSettings SqlSettings - LogSettings LogSettings - ExperimentalAuditSettings ExperimentalAuditSettings - NotificationLogSettings NotificationLogSettings - PasswordSettings PasswordSettings - FileSettings FileSettings - EmailSettings EmailSettings - RateLimitSettings RateLimitSettings - PrivacySettings PrivacySettings - SupportSettings SupportSettings - AnnouncementSettings AnnouncementSettings - ThemeSettings ThemeSettings - GitLabSettings SSOSettings - GoogleSettings SSOSettings - Office365Settings Office365Settings - OpenIdSettings SSOSettings - LdapSettings LdapSettings - ComplianceSettings ComplianceSettings - LocalizationSettings LocalizationSettings - SamlSettings SamlSettings - NativeAppSettings NativeAppSettings - CacheSettings CacheSettings - ClusterSettings ClusterSettings - MetricsSettings MetricsSettings - ExperimentalSettings ExperimentalSettings - AnalyticsSettings AnalyticsSettings - ElasticsearchSettings ElasticsearchSettings - BleveSettings BleveSettings - DataRetentionSettings DataRetentionSettings - MessageExportSettings MessageExportSettings - JobSettings JobSettings - PluginSettings PluginSettings - DisplaySettings DisplaySettings - GuestAccountsSettings GuestAccountsSettings - ImageProxySettings ImageProxySettings - CloudSettings CloudSettings // telemetry: none - FeatureFlags *FeatureFlags `access:"*_read" json:",omitempty"` - ImportSettings ImportSettings // telemetry: none - ExportSettings ExportSettings - WranglerSettings WranglerSettings + ServiceSettings ServiceSettings + TeamSettings TeamSettings + ClientRequirements ClientRequirements + SqlSettings SqlSettings + LogSettings LogSettings + ExperimentalAuditSettings ExperimentalAuditSettings + NotificationLogSettings NotificationLogSettings + PasswordSettings PasswordSettings + FileSettings FileSettings + EmailSettings EmailSettings + RateLimitSettings RateLimitSettings + PrivacySettings PrivacySettings + SupportSettings SupportSettings + AnnouncementSettings AnnouncementSettings + ThemeSettings ThemeSettings + GitLabSettings SSOSettings + GoogleSettings SSOSettings + Office365Settings Office365Settings + OpenIdSettings SSOSettings + LdapSettings LdapSettings + ComplianceSettings ComplianceSettings + LocalizationSettings LocalizationSettings + SamlSettings SamlSettings + NativeAppSettings NativeAppSettings + CacheSettings CacheSettings + ClusterSettings ClusterSettings + MetricsSettings MetricsSettings + ExperimentalSettings ExperimentalSettings + AnalyticsSettings AnalyticsSettings + ElasticsearchSettings ElasticsearchSettings + BleveSettings BleveSettings + DataRetentionSettings DataRetentionSettings + MessageExportSettings MessageExportSettings + JobSettings JobSettings + PluginSettings PluginSettings + DisplaySettings DisplaySettings + GuestAccountsSettings GuestAccountsSettings + ImageProxySettings ImageProxySettings + CloudSettings CloudSettings // telemetry: none + FeatureFlags *FeatureFlags `access:"*_read" json:",omitempty"` + ImportSettings ImportSettings // telemetry: none + ExportSettings ExportSettings + WranglerSettings WranglerSettings + ConnectedWorkspacesSettings ConnectedWorkspacesSettings } func (o *Config) Auditable() map[string]interface{} { @@ -3656,6 +3680,7 @@ func (o *Config) SetDefaults() { o.ImportSettings.SetDefaults() o.ExportSettings.SetDefaults() o.WranglerSettings.SetDefaults() + o.ConnectedWorkspacesSettings.SetDefaults(isUpdate, o.ExperimentalSettings) } func (o *Config) IsValid() *AppError { diff --git a/server/public/model/config_test.go b/server/public/model/config_test.go index b5ffc1cc397..3d7b7775c78 100644 --- a/server/public/model/config_test.go +++ b/server/public/model/config_test.go @@ -1761,3 +1761,37 @@ func TestConfigGetFileRetentionHours(t *testing.T) { }) } } + +func TestConfigDefaultConnectedWorkspacesSettings(t *testing.T) { + t.Run("if the config is new, default values should be established", func(t *testing.T) { + c := Config{} + c.SetDefaults() + require.False(t, *c.ConnectedWorkspacesSettings.EnableSharedChannels) + require.False(t, *c.ConnectedWorkspacesSettings.EnableRemoteClusterService) + }) + + t.Run("if the config is being updated and server federation settings had no values, experimental settings values should be migrated", func(t *testing.T) { + c := Config{} + c.SetDefaults() + c.ConnectedWorkspacesSettings = ConnectedWorkspacesSettings{} + c.ExperimentalSettings.EnableSharedChannels = NewPointer(true) + c.ExperimentalSettings.EnableRemoteClusterService = NewPointer(false) + + c.SetDefaults() + require.True(t, *c.ConnectedWorkspacesSettings.EnableSharedChannels) + require.False(t, *c.ConnectedWorkspacesSettings.EnableRemoteClusterService) + }) + + t.Run("if the config is being updated and server federation settings already have values, they should not change", func(t *testing.T) { + c := Config{} + c.SetDefaults() + c.ConnectedWorkspacesSettings.EnableSharedChannels = NewPointer(false) + c.ConnectedWorkspacesSettings.EnableRemoteClusterService = NewPointer(true) + c.ExperimentalSettings.EnableSharedChannels = NewPointer(true) + c.ExperimentalSettings.EnableRemoteClusterService = NewPointer(false) + + c.SetDefaults() + require.False(t, *c.ConnectedWorkspacesSettings.EnableSharedChannels) + require.True(t, *c.ConnectedWorkspacesSettings.EnableRemoteClusterService) + }) +} diff --git a/webapp/channels/src/components/admin_console/admin_definition.tsx b/webapp/channels/src/components/admin_console/admin_definition.tsx index 1c74cea4348..fddd626531b 100644 --- a/webapp/channels/src/components/admin_console/admin_definition.tsx +++ b/webapp/channels/src/components/admin_console/admin_definition.tsx @@ -6213,19 +6213,6 @@ const AdminDefinition: AdminDefinitionType = { placeholder: defineMessage({id: 'admin.experimental.userStatusAwayTimeout.example', defaultMessage: 'E.g.: "300"'}), isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.EXPERIMENTAL.FEATURES)), }, - { - type: 'bool', - key: 'ExperimentalSettings.EnableSharedChannels', - label: defineMessage({id: 'admin.experimental.enableSharedChannels.title', defaultMessage: 'Enable Shared Channels:'}), - help_text: defineMessage({id: 'admin.experimental.enableSharedChannels.desc', defaultMessage: 'Toggles Shared Channels'}), - help_text_markdown: false, - isHidden: it.not(it.any( - it.licensedForFeature('SharedChannels'), - it.licensedForSku(LicenseSkus.Enterprise), - it.licensedForSku(LicenseSkus.Professional), - )), - isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.EXPERIMENTAL.FEATURES)), - }, { type: 'bool', key: 'ExperimentalSettings.DisableAppBar', diff --git a/webapp/channels/src/i18n/en.json b/webapp/channels/src/i18n/en.json index 40b87d549cf..7c00fea7cab 100644 --- a/webapp/channels/src/i18n/en.json +++ b/webapp/channels/src/i18n/en.json @@ -931,8 +931,6 @@ "admin.experimental.enableChannelViewedMessages.title": "Enable Channel Viewed WebSocket Messages:", "admin.experimental.enableOnboardingFlow.desc": "When true, new users are shown steps to complete as part of an onboarding process", "admin.experimental.enableOnboardingFlow.title": "Enable Onboarding:", - "admin.experimental.enableSharedChannels.desc": "When true, users who have permission to manage shared channels can configure another Mattermost server to synchronize and share a channel. Disabling shared channels stops synchronizing the channel with the other Mattermost server, however the channel continues to function for local users per normal channel behavior.", - "admin.experimental.enableSharedChannels.title": "Enable Shared Channels:", "admin.experimental.enableThemeSelection.desc": "Enables the **Display > Theme** tab in Settings so users can select their theme.", "admin.experimental.enableThemeSelection.title": "Enable Theme Selection:", "admin.experimental.enableTutorial.desc": "When true, users are prompted with a tutorial when they open Mattermost for the first time after account creation. When false, the tutorial is disabled, and users are placed in Town Square when they open Mattermost for the first time after account creation.",