google_oauth.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. *oauth2.Config
  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) (*BasicUserInfo, error) {
  26. var data struct {
  27. Name string `json:"name"`
  28. Email string `json:"email"`
  29. }
  30. response, err := HttpGet(client, s.apiUrl)
  31. if err != nil {
  32. return nil, fmt.Errorf("Error getting user info: %s", err)
  33. }
  34. err = json.Unmarshal(response.Body, &data)
  35. if err != nil {
  36. return nil, fmt.Errorf("Error getting user info: %s", err)
  37. }
  38. return &BasicUserInfo{
  39. Name: data.Name,
  40. Email: data.Email,
  41. Login: data.Email,
  42. }, nil
  43. }