diff --git a/coderd/notifications/enqueuer.go b/coderd/notifications/enqueuer.go index b93a05aa96a1e..7692bbd85ce07 100644 --- a/coderd/notifications/enqueuer.go +++ b/coderd/notifications/enqueuer.go @@ -3,6 +3,7 @@ package notifications import ( "context" "encoding/json" + "fmt" "slices" "strings" "text/template" @@ -25,6 +26,14 @@ var ( ErrDuplicate = xerrors.New("duplicate notification") ) +type InvalidDefaultNotificationMethodError struct { + Method string +} + +func (e InvalidDefaultNotificationMethodError) Error() string { + return fmt.Sprintf("given default notification method %q is invalid", e.Method) +} + type StoreEnqueuer struct { store Store log slog.Logger @@ -43,8 +52,13 @@ type StoreEnqueuer struct { // NewStoreEnqueuer creates an Enqueuer implementation which can persist notification messages in the store. func NewStoreEnqueuer(cfg codersdk.NotificationsConfig, store Store, helpers template.FuncMap, log slog.Logger, clock quartz.Clock) (*StoreEnqueuer, error) { var method database.NotificationMethod - if err := method.Scan(cfg.Method.String()); err != nil { - return nil, xerrors.Errorf("given notification method %q is invalid", cfg.Method) + // TODO(DanielleMaywood): + // Currently we do not want to allow setting `inbox` as the default notification method. + // As of 2025-03-25, setting this to `inbox` would cause a crash on the deployment + // notification settings page. Until we make a future decision on this we want to disallow + // setting it. + if err := method.Scan(cfg.Method.String()); err != nil || method == database.NotificationMethodInbox { + return nil, InvalidDefaultNotificationMethodError{Method: cfg.Method.String()} } return &StoreEnqueuer{ diff --git a/coderd/notifications/notifications_test.go b/coderd/notifications/notifications_test.go index 348185ef516f1..9bf31384234ed 100644 --- a/coderd/notifications/notifications_test.go +++ b/coderd/notifications/notifications_test.go @@ -1856,6 +1856,18 @@ func TestNotificationDuplicates(t *testing.T) { require.NoError(t, err) } +func TestNotificationMethodCannotDefaultToInbox(t *testing.T) { + t.Parallel() + + store, _ := dbtestutil.NewDB(t) + logger := testutil.Logger(t) + + cfg := defaultNotificationsConfig(database.NotificationMethodInbox) + + _, err := notifications.NewStoreEnqueuer(cfg, store, defaultHelpers(), logger.Named("enqueuer"), quartz.NewMock(t)) + require.ErrorIs(t, err, notifications.InvalidDefaultNotificationMethodError{Method: string(database.NotificationMethodInbox)}) +} + func TestNotificationTargetMatrix(t *testing.T) { t.Parallel() pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy