diff --git a/backend/app/cmd/server.go b/backend/app/cmd/server.go index ed0380bf9f..afcfbad4ba 100644 --- a/backend/app/cmd/server.go +++ b/backend/app/cmd/server.go @@ -525,7 +525,7 @@ func (s *ServerCommand) newServerApp(ctx context.Context) (*serverApp, error) { authenticator := s.getAuthenticator(dataService, avatarStore, adminStore, authRefreshCache) telegramAuth := s.makeTelegramAuth(authenticator) // telegram auth requires TelegramAPI listener which is constructed below - telegramService, telegramBotUsername := s.startTelegramAuthAndNotify(ctx, telegramAuth) + telegramService := s.startTelegramAuthAndNotify(ctx, telegramAuth) err = s.addAuthProviders(authenticator) if err != nil { @@ -575,33 +575,33 @@ func (s *ServerCommand) newServerApp(ctx context.Context) (*serverApp, error) { } srv := &api.Rest{ - Version: s.Revision, - DataService: dataService, - WebRoot: s.WebRoot, - WebFS: webFS, - RemarkURL: s.RemarkURL, - ImageProxy: imgProxy, - CommentFormatter: commentFormatter, - Migrator: migr, - ReadOnlyAge: s.ReadOnlyAge, - SharedSecret: s.SharedSecret, - Authenticator: authenticator, - Cache: loadingCache, - NotifyService: notifyService, - TelegramService: telegramService, - SSLConfig: sslConfig, - UpdateLimiter: s.UpdateLimit, - ImageService: imageService, - EmailNotifications: contains("email", s.Notify.Users), - TelegramBotUsername: telegramBotUsername, - EmojiEnabled: s.EnableEmoji, - AnonVote: s.AnonymousVote && s.RestrictVoteIP, - SimpleView: s.SimpleView, - ProxyCORS: s.ProxyCORS, - AllowedAncestors: s.AllowedHosts, - SendJWTHeader: s.Auth.SendJWTHeader, - SubscribersOnly: s.SubscribersOnly, - DisableSignature: s.DisableSignature, + Version: s.Revision, + DataService: dataService, + WebRoot: s.WebRoot, + WebFS: webFS, + RemarkURL: s.RemarkURL, + ImageProxy: imgProxy, + CommentFormatter: commentFormatter, + Migrator: migr, + ReadOnlyAge: s.ReadOnlyAge, + SharedSecret: s.SharedSecret, + Authenticator: authenticator, + Cache: loadingCache, + NotifyService: notifyService, + TelegramService: telegramService, + SSLConfig: sslConfig, + UpdateLimiter: s.UpdateLimit, + ImageService: imageService, + EmailNotifications: contains("email", s.Notify.Users), + TelegramNotifications: contains("telegram", s.Notify.Users) && telegramService != nil, + EmojiEnabled: s.EnableEmoji, + AnonVote: s.AnonymousVote && s.RestrictVoteIP, + SimpleView: s.SimpleView, + ProxyCORS: s.ProxyCORS, + AllowedAncestors: s.AllowedHosts, + SendJWTHeader: s.Auth.SendJWTHeader, + SubscribersOnly: s.SubscribersOnly, + DisableSignature: s.DisableSignature, } srv.ScoreThresholds.Low, srv.ScoreThresholds.Critical = s.LowScore, s.CriticalScore @@ -1212,20 +1212,15 @@ func (s *ServerCommand) parseSameSite(ss string) http.SameSite { // startTelegramAuthAndNotify initializes telegram notify and auth Telegram Bot listen loop. // Does nothing if telegram auth and notifications are disabled. -// Doesn't return telegram bot username if user notifications are disabled, as that is the way frontend knows they are enabled. -func (s *ServerCommand) startTelegramAuthAndNotify(ctx context.Context, telegramAuth providers.TGUpdatesReceiver) (tg *notify.Telegram, telegramBotUsername string) { +func (s *ServerCommand) startTelegramAuthAndNotify(ctx context.Context, telegramAuth providers.TGUpdatesReceiver) (tg *notify.Telegram) { if !contains("telegram", s.Notify.Users) && !contains("telegram", s.Notify.Admins) && !s.Auth.Telegram { - return nil, "" + return nil } var err error if tg, err = s.makeTelegramNotify(); err != nil { log.Printf("[WARN] failed to make telegram notify service, %s", err) - return nil, "" - } - - if contains("telegram", s.Notify.Users) { - telegramBotUsername = tg.GetBotUsername() + return nil } telegramReceivers := []providers.TGUpdatesReceiver{tg} @@ -1235,7 +1230,7 @@ func (s *ServerCommand) startTelegramAuthAndNotify(ctx context.Context, telegram // start bot messages receiver for both notify and auth services go providers.DispatchTelegramUpdates(ctx, tg, telegramReceivers, time.Second*5) - return tg, telegramBotUsername + return tg } // splitAtCommas split s at commas, ignoring commas in strings. diff --git a/backend/app/rest/api/rest.go b/backend/app/rest/api/rest.go index a1942838f7..ea18f180a7 100644 --- a/backend/app/rest/api/rest.go +++ b/backend/app/rest/api/rest.go @@ -59,16 +59,16 @@ type Rest struct { Low int Critical int } - UpdateLimiter float64 - EmailNotifications bool - TelegramBotUsername string - EmojiEnabled bool - SimpleView bool - ProxyCORS bool - SendJWTHeader bool - AllowedAncestors []string // sets Content-Security-Policy "frame-ancestors ..." - SubscribersOnly bool - DisableSignature bool // prevent signature from being added to headers + UpdateLimiter float64 + EmailNotifications bool + TelegramNotifications bool + EmojiEnabled bool + SimpleView bool + ProxyCORS bool + SendJWTHeader bool + AllowedAncestors []string // sets Content-Security-Policy "frame-ancestors ..." + SubscribersOnly bool + DisableSignature bool // prevent signature from being added to headers SSLConfig SSLConfig httpsServer *http.Server @@ -414,44 +414,44 @@ func (s *Rest) configCtrl(w http.ResponseWriter, r *http.Request) { emails, _ := s.DataService.AdminStore.Email(siteID) cnf := struct { - Version string `json:"version"` - EditDuration int `json:"edit_duration"` - AdminEdit bool `json:"admin_edit"` - MaxCommentSize int `json:"max_comment_size"` - Admins []string `json:"admins"` - AdminEmail string `json:"admin_email"` - Auth []string `json:"auth_providers"` - AnonVote bool `json:"anon_vote"` - LowScore int `json:"low_score"` - CriticalScore int `json:"critical_score"` - PositiveScore bool `json:"positive_score"` - ReadOnlyAge int `json:"readonly_age"` - MaxImageSize int `json:"max_image_size"` - EmailNotifications bool `json:"email_notifications"` - TelegramBotUsername string `json:"telegram_bot_username"` - EmojiEnabled bool `json:"emoji_enabled"` - SimpleView bool `json:"simple_view"` - SendJWTHeader bool `json:"send_jwt_header"` - SubscribersOnly bool `json:"subscribers_only"` + Version string `json:"version"` + EditDuration int `json:"edit_duration"` + AdminEdit bool `json:"admin_edit"` + MaxCommentSize int `json:"max_comment_size"` + Admins []string `json:"admins"` + AdminEmail string `json:"admin_email"` + Auth []string `json:"auth_providers"` + AnonVote bool `json:"anon_vote"` + LowScore int `json:"low_score"` + CriticalScore int `json:"critical_score"` + PositiveScore bool `json:"positive_score"` + ReadOnlyAge int `json:"readonly_age"` + MaxImageSize int `json:"max_image_size"` + EmailNotifications bool `json:"email_notifications"` + TelegramNotifications bool `json:"telegram_notifications"` + EmojiEnabled bool `json:"emoji_enabled"` + SimpleView bool `json:"simple_view"` + SendJWTHeader bool `json:"send_jwt_header"` + SubscribersOnly bool `json:"subscribers_only"` }{ - Version: s.Version, - EditDuration: int(s.DataService.EditDuration.Seconds()), - AdminEdit: s.DataService.AdminEdits, - MaxCommentSize: s.DataService.MaxCommentSize, - Admins: admins, - AdminEmail: emails, - LowScore: s.ScoreThresholds.Low, - CriticalScore: s.ScoreThresholds.Critical, - PositiveScore: s.DataService.PositiveScore, - ReadOnlyAge: s.ReadOnlyAge, - MaxImageSize: s.ImageService.MaxSize, - EmailNotifications: s.EmailNotifications, - TelegramBotUsername: s.TelegramBotUsername, - EmojiEnabled: s.EmojiEnabled, - AnonVote: s.AnonVote, - SimpleView: s.SimpleView, - SendJWTHeader: s.SendJWTHeader, - SubscribersOnly: s.SubscribersOnly, + Version: s.Version, + EditDuration: int(s.DataService.EditDuration.Seconds()), + AdminEdit: s.DataService.AdminEdits, + MaxCommentSize: s.DataService.MaxCommentSize, + Admins: admins, + AdminEmail: emails, + LowScore: s.ScoreThresholds.Low, + CriticalScore: s.ScoreThresholds.Critical, + PositiveScore: s.DataService.PositiveScore, + ReadOnlyAge: s.ReadOnlyAge, + MaxImageSize: s.ImageService.MaxSize, + EmailNotifications: s.EmailNotifications, + TelegramNotifications: s.TelegramNotifications, + EmojiEnabled: s.EmojiEnabled, + AnonVote: s.AnonVote, + SimpleView: s.SimpleView, + SendJWTHeader: s.SendJWTHeader, + SubscribersOnly: s.SubscribersOnly, } cnf.Auth = []string{} diff --git a/backend/app/rest/api/rest_test.go b/backend/app/rest/api/rest_test.go index 590fbe7529..aac700354a 100644 --- a/backend/app/rest/api/rest_test.go +++ b/backend/app/rest/api/rest_test.go @@ -301,7 +301,7 @@ func TestRest_cacheControl(t *testing.T) { for i, tt := range tbl { tt := tt t.Run(strconv.Itoa(i), func(t *testing.T) { - req := httptest.NewRequest("GET", tt.url, nil) + req := httptest.NewRequest("GET", tt.url, http.NoBody) w := httptest.NewRecorder() h := cacheControl(tt.exp, tt.version)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})) @@ -329,7 +329,7 @@ func TestRest_frameAncestors(t *testing.T) { for i, tt := range tbl { tt := tt t.Run(strconv.Itoa(i), func(t *testing.T) { - req := httptest.NewRequest("GET", "http://example.com", nil) + req := httptest.NewRequest("GET", "http://example.com", http.NoBody) w := httptest.NewRecorder() h := frameAncestors(tt.hosts)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})) @@ -363,7 +363,7 @@ func TestRest_subscribersOnly(t *testing.T) { for i, tt := range tbl { tt := tt t.Run(strconv.Itoa(i), func(t *testing.T) { - req := httptest.NewRequest("GET", "http://example.com", nil) + req := httptest.NewRequest("GET", "http://example.com", http.NoBody) if tt.setUser { req = token.SetUserInfo(req, tt.user) } diff --git a/frontend/apps/remark42/app/__stubs__/static-config.ts b/frontend/apps/remark42/app/__stubs__/static-config.ts index bb2b06429b..2145a4757f 100644 --- a/frontend/apps/remark42/app/__stubs__/static-config.ts +++ b/frontend/apps/remark42/app/__stubs__/static-config.ts @@ -16,7 +16,7 @@ beforeEach(() => { simple_view: false, anon_vote: false, email_notifications: false, - telegram_bot_username: '', + telegram_notifications: false, emoji_enabled: true, }; }); diff --git a/frontend/apps/remark42/app/common/static-store.ts b/frontend/apps/remark42/app/common/static-store.ts index 4558c37f8f..bced7b79f2 100644 --- a/frontend/apps/remark42/app/common/static-store.ts +++ b/frontend/apps/remark42/app/common/static-store.ts @@ -27,7 +27,7 @@ export const StaticStore: StaticStoreType = { simple_view: false, anon_vote: false, email_notifications: false, - telegram_bot_username: '', + telegram_notifications: false, emoji_enabled: false, }, }; diff --git a/frontend/apps/remark42/app/common/types.ts b/frontend/apps/remark42/app/common/types.ts index ad39bd9c6c..9e80a827f9 100644 --- a/frontend/apps/remark42/app/common/types.ts +++ b/frontend/apps/remark42/app/common/types.ts @@ -119,7 +119,7 @@ export interface Config { simple_view: boolean; anon_vote: boolean; email_notifications: boolean; - telegram_bot_username: string; + telegram_notifications: boolean; emoji_enabled: boolean; } diff --git a/frontend/packages/api/clients/public.ts b/frontend/packages/api/clients/public.ts index 1a8e672eb5..005014129c 100644 --- a/frontend/packages/api/clients/public.ts +++ b/frontend/packages/api/clients/public.ts @@ -17,7 +17,7 @@ export interface Config { simple_view: boolean anon_vote: boolean email_notifications: boolean - telegram_bot_username: string + telegram_notifications: boolean emoji_enabled: boolean }