grafana_com_oauth.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. *SocialBase
  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, token *oauth2.Token) (*BasicUserInfo, error) {
  41. var data struct {
  42. Id int `json:"id"`
  43. Name string `json:"name"`
  44. Login string `json:"username"`
  45. Email string `json:"email"`
  46. Role string `json:"role"`
  47. Orgs []OrgRecord `json:"orgs"`
  48. }
  49. response, err := HttpGet(client, s.url+"/api/oauth2/user")
  50. if err != nil {
  51. return nil, fmt.Errorf("Error getting user info: %s", err)
  52. }
  53. err = json.Unmarshal(response.Body, &data)
  54. if err != nil {
  55. return nil, fmt.Errorf("Error getting user info: %s", err)
  56. }
  57. userInfo := &BasicUserInfo{
  58. Id: fmt.Sprintf("%d", data.Id),
  59. Name: data.Name,
  60. Login: data.Login,
  61. Email: data.Email,
  62. Role: data.Role,
  63. }
  64. if !s.IsOrganizationMember(data.Orgs) {
  65. return nil, ErrMissingOrganizationMembership
  66. }
  67. return userInfo, nil
  68. }