mirror of
https://github.com/int128/kubelogin.git
synced 2026-04-21 08:46:42 +00:00
Refactor: extract adaptors.HTTP
This commit is contained in:
30
adaptors/http.go
Normal file
30
adaptors/http.go
Normal 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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
1
di/di.go
1
di/di.go
@@ -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{},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user