mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Teams: show proper label for each auth provider (#17860)
* Teams: show proper label for each auth provider Teams: don't sore AuthModule in team_member table, use JOIN to get it instead * Teams: fix AddTeamMember after last changes * Teams: add more auth provider labels * Teams: show external sync badge if LDAP is not enabled * Teams: tests for getting auth module
This commit is contained in:
parent
0d2be0a7ed
commit
3d848d0fdf
@ -21,14 +21,32 @@ func GetTeamMembers(c *m.ReqContext) Response {
|
||||
member.AvatarUrl = dtos.GetGravatarUrl(member.Email)
|
||||
member.Labels = []string{}
|
||||
|
||||
if setting.IsEnterprise && setting.LDAPEnabled && member.External {
|
||||
member.Labels = append(member.Labels, "LDAP")
|
||||
if setting.IsEnterprise && member.External {
|
||||
authProvider := GetAuthProviderLabel(member.AuthModule)
|
||||
member.Labels = append(member.Labels, authProvider)
|
||||
}
|
||||
}
|
||||
|
||||
return JSON(200, query.Result)
|
||||
}
|
||||
|
||||
func GetAuthProviderLabel(authModule string) string {
|
||||
switch authModule {
|
||||
case "oauth_github":
|
||||
return "GitHub"
|
||||
case "oauth_google":
|
||||
return "Google"
|
||||
case "oauth_gitlab":
|
||||
return "GitLab"
|
||||
case "oauth_grafana_com", "oauth_grafananet":
|
||||
return "grafana.com"
|
||||
case "ldap", "":
|
||||
return "LDAP"
|
||||
default:
|
||||
return "OAuth"
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/teams/:teamId/members
|
||||
func (hs *HTTPServer) AddTeamMember(c *m.ReqContext, cmd m.AddTeamMemberCommand) Response {
|
||||
cmd.OrgId = c.OrgId
|
||||
|
@ -68,6 +68,7 @@ type TeamMemberDTO struct {
|
||||
TeamId int64 `json:"teamId"`
|
||||
UserId int64 `json:"userId"`
|
||||
External bool `json:"-"`
|
||||
AuthModule string `json:"auth_module"`
|
||||
Email string `json:"email"`
|
||||
Login string `json:"login"`
|
||||
AvatarUrl string `json:"avatarUrl"`
|
||||
|
@ -41,7 +41,7 @@ func getTeamSelectSqlBase() string {
|
||||
team.org_id,
|
||||
team.name as name,
|
||||
team.email as email,
|
||||
(SELECT COUNT(*) from team_member where team_member.team_id = team.id) as member_count
|
||||
(SELECT COUNT(*) from team_member where team_member.team_id = team.id) as member_count
|
||||
FROM team as team `
|
||||
}
|
||||
|
||||
@ -365,6 +365,15 @@ func GetTeamMembers(query *m.GetTeamMembersQuery) error {
|
||||
query.Result = make([]*m.TeamMemberDTO, 0)
|
||||
sess := x.Table("team_member")
|
||||
sess.Join("INNER", x.Dialect().Quote("user"), fmt.Sprintf("team_member.user_id=%s.id", x.Dialect().Quote("user")))
|
||||
|
||||
// Join with only most recent auth module
|
||||
authJoinCondition := `(
|
||||
SELECT id from user_auth
|
||||
WHERE user_auth.user_id = team_member.user_id
|
||||
ORDER BY user_auth.created DESC `
|
||||
authJoinCondition = "user_auth.id=" + authJoinCondition + dialect.Limit(1) + ")"
|
||||
sess.Join("LEFT", "user_auth", authJoinCondition)
|
||||
|
||||
if query.OrgId != 0 {
|
||||
sess.Where("team_member.org_id=?", query.OrgId)
|
||||
}
|
||||
@ -377,7 +386,7 @@ func GetTeamMembers(query *m.GetTeamMembersQuery) error {
|
||||
if query.External {
|
||||
sess.Where("team_member.external=?", dialect.BooleanStr(true))
|
||||
}
|
||||
sess.Cols("team_member.org_id", "team_member.team_id", "team_member.user_id", "user.email", "user.login", "team_member.external", "team_member.permission")
|
||||
sess.Cols("team_member.org_id", "team_member.team_id", "team_member.user_id", "user.email", "user.login", "team_member.external", "team_member.permission", "user_auth.auth_module")
|
||||
sess.Asc("user.login", "user.email")
|
||||
|
||||
err := sess.Find(&query.Result)
|
||||
|
@ -75,6 +75,32 @@ func TestTeamCommandsAndQueries(t *testing.T) {
|
||||
So(q2.Result[0].External, ShouldEqual, true)
|
||||
})
|
||||
|
||||
Convey("Should return latest auth module for users when getting team members", func() {
|
||||
userId := userIds[1]
|
||||
err := SetAuthInfo(&m.SetAuthInfoCommand{UserId: userId, AuthModule: "oauth_github", AuthId: "1234567"})
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
teamQuery := &m.SearchTeamsQuery{OrgId: testOrgId, Name: "group1 name", Page: 1, Limit: 10}
|
||||
err = SearchTeams(teamQuery)
|
||||
So(err, ShouldBeNil)
|
||||
So(teamQuery.Page, ShouldEqual, 1)
|
||||
|
||||
team1 := teamQuery.Result.Teams[0]
|
||||
|
||||
err = AddTeamMember(&m.AddTeamMemberCommand{OrgId: testOrgId, TeamId: team1.Id, UserId: userId, External: true})
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
memberQuery := &m.GetTeamMembersQuery{OrgId: testOrgId, TeamId: team1.Id, External: true}
|
||||
err = GetTeamMembers(memberQuery)
|
||||
So(err, ShouldBeNil)
|
||||
So(memberQuery.Result, ShouldHaveLength, 1)
|
||||
So(memberQuery.Result[0].TeamId, ShouldEqual, team1.Id)
|
||||
So(memberQuery.Result[0].Login, ShouldEqual, "loginuser1")
|
||||
So(memberQuery.Result[0].OrgId, ShouldEqual, testOrgId)
|
||||
So(memberQuery.Result[0].External, ShouldEqual, true)
|
||||
So(memberQuery.Result[0].AuthModule, ShouldEqual, "oauth_github")
|
||||
})
|
||||
|
||||
Convey("Should be able to update users in a team", func() {
|
||||
userId := userIds[0]
|
||||
team := group1.Result
|
||||
|
Loading…
Reference in New Issue
Block a user