Refactor: extract adaptors.HTTP

This commit is contained in:
Hidetake Iwata
2019-04-08 10:03:31 +09:00
parent 675b5e5fff
commit d70c9db036
5 changed files with 48 additions and 21 deletions

30
adaptors/http.go Normal file
View File

@@ -0,0 +1,30 @@
package adaptors
import (
"log"
"net/http"
"net/url"
"os"
"github.com/int128/kubelogin/adaptors/interfaces"
)
type HTTP struct{}
func (*HTTP) NewClient(in adaptors.HTTPClientIn) (*http.Client, error) {
transport := &http.Transport{}
//TODO: replace with http.ProxyFromEnvironmentURL or go-ieproxy
// https://github.com/int128/kubelogin/issues/31
val, ok := os.LookupEnv("HTTPS_PROXY")
if ok {
proxyURL, err := url.Parse(val)
if err != nil {
log.Printf("HTTPS_PROXY %s cannot be parsed into a URL\n", val)
} else {
transport.Proxy = http.ProxyURL(proxyURL)
}
}
//
transport.TLSClientConfig = in.TLSClientConfig
return &http.Client{Transport: transport}, nil
}

View File

@@ -2,6 +2,7 @@ package adaptors
import (
"context"
"crypto/tls"
"net/http"
"k8s.io/client-go/tools/clientcmd/api"
@@ -16,6 +17,14 @@ type KubeConfig interface {
WriteToFile(config *api.Config, filename string) error
}
type HTTP interface {
NewClient(in HTTPClientIn) (*http.Client, error)
}
type HTTPClientIn struct {
TLSClientConfig *tls.Config
}
type OIDC interface {
Authenticate(ctx context.Context, in OIDCAuthenticateIn) (*OIDCAuthenticateOut, error)
}

View File

@@ -3,9 +3,6 @@ package adaptors
import (
"context"
"log"
"net/http"
"net/url"
"os"
"github.com/coreos/go-oidc"
"github.com/int128/kubelogin/adaptors/interfaces"
@@ -18,22 +15,6 @@ type OIDC struct{}
func (*OIDC) Authenticate(ctx context.Context, in adaptors.OIDCAuthenticateIn) (*adaptors.OIDCAuthenticateOut, error) {
if in.Client != nil {
// https://github.com/int128/kubelogin/issues/31
val, ok := os.LookupEnv("HTTPS_PROXY")
if ok {
proxyURL, err := url.Parse(val)
if err != nil {
log.Printf("HTTPS_PROXY %s cannot be parsed into a URL\n", val)
} else {
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
in.Client = &http.Client{
Transport: transport,
}
}
}
//
ctx = context.WithValue(ctx, oauth2.HTTPClient, in.Client)
}
provider, err := oidc.NewProvider(ctx, in.Issuer)

View File

@@ -12,6 +12,7 @@ func Invoke(f func(cmd adaptorsInterfaces.Cmd)) error {
f(&adaptors.Cmd{
Login: &usecases.Login{
KubeConfig: &adaptors.KubeConfig{},
HTTP: &adaptors.HTTP{},
OIDC: &adaptors.OIDC{},
},
})

View File

@@ -3,7 +3,6 @@ package usecases
import (
"context"
"log"
"net/http"
"github.com/int128/kubelogin/adaptors/interfaces"
"github.com/int128/kubelogin/kubeconfig"
@@ -13,6 +12,7 @@ import (
type Login struct {
KubeConfig adaptors.KubeConfig
HTTP adaptors.HTTP
OIDC adaptors.OIDC
}
@@ -34,12 +34,18 @@ func (u *Login) Do(ctx context.Context, in usecases.LoginIn) error {
cfg.CurrentContext)
}
tlsConfig := tlsConfig(authProvider, in.SkipTLSVerify)
hc, err := u.HTTP.NewClient(adaptors.HTTPClientIn{
TLSClientConfig: tlsConfig,
})
if err != nil {
return errors.Wrapf(err, "could not create a HTTP client")
}
token, err := u.OIDC.Authenticate(ctx, adaptors.OIDCAuthenticateIn{
Issuer: authProvider.IDPIssuerURL(),
ClientID: authProvider.ClientID(),
ClientSecret: authProvider.ClientSecret(),
ExtraScopes: authProvider.ExtraScopes(),
Client: &http.Client{Transport: &http.Transport{TLSClientConfig: tlsConfig}},
Client: hc,
LocalServerPort: in.ListenPort,
SkipOpenBrowser: in.SkipOpenBrowser,
})