chore(auth): refactor openid team creation
This commit is contained in:
parent
10ff864e0c
commit
4f1f96f1e9
@ -88,14 +88,14 @@ func (*TeamMember) TableName() string {
|
|||||||
// TeamUser is the team member type
|
// TeamUser is the team member type
|
||||||
type TeamUser struct {
|
type TeamUser struct {
|
||||||
user.User `xorm:"extends"`
|
user.User `xorm:"extends"`
|
||||||
// Whether or not the member is an admin of the team. See the docs for more about what a team admin can do
|
// Whether the member is an admin of the team. See the docs for more about what a team admin can do
|
||||||
Admin bool `json:"admin"`
|
Admin bool `json:"admin"`
|
||||||
TeamID int64 `json:"-"`
|
TeamID int64 `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// OIDCTeamData is the relevant data for a team and is delivered by oidc token
|
// OIDCTeam is the relevant data for a team and is delivered by oidc token
|
||||||
type OIDCTeamData struct {
|
type OIDCTeam struct {
|
||||||
TeamName string
|
Name string
|
||||||
OidcID string
|
OidcID string
|
||||||
Description string
|
Description string
|
||||||
}
|
}
|
||||||
|
@ -224,9 +224,9 @@ func HandleCallback(c echo.Context) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Found error while leaving teams %v", err)
|
log.Errorf("Found error while leaving teams %v", err)
|
||||||
}
|
}
|
||||||
errors := RemoveEmptySSOTeams(s, teamIDsToLeave)
|
errs := RemoveEmptySSOTeams(s, teamIDsToLeave)
|
||||||
if len(errors) > 0 {
|
if len(errs) > 0 {
|
||||||
for _, err := range errors {
|
for _, err := range errs {
|
||||||
log.Errorf("Found error while removing empty teams %v", err)
|
log.Errorf("Found error while removing empty teams %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,7 +241,7 @@ func HandleCallback(c echo.Context) error {
|
|||||||
return auth.NewUserAuthTokenResponse(u, c, false)
|
return auth.NewUserAuthTokenResponse(u, c, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
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.OIDCTeam) (oidcTeams []int64, err error) {
|
||||||
if len(teamData) == 0 {
|
if len(teamData) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -291,8 +291,8 @@ func RemoveUserFromTeamsByIds(s *xorm.Session, u *user.User, teamIDs []int64) (e
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (teamData []models.OIDCTeamData, errs []error) {
|
func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (teamData []*models.OIDCTeam, errs []error) {
|
||||||
teamData = []models.OIDCTeamData{}
|
teamData = []*models.OIDCTeam{}
|
||||||
errs = []error{}
|
errs = []error{}
|
||||||
for _, team := range groups {
|
for _, team := range groups {
|
||||||
var name string
|
var name string
|
||||||
@ -309,10 +309,10 @@ func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (
|
|||||||
_, exists = team["oidcID"]
|
_, exists = team["oidcID"]
|
||||||
if exists {
|
if exists {
|
||||||
switch t := team["oidcID"].(type) {
|
switch t := team["oidcID"].(type) {
|
||||||
|
case string:
|
||||||
|
oidcID = team["oidcID"].(string)
|
||||||
case int64:
|
case int64:
|
||||||
oidcID = strconv.FormatInt(team["oidcID"].(int64), 10)
|
oidcID = strconv.FormatInt(team["oidcID"].(int64), 10)
|
||||||
case string:
|
|
||||||
oidcID = string(team["oidcID"].(string))
|
|
||||||
case float64:
|
case float64:
|
||||||
oidcID = strconv.FormatFloat(team["oidcID"].(float64), 'f', -1, 64)
|
oidcID = strconv.FormatFloat(team["oidcID"].(float64), 'f', -1, 64)
|
||||||
default:
|
default:
|
||||||
@ -324,12 +324,12 @@ func getTeamDataFromToken(groups []map[string]interface{}, provider *Provider) (
|
|||||||
errs = append(errs, &user.ErrOpenIDCustomScopeMalformed{})
|
errs = append(errs, &user.ErrOpenIDCustomScopeMalformed{})
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
teamData = append(teamData, models.OIDCTeamData{TeamName: name, OidcID: oidcID, Description: description})
|
teamData = append(teamData, &models.OIDCTeam{Name: name, OidcID: oidcID, Description: description})
|
||||||
}
|
}
|
||||||
return teamData, errs
|
return teamData, errs
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateTeamWithData(s *xorm.Session, teamData models.OIDCTeamData, u *user.User) (team *models.Team, err error) {
|
func CreateOIDCTeam(s *xorm.Session, teamData *models.OIDCTeam, u *user.User) (team *models.Team, err error) {
|
||||||
team = &models.Team{
|
team = &models.Team{
|
||||||
Name: teamData.TeamName,
|
Name: teamData.TeamName,
|
||||||
Description: teamData.Description,
|
Description: teamData.Description,
|
||||||
@ -339,24 +339,28 @@ func CreateTeamWithData(s *xorm.Session, teamData models.OIDCTeamData, u *user.U
|
|||||||
return team, err
|
return team, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// this functions creates an array of existing teams that was generated from the oidc data.
|
// GetOrCreateTeamsByOIDCAndNames returns a slice of teams which were generated from the oidc data. If a team did not exist previously it is automatically created.
|
||||||
func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []models.OIDCTeamData, u *user.User) (te []*models.Team, err error) {
|
func GetOrCreateTeamsByOIDCAndNames(s *xorm.Session, teamData []*models.OIDCTeam, u *user.User) (te []*models.Team, err error) {
|
||||||
te = []*models.Team{}
|
te = []*models.Team{}
|
||||||
// Procedure can only be successful if oidcID is set
|
// 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.Name)
|
||||||
if err != nil {
|
if err != nil && !models.IsErrOIDCTeamDoesNotExist(err) {
|
||||||
log.Debugf("Team with oidc_id %v and name %v does not exist. Creating team.. ", oidcTeam.OidcID, oidcTeam.TeamName)
|
return nil, err
|
||||||
newTeam, err := CreateTeamWithData(s, oidcTeam, u)
|
}
|
||||||
|
if err != nil && models.IsErrOIDCTeamDoesNotExist(err) {
|
||||||
|
log.Debugf("Team with oidc_id %v and name %v does not exist. Creating team… ", oidcTeam.OidcID, oidcTeam.Name)
|
||||||
|
newTeam, err := CreateOIDCTeam(s, oidcTeam, u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return te, err
|
return te, err
|
||||||
}
|
}
|
||||||
te = append(te, newTeam)
|
te = append(te, newTeam)
|
||||||
} else {
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("Team with oidc_id %v and name %v already exists.", team.OidcID, team.Name)
|
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
|
return te, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user