google_oauth.go 957 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package social
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/grafana/grafana/pkg/models"
  6. "golang.org/x/oauth2"
  7. )
  8. type SocialGoogle struct {
  9. *oauth2.Config
  10. allowedDomains []string
  11. hostedDomain string
  12. apiUrl string
  13. allowSignup bool
  14. }
  15. func (s *SocialGoogle) Type() int {
  16. return int(models.GOOGLE)
  17. }
  18. func (s *SocialGoogle) IsEmailAllowed(email string) bool {
  19. return isEmailAllowed(email, s.allowedDomains)
  20. }
  21. func (s *SocialGoogle) IsSignupAllowed() bool {
  22. return s.allowSignup
  23. }
  24. func (s *SocialGoogle) UserInfo(client *http.Client) (*BasicUserInfo, error) {
  25. var data struct {
  26. Name string `json:"name"`
  27. Email string `json:"email"`
  28. }
  29. var err error
  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. Name: data.Name,
  40. Email: data.Email,
  41. Login: data.Email,
  42. }, nil
  43. }