mirror of
https://github.com/int128/kubelogin.git
synced 2026-05-09 01:16:35 +00:00
* chore(deps): update golang docker tag to v1.26.0 * Fix printf args Error: pkg/usecases/setup/setup.go:86:18: non-constant format string in call to (github.com/int128/kubelogin/pkg/infrastructure/logger.Interface).Printf --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hidetake Iwata <int128@gmail.com>
89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
// Package setup provides the use case of setting up environment.
|
|
package setup
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"text/template"
|
|
|
|
_ "embed"
|
|
|
|
"github.com/google/wire"
|
|
"github.com/int128/kubelogin/pkg/infrastructure/logger"
|
|
"github.com/int128/kubelogin/pkg/oidc"
|
|
"github.com/int128/kubelogin/pkg/tlsclientconfig"
|
|
"github.com/int128/kubelogin/pkg/usecases/authentication"
|
|
)
|
|
|
|
var Set = wire.NewSet(
|
|
wire.Struct(new(Setup), "*"),
|
|
wire.Bind(new(Interface), new(*Setup)),
|
|
)
|
|
|
|
type Interface interface {
|
|
Do(ctx context.Context, in Input) error
|
|
}
|
|
|
|
type Setup struct {
|
|
Authentication authentication.Interface
|
|
Logger logger.Interface
|
|
}
|
|
|
|
//go:embed setup.md
|
|
var setupMarkdown string
|
|
|
|
var setupTemplate = template.Must(template.New("setup.md").Funcs(template.FuncMap{
|
|
"quote": strconv.Quote,
|
|
}).Parse(setupMarkdown))
|
|
|
|
type Input struct {
|
|
IssuerURL string
|
|
ClientID string
|
|
ClientSecret string
|
|
RedirectURL string
|
|
ExtraScopes []string
|
|
UseAccessToken bool
|
|
RequestHeaders map[string]string
|
|
PKCEMethod oidc.PKCEMethod
|
|
GrantOptionSet authentication.GrantOptionSet
|
|
TLSClientConfig tlsclientconfig.Config
|
|
ChangedFlags []string
|
|
}
|
|
|
|
func (u Setup) Do(ctx context.Context, in Input) error {
|
|
u.Logger.Printf("Authentication in progress...")
|
|
out, err := u.Authentication.Do(ctx, authentication.Input{
|
|
Provider: oidc.Provider{
|
|
IssuerURL: in.IssuerURL,
|
|
ClientID: in.ClientID,
|
|
ClientSecret: in.ClientSecret,
|
|
RedirectURL: in.RedirectURL,
|
|
ExtraScopes: in.ExtraScopes,
|
|
PKCEMethod: in.PKCEMethod,
|
|
UseAccessToken: in.UseAccessToken,
|
|
RequestHeaders: in.RequestHeaders,
|
|
},
|
|
GrantOptionSet: in.GrantOptionSet,
|
|
TLSClientConfig: in.TLSClientConfig,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("authentication error: %w", err)
|
|
}
|
|
idTokenClaims, err := out.TokenSet.DecodeWithoutVerify()
|
|
if err != nil {
|
|
return fmt.Errorf("you got an invalid token: %w", err)
|
|
}
|
|
|
|
var b strings.Builder
|
|
if err := setupTemplate.Execute(&b, map[string]any{
|
|
"IDTokenPrettyJSON": idTokenClaims.Pretty,
|
|
"Flags": in.ChangedFlags,
|
|
}); err != nil {
|
|
return fmt.Errorf("render the template: %w", err)
|
|
}
|
|
u.Logger.Printf("%s", b.String())
|
|
return nil
|
|
}
|