mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Auth: Add deprecation notice for empty org role Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com> * fix recasts * fix azure tests missing logger * Adding test to gitlab oauth * Covering more cases * Cover more options * Add role attributestrict check fail * Adding one more edge case test * Using legacy for gitlab * Yet another edge case YAEC * Reverting github oauth to legacy Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Not using token Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Nit. * Adding warning in docs Co-authored-by: Jguer <joao.guerreiro@grafana.com> * add warning to generic oauth Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Be more precise Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Adding warning to github oauth Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Adding warning to gitlab oauth Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Adding warning to okta oauth Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Add docs about mapping to AzureAD Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Clarify oauth_skip_org_role_update_sync Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Nit. * Nit on Azure AD Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Reorder docs index Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Fix typo Co-authored-by: Jguer <joao.guerreiro@grafana.com> Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com> Co-authored-by: gamab <gabi.mabs@gmail.com>
82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package social
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/services/org"
|
|
|
|
"golang.org/x/oauth2"
|
|
)
|
|
|
|
type SocialGrafanaCom struct {
|
|
*SocialBase
|
|
url string
|
|
allowedOrganizations []string
|
|
}
|
|
|
|
type OrgRecord struct {
|
|
Login string `json:"login"`
|
|
}
|
|
|
|
func (s *SocialGrafanaCom) Type() int {
|
|
return int(models.GRAFANA_COM)
|
|
}
|
|
|
|
func (s *SocialGrafanaCom) IsEmailAllowed(email string) bool {
|
|
return true
|
|
}
|
|
|
|
func (s *SocialGrafanaCom) IsOrganizationMember(organizations []OrgRecord) bool {
|
|
if len(s.allowedOrganizations) == 0 {
|
|
return true
|
|
}
|
|
|
|
for _, allowedOrganization := range s.allowedOrganizations {
|
|
for _, organization := range organizations {
|
|
if organization.Login == allowedOrganization {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (s *SocialGrafanaCom) UserInfo(client *http.Client, _ *oauth2.Token) (*BasicUserInfo, error) {
|
|
var data struct {
|
|
Id int `json:"id"`
|
|
Name string `json:"name"`
|
|
Login string `json:"username"`
|
|
Email string `json:"email"`
|
|
Role string `json:"role"`
|
|
Orgs []OrgRecord `json:"orgs"`
|
|
}
|
|
|
|
response, err := s.httpGet(client, s.url+"/api/oauth2/user")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error getting user info: %s", err)
|
|
}
|
|
|
|
err = json.Unmarshal(response.Body, &data)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error getting user info: %s", err)
|
|
}
|
|
|
|
userInfo := &BasicUserInfo{
|
|
Id: fmt.Sprintf("%d", data.Id),
|
|
Name: data.Name,
|
|
Login: data.Login,
|
|
Email: data.Email,
|
|
Role: org.RoleType(data.Role),
|
|
}
|
|
|
|
if !s.IsOrganizationMember(data.Orgs) {
|
|
return nil, ErrMissingOrganizationMembership
|
|
}
|
|
|
|
return userInfo, nil
|
|
}
|