forked from vmware-archive/atc
/
oauth_factory.go
64 lines (52 loc) · 1.71 KB
/
oauth_factory.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
package provider
import (
"code.cloudfoundry.org/lager"
"code.cloudfoundry.org/urljoiner"
"github.com/concourse/atc/auth/genericoauth"
"github.com/concourse/atc/auth/github"
"github.com/concourse/atc/auth/uaa"
"github.com/concourse/atc/db"
"github.com/tedsuo/rata"
)
type OAuthFactory struct {
logger lager.Logger
atcExternalURL string
routes rata.Routes
callback string
}
func NewOAuthFactory(logger lager.Logger, atcExternalURL string, routes rata.Routes, callback string) OAuthFactory {
return OAuthFactory{
logger: logger,
atcExternalURL: atcExternalURL,
routes: routes,
callback: callback,
}
}
func (of OAuthFactory) GetProvider(team db.SavedTeam, providerName string) (Provider, bool, error) {
redirectURL, err := of.routes.CreatePathForRoute(of.callback, rata.Params{
"provider": providerName,
})
if err != nil {
of.logger.Error("failed-to-construct-redirect-url", err, lager.Data{"provider": providerName})
return nil, false, err
}
switch providerName {
case github.ProviderName:
if team.GitHubAuth == nil {
return nil, false, nil
}
return github.NewProvider(team.GitHubAuth, urljoiner.Join(of.atcExternalURL, redirectURL)), true, nil
case uaa.ProviderName:
if team.UAAAuth == nil {
of.logger.Error("failed-to-construct-redirect-url", err, lager.Data{"provider": providerName})
return nil, false, nil
}
return uaa.NewProvider(team.UAAAuth, urljoiner.Join(of.atcExternalURL, redirectURL)), true, nil
case genericoauth.ProviderName:
if team.GenericOAuth == nil {
return nil, false, nil
}
return genericoauth.NewProvider(team.GenericOAuth, urljoiner.Join(of.atcExternalURL, redirectURL)), true, nil
}
return nil, false, nil
}