Skip to content

Commit cef35e9

Browse files
authored
Merge pull request #74 from StackVista/STAC-0-skipssl
STAC-20220: Allow to skip SSL validation
2 parents e0570f2 + 29f1fc9 commit cef35e9

File tree

6 files changed

+35
-3
lines changed

6 files changed

+35
-3
lines changed

cmd/context/context_validate_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestValidationToJson(t *testing.T) {
3737
"--api-token",
3838
"blaat",
3939
"-o", "json",
40+
"--skip-ssl",
4041
)
4142
assert.Equal(t,
4243
[]map[string]interface{}{{

internal/client/client.go

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package client
22

33
import (
44
"context"
5+
"crypto/tls"
56
"fmt"
67
"net/http"
78
"strings"
@@ -27,13 +28,14 @@ func NewStackStateClient(ctx context.Context,
2728
adminApiPath string,
2829
apiToken string,
2930
serviceToken string,
30-
k8sServiceAccountToken string) (StackStateClient, context.Context) {
31+
k8sServiceAccountToken string,
32+
skipSSL bool) (StackStateClient, context.Context) {
3133
userAgent := fmt.Sprintf("StackStateCLI/%s", version)
3234
apiURL := combineURLandPath(url, apiPath)
33-
client, clientAuth := NewApiClient(isVerbose, pr, userAgent, apiURL, apiToken, serviceToken, k8sServiceAccountToken)
35+
client, clientAuth := NewApiClient(ctx, isVerbose, pr, userAgent, apiURL, apiToken, serviceToken, k8sServiceAccountToken, skipSSL)
3436

3537
adminApiURL := combineURLandPath(url, adminApiPath)
36-
adminClient, adminAuth := NewAdminApiClient(isVerbose, pr, userAgent, adminApiURL, apiToken, serviceToken, k8sServiceAccountToken)
38+
adminClient, adminAuth := NewAdminApiClient(ctx, isVerbose, pr, userAgent, adminApiURL, apiToken, serviceToken, k8sServiceAccountToken, skipSSL)
3739

3840
withClient := context.WithValue(
3941
ctx,
@@ -57,15 +59,21 @@ func NewStackStateClient(ctx context.Context,
5759

5860
//nolint:dupl
5961
func NewApiClient(
62+
ctx context.Context,
6063
isVerbose bool,
6164
pr printer.Printer,
6265
userAgent string,
6366
apiURL string,
6467
apiToken string,
6568
serviceToken string,
6669
k8sServiceAccountToken string,
70+
skipSSL bool,
6771
) (*stackstate_api.APIClient, map[string]stackstate_api.APIKey) {
6872
configuration := stackstate_api.NewConfiguration()
73+
if skipSSL {
74+
configuration.HTTPClient = insecureHttpClient(ctx)
75+
}
76+
6977
configuration.UserAgent = userAgent
7078
configuration.Servers[0] = stackstate_api.ServerConfiguration{
7179
URL: apiURL,
@@ -108,15 +116,20 @@ func NewApiClient(
108116

109117
//nolint:dupl
110118
func NewAdminApiClient(
119+
ctx context.Context,
111120
isVerbose bool,
112121
pr printer.Printer,
113122
userAgent string,
114123
apiURL string,
115124
apiToken string,
116125
serviceToken string,
117126
k8sServiceAccountToken string,
127+
skipSSL bool,
118128
) (*stackstate_admin_api.APIClient, map[string]stackstate_admin_api.APIKey) {
119129
configuration := stackstate_admin_api.NewConfiguration()
130+
if skipSSL {
131+
configuration.HTTPClient = insecureHttpClient(ctx)
132+
}
120133
configuration.UserAgent = userAgent
121134
configuration.Servers[0] = stackstate_admin_api.ServerConfiguration{
122135
URL: apiURL,
@@ -157,6 +170,15 @@ func NewAdminApiClient(
157170
return client, auth
158171
}
159172

173+
func insecureHttpClient(ctx context.Context) *http.Client {
174+
log.Ctx(ctx).Warn().Msg("Using insecure HTTP client")
175+
return &http.Client{
176+
Transport: &http.Transport{
177+
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, //nolint:gosec
178+
},
179+
}
180+
}
181+
160182
type StdStackStateClient struct {
161183
client *stackstate_api.APIClient
162184
adminClient *stackstate_admin_api.APIClient

internal/common/persistent_flags.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const (
2929
ConfigFlag = "config"
3030
ContextFlag = "context"
3131
ContextFlagShort = "c"
32+
SkipSSLFlag = "skip-ssl"
33+
SkipSSLFlagUse = "Whether to skip SSL certificate verification when connecting to StackState"
3234
)
3335

3436
var AllowedOutputs = []string{JSONOutput.String(), TextOutput.String()}
@@ -43,6 +45,7 @@ func AddPersistentFlags(cmd *cobra.Command) {
4345
cmd.PersistentFlags().Bool(NoColorFlag, false, "Disable color when printing to the terminal")
4446
cmd.PersistentFlags().String(ConfigFlag, "", "Override the path to the config file")
4547
cmd.PersistentFlags().StringP(ContextFlag, ContextFlagShort, "", "Override the context to use")
48+
cmd.PersistentFlags().Bool(SkipSSLFlag, false, SkipSSLFlagUse)
4649
pflags.EnumP(cmd.PersistentFlags(), OutputFlag, OutputFlagShort, "text", AllowedOutputs, fmt.Sprintf("Specify the output format (must be { %s })", strings.Join(AllowedOutputs, " | ")))
4750

4851
// NOTE Add as a dummy `--version` flag and hides it, so that we omit the auto-generated Cobra flag on each versioned command.

internal/config/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type StsContext struct {
2727
K8sSATokenPath string `yaml:"-" json:"-"` // This should only be passed from command line or env variables
2828
APIPath string `yaml:"api-path" default:"/api" json:"api-path"`
2929
AdminAPIPath string `yaml:"admin-api-path" default:"/admin" json:"admin-api-path"`
30+
SkipSSL bool `yaml:"skip-ssl" default:"false" json:"skip-ssl"`
3031
}
3132

3233
func EmptyConfig() *Config {
@@ -97,6 +98,7 @@ func (c *StsContext) Merge(fallback *StsContext) *StsContext {
9798
APIPath: util.DefaultIfEmpty(util.DefaultIfEmpty(c.APIPath, fallback.APIPath), "/api"),
9899
AdminAPIPath: util.DefaultIfEmpty(util.DefaultIfEmpty(c.AdminAPIPath, fallback.AdminAPIPath), "/admin"),
99100
K8sSATokenPath: util.DefaultIfEmpty(c.K8sSATokenPath, fallback.K8sSATokenPath),
101+
SkipSSL: c.SkipSSL || fallback.SkipSSL,
100102
}
101103

102104
if !c.HasAuthenticationTokenSet() {

internal/config/viper.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func Bind(cmd *cobra.Command, vp *viper.Viper) *ViperConfig {
2020
vp.BindEnv("k8s-sa-token-path", "STS_CLI_K8S_SA_TOKEN_PATH")
2121
vp.BindEnv("api-path", "STS_CLI_API_PATH")
2222
vp.BindEnv("context", "STS_CLI_CONTEXT")
23+
vp.BindEnv("skip-ssl", "STS_SKIP_SSL")
2324

2425
// bind flags
2526
vp.BindPFlag("url", cmd.Flags().Lookup("url"))
@@ -29,6 +30,7 @@ func Bind(cmd *cobra.Command, vp *viper.Viper) *ViperConfig {
2930
vp.BindPFlag("k8s-sa-token-path", cmd.Flags().Lookup("k8s-sa-token-path"))
3031
vp.BindPFlag("api-path", cmd.Flags().Lookup("api-path"))
3132
vp.BindPFlag("context", cmd.Flags().Lookup("context"))
33+
vp.BindPFlag("skip-ssl", cmd.Flags().Lookup("skip-ssl"))
3234

3335
// bind YAML
3436
return &ViperConfig{
@@ -40,6 +42,7 @@ func Bind(cmd *cobra.Command, vp *viper.Viper) *ViperConfig {
4042
K8sSAToken: vp.GetString("k8s-sa-token"),
4143
K8sSATokenPath: vp.GetString("k8s-sa-token-path"),
4244
APIPath: vp.GetString("api-path"),
45+
SkipSSL: vp.GetBool("skip-ssl"),
4346
},
4447
}
4548
}

internal/di/deps.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func (cli *Deps) LoadClient(cmd *cobra.Command, context *config.StsContext) comm
111111
context.APIToken,
112112
context.ServiceToken,
113113
context.K8sSAToken,
114+
context.SkipSSL,
114115
)
115116
return nil
116117
}

0 commit comments

Comments
 (0)