Skip to content

feat: add notification for suspended/activated account #14367

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Aug 22, 2024
Prev Previous commit
Danny's review
  • Loading branch information
mtojek committed Aug 22, 2024
commit 9931bbf49b66588a788b1c1957ea09d015c741d6
16 changes: 6 additions & 10 deletions coderd/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -861,11 +861,7 @@ func (api *API) putUserStatus(status database.UserStatus) func(rw http.ResponseW

err = api.notifyUserStatusChanged(ctx, user, status)
if err != nil {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Internal error notifying about changed user status.",
Detail: err.Error(),
})
return
api.Logger.Warn(ctx, "unable to notify about changed user's status", slog.F("affected_user", user.Username), slog.Error(err))
}

organizations, err := userOrganizationIDs(ctx, api, user)
Expand All @@ -882,24 +878,24 @@ func (api *API) putUserStatus(status database.UserStatus) func(rw http.ResponseW

func (api *API) notifyUserStatusChanged(ctx context.Context, user database.User, status database.UserStatus) error {
var key string
var adminTemplateID, ownerTemplateID uuid.UUID
var adminTemplateID, personalTemplateID uuid.UUID
switch status {
case database.UserStatusSuspended:
key = "suspended_account_name"
adminTemplateID = notifications.TemplateUserAccountSuspended
ownerTemplateID = notifications.TemplateYourAccountSuspended
personalTemplateID = notifications.TemplateYourAccountSuspended
case database.UserStatusActive:
key = "activated_account_name"
adminTemplateID = notifications.TemplateUserAccountActivated
ownerTemplateID = notifications.TemplateYourAccountActivated
personalTemplateID = notifications.TemplateYourAccountActivated
default:
api.Logger.Error(ctx, "user status is not supported", slog.F("username", user.Username), slog.F("user_status", string(status)))
return xerrors.Errorf("unable to notify admins as the user's status is unsupported")
}

userAdmins, err := findUserAdmins(ctx, api.Database)
if err != nil {
return xerrors.Errorf("unable to find user admins: %w", err)
api.Logger.Error(ctx, "unable to find user admins", slog.Error(err))
}

// Send notifications to user admins and affected user
Expand All @@ -913,7 +909,7 @@ func (api *API) notifyUserStatusChanged(ctx context.Context, user database.User,
api.Logger.Warn(ctx, "unable to notify about changed user's status", slog.F("affected_user", user.Username), slog.Error(err))
}
}
if _, err := api.NotificationsEnqueuer.Enqueue(ctx, user.ID, ownerTemplateID,
if _, err := api.NotificationsEnqueuer.Enqueue(ctx, user.ID, personalTemplateID,
map[string]string{
key: user.Username,
}, "api-put-user-status",
Expand Down
Loading