work on openid to just start group workflow when teamData is available
Some checks failed
continuous-integration/drone/pr Build is failing

This commit is contained in:
viehlieb 2023-05-08 15:51:58 +02:00
parent 0b52a6b591
commit 3fdbd53b3e

View File

@ -200,6 +200,7 @@ func HandleCallback(c echo.Context) error {
// does the oidc token contain well formed "vikunja_groups" through vikunja_scope // does the oidc token contain well formed "vikunja_groups" through vikunja_scope
teamData, errs := getTeamDataFromToken(cl.VikunjaGroups, provider) teamData, errs := getTeamDataFromToken(cl.VikunjaGroups, provider)
if teamData != nil {
for _, err := range errs { for _, err := range errs {
log.Errorf("Error creating teams for user and vikunja groups %s: %v", cl.VikunjaGroups, err) log.Errorf("Error creating teams for user and vikunja groups %s: %v", cl.VikunjaGroups, err)
} }
@ -214,10 +215,10 @@ func HandleCallback(c echo.Context) error {
log.Errorf("Could not proceed with group routine %v", err) log.Errorf("Could not proceed with group routine %v", err)
} }
errs = RemoveUserFromTeamsByIds(s, u, utils.NotIn(oldOidcTeams, oidcTeams)) errs = RemoveUserFromTeamsByIds(s, u, utils.NotIn(oldOidcTeams, oidcTeams))
log.Errorf("%v", errs)
for _, err := range errs { for _, err := range errs {
log.Errorf("Found Error while signing out from teams %v", err) log.Errorf("Found Error while signing out from teams %v", err)
} }
}
err = s.Commit() err = s.Commit()
if err != nil { if err != nil {
_ = s.Rollback() _ = s.Rollback()
@ -229,7 +230,9 @@ func HandleCallback(c echo.Context) error {
} }
func AssignOrCreateUserToTeams(s *xorm.Session, u *user.User, teamData []models.OIDCTeamData) (oidcTeams []int64, err error) { func AssignOrCreateUserToTeams(s *xorm.Session, u *user.User, teamData []models.OIDCTeamData) (oidcTeams []int64, err error) {
if len(teamData) > 0 { if len(teamData) == 0 {
return
}
// check if we have seen these teams before. // check if we have seen these teams before.
// find or create Teams and assign user as teammember. // find or create Teams and assign user as teammember.
teams, err := GetOrCreateTeamsByOIDCAndNames(s, teamData, u) teams, err := GetOrCreateTeamsByOIDCAndNames(s, teamData, u)
@ -248,10 +251,9 @@ func AssignOrCreateUserToTeams(s *xorm.Session, u *user.User, teamData []models.
} }
oidcTeams = append(oidcTeams, team.ID) oidcTeams = append(oidcTeams, team.ID)
} }
}
return oidcTeams, err return oidcTeams, err
} }
func RemoveUserFromTeamsByIds(s *xorm.Session, u *user.User, teamIDs []int64) (errs []error) { func RemoveUserFromTeamsByIds(s *xorm.Session, u *user.User, teamIDs []int64) (errs []error) {
errs = []error{} errs = []error{}
for _, teamID := range teamIDs { for _, teamID := range teamIDs {
@ -310,19 +312,19 @@ func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (
} }
func CreateTeamWithData(s *xorm.Session, teamData models.OIDCTeamData, u *user.User) (team *models.Team, err error) { func CreateTeamWithData(s *xorm.Session, teamData models.OIDCTeamData, u *user.User) (team *models.Team, err error) {
tea := &models.Team{ team = &models.Team{
Name: teamData.TeamName, Name: teamData.TeamName,
Description: teamData.Description, Description: teamData.Description,
OidcID: teamData.OidcID, OidcID: teamData.OidcID,
} }
err = tea.Create(s, u) err = team.Create(s, u)
return tea, err return team, err
} }
// this functions creates an array of existing teams that was generated from the oidc data. // this functions creates an array of existing teams that was generated from the oidc data.
func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.OIDCTeamData, u *user.User) (te []*models.Team, err error) { func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.OIDCTeamData, u *user.User) (te []*models.Team, err error) {
te = []*models.Team{} te = []*models.Team{}
// Procedure can only be successful if oidcID is set and converted to string // Procedure can only be successful if oidcID is set
for _, oidcTeam := range teamData { for _, oidcTeam := range teamData {
team, err := models.GetTeamByOidcIDAndName(s, oidcTeam.OidcID, oidcTeam.TeamName) team, err := models.GetTeamByOidcIDAndName(s, oidcTeam.OidcID, oidcTeam.TeamName)
if err != nil { if err != nil {