social_github.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package user
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "strings"
  7. "code.google.com/p/goauth2/oauth"
  8. "github.com/gogits/gogs/models"
  9. "github.com/gogits/gogs/modules/base"
  10. )
  11. type SocialGithub struct {
  12. Token *oauth.Token
  13. *oauth.Transport
  14. }
  15. func (s *SocialGithub) Type() int {
  16. return models.OT_GITHUB
  17. }
  18. func init() {
  19. github := &SocialGithub{}
  20. name := "github"
  21. config := &oauth.Config{
  22. ClientId: "09383403ff2dc16daaa1", //base.OauthService.GitHub.ClientId, // FIXME: panic when set
  23. ClientSecret: "0e4aa0c3630df396cdcea01a9d45cacf79925fea", //base.OauthService.GitHub.ClientSecret,
  24. RedirectURL: strings.TrimSuffix(base.AppUrl, "/") + "/user/login/" + name, //ctx.Req.URL.RequestURI(),
  25. Scope: "https://api.github.com/user",
  26. AuthURL: "https://github.com/login/oauth/authorize",
  27. TokenURL: "https://github.com/login/oauth/access_token",
  28. }
  29. github.Transport = &oauth.Transport{
  30. Config: config,
  31. Transport: http.DefaultTransport,
  32. }
  33. SocialMap[name] = github
  34. }
  35. func (s *SocialGithub) SetRedirectUrl(url string) {
  36. s.Transport.Config.RedirectURL = url
  37. }
  38. func (s *SocialGithub) UserInfo(token *oauth.Token) (*BasicUserInfo, error) {
  39. transport := &oauth.Transport{
  40. Token: token,
  41. }
  42. var data struct {
  43. Id int `json:"id"`
  44. Name string `json:"login"`
  45. Email string `json:"email"`
  46. }
  47. var err error
  48. r, err := transport.Client().Get(s.Transport.Scope)
  49. if err != nil {
  50. return nil, err
  51. }
  52. defer r.Body.Close()
  53. if err = json.NewDecoder(r.Body).Decode(&data); err != nil {
  54. return nil, err
  55. }
  56. return &BasicUserInfo{
  57. Identity: strconv.Itoa(data.Id),
  58. Name: data.Name,
  59. Email: data.Email,
  60. }, nil
  61. }