git.iko.soy/typeable/oauth2-proxy
on 296d989 help sign in
62 lines 1.5 kB history raw
1package providers
3import (
4 "net/http"
5 "net/url"
7 "github.com/pusher/oauth2_proxy/api"
8 "github.com/pusher/oauth2_proxy/logger"
9 "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
12// GitLabProvider represents an GitLab based Identity Provider
13type GitLabProvider struct {
14 *ProviderData
17// NewGitLabProvider initiates a new GitLabProvider
18func NewGitLabProvider(p *ProviderData) *GitLabProvider {
19 p.ProviderName = "GitLab"
20 if p.LoginURL == nil || p.LoginURL.String() == "" {
21 p.LoginURL = &url.URL{
22 Scheme: "https",
23 Host: "gitlab.com",
24 Path: "/oauth/authorize",
25 }
26 }
27 if p.RedeemURL == nil || p.RedeemURL.String() == "" {
28 p.RedeemURL = &url.URL{
29 Scheme: "https",
30 Host: "gitlab.com",
31 Path: "/oauth/token",
32 }
33 }
34 if p.ValidateURL == nil || p.ValidateURL.String() == "" {
35 p.ValidateURL = &url.URL{
36 Scheme: "https",
37 Host: "gitlab.com",
38 Path: "/api/v4/user",
39 }
40 }
41 if p.Scope == "" {
42 p.Scope = "read_user"
43 }
44 return &GitLabProvider{ProviderData: p}
47// GetEmailAddress returns the Account email address
48func (p *GitLabProvider) GetEmailAddress(s *sessions.SessionState) (string, error) {
50 req, err := http.NewRequest("GET",
51 p.ValidateURL.String()+"?access_token="+s.AccessToken, nil)
52 if err != nil {
53 logger.Printf("failed building request %s", err)
54 return "", err
55 }
56 json, err := api.Request(req)
57 if err != nil {
58 logger.Printf("failed making request %s", err)
59 return "", err
60 }
61 return json.Get("email").String()