mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: Use OrgRoleMapper in Grafana.com client (#89013)
* Use OrgRoleMapper in Grafana.com client * Clean up
This commit is contained in:
parent
4b853922a6
commit
2e811c5438
@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/models/roletype"
|
"github.com/grafana/grafana/pkg/models/roletype"
|
||||||
"github.com/grafana/grafana/pkg/services/auth/identity"
|
"github.com/grafana/grafana/pkg/services/auth/identity"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/services/org"
|
|
||||||
"github.com/grafana/grafana/pkg/services/ssosettings"
|
"github.com/grafana/grafana/pkg/services/ssosettings"
|
||||||
ssoModels "github.com/grafana/grafana/pkg/services/ssosettings/models"
|
ssoModels "github.com/grafana/grafana/pkg/services/ssosettings/models"
|
||||||
"github.com/grafana/grafana/pkg/services/ssosettings/validation"
|
"github.com/grafana/grafana/pkg/services/ssosettings/validation"
|
||||||
@ -140,17 +139,15 @@ func (s *SocialGrafanaCom) UserInfo(ctx context.Context, client *http.Client, _
|
|||||||
return nil, fmt.Errorf("Error getting user info: %s", err)
|
return nil, fmt.Errorf("Error getting user info: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// on login we do not want to display the role from the external provider
|
|
||||||
var role roletype.RoleType
|
|
||||||
if !s.info.SkipOrgRoleSync {
|
|
||||||
role = org.RoleType(data.Role)
|
|
||||||
}
|
|
||||||
userInfo := &social.BasicUserInfo{
|
userInfo := &social.BasicUserInfo{
|
||||||
Id: fmt.Sprintf("%d", data.Id),
|
Id: fmt.Sprintf("%d", data.Id),
|
||||||
Name: data.Name,
|
Name: data.Name,
|
||||||
Login: data.Login,
|
Login: data.Login,
|
||||||
Email: data.Email,
|
Email: data.Email,
|
||||||
Role: role,
|
}
|
||||||
|
|
||||||
|
if !s.info.SkipOrgRoleSync {
|
||||||
|
userInfo.OrgRoles = s.orgRoleMapper.MapOrgRoles(&MappingConfiguration{strictRoleMapping: false}, nil, roletype.RoleType(data.Role))
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.isOrganizationMember(data.Orgs) {
|
if !s.isOrganizationMember(data.Orgs) {
|
||||||
|
@ -12,6 +12,8 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/login/social"
|
"github.com/grafana/grafana/pkg/login/social"
|
||||||
"github.com/grafana/grafana/pkg/services/auth/identity"
|
"github.com/grafana/grafana/pkg/services/auth/identity"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
|
"github.com/grafana/grafana/pkg/services/org"
|
||||||
|
"github.com/grafana/grafana/pkg/services/org/orgtest"
|
||||||
ssoModels "github.com/grafana/grafana/pkg/services/ssosettings/models"
|
ssoModels "github.com/grafana/grafana/pkg/services/ssosettings/models"
|
||||||
"github.com/grafana/grafana/pkg/services/ssosettings/ssosettingstests"
|
"github.com/grafana/grafana/pkg/services/ssosettings/ssosettingstests"
|
||||||
"github.com/grafana/grafana/pkg/services/user"
|
"github.com/grafana/grafana/pkg/services/user"
|
||||||
@ -32,7 +34,15 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestSocialGrafanaCom_UserInfo(t *testing.T) {
|
func TestSocialGrafanaCom_UserInfo(t *testing.T) {
|
||||||
provider := NewGrafanaComProvider(social.NewOAuthInfo(), &setting.Cfg{}, nil, &ssosettingstests.MockService{}, featuremgmt.WithFeatures())
|
cfg := &setting.Cfg{
|
||||||
|
AutoAssignOrgRole: "Viewer",
|
||||||
|
AutoAssignOrgId: 2,
|
||||||
|
}
|
||||||
|
provider := NewGrafanaComProvider(social.NewOAuthInfo(),
|
||||||
|
cfg,
|
||||||
|
ProvideOrgRoleMapper(cfg, &orgtest.FakeOrgService{}),
|
||||||
|
&ssosettingstests.MockService{},
|
||||||
|
featuremgmt.WithFeatures())
|
||||||
|
|
||||||
type conf struct {
|
type conf struct {
|
||||||
skipOrgRoleSync bool
|
skipOrgRoleSync bool
|
||||||
@ -46,27 +56,27 @@ func TestSocialGrafanaCom_UserInfo(t *testing.T) {
|
|||||||
ExpectedError error
|
ExpectedError error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
Name: "should return empty role as userInfo when Skip Org Role Sync Enabled",
|
Name: "should return empty OrgRoles when skip org role sync is enabled",
|
||||||
userInfoResp: userResponse,
|
userInfoResp: userResponse,
|
||||||
Cfg: conf{skipOrgRoleSync: true},
|
Cfg: conf{skipOrgRoleSync: true},
|
||||||
want: &social.BasicUserInfo{
|
want: &social.BasicUserInfo{
|
||||||
Id: "1",
|
Id: "1",
|
||||||
Name: "Eric Leijonmarck",
|
Name: "Eric Leijonmarck",
|
||||||
Email: "octocat@github.com",
|
Email: "octocat@github.com",
|
||||||
Login: "octocat",
|
Login: "octocat",
|
||||||
Role: "",
|
OrgRoles: map[int64]org.RoleType{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "should return role as userInfo when Skip Org Role Sync Enabled",
|
Name: "should return OrgRoles when skip org role sync is disabled",
|
||||||
userInfoResp: userResponse,
|
userInfoResp: userResponse,
|
||||||
Cfg: conf{skipOrgRoleSync: false},
|
Cfg: conf{skipOrgRoleSync: false},
|
||||||
want: &social.BasicUserInfo{
|
want: &social.BasicUserInfo{
|
||||||
Id: "1",
|
Id: "1",
|
||||||
Name: "Eric Leijonmarck",
|
Name: "Eric Leijonmarck",
|
||||||
Email: "octocat@github.com",
|
Email: "octocat@github.com",
|
||||||
Login: "octocat",
|
Login: "octocat",
|
||||||
Role: "Admin",
|
OrgRoles: map[int64]org.RoleType{2: org.RoleAdmin},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/services/login"
|
"github.com/grafana/grafana/pkg/services/login"
|
||||||
"github.com/grafana/grafana/pkg/services/oauthtoken"
|
"github.com/grafana/grafana/pkg/services/oauthtoken"
|
||||||
"github.com/grafana/grafana/pkg/services/org"
|
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
"github.com/grafana/grafana/pkg/util/errutil"
|
"github.com/grafana/grafana/pkg/util/errutil"
|
||||||
)
|
)
|
||||||
@ -166,17 +165,6 @@ func (c *OAuth) Authenticate(ctx context.Context, r *authn.Request) (*authn.Iden
|
|||||||
return nil, errOAuthEmailNotAllowed.Errorf("provided email is not allowed")
|
return nil, errOAuthEmailNotAllowed.Errorf("provided email is not allowed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is required to implement OrgRole mapping for OAuth providers step by step
|
|
||||||
switch c.providerName {
|
|
||||||
case social.GenericOAuthProviderName, social.GitHubProviderName, social.GitlabProviderName,
|
|
||||||
social.OktaProviderName, social.GoogleProviderName, social.AzureADProviderName:
|
|
||||||
// Do nothing, these providers already supports OrgRole mapping
|
|
||||||
default:
|
|
||||||
userInfo.OrgRoles, userInfo.IsGrafanaAdmin, _ = getRoles(c.cfg, func() (org.RoleType, *bool, error) {
|
|
||||||
return userInfo.Role, userInfo.IsGrafanaAdmin, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
lookupParams := login.UserLookupParams{}
|
lookupParams := login.UserLookupParams{}
|
||||||
allowInsecureEmailLookup := c.settingsProviderSvc.KeyValue("auth", "oauth_allow_insecure_email_lookup").MustBool(false)
|
allowInsecureEmailLookup := c.settingsProviderSvc.KeyValue("auth", "oauth_allow_insecure_email_lookup").MustBool(false)
|
||||||
if allowInsecureEmailLookup {
|
if allowInsecureEmailLookup {
|
||||||
|
Loading…
Reference in New Issue
Block a user