forked from vmware-archive/atc
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
provider.go
91 lines (67 loc) · 1.81 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package provider
import (
"net/http"
"github.com/concourse/atc"
flags "github.com/jessevdk/go-flags"
"code.cloudfoundry.org/lager"
"encoding/json"
"golang.org/x/net/context"
"golang.org/x/oauth2"
)
//go:generate counterfeiter . Provider
type Provider interface {
PreTokenClient() (*http.Client, error)
OAuthClient
Verifier
}
type OAuthClient interface {
AuthCodeURL(string, ...oauth2.AuthCodeOption) string
Exchange(context.Context, string) (*oauth2.Token, error)
Client(context.Context, *oauth2.Token) *http.Client
}
//go:generate counterfeiter . Verifier
type Verifier interface {
Verify(lager.Logger, *http.Client) (bool, error)
}
//go:generate counterfeiter . AuthConfig
type AuthConfig interface {
IsConfigured() bool
Validate() error
AuthMethod(oauthBaseURL string, teamName string) atc.AuthMethod
}
type AuthConfigs map[string]AuthConfig
//go:generate counterfeiter . TeamProvider
type TeamProvider interface { // XXX rename to ProviderFactory
ProviderConstructor(AuthConfig, string) (Provider, bool)
AddAuthGroup(*flags.Group) AuthConfig
UnmarshalConfig(*json.RawMessage) (AuthConfig, error)
}
var providers map[string]TeamProvider
func init() {
providers = make(map[string]TeamProvider)
}
func Register(providerName string, providerConstructor TeamProvider) {
providers[providerName] = providerConstructor
}
func NewProvider(
auth *json.RawMessage,
providerName string,
redirectURL string,
) (Provider, bool) {
teamProvider, found := providers[providerName]
if !found {
return nil, false
}
authConfig, err := teamProvider.UnmarshalConfig(auth)
if err != nil {
return nil, false
}
newProvider, ok := teamProvider.ProviderConstructor(authConfig, redirectURL)
if !ok {
return nil, false
}
return newProvider, ok
}
func GetProviders() map[string]TeamProvider {
return providers
}