gitlab.go 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package oauth2
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "net/url"
  7. "time"
  8. "golang.org/x/oauth2"
  9. )
  10. type GitlabField struct {
  11. ID int `json:"id"`
  12. Name string `json:"name"`
  13. Username string `json:"username"`
  14. State string `json:"state"`
  15. AvatarURL string `json:"avatar_url"`
  16. WebURL string `json:"web_url"`
  17. CreatedAt time.Time `json:"created_at"`
  18. Bio string `json:"bio"`
  19. BioHTML string `json:"bio_html"`
  20. Location interface{} `json:"location"`
  21. PublicEmail string `json:"public_email"`
  22. Skype string `json:"skype"`
  23. Linkedin string `json:"linkedin"`
  24. Twitter string `json:"twitter"`
  25. WebsiteURL string `json:"website_url"`
  26. Organization interface{} `json:"organization"`
  27. JobTitle string `json:"job_title"`
  28. Pronouns interface{} `json:"pronouns"`
  29. Bot bool `json:"bot"`
  30. WorkInformation interface{} `json:"work_information"`
  31. Followers int `json:"followers"`
  32. Following int `json:"following"`
  33. LastSignInAt time.Time `json:"last_sign_in_at"`
  34. ConfirmedAt time.Time `json:"confirmed_at"`
  35. LastActivityOn string `json:"last_activity_on"`
  36. Email string `json:"email"`
  37. ThemeID int `json:"theme_id"`
  38. ColorSchemeID int `json:"color_scheme_id"`
  39. ProjectsLimit int `json:"projects_limit"`
  40. CurrentSignInAt time.Time `json:"current_sign_in_at"`
  41. Identities []interface{} `json:"identities"`
  42. CanCreateGroup bool `json:"can_create_group"`
  43. CanCreateProject bool `json:"can_create_project"`
  44. TwoFactorEnabled bool `json:"two_factor_enabled"`
  45. External bool `json:"external"`
  46. PrivateProfile bool `json:"private_profile"`
  47. CommitEmail string `json:"commit_email"`
  48. SharedRunnersMinutesLimit interface{} `json:"shared_runners_minutes_limit"`
  49. ExtraSharedRunnersMinutesLimit interface{} `json:"extra_shared_runners_minutes_limit"`
  50. IsAdmin bool `json:"is_admin"`
  51. Note interface{} `json:"note"`
  52. UsingLicenseSeat bool `json:"using_license_seat"`
  53. }
  54. func gitlabScope() []string {
  55. return []string{"read_user api read_api"}
  56. }
  57. func gitlabEndpoint(server string) oauth2.Endpoint {
  58. Endpoint := oauth2.Endpoint{
  59. AuthURL: server + "/oauth/authorize",
  60. TokenURL: server + "/oauth/token",
  61. }
  62. return Endpoint
  63. }
  64. func gitlabUserInfo(accessToken string, server string) (string, error) {
  65. response, err := http.Get(server + "/api/v4/user?access_token=" + accessToken)
  66. if err != nil {
  67. return "", err
  68. }
  69. defer response.Body.Close()
  70. contents, err := ioutil.ReadAll(response.Body)
  71. if err != nil {
  72. return "", err
  73. }
  74. var data GitlabField
  75. json.Unmarshal([]byte(contents), &data)
  76. serverURL, err := url.Parse(server)
  77. if err != nil {
  78. return "", err
  79. }
  80. return data.Username + "@" + serverURL.Hostname(), err
  81. }