From 71db5115f4d4ac993a438a856e99438ec4537b60 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Tue, 5 Apr 2022 14:44:33 +0100 Subject: [PATCH] User: Expose GCOM user ID as externalUserId in grafanaBootData (#47307) * user essentials mob! :trident: * user essentials mob! :trident: * user essentials mob! :trident: * user essentials mob! :trident: * user essentials mob! :trident: * fix sql indtent Co-authored-by: Joao Silva Co-authored-by: Ashley Harrison --- pkg/api/dtos/models.go | 1 + pkg/api/index.go | 1 + pkg/models/user.go | 30 ++++++++++++++++-------------- pkg/services/sqlstore/user.go | 27 +++++++++++++++++---------- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/pkg/api/dtos/models.go b/pkg/api/dtos/models.go index 1d9ccaeee1b..89bac57aac5 100644 --- a/pkg/api/dtos/models.go +++ b/pkg/api/dtos/models.go @@ -28,6 +28,7 @@ type LoginCommand struct { type CurrentUser struct { IsSignedIn bool `json:"isSignedIn"` Id int64 `json:"id"` + ExternalUserId string `json:"externalUserId"` Login string `json:"login"` Email string `json:"email"` Name string `json:"name"` diff --git a/pkg/api/index.go b/pkg/api/index.go index 8d959182067..f4d42e03d6c 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -653,6 +653,7 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat IsSignedIn: c.IsSignedIn, Login: c.Login, Email: c.Email, + ExternalUserId: c.SignedInUser.ExternalAuthId, Name: c.Name, OrgCount: c.OrgCount, OrgId: c.OrgId, diff --git a/pkg/models/user.go b/pkg/models/user.go index 0e528818f02..343ce25e85d 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -169,20 +169,22 @@ type GetUserOrgListQuery struct { // DTO & Projections type SignedInUser struct { - UserId int64 - OrgId int64 - OrgName string - OrgRole RoleType - Login string - Name string - Email string - ApiKeyId int64 - OrgCount int - IsGrafanaAdmin bool - IsAnonymous bool - HelpFlags1 HelpFlags1 - LastSeenAt time.Time - Teams []int64 + UserId int64 + OrgId int64 + OrgName string + OrgRole RoleType + ExternalAuthModule string + ExternalAuthId string + Login string + Name string + Email string + ApiKeyId int64 + OrgCount int + IsGrafanaAdmin bool + IsAnonymous bool + HelpFlags1 HelpFlags1 + LastSeenAt time.Time + Teams []int64 // Permissions grouped by orgID and actions Permissions map[int64]map[string][]string `json:"-"` } diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index 238f4e987b6..fa943100445 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -540,18 +540,21 @@ func (ss *SQLStore) GetSignedInUser(ctx context.Context, query *models.GetSigned } var rawSQL = `SELECT - u.id as user_id, - u.is_admin as is_grafana_admin, - u.email as email, - u.login as login, - u.name as name, - u.help_flags1 as help_flags1, - u.last_seen_at as last_seen_at, + u.id as user_id, + u.is_admin as is_grafana_admin, + u.email as email, + u.login as login, + u.name as name, + u.help_flags1 as help_flags1, + u.last_seen_at as last_seen_at, (SELECT COUNT(*) FROM org_user where org_user.user_id = u.id) as org_count, - org.name as org_name, - org_user.role as org_role, - org.id as org_id + user_auth.auth_module as external_auth_module, + user_auth.auth_id as external_auth_id, + org.name as org_name, + org_user.role as org_role, + org.id as org_id FROM ` + dialect.Quote("user") + ` as u + LEFT OUTER JOIN user_auth on user_auth.user_id = u.id LEFT OUTER JOIN org_user on org_user.org_id = ` + orgId + ` and org_user.user_id = u.id LEFT OUTER JOIN org on org.id = org_user.org_id ` @@ -579,6 +582,10 @@ func (ss *SQLStore) GetSignedInUser(ctx context.Context, query *models.GetSigned user.OrgName = "Org missing" } + if user.ExternalAuthModule != "oauth_grafana_com" { + user.ExternalAuthId = "" + } + getTeamsByUserQuery := &models.GetTeamsByUserQuery{OrgId: user.OrgId, UserId: user.UserId} err = ss.GetTeamsByUser(ctx, getTeamsByUserQuery) if err != nil {