forked from vmware-archive/atc
/
oauth_factory.go
47 lines (40 loc) · 1.19 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
package auth
import (
"code.cloudfoundry.org/lager"
"code.cloudfoundry.org/urljoiner"
"github.com/concourse/atc/auth/provider"
"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.Team, providerName string) (provider.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
}
auth, found := team.Auth()[providerName]
if !found {
return nil, false, nil
}
oauthProvider, found := provider.NewProvider(auth, providerName, urljoiner.Join(of.atcExternalURL, redirectURL))
if !found {
return nil, false, nil
}
return oauthProvider, true, nil
}