From fc89564ebcc2d19dc7185be65851f4630cc3471d Mon Sep 17 00:00:00 2001 From: viehlieb Date: Thu, 23 Feb 2023 16:17:59 +0100 Subject: [PATCH] cast VikujGroups directly to []map[string]interface{} changug []models.Team to []*models.Team --- pkg/modules/auth/openid/openid.go | 79 +++++++++++++++---------------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/pkg/modules/auth/openid/openid.go b/pkg/modules/auth/openid/openid.go index eeefde3d3..dc87d9668 100644 --- a/pkg/modules/auth/openid/openid.go +++ b/pkg/modules/auth/openid/openid.go @@ -60,11 +60,11 @@ type Provider struct { Oauth2Config *oauth2.Config `json:"-"` } type claims struct { - Email string `json:"email"` - Name string `json:"name"` - PreferredUsername string `json:"preferred_username"` - Nickname string `json:"nickname"` - VikunjaGroups interface{} `json:"vikunja_groups"` + Email string `json:"email"` + Name string `json:"name"` + PreferredUsername string `json:"preferred_username"` + Nickname string `json:"nickname"` + VikunjaGroups []map[string]interface{} `json:"vikunja_groups"` } func init() { @@ -274,41 +274,37 @@ func SignOutFromTeamsByID(s *xorm.Session, u *user.User, teamIDs []int64) (errs return errs } -func getTeamDataFromToken(groups interface{}, provider *Provider) (teamData []models.TeamData, errs []error) { +func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (teamData []models.TeamData, errs []error) { teamData = []models.TeamData{} errs = []error{} - if groups != nil { - el := groups.([]interface{}) - for _, data := range el { - team := data.(map[string]interface{}) - var name string - var description string - var oidcID string - if team["name"] != nil { - name = team["name"].(string) - } - if team["description"] != nil { - description = team["description"].(string) - } - if team["oidcID"] != nil { - switch t := team["oidcID"].(type) { - case int64: - oidcID = strconv.FormatInt(team["oidcID"].(int64), 10) - case string: - oidcID = string(team["oidcID"].(string)) - case float64: - oidcID = strconv.FormatFloat(team["oidcID"].(float64), 'f', -1, 64) - default: - log.Errorf("No oidcID assigned for %v or type %v not supported", team, t) - } - } - if name == "" || oidcID == "" { - log.Errorf("Claim of your custom scope does not hold name or oidcID for automatic group assignment through oidc provider. Please check %s", provider.Name) - errs = append(errs, &user.ErrOpenIDCustomScopeMalformed{}) - continue - } - teamData = append(teamData, models.TeamData{TeamName: name, OidcID: oidcID, Description: description}) + for _, team := range groups { + var name string + var description string + var oidcID string + if team["name"] != nil { + name = team["name"].(string) } + if team["description"] != nil { + description = team["description"].(string) + } + if team["oidcID"] != nil { + switch t := team["oidcID"].(type) { + case int64: + oidcID = strconv.FormatInt(team["oidcID"].(int64), 10) + case string: + oidcID = string(team["oidcID"].(string)) + case float64: + oidcID = strconv.FormatFloat(team["oidcID"].(float64), 'f', -1, 64) + default: + log.Errorf("No oidcID assigned for %v or type %v not supported", team, t) + } + } + if name == "" || oidcID == "" { + log.Errorf("Claim of your custom scope does not hold name or oidcID for automatic group assignment through oidc provider. Please check %s", provider.Name) + errs = append(errs, &user.ErrOpenIDCustomScopeMalformed{}) + continue + } + teamData = append(teamData, models.TeamData{TeamName: name, OidcID: oidcID, Description: description}) } return teamData, errs } @@ -324,8 +320,8 @@ func CreateTeamWithData(s *xorm.Session, teamData models.TeamData, u *user.User) } // this functions creates an array of existing teams that was generated from the oidc data. -func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.TeamData, u *user.User) (te []models.Team, err error) { - te = []models.Team{} +func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.TeamData, u *user.User) (te []*models.Team, err error) { + te = []*models.Team{} // Procedure can only be successful if oidcID is set and converted to string for _, oidcTeam := range teamData { team, err := models.GetTeamByOidcIDAndName(s, oidcTeam.OidcID, oidcTeam.TeamName) @@ -335,12 +331,11 @@ func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.TeamData, if err != nil { return te, err } - te = append(te, *newTeam) + te = append(te, newTeam) } else { log.Debugf("Team with oidc_id %v and name %v already exists.", team.OidcID, team.Name) - te = append(te, team) + te = append(te, &team) } - } return te, err }