google_oauth.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 SocialGoogle struct {
  10. *SocialBase
  11. allowedDomains []string
  12. hostedDomain string
  13. apiUrl string
  14. allowSignup bool
  15. }
  16. func (s *SocialGoogle) Type() int {
  17. return int(models.GOOGLE)
  18. }
  19. func (s *SocialGoogle) IsEmailAllowed(email string) bool {
  20. return isEmailAllowed(email, s.allowedDomains)
  21. }
  22. func (s *SocialGoogle) IsSignupAllowed() bool {
  23. return s.allowSignup
  24. }
  25. func (s *SocialGoogle) UserInfo(client *http.Client, token *oauth2.Token) (*BasicUserInfo, error) {
  26. var data struct {
  27. Id string `json:"id"`
  28. Name string `json:"name"`
  29. Email string `json:"email"`
  30. }
  31. response, err := HttpGet(client, s.apiUrl)
  32. if err != nil {
  33. return nil, fmt.Errorf("Error getting user info: %s", err)
  34. }
  35. err = json.Unmarshal(response.Body, &data)
  36. if err != nil {
  37. return nil, fmt.Errorf("Error getting user info: %s", err)
  38. }
  39. return &BasicUserInfo{
  40. Id: data.Id,
  41. Name: data.Name,
  42. Email: data.Email,
  43. Login: data.Email,
  44. }, nil
  45. }