feat(auth): allow passing custom settings links to user account via openid claims

This commit is contained in:
kolaente
2025-04-02 17:47:13 +02:00
parent 3ae8169204
commit da0f6fb366
3 changed files with 64 additions and 13 deletions

View File

@@ -68,12 +68,13 @@ type Provider struct {
}
type claims struct {
Email string `json:"email"`
Name string `json:"name"`
PreferredUsername string `json:"preferred_username"`
Nickname string `json:"nickname"`
VikunjaGroups []map[string]interface{} `json:"vikunja_groups"`
Picture string `json:"picture"`
Email string `json:"email"`
Name string `json:"name"`
PreferredUsername string `json:"preferred_username"`
Nickname string `json:"nickname"`
VikunjaGroups []map[string]interface{} `json:"vikunja_groups"`
Picture string `json:"picture"`
ExtraSettingsLinks map[string]any `json:"extra_settings_links"`
}
func init() {
@@ -304,13 +305,15 @@ func getOrCreateUser(s *xorm.Session, cl *claims, provider *Provider, idToken *o
// If no user exists, create one with the preferred username if it is not already taken
uu := &user.User{
Username: strings.ReplaceAll(cl.PreferredUsername, " ", "-"),
Email: cl.Email,
Name: cl.Name,
Status: user.StatusActive,
Issuer: idToken.Issuer,
Subject: idToken.Subject,
Username: strings.ReplaceAll(cl.PreferredUsername, " ", "-"),
Email: cl.Email,
Name: cl.Name,
Status: user.StatusActive,
Issuer: idToken.Issuer,
Subject: idToken.Subject,
ExtraSettingsLinks: cl.ExtraSettingsLinks,
}
u, err = auth.CreateUserWithRandomUsername(s, uu)
if err != nil {
return nil, err
@@ -324,6 +327,9 @@ func getOrCreateUser(s *xorm.Session, cl *claims, provider *Provider, idToken *o
if cl.Name != u.Name {
u.Name = cl.Name
}
u.ExtraSettingsLinks = cl.ExtraSettingsLinks
u, err = user.UpdateUser(s, u, false)
if err != nil {
return nil, err