1
0
forked from wrenn/wrenn

Fix: Auto-admin didn't work for oauth users

This commit is contained in:
2026-04-13 05:00:37 +06:00
parent d828a6be08
commit 117c46a386

View File

@ -195,6 +195,15 @@ func (h *oauthHandler) Callback(w http.ResponseWriter, r *http.Request) {
qtx := h.db.WithTx(tx) qtx := h.db.WithTx(tx)
// The first user to sign up becomes a platform admin.
userCount, err := qtx.CountUsers(ctx)
if err != nil {
slog.Error("oauth: failed to count users", "error", err)
redirectWithError(w, r, redirectBase, "db_error")
return
}
isFirstUser := userCount == 0
userID := id.NewUserID() userID := id.NewUserID()
_, err = qtx.InsertUserOAuth(ctx, db.InsertUserOAuthParams{ _, err = qtx.InsertUserOAuth(ctx, db.InsertUserOAuthParams{
ID: userID, ID: userID,
@ -238,6 +247,14 @@ func (h *oauthHandler) Callback(w http.ResponseWriter, r *http.Request) {
return return
} }
if isFirstUser {
if err := qtx.SetUserAdmin(ctx, db.SetUserAdminParams{ID: userID, IsAdmin: true}); err != nil {
slog.Error("oauth: failed to set admin status", "error", err)
redirectWithError(w, r, redirectBase, "db_error")
return
}
}
if err := qtx.InsertOAuthProvider(ctx, db.InsertOAuthProviderParams{ if err := qtx.InsertOAuthProvider(ctx, db.InsertOAuthProviderParams{
Provider: provider, Provider: provider,
ProviderID: profile.ProviderID, ProviderID: profile.ProviderID,
@ -255,7 +272,7 @@ func (h *oauthHandler) Callback(w http.ResponseWriter, r *http.Request) {
return return
} }
token, err := auth.SignJWT(h.jwtSecret, userID, teamID, email, profile.Name, "owner", false) token, err := auth.SignJWT(h.jwtSecret, userID, teamID, email, profile.Name, "owner", isFirstUser)
if err != nil { if err != nil {
slog.Error("oauth: failed to sign jwt", "error", err) slog.Error("oauth: failed to sign jwt", "error", err)
redirectWithError(w, r, redirectBase, "internal_error") redirectWithError(w, r, redirectBase, "internal_error")