mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Check for active team membership when fetching s.UserInfo
This commit is contained in:
parent
979d0ca70f
commit
eb37fc089b
@ -6,6 +6,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"errors"
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/models"
|
"github.com/grafana/grafana/pkg/models"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
@ -126,6 +127,28 @@ func (s *SocialGithub) IsSignupAllowed() bool {
|
|||||||
return s.allowSignup
|
return s.allowSignup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SocialGithub) IsTeamMember(client *http.Client, username string, teamId int) bool {
|
||||||
|
var data struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
State string `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
membershipUrl := fmt.Sprintf("https://api.github.com/teams/%d/memberships/%s", teamId, username)
|
||||||
|
r, err := client.Get(membershipUrl)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(r.Body).Decode(&data); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
active := data.State == "active"
|
||||||
|
return active
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SocialGithub) UserInfo(token *oauth2.Token) (*BasicUserInfo, error) {
|
func (s *SocialGithub) UserInfo(token *oauth2.Token) (*BasicUserInfo, error) {
|
||||||
var data struct {
|
var data struct {
|
||||||
Id int `json:"id"`
|
Id int `json:"id"`
|
||||||
@ -146,11 +169,23 @@ func (s *SocialGithub) UserInfo(token *oauth2.Token) (*BasicUserInfo, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &BasicUserInfo{
|
userInfo := &BasicUserInfo{
|
||||||
Identity: strconv.Itoa(data.Id),
|
Identity: strconv.Itoa(data.Id),
|
||||||
Name: data.Name,
|
Name: data.Name,
|
||||||
Email: data.Email,
|
Email: data.Email,
|
||||||
}, nil
|
}
|
||||||
|
|
||||||
|
if len(s.teamIds) > 0 {
|
||||||
|
for _, teamId := range s.teamIds {
|
||||||
|
if s.IsTeamMember(client, data.Name, teamId) {
|
||||||
|
return userInfo, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, ErrMissingTeamMembership
|
||||||
|
} else {
|
||||||
|
return userInfo, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ________ .__
|
// ________ .__
|
||||||
|
Loading…
Reference in New Issue
Block a user