Skip to content

Commit e0bfdad

Browse files
committed
fix: move authentication when factory is in use.
I think there is still something I need to learn about how factory are supposed to work and the fact that I need to panic at some point if something does not work since I can't gracefully return an error is a sign of that but this commit fixes @ecv report about not being able to run `--help` and `help` command because they requires authentication. A valid concern!
1 parent aed711f commit e0bfdad

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

internal/client/factory.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ import (
1818
type DatumCloudFactory struct {
1919
util.Factory
2020
ConfigFlags *CustomConfigFlags
21-
RestConfig *rest.Config
2221
}
2322

2423
type CustomConfigFlags struct {
2524
*genericclioptions.ConfigFlags
2625
Project *string
2726
Organization *string
28-
restConfig *rest.Config
29-
tokenSrc oauth2.TokenSource
27+
Context context.Context
3028
}
3129

3230
func (factory *DatumCloudFactory) AddFlags(flags *pflag.FlagSet) {
@@ -36,7 +34,10 @@ func (factory *DatumCloudFactory) AddFlags(flags *pflag.FlagSet) {
3634
}
3735

3836
func (c *CustomConfigFlags) ToRESTConfig() (*rest.Config, error) {
39-
config := rest.CopyConfig(c.restConfig)
37+
config, err := c.ConfigFlags.ToRESTConfig()
38+
if err != nil {
39+
return nil, err
40+
}
4041
if c.APIServer != nil && *c.APIServer != "" {
4142
config.Host = *c.APIServer
4243
}
@@ -47,8 +48,13 @@ func (c *CustomConfigFlags) ToRESTConfig() (*rest.Config, error) {
4748
config.ServerName = *c.TLSServerName
4849
}
4950

51+
tknSrc, err := authutil.GetTokenSource(c.Context)
52+
if err != nil {
53+
return nil, err
54+
}
55+
5056
config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
51-
return &oauth2.Transport{Source: c.tokenSrc, Base: rt}
57+
return &oauth2.Transport{Source: tknSrc, Base: rt}
5258
}
5359

5460
apiHostname, err := authutil.GetAPIHostname()
@@ -71,19 +77,23 @@ func (c *CustomConfigFlags) ToRESTConfig() (*rest.Config, error) {
7177
}
7278

7379
func (c *CustomConfigFlags) ToRawKubeConfigLoader() clientcmd.ClientConfig {
80+
restConfig, err := c.ToRESTConfig()
81+
if err != nil {
82+
panic(err)
83+
}
7484
kubeConfig := &api.Config{
7585
Clusters: map[string]*api.Cluster{
7686
"inmemory": {
77-
Server: c.restConfig.Host,
78-
CertificateAuthorityData: c.restConfig.CAData,
79-
InsecureSkipTLSVerify: c.restConfig.Insecure,
87+
Server: restConfig.Host,
88+
CertificateAuthorityData: restConfig.CAData,
89+
InsecureSkipTLSVerify: restConfig.Insecure,
8090
},
8191
},
8292
AuthInfos: map[string]*api.AuthInfo{
8393
"inmemory": {
84-
Token: c.restConfig.BearerToken,
85-
ClientCertificateData: c.restConfig.CertData,
86-
ClientKeyData: c.restConfig.KeyData,
94+
Token: restConfig.BearerToken,
95+
ClientCertificateData: restConfig.CertData,
96+
ClientKeyData: restConfig.KeyData,
8797
},
8898
},
8999
Contexts: map[string]*api.Context{
@@ -127,25 +137,23 @@ func (c *CustomConfigFlags) ToRawKubeConfigLoader() clientcmd.ClientConfig {
127137
return clientcmd.NewDefaultClientConfig(*kubeConfig, overrides)
128138
}
129139

130-
func NewDatumFactory(ctx context.Context, restConfig *rest.Config) (*DatumCloudFactory, error) {
140+
func NewDatumFactory(ctx context.Context) (*DatumCloudFactory, error) {
131141
baseConfigFlags := genericclioptions.NewConfigFlags(true)
132142
baseConfigFlags = baseConfigFlags.WithWrapConfigFn(func(*rest.Config) *rest.Config {
133-
return restConfig
143+
config, err := NewRestConfig(ctx)
144+
if err != nil {
145+
panic(err)
146+
}
147+
return config
134148
})
135149
baseConfigFlags.KubeConfig = nil
136150
baseConfigFlags.CacheDir = nil
137151
baseConfigFlags.KeyFile = nil
138152
baseConfigFlags.CertFile = nil
139153
baseConfigFlags.ClusterName = nil
140154
baseConfigFlags.Context = nil
141-
tknSrc, err := authutil.GetTokenSource(ctx)
142-
if err != nil {
143-
return nil, err
144-
}
145155
configFlags := &CustomConfigFlags{
146156
ConfigFlags: baseConfigFlags,
147-
restConfig: restConfig,
148-
tokenSrc: tknSrc,
149157
Project: func() *string {
150158
m := ""
151159
return &m
@@ -159,6 +167,5 @@ func NewDatumFactory(ctx context.Context, restConfig *rest.Config) (*DatumCloudF
159167
return &DatumCloudFactory{
160168
Factory: f,
161169
ConfigFlags: configFlags,
162-
RestConfig: restConfig,
163170
}, nil
164171
}

internal/cmd/root.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,14 @@ func RootCmd() *cobra.Command {
2525
Use: "datumctl",
2626
Short: "A CLI for interacting with the Datum platform",
2727
}
28-
2928
ioStreams := genericclioptions.IOStreams{
3029
In: rootCmd.InOrStdin(),
3130
Out: rootCmd.OutOrStdout(),
3231
ErrOut: rootCmd.ErrOrStderr(),
3332
}
3433

3534
ctx := context.Background()
36-
config, err := client.NewRestConfig(ctx)
37-
if err != nil {
38-
panic(err)
39-
}
40-
41-
factory, err := client.NewDatumFactory(ctx, config)
35+
factory, err := client.NewDatumFactory(ctx)
4236
if err != nil {
4337
panic(err)
4438
}

0 commit comments

Comments
 (0)