package oauth2 import ( "encoding/json" "io/ioutil" "net/http" "time" "golang.org/x/oauth2" "golang.org/x/oauth2/github" ) type GithubField struct { Login string `json:"login"` ID int `json:"id"` NodeID string `json:"node_id"` AvatarURL string `json:"avatar_url"` GravatarID string `json:"gravatar_id"` URL string `json:"url"` HTMLURL string `json:"html_url"` FollowersURL string `json:"followers_url"` FollowingURL string `json:"following_url"` GistsURL string `json:"gists_url"` StarredURL string `json:"starred_url"` SubscriptionsURL string `json:"subscriptions_url"` OrganizationsURL string `json:"organizations_url"` ReposURL string `json:"repos_url"` EventsURL string `json:"events_url"` ReceivedEventsURL string `json:"received_events_url"` Type string `json:"type"` SiteAdmin bool `json:"site_admin"` Name string `json:"name"` Company string `json:"company"` Blog string `json:"blog"` Location string `json:"location"` Email interface{} `json:"email"` Hireable interface{} `json:"hireable"` Bio string `json:"bio"` TwitterUsername interface{} `json:"twitter_username"` PublicRepos int `json:"public_repos"` PublicGists int `json:"public_gists"` Followers int `json:"followers"` Following int `json:"following"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` PrivateGists int `json:"private_gists"` TotalPrivateRepos int `json:"total_private_repos"` OwnedPrivateRepos int `json:"owned_private_repos"` DiskUsage int `json:"disk_usage"` Collaborators int `json:"collaborators"` TwoFactorAuthentication bool `json:"two_factor_authentication"` Plan struct { Name string `json:"name"` Space int `json:"space"` Collaborators int `json:"collaborators"` PrivateRepos int `json:"private_repos"` } `json:"plan"` } func githubScope() []string { return []string{"read:user"} } func githubEndpoint() oauth2.Endpoint { return github.Endpoint } func githubUserInfo(accessToken string) (string, error) { client := &http.Client{} req, err := http.NewRequest("GET", "https://api.github.com/user", nil) req.Header.Set("Authorization", "token "+accessToken) req.Header.Set("Accept", "application/vnd.github.v3+json") response, err := client.Do(req) defer response.Body.Close() contents, err := ioutil.ReadAll(response.Body) var data GithubField json.Unmarshal([]byte(contents), &data) return data.Login + "@github.com", err }