@ -7,6 +7,7 @@ import (
"net"
"net/http"
"path/filepath"
"strconv"
"testing"
"time"
@ -349,6 +350,8 @@ func TestMiddlewareContext(t *testing.T) {
t . Run ( "auth_proxy" , func ( t * testing . T ) {
const userID int64 = 33
const orgID int64 = 4
const defaultOrgId int64 = 1
const orgRole = "Admin"
configure := func ( cfg * setting . Cfg ) {
cfg . AuthProxyEnabled = true
@ -356,7 +359,7 @@ func TestMiddlewareContext(t *testing.T) {
cfg . LDAPEnabled = true
cfg . AuthProxyHeaderName = "X-WEBAUTH-USER"
cfg . AuthProxyHeaderProperty = "username"
cfg . AuthProxyHeaders = map [ string ] string { "Groups" : "X-WEBAUTH-GROUPS" }
cfg . AuthProxyHeaders = map [ string ] string { "Groups" : "X-WEBAUTH-GROUPS" , "Role" : "X-WEBAUTH-ROLE" }
}
const hdrName = "markelog"
@ -432,6 +435,71 @@ func TestMiddlewareContext(t *testing.T) {
cfg . AuthProxyAutoSignUp = true
} )
middlewareScenario ( t , "Should assign role from header to default org" , func ( t * testing . T , sc * scenarioContext ) {
var storedRoleInfo map [ int64 ] models . RoleType = nil
bus . AddHandlerCtx ( "test" , func ( ctx context . Context , query * models . GetSignedInUserQuery ) error {
if query . UserId > 0 {
query . Result = & models . SignedInUser { OrgId : defaultOrgId , UserId : userID , OrgRole : storedRoleInfo [ defaultOrgId ] }
return nil
}
return models . ErrUserNotFound
} )
bus . AddHandler ( "test" , func ( cmd * models . UpsertUserCommand ) error {
cmd . Result = & models . User { Id : userID }
storedRoleInfo = cmd . ExternalUser . OrgRoles
return nil
} )
sc . fakeReq ( "GET" , "/" )
sc . req . Header . Set ( sc . cfg . AuthProxyHeaderName , hdrName )
sc . req . Header . Set ( "X-WEBAUTH-ROLE" , orgRole )
sc . exec ( )
assert . True ( t , sc . context . IsSignedIn )
assert . Equal ( t , userID , sc . context . UserId )
assert . Equal ( t , defaultOrgId , sc . context . OrgId )
assert . Equal ( t , orgRole , string ( sc . context . OrgRole ) )
} , func ( cfg * setting . Cfg ) {
configure ( cfg )
cfg . LDAPEnabled = false
cfg . AuthProxyAutoSignUp = true
} )
middlewareScenario ( t , "Should NOT assign role from header to non-default org" , func ( t * testing . T , sc * scenarioContext ) {
var storedRoleInfo map [ int64 ] models . RoleType = nil
bus . AddHandlerCtx ( "test" , func ( ctx context . Context , query * models . GetSignedInUserQuery ) error {
if query . UserId > 0 {
query . Result = & models . SignedInUser { OrgId : orgID , UserId : userID , OrgRole : storedRoleInfo [ orgID ] }
return nil
}
return models . ErrUserNotFound
} )
bus . AddHandler ( "test" , func ( cmd * models . UpsertUserCommand ) error {
cmd . Result = & models . User { Id : userID }
storedRoleInfo = cmd . ExternalUser . OrgRoles
return nil
} )
sc . fakeReq ( "GET" , "/" )
sc . req . Header . Set ( sc . cfg . AuthProxyHeaderName , hdrName )
sc . req . Header . Set ( "X-WEBAUTH-ROLE" , "Admin" )
sc . req . Header . Set ( "X-Grafana-Org-Id" , strconv . FormatInt ( orgID , 10 ) )
sc . exec ( )
assert . True ( t , sc . context . IsSignedIn )
assert . Equal ( t , userID , sc . context . UserId )
assert . Equal ( t , orgID , sc . context . OrgId )
// For non-default org, the user role should be empty
assert . Equal ( t , "" , string ( sc . context . OrgRole ) )
} , func ( cfg * setting . Cfg ) {
configure ( cfg )
cfg . LDAPEnabled = false
cfg . AuthProxyAutoSignUp = true
} )
middlewareScenario ( t , "Should get an existing user from header" , func ( t * testing . T , sc * scenarioContext ) {
const userID int64 = 12
const orgID int64 = 2