grafana_com_oauth.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package social
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "github.com/grafana/grafana/pkg/models"
  7. "golang.org/x/oauth2"
  8. )
  9. type SocialGrafanaCom struct {
  10. *oauth2.Config
  11. url string
  12. allowedOrganizations []string
  13. allowSignup bool
  14. }
  15. type OrgRecord struct {
  16. Login string `json:"login"`
  17. }
  18. func (s *SocialGrafanaCom) Type() int {
  19. return int(models.GRAFANA_COM)
  20. }
  21. func (s *SocialGrafanaCom) IsEmailAllowed(email string) bool {
  22. return true
  23. }
  24. func (s *SocialGrafanaCom) IsSignupAllowed() bool {
  25. return s.allowSignup
  26. }
  27. func (s *SocialGrafanaCom) IsOrganizationMember(organizations []OrgRecord) bool {
  28. if len(s.allowedOrganizations) == 0 {
  29. return true
  30. }
  31. for _, allowedOrganization := range s.allowedOrganizations {
  32. for _, organization := range organizations {
  33. if organization.Login == allowedOrganization {
  34. return true
  35. }
  36. }
  37. }
  38. return false
  39. }
  40. func (s *SocialGrafanaCom) UserInfo(client *http.Client) (*BasicUserInfo, error) {
  41. var data struct {
  42. Name string `json:"name"`
  43. Login string `json:"username"`
  44. Email string `json:"email"`
  45. Role string `json:"role"`
  46. Orgs []OrgRecord `json:"orgs"`
  47. }
  48. response, err := HttpGet(client, s.url+"/api/oauth2/user")
  49. if err != nil {
  50. return nil, fmt.Errorf("Error getting user info: %s", err)
  51. }
  52. err = json.Unmarshal(response.Body, &data)
  53. if err != nil {
  54. return nil, fmt.Errorf("Error getting user info: %s", err)
  55. }
  56. userInfo := &BasicUserInfo{
  57. Name: data.Name,
  58. Login: data.Login,
  59. Email: data.Email,
  60. Role: data.Role,
  61. }
  62. if !s.IsOrganizationMember(data.Orgs) {
  63. return nil, ErrMissingOrganizationMembership
  64. }
  65. return userInfo, nil
  66. }