From 0a9200c35d4f3c5c0462135f5f6dfe60bfe364e8 Mon Sep 17 00:00:00 2001 From: Chris Duarte Date: Wed, 10 Jan 2018 14:04:04 -0800 Subject: Add EnableDefaultChannelLeaveJoinMessages config setting (#7961) --- app/channel.go | 20 +++++---- app/diagnostics.go | 95 +++++++++++++++++++++--------------------- config/default.json | 3 +- model/config.go | 117 +++++++++++++++++++++++++++------------------------- utils/config.go | 1 + 5 files changed, 125 insertions(+), 111 deletions(-) diff --git a/app/channel.go b/app/channel.go index d37f681bb..4b6a99d63 100644 --- a/app/channel.go +++ b/app/channel.go @@ -63,13 +63,15 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, channelRole s l4g.Warn("Failed to update ChannelMemberHistory table %v", result.Err) } - if requestor == nil { - if err := a.postJoinTeamMessage(user, townSquare); err != nil { - l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) - } - } else { - if err := a.PostAddToTeamMessage(requestor, user, townSquare, ""); err != nil { - l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages == true { + if requestor == nil { + if err := a.postJoinTeamMessage(user, townSquare); err != nil { + l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + } + } else { + if err := a.PostAddToTeamMessage(requestor, user, townSquare, ""); err != nil { + l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + } } } @@ -1012,6 +1014,10 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError { return err } + if channel.Name == model.DEFAULT_CHANNEL && *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages == false { + return nil + } + a.Go(func() { a.postLeaveChannelMessage(user, channel) }) diff --git a/app/diagnostics.go b/app/diagnostics.go index 8fd7f9c85..2ef608ee3 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -190,53 +190,54 @@ func (a *App) trackActivity() { func (a *App) trackConfig() { cfg := a.Config() a.SendDiagnostic(TRACK_CONFIG_SERVICE, map[string]interface{}{ - "web_server_mode": *cfg.ServiceSettings.WebserverMode, - "enable_security_fix_alert": *cfg.ServiceSettings.EnableSecurityFixAlert, - "enable_insecure_outgoing_connections": *cfg.ServiceSettings.EnableInsecureOutgoingConnections, - "enable_incoming_webhooks": cfg.ServiceSettings.EnableIncomingWebhooks, - "enable_outgoing_webhooks": cfg.ServiceSettings.EnableOutgoingWebhooks, - "enable_commands": *cfg.ServiceSettings.EnableCommands, - "enable_only_admin_integrations": *cfg.ServiceSettings.EnableOnlyAdminIntegrations, - "enable_post_username_override": cfg.ServiceSettings.EnablePostUsernameOverride, - "enable_post_icon_override": cfg.ServiceSettings.EnablePostIconOverride, - "enable_apiv3": *cfg.ServiceSettings.EnableAPIv3, - "enable_user_access_tokens": *cfg.ServiceSettings.EnableUserAccessTokens, - "enable_custom_emoji": *cfg.ServiceSettings.EnableCustomEmoji, - "enable_emoji_picker": *cfg.ServiceSettings.EnableEmojiPicker, - "experimental_enable_authentication_transfer": *cfg.ServiceSettings.ExperimentalEnableAuthenticationTransfer, - "restrict_custom_emoji_creation": *cfg.ServiceSettings.RestrictCustomEmojiCreation, - "enable_testing": cfg.ServiceSettings.EnableTesting, - "enable_developer": *cfg.ServiceSettings.EnableDeveloper, - "enable_multifactor_authentication": *cfg.ServiceSettings.EnableMultifactorAuthentication, - "enforce_multifactor_authentication": *cfg.ServiceSettings.EnforceMultifactorAuthentication, - "enable_oauth_service_provider": cfg.ServiceSettings.EnableOAuthServiceProvider, - "connection_security": *cfg.ServiceSettings.ConnectionSecurity, - "uses_letsencrypt": *cfg.ServiceSettings.UseLetsEncrypt, - "forward_80_to_443": *cfg.ServiceSettings.Forward80To443, - "maximum_login_attempts": *cfg.ServiceSettings.MaximumLoginAttempts, - "session_length_web_in_days": *cfg.ServiceSettings.SessionLengthWebInDays, - "session_length_mobile_in_days": *cfg.ServiceSettings.SessionLengthMobileInDays, - "session_length_sso_in_days": *cfg.ServiceSettings.SessionLengthSSOInDays, - "session_cache_in_minutes": *cfg.ServiceSettings.SessionCacheInMinutes, - "session_idle_timeout_in_minutes": *cfg.ServiceSettings.SessionIdleTimeoutInMinutes, - "isdefault_site_url": isDefault(*cfg.ServiceSettings.SiteURL, model.SERVICE_SETTINGS_DEFAULT_SITE_URL), - "isdefault_tls_cert_file": isDefault(*cfg.ServiceSettings.TLSCertFile, model.SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE), - "isdefault_tls_key_file": isDefault(*cfg.ServiceSettings.TLSKeyFile, model.SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE), - "isdefault_read_timeout": isDefault(*cfg.ServiceSettings.ReadTimeout, model.SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT), - "isdefault_write_timeout": isDefault(*cfg.ServiceSettings.WriteTimeout, model.SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT), - "isdefault_google_developer_key": isDefault(cfg.ServiceSettings.GoogleDeveloperKey, ""), - "isdefault_allow_cors_from": isDefault(*cfg.ServiceSettings.AllowCorsFrom, model.SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM), - "isdefault_allowed_untrusted_internal_connections": isDefault(*cfg.ServiceSettings.AllowedUntrustedInternalConnections, ""), - "restrict_post_delete": *cfg.ServiceSettings.RestrictPostDelete, - "allow_edit_post": *cfg.ServiceSettings.AllowEditPost, - "post_edit_time_limit": *cfg.ServiceSettings.PostEditTimeLimit, - "enable_user_typing_messages": *cfg.ServiceSettings.EnableUserTypingMessages, - "enable_channel_viewed_messages": *cfg.ServiceSettings.EnableChannelViewedMessages, - "time_between_user_typing_updates_milliseconds": *cfg.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds, - "cluster_log_timeout_milliseconds": *cfg.ServiceSettings.ClusterLogTimeoutMilliseconds, - "enable_post_search": *cfg.ServiceSettings.EnablePostSearch, - "enable_user_statuses": *cfg.ServiceSettings.EnableUserStatuses, - "close_unused_direct_messages": *cfg.ServiceSettings.CloseUnusedDirectMessages, + "web_server_mode": *cfg.ServiceSettings.WebserverMode, + "enable_security_fix_alert": *cfg.ServiceSettings.EnableSecurityFixAlert, + "enable_insecure_outgoing_connections": *cfg.ServiceSettings.EnableInsecureOutgoingConnections, + "enable_incoming_webhooks": cfg.ServiceSettings.EnableIncomingWebhooks, + "enable_outgoing_webhooks": cfg.ServiceSettings.EnableOutgoingWebhooks, + "enable_commands": *cfg.ServiceSettings.EnableCommands, + "enable_only_admin_integrations": *cfg.ServiceSettings.EnableOnlyAdminIntegrations, + "enable_post_username_override": cfg.ServiceSettings.EnablePostUsernameOverride, + "enable_post_icon_override": cfg.ServiceSettings.EnablePostIconOverride, + "enable_apiv3": *cfg.ServiceSettings.EnableAPIv3, + "enable_user_access_tokens": *cfg.ServiceSettings.EnableUserAccessTokens, + "enable_custom_emoji": *cfg.ServiceSettings.EnableCustomEmoji, + "enable_emoji_picker": *cfg.ServiceSettings.EnableEmojiPicker, + "experimental_enable_authentication_transfer": *cfg.ServiceSettings.ExperimentalEnableAuthenticationTransfer, + "restrict_custom_emoji_creation": *cfg.ServiceSettings.RestrictCustomEmojiCreation, + "enable_testing": cfg.ServiceSettings.EnableTesting, + "enable_developer": *cfg.ServiceSettings.EnableDeveloper, + "enable_multifactor_authentication": *cfg.ServiceSettings.EnableMultifactorAuthentication, + "enforce_multifactor_authentication": *cfg.ServiceSettings.EnforceMultifactorAuthentication, + "enable_oauth_service_provider": cfg.ServiceSettings.EnableOAuthServiceProvider, + "connection_security": *cfg.ServiceSettings.ConnectionSecurity, + "uses_letsencrypt": *cfg.ServiceSettings.UseLetsEncrypt, + "forward_80_to_443": *cfg.ServiceSettings.Forward80To443, + "maximum_login_attempts": *cfg.ServiceSettings.MaximumLoginAttempts, + "session_length_web_in_days": *cfg.ServiceSettings.SessionLengthWebInDays, + "session_length_mobile_in_days": *cfg.ServiceSettings.SessionLengthMobileInDays, + "session_length_sso_in_days": *cfg.ServiceSettings.SessionLengthSSOInDays, + "session_cache_in_minutes": *cfg.ServiceSettings.SessionCacheInMinutes, + "session_idle_timeout_in_minutes": *cfg.ServiceSettings.SessionIdleTimeoutInMinutes, + "isdefault_site_url": isDefault(*cfg.ServiceSettings.SiteURL, model.SERVICE_SETTINGS_DEFAULT_SITE_URL), + "isdefault_tls_cert_file": isDefault(*cfg.ServiceSettings.TLSCertFile, model.SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE), + "isdefault_tls_key_file": isDefault(*cfg.ServiceSettings.TLSKeyFile, model.SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE), + "isdefault_read_timeout": isDefault(*cfg.ServiceSettings.ReadTimeout, model.SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT), + "isdefault_write_timeout": isDefault(*cfg.ServiceSettings.WriteTimeout, model.SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT), + "isdefault_google_developer_key": isDefault(cfg.ServiceSettings.GoogleDeveloperKey, ""), + "isdefault_allow_cors_from": isDefault(*cfg.ServiceSettings.AllowCorsFrom, model.SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM), + "isdefault_allowed_untrusted_internal_connections": isDefault(*cfg.ServiceSettings.AllowedUntrustedInternalConnections, ""), + "restrict_post_delete": *cfg.ServiceSettings.RestrictPostDelete, + "allow_edit_post": *cfg.ServiceSettings.AllowEditPost, + "post_edit_time_limit": *cfg.ServiceSettings.PostEditTimeLimit, + "enable_user_typing_messages": *cfg.ServiceSettings.EnableUserTypingMessages, + "enable_channel_viewed_messages": *cfg.ServiceSettings.EnableChannelViewedMessages, + "time_between_user_typing_updates_milliseconds": *cfg.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds, + "cluster_log_timeout_milliseconds": *cfg.ServiceSettings.ClusterLogTimeoutMilliseconds, + "enable_post_search": *cfg.ServiceSettings.EnablePostSearch, + "enable_user_statuses": *cfg.ServiceSettings.EnableUserStatuses, + "close_unused_direct_messages": *cfg.ServiceSettings.CloseUnusedDirectMessages, + "experimental_enable_default_channel_leave_join_messages": *cfg.ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages, }) a.SendDiagnostic(TRACK_CONFIG_TEAM, map[string]interface{}{ diff --git a/config/default.json b/config/default.json index 740edee6b..6ebf29789 100644 --- a/config/default.json +++ b/config/default.json @@ -55,7 +55,8 @@ "ClusterLogTimeoutMilliseconds": 2000, "EnablePreviewFeatures": true, "CloseUnusedDirectMessages": false, - "EnableTutorial": true + "EnableTutorial": true, + "ExperimentalEnableDefaultChannelLeaveJoinMessages": true }, "TeamSettings": { "SiteName": "Mattermost", diff --git a/model/config.go b/model/config.go index fb34d1a04..d1bb0a41c 100644 --- a/model/config.go +++ b/model/config.go @@ -157,62 +157,63 @@ const ( ) type ServiceSettings struct { - SiteURL *string - LicenseFileLocation *string - ListenAddress *string - ConnectionSecurity *string - TLSCertFile *string - TLSKeyFile *string - UseLetsEncrypt *bool - LetsEncryptCertificateCacheFile *string - Forward80To443 *bool - ReadTimeout *int - WriteTimeout *int - MaximumLoginAttempts *int - GoroutineHealthThreshold *int - GoogleDeveloperKey string - EnableOAuthServiceProvider bool - EnableIncomingWebhooks bool - EnableOutgoingWebhooks bool - EnableCommands *bool - EnableOnlyAdminIntegrations *bool - EnablePostUsernameOverride bool - EnablePostIconOverride bool - EnableAPIv3 *bool - EnableLinkPreviews *bool - EnableTesting bool - EnableDeveloper *bool - EnableSecurityFixAlert *bool - EnableInsecureOutgoingConnections *bool - AllowedUntrustedInternalConnections *string - EnableMultifactorAuthentication *bool - EnforceMultifactorAuthentication *bool - EnableUserAccessTokens *bool - AllowCorsFrom *string - SessionLengthWebInDays *int - SessionLengthMobileInDays *int - SessionLengthSSOInDays *int - SessionCacheInMinutes *int - SessionIdleTimeoutInMinutes *int - WebsocketSecurePort *int - WebsocketPort *int - WebserverMode *string - EnableCustomEmoji *bool - EnableEmojiPicker *bool - RestrictCustomEmojiCreation *string - RestrictPostDelete *string - AllowEditPost *string - PostEditTimeLimit *int - TimeBetweenUserTypingUpdatesMilliseconds *int64 - EnablePostSearch *bool - EnableUserTypingMessages *bool - EnableChannelViewedMessages *bool - EnableUserStatuses *bool - ExperimentalEnableAuthenticationTransfer *bool - ClusterLogTimeoutMilliseconds *int - CloseUnusedDirectMessages *bool - EnablePreviewFeatures *bool - EnableTutorial *bool + SiteURL *string + LicenseFileLocation *string + ListenAddress *string + ConnectionSecurity *string + TLSCertFile *string + TLSKeyFile *string + UseLetsEncrypt *bool + LetsEncryptCertificateCacheFile *string + Forward80To443 *bool + ReadTimeout *int + WriteTimeout *int + MaximumLoginAttempts *int + GoroutineHealthThreshold *int + GoogleDeveloperKey string + EnableOAuthServiceProvider bool + EnableIncomingWebhooks bool + EnableOutgoingWebhooks bool + EnableCommands *bool + EnableOnlyAdminIntegrations *bool + EnablePostUsernameOverride bool + EnablePostIconOverride bool + EnableAPIv3 *bool + EnableLinkPreviews *bool + EnableTesting bool + EnableDeveloper *bool + EnableSecurityFixAlert *bool + EnableInsecureOutgoingConnections *bool + AllowedUntrustedInternalConnections *string + EnableMultifactorAuthentication *bool + EnforceMultifactorAuthentication *bool + EnableUserAccessTokens *bool + AllowCorsFrom *string + SessionLengthWebInDays *int + SessionLengthMobileInDays *int + SessionLengthSSOInDays *int + SessionCacheInMinutes *int + SessionIdleTimeoutInMinutes *int + WebsocketSecurePort *int + WebsocketPort *int + WebserverMode *string + EnableCustomEmoji *bool + EnableEmojiPicker *bool + RestrictCustomEmojiCreation *string + RestrictPostDelete *string + AllowEditPost *string + PostEditTimeLimit *int + TimeBetweenUserTypingUpdatesMilliseconds *int64 + EnablePostSearch *bool + EnableUserTypingMessages *bool + EnableChannelViewedMessages *bool + EnableUserStatuses *bool + ExperimentalEnableAuthenticationTransfer *bool + ClusterLogTimeoutMilliseconds *int + CloseUnusedDirectMessages *bool + EnablePreviewFeatures *bool + EnableTutorial *bool + ExperimentalEnableDefaultChannelLeaveJoinMessages *bool } func (s *ServiceSettings) SetDefaults() { @@ -413,6 +414,10 @@ func (s *ServiceSettings) SetDefaults() { if s.EnablePreviewFeatures == nil { s.EnablePreviewFeatures = NewBool(true) } + + if s.ExperimentalEnableDefaultChannelLeaveJoinMessages == nil { + s.ExperimentalEnableDefaultChannelLeaveJoinMessages = NewBool(true) + } } type ClusterSettings struct { diff --git a/utils/config.go b/utils/config.go index 83785f045..d1522538d 100644 --- a/utils/config.go +++ b/utils/config.go @@ -475,6 +475,7 @@ func GenerateClientConfig(c *model.Config, diagnosticId string) map[string]strin props["CloseUnusedDirectMessages"] = strconv.FormatBool(*c.ServiceSettings.CloseUnusedDirectMessages) props["EnablePreviewFeatures"] = strconv.FormatBool(*c.ServiceSettings.EnablePreviewFeatures) props["EnableTutorial"] = strconv.FormatBool(*c.ServiceSettings.EnableTutorial) + props["ExperimentalEnableDefaultChannelLeaveJoinMessages"] = strconv.FormatBool(*c.ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages) props["SendEmailNotifications"] = strconv.FormatBool(c.EmailSettings.SendEmailNotifications) props["SendPushNotifications"] = strconv.FormatBool(*c.EmailSettings.SendPushNotifications) -- cgit v1.2.3-1-g7c22