google_oauth.go 1000 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package social
  2. import (
  3. "encoding/json"
  4. "github.com/grafana/grafana/pkg/models"
  5. "golang.org/x/oauth2"
  6. )
  7. type SocialGoogle struct {
  8. *oauth2.Config
  9. allowedDomains []string
  10. apiUrl string
  11. allowSignup bool
  12. }
  13. func (s *SocialGoogle) Type() int {
  14. return int(models.GOOGLE)
  15. }
  16. func (s *SocialGoogle) IsEmailAllowed(email string) bool {
  17. return isEmailAllowed(email, s.allowedDomains)
  18. }
  19. func (s *SocialGoogle) IsSignupAllowed() bool {
  20. return s.allowSignup
  21. }
  22. func (s *SocialGoogle) UserInfo(token *oauth2.Token) (*BasicUserInfo, error) {
  23. var data struct {
  24. Id string `json:"id"`
  25. Name string `json:"name"`
  26. Email string `json:"email"`
  27. }
  28. var err error
  29. client := s.Client(oauth2.NoContext, token)
  30. r, err := client.Get(s.apiUrl)
  31. if err != nil {
  32. return nil, err
  33. }
  34. defer r.Body.Close()
  35. if err = json.NewDecoder(r.Body).Decode(&data); err != nil {
  36. return nil, err
  37. }
  38. return &BasicUserInfo{
  39. Identity: data.Id,
  40. Name: data.Name,
  41. Email: data.Email,
  42. }, nil
  43. }