| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | package oauth2import (	"encoding/json"	"io/ioutil"	"net/http"	"net/url"	"time"	"golang.org/x/oauth2")type GitlabField struct {	ID                             int           `json:"id"`	Name                           string        `json:"name"`	Username                       string        `json:"username"`	State                          string        `json:"state"`	AvatarURL                      string        `json:"avatar_url"`	WebURL                         string        `json:"web_url"`	CreatedAt                      time.Time     `json:"created_at"`	Bio                            string        `json:"bio"`	BioHTML                        string        `json:"bio_html"`	Location                       interface{}   `json:"location"`	PublicEmail                    string        `json:"public_email"`	Skype                          string        `json:"skype"`	Linkedin                       string        `json:"linkedin"`	Twitter                        string        `json:"twitter"`	WebsiteURL                     string        `json:"website_url"`	Organization                   interface{}   `json:"organization"`	JobTitle                       string        `json:"job_title"`	Pronouns                       interface{}   `json:"pronouns"`	Bot                            bool          `json:"bot"`	WorkInformation                interface{}   `json:"work_information"`	Followers                      int           `json:"followers"`	Following                      int           `json:"following"`	LastSignInAt                   time.Time     `json:"last_sign_in_at"`	ConfirmedAt                    time.Time     `json:"confirmed_at"`	LastActivityOn                 string        `json:"last_activity_on"`	Email                          string        `json:"email"`	ThemeID                        int           `json:"theme_id"`	ColorSchemeID                  int           `json:"color_scheme_id"`	ProjectsLimit                  int           `json:"projects_limit"`	CurrentSignInAt                time.Time     `json:"current_sign_in_at"`	Identities                     []interface{} `json:"identities"`	CanCreateGroup                 bool          `json:"can_create_group"`	CanCreateProject               bool          `json:"can_create_project"`	TwoFactorEnabled               bool          `json:"two_factor_enabled"`	External                       bool          `json:"external"`	PrivateProfile                 bool          `json:"private_profile"`	CommitEmail                    string        `json:"commit_email"`	SharedRunnersMinutesLimit      interface{}   `json:"shared_runners_minutes_limit"`	ExtraSharedRunnersMinutesLimit interface{}   `json:"extra_shared_runners_minutes_limit"`	IsAdmin                        bool          `json:"is_admin"`	Note                           interface{}   `json:"note"`	UsingLicenseSeat               bool          `json:"using_license_seat"`}func gitlabScope() []string {	return []string{"read_user api read_api"}}func gitlabEndpoint(server string) oauth2.Endpoint {	Endpoint := oauth2.Endpoint{		AuthURL:  server + "/oauth/authorize",		TokenURL: server + "/oauth/token",	}	return Endpoint}func gitlabUserInfo(accessToken string, server string) (string, error) {	response, err := http.Get(server + "/api/v4/user?access_token=" + accessToken)	if err != nil {		return "", err	}	defer response.Body.Close()	contents, err := ioutil.ReadAll(response.Body)	if err != nil {		return "", err	}	var data GitlabField	json.Unmarshal([]byte(contents), &data)	serverURL, err := url.Parse(server)	if err != nil {		return "", err	}	return data.Username + "@" + serverURL.Hostname(), err}
 |