github.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package oauth2
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "time"
  8. "golang.org/x/oauth2"
  9. "golang.org/x/oauth2/github"
  10. )
  11. type GithubField struct {
  12. Login string `json:"login"`
  13. ID int `json:"id"`
  14. NodeID string `json:"node_id"`
  15. AvatarURL string `json:"avatar_url"`
  16. GravatarID string `json:"gravatar_id"`
  17. URL string `json:"url"`
  18. HTMLURL string `json:"html_url"`
  19. FollowersURL string `json:"followers_url"`
  20. FollowingURL string `json:"following_url"`
  21. GistsURL string `json:"gists_url"`
  22. StarredURL string `json:"starred_url"`
  23. SubscriptionsURL string `json:"subscriptions_url"`
  24. OrganizationsURL string `json:"organizations_url"`
  25. ReposURL string `json:"repos_url"`
  26. EventsURL string `json:"events_url"`
  27. ReceivedEventsURL string `json:"received_events_url"`
  28. Type string `json:"type"`
  29. SiteAdmin bool `json:"site_admin"`
  30. Name string `json:"name"`
  31. Company string `json:"company"`
  32. Blog string `json:"blog"`
  33. Location string `json:"location"`
  34. Email interface{} `json:"email"`
  35. Hireable interface{} `json:"hireable"`
  36. Bio string `json:"bio"`
  37. TwitterUsername interface{} `json:"twitter_username"`
  38. PublicRepos int `json:"public_repos"`
  39. PublicGists int `json:"public_gists"`
  40. Followers int `json:"followers"`
  41. Following int `json:"following"`
  42. CreatedAt time.Time `json:"created_at"`
  43. UpdatedAt time.Time `json:"updated_at"`
  44. PrivateGists int `json:"private_gists"`
  45. TotalPrivateRepos int `json:"total_private_repos"`
  46. OwnedPrivateRepos int `json:"owned_private_repos"`
  47. DiskUsage int `json:"disk_usage"`
  48. Collaborators int `json:"collaborators"`
  49. TwoFactorAuthentication bool `json:"two_factor_authentication"`
  50. Plan struct {
  51. Name string `json:"name"`
  52. Space int `json:"space"`
  53. Collaborators int `json:"collaborators"`
  54. PrivateRepos int `json:"private_repos"`
  55. } `json:"plan"`
  56. }
  57. func githubScope() []string {
  58. return []string{"read:user"}
  59. }
  60. func githubEndpoint() oauth2.Endpoint {
  61. return github.Endpoint
  62. }
  63. func githubUserInfo(accessToken string) (string, error) {
  64. client := &http.Client{}
  65. req, err := http.NewRequest("GET", "https://api.github.com/user", nil)
  66. req.Header.Set("Authorization", "token "+accessToken)
  67. req.Header.Set("Accept", "application/vnd.github.v3+json")
  68. response, err := client.Do(req)
  69. defer response.Body.Close()
  70. contents, err := ioutil.ReadAll(response.Body)
  71. log.Println(string(contents))
  72. var data GithubField
  73. json.Unmarshal([]byte(contents), &data)
  74. return data.Login + "@github.com", err
  75. }