From 190d45e52ac25fc48bb7b358bccfe7ce75155320 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Tue, 22 Feb 2022 19:03:57 -0800 Subject: [PATCH] Add support to disable chat join messages. Closes #1582 --- controllers/admin/config.go | 20 ++++++++++++++ controllers/admin/serverConfig.go | 46 ++++++++++++++++--------------- core/chat/server.go | 2 +- core/data/config.go | 16 +++++++++++ router/router.go | 3 ++ 5 files changed, 64 insertions(+), 23 deletions(-) diff --git a/controllers/admin/config.go b/controllers/admin/config.go index ed56ac05fb..c466250867 100644 --- a/controllers/admin/config.go +++ b/controllers/admin/config.go @@ -664,6 +664,26 @@ func SetSuggestedUsernameList(w http.ResponseWriter, r *http.Request) { controllers.WriteSimpleResponse(w, true, "suggested username list updated") } +// SetChatJoinMessagesEnabled will enable or disable the chat join messages. +func SetChatJoinMessagesEnabled(w http.ResponseWriter, r *http.Request) { + if !requirePOST(w, r) { + return + } + + configValue, success := getValueFromRequest(w, r) + if !success { + controllers.WriteSimpleResponse(w, false, "unable to update chat join messages enabled") + return + } + + if err := data.SetChatJoinMessagesEnabled(configValue.Value.(bool)); err != nil { + controllers.WriteSimpleResponse(w, false, err.Error()) + return + } + + controllers.WriteSimpleResponse(w, true, "chat join message status updated") +} + func requirePOST(w http.ResponseWriter, r *http.Request) bool { if r.Method != controllers.POST { controllers.WriteSimpleResponse(w, false, r.Method+" not supported") diff --git a/controllers/admin/serverConfig.go b/controllers/admin/serverConfig.go index 046dec6b69..ad860f67eb 100644 --- a/controllers/admin/serverConfig.go +++ b/controllers/admin/serverConfig.go @@ -46,12 +46,13 @@ func GetServerConfig(w http.ResponseWriter, r *http.Request) { NSFW: data.GetNSFW(), CustomStyles: data.GetCustomStyles(), }, - FFmpegPath: ffmpeg, - StreamKey: data.GetStreamKey(), - WebServerPort: config.WebServerPort, - WebServerIP: config.WebServerIP, - RTMPServerPort: data.GetRTMPPortNumber(), - ChatDisabled: data.GetChatDisabled(), + FFmpegPath: ffmpeg, + StreamKey: data.GetStreamKey(), + WebServerPort: config.WebServerPort, + WebServerIP: config.WebServerIP, + RTMPServerPort: data.GetRTMPPortNumber(), + ChatDisabled: data.GetChatDisabled(), + ChatJoinMessagesEnabled: data.GetChatJoinMessagesEnabled(), VideoSettings: videoSettings{ VideoQualityVariants: videoQualityVariants, LatencyLevel: data.GetStreamLatencyLevel().Level, @@ -85,22 +86,23 @@ func GetServerConfig(w http.ResponseWriter, r *http.Request) { } type serverConfigAdminResponse struct { - InstanceDetails webConfigResponse `json:"instanceDetails"` - FFmpegPath string `json:"ffmpegPath"` - StreamKey string `json:"streamKey"` - WebServerPort int `json:"webServerPort"` - WebServerIP string `json:"webServerIP"` - RTMPServerPort int `json:"rtmpServerPort"` - S3 models.S3 `json:"s3"` - VideoSettings videoSettings `json:"videoSettings"` - YP yp `json:"yp"` - ChatDisabled bool `json:"chatDisabled"` - ExternalActions []models.ExternalAction `json:"externalActions"` - SupportedCodecs []string `json:"supportedCodecs"` - VideoCodec string `json:"videoCodec"` - ForbiddenUsernames []string `json:"forbiddenUsernames"` - Federation federationConfigResponse `json:"federation"` - SuggestedUsernames []string `json:"suggestedUsernames"` + InstanceDetails webConfigResponse `json:"instanceDetails"` + FFmpegPath string `json:"ffmpegPath"` + StreamKey string `json:"streamKey"` + WebServerPort int `json:"webServerPort"` + WebServerIP string `json:"webServerIP"` + RTMPServerPort int `json:"rtmpServerPort"` + S3 models.S3 `json:"s3"` + VideoSettings videoSettings `json:"videoSettings"` + YP yp `json:"yp"` + ChatDisabled bool `json:"chatDisabled"` + ChatJoinMessagesEnabled bool `json:"chatJoinMessagesEnabled"` + ExternalActions []models.ExternalAction `json:"externalActions"` + SupportedCodecs []string `json:"supportedCodecs"` + VideoCodec string `json:"videoCodec"` + ForbiddenUsernames []string `json:"forbiddenUsernames"` + Federation federationConfigResponse `json:"federation"` + SuggestedUsernames []string `json:"suggestedUsernames"` } type videoSettings struct { diff --git a/core/chat/server.go b/core/chat/server.go index 08c0317c9f..817c67b5b9 100644 --- a/core/chat/server.go +++ b/core/chat/server.go @@ -91,7 +91,7 @@ func (s *Server) Addclient(conn *websocket.Conn, user *user.User, accessToken st } // Do not send user re-joined broadcast message if they've been active within 5 minutes. - shouldSendJoinedMessages := true + shouldSendJoinedMessages := data.GetChatJoinMessagesEnabled() if previouslyLastSeen, ok := _lastSeenCache[user.ID]; ok && time.Since(previouslyLastSeen) < time.Minute*5 { shouldSendJoinedMessages = false } diff --git a/core/data/config.go b/core/data/config.go index 04dba027d2..3375d5495f 100644 --- a/core/data/config.go +++ b/core/data/config.go @@ -53,6 +53,7 @@ const ( federationShowEngagementKey = "federation_show_engagement" federationBlockedDomainsKey = "federation_blocked_domains" suggestedUsernamesKey = "suggested_usernames" + chatJoinMessagesEnabledKey = "chat_join_messages_enabled" ) // GetExtraPageBodyContent will return the user-supplied body content. @@ -754,3 +755,18 @@ func GetBlockedFederatedDomains() []string { return strings.Split(domains, ",") } + +// SetChatJoinMessagesEnabled will set if chat join messages are enabled. +func SetChatJoinMessagesEnabled(enabled bool) error { + return _datastore.SetBool(chatJoinMessagesEnabledKey, enabled) +} + +// GetChatJoinMessagesEnabled will return if chat join messages are enabled. +func GetChatJoinMessagesEnabled() bool { + enabled, err := _datastore.GetBool(chatJoinMessagesEnabledKey) + if err != nil { + return true + } + + return enabled +} diff --git a/router/router.go b/router/router.go index 3928675d1d..439cc0aad1 100644 --- a/router/router.go +++ b/router/router.go @@ -161,6 +161,9 @@ func Start() error { // Disable chat http.HandleFunc("/api/admin/config/chat/disable", middleware.RequireAdminAuth(admin.SetChatDisabled)) + // Disable chat user join messages + http.HandleFunc("/api/admin/config/chat/joinmessagesenabled", middleware.RequireAdminAuth(admin.SetChatJoinMessagesEnabled)) + // Set chat usernames that are not allowed http.HandleFunc("/api/admin/config/chat/forbiddenusernames", middleware.RequireAdminAuth(admin.SetForbiddenUsernameList))