@@ -445,15 +445,15 @@ func (a *OIDCAPI) resolveUser(idToken *oidc.IDTokenClaims, info *oidc.UserInfo)
445445 return nil , http .StatusInternalServerError , fmt .Errorf ("database error: %w" , err )
446446 }
447447
448- admin , status , err := a .resolvePermission (idToken .Claims , info .Claims )
448+ hasAdminGroup , status , err := a .resolvePermission (idToken .Claims , info .Claims )
449449 if err != nil {
450450 log .Err (err ).Str ("oidc_id" , oidcID ).Interface ("idTokenClaims" , idToken .Claims ).Interface ("userinfoClaims" , info .Claims ).Msg ("OIDC: resolve permission" )
451451 return nil , status , err
452452 }
453453
454454 if user != nil {
455- if admin != nil && user .Admin != * admin {
456- user .Admin = * admin
455+ if len ( a . GroupsAdmin ) > 0 && user .Admin != hasAdminGroup {
456+ user .Admin = hasAdminGroup
457457 if err := a .DB .UpdateUser (user ); err != nil {
458458 return nil , http .StatusInternalServerError , fmt .Errorf ("database error: %w" , err )
459459 }
@@ -476,12 +476,12 @@ func (a *OIDCAPI) resolveUser(idToken *oidc.IDTokenClaims, info *oidc.UserInfo)
476476 return nil , http .StatusInternalServerError , fmt .Errorf ("database error: %w" , err )
477477 }
478478 if byUsername != nil {
479- return a .linkExistingUser (byUsername , oidcID , admin )
479+ return a .linkExistingUser (byUsername , oidcID , hasAdminGroup )
480480 }
481- return a .registerUser (username , oidcID , admin )
481+ return a .registerUser (username , oidcID , hasAdminGroup )
482482}
483483
484- func (a * OIDCAPI ) linkExistingUser (user * model.User , oidcID string , admin * bool ) (* model.User , int , error ) {
484+ func (a * OIDCAPI ) linkExistingUser (user * model.User , oidcID string , hasAdminGroup bool ) (* model.User , int , error ) {
485485 if ! a .LinkByUsername {
486486 log .Warn ().Str ("oidc_id" , oidcID ).Str ("username" , user .Name ).Msgf ("OIDC login rejected: a local user with the username already exists and %s is disabled" , config .EnvOIDCLinkByUsername )
487487 return nil , http .StatusForbidden , fmt .Errorf ("a local user with the username %s already exists and linking by username is disabled" , user .Name )
@@ -491,8 +491,8 @@ func (a *OIDCAPI) linkExistingUser(user *model.User, oidcID string, admin *bool)
491491 return nil , http .StatusForbidden , fmt .Errorf ("the user %s is already bound to a different OIDC identity" , user .Name )
492492 }
493493 user .OIDCID = & oidcID
494- if admin != nil {
495- user .Admin = * admin
494+ if len ( a . GroupsAdmin ) > 0 {
495+ user .Admin = hasAdminGroup
496496 }
497497 if err := a .DB .UpdateUser (user ); err != nil {
498498 return nil , http .StatusInternalServerError , fmt .Errorf ("failed to bind user to OIDC identity: %w" , err )
@@ -501,7 +501,7 @@ func (a *OIDCAPI) linkExistingUser(user *model.User, oidcID string, admin *bool)
501501 return user , 0 , nil
502502}
503503
504- func (a * OIDCAPI ) registerUser (username , oidcID string , admin * bool ) (* model.User , int , error ) {
504+ func (a * OIDCAPI ) registerUser (username , oidcID string , hasAdminGroup bool ) (* model.User , int , error ) {
505505 if ! a .AutoRegister {
506506 return nil , http .StatusForbidden , errors .New ("user does not exist and auto-registration is disabled" )
507507 }
@@ -511,8 +511,8 @@ func (a *OIDCAPI) registerUser(username, oidcID string, admin *bool) (*model.Use
511511 OIDCID : & oidcID ,
512512 }
513513
514- if admin != nil {
515- user .Admin = * admin
514+ if len ( a . GroupsAdmin ) > 0 {
515+ user .Admin = hasAdminGroup
516516 }
517517
518518 if err := a .DB .CreateUser (user ); err != nil {
@@ -550,14 +550,14 @@ func (a *OIDCAPI) popPendingSession(key string) (*pendingOIDCSession, bool) {
550550 return nil , false
551551}
552552
553- func (a * OIDCAPI ) resolvePermission (idTokenClaims , userInfoClaims map [string ]any ) (* bool , int , error ) {
553+ func (a * OIDCAPI ) resolvePermission (idTokenClaims , userInfoClaims map [string ]any ) (bool , int , error ) {
554554 if a .GroupsClaim == "" {
555- return nil , 0 , nil
555+ return false , 0 , nil
556556 }
557557
558558 groupsRaw , ok := lookupClaim (a .GroupsClaim , idTokenClaims , userInfoClaims )
559559 if ! ok {
560- return nil , http .StatusInternalServerError , fmt .Errorf ("groups claim %q is missing" , a .GroupsClaim )
560+ return false , http .StatusInternalServerError , fmt .Errorf ("groups claim %q is missing" , a .GroupsClaim )
561561 }
562562
563563 var groups []string
@@ -568,25 +568,23 @@ func (a *OIDCAPI) resolvePermission(idTokenClaims, userInfoClaims map[string]any
568568 for _ , groupRaw := range groupsRaw {
569569 group , ok := groupRaw .(string )
570570 if ! ok {
571- return nil , http .StatusInternalServerError , fmt .Errorf ("groups claim %q contains a non-string element: %#v" , a .GroupsClaim , groupRaw )
571+ return false , http .StatusInternalServerError , fmt .Errorf ("groups claim %q contains a non-string element: %#v" , a .GroupsClaim , groupRaw )
572572 }
573573 groups = append (groups , group )
574574 }
575575 case string :
576576 groups = append (groups , groupsRaw )
577577 default :
578- return nil , http .StatusInternalServerError , fmt .Errorf ("groups claim %q is not a string or string array: %#v" , a .GroupsClaim , groupsRaw )
578+ return false , http .StatusInternalServerError , fmt .Errorf ("groups claim %q is not a string or string array: %#v" , a .GroupsClaim , groupsRaw )
579579 }
580580
581581 switch {
582582 case containsAny (a .GroupsAdmin , groups ):
583- t := true
584- return & t , 0 , nil
583+ return true , 0 , nil
585584 case len (a .GroupsUser ) == 0 || containsAny (a .GroupsUser , groups ):
586- f := false
587- return & f , 0 , nil
585+ return false , 0 , nil
588586 default :
589- return nil , http .StatusForbidden , errors .New ("user is not in any allowed group" )
587+ return false , http .StatusForbidden , errors .New ("user is not in any allowed group" )
590588 }
591589}
592590
0 commit comments