← back to Cli Printing Press
fix(generator): support single-env basic auth credentials (#1381)
ac83f0fde393f00dda24638f7e1472643fd33ade · 2026-05-14 19:53:08 +0300 · mehmet turac
* fix: support single-env basic auth credentials
* fix: allow single-env basic auth generation
Files touched
M internal/generator/generator.goM internal/generator/generator_test.goM internal/generator/templates/config.go.tmpl
Diff
commit ac83f0fde393f00dda24638f7e1472643fd33ade
Author: mehmet turac <mehmetturac@gmail.com>
Date: Thu May 14 19:53:08 2026 +0300
fix(generator): support single-env basic auth credentials (#1381)
* fix: support single-env basic auth credentials
* fix: allow single-env basic auth generation
---
internal/generator/generator.go | 5 ++-
internal/generator/generator_test.go | 56 +++++++++++++++++++++++++++++
internal/generator/templates/config.go.tmpl | 10 ++++++
3 files changed, 70 insertions(+), 1 deletion(-)
diff --git a/internal/generator/generator.go b/internal/generator/generator.go
index 3024e054..7e53a6c5 100644
--- a/internal/generator/generator.go
+++ b/internal/generator/generator.go
@@ -960,9 +960,12 @@ func basicAuthEnvVars(auth spec.AuthConfig) []spec.AuthEnvVar {
})
}
}
- if len(envVars) < 2 {
+ if len(envVars) == 0 {
return nil
}
+ if len(envVars) == 1 {
+ return envVars
+ }
return envVars[:2]
}
diff --git a/internal/generator/generator_test.go b/internal/generator/generator_test.go
index ef4de667..becb7d04 100644
--- a/internal/generator/generator_test.go
+++ b/internal/generator/generator_test.go
@@ -1335,6 +1335,62 @@ func TestBasicAuthHeader(t *testing.T) {
runGoCommandRequired(t, outputDir, "test", "./internal/config")
}
+func TestGenerateHTTPBasicAuthHeaderEncodesSingleCredential(t *testing.T) {
+ t.Parallel()
+
+ apiSpec := &spec.APISpec{
+ Name: "basic-single",
+ Version: "0.1.0",
+ BaseURL: "https://api.example.com",
+ Auth: spec.AuthConfig{
+ Type: "api_key",
+ In: "header",
+ Header: "Authorization",
+ Format: "Basic {token}:",
+ EnvVars: []string{"BASIC_TOKEN"},
+ EnvVarSpecs: []spec.AuthEnvVar{
+ {Name: "BASIC_TOKEN", Kind: spec.AuthEnvVarKindPerCall, Required: true, Sensitive: true},
+ },
+ },
+ Config: spec.ConfigSpec{
+ Format: "toml",
+ Path: "~/.config/basic-single/config.toml",
+ },
+ Resources: map[string]spec.Resource{
+ "items": {
+ Description: "Manage items",
+ Endpoints: map[string]spec.Endpoint{
+ "list": {
+ Method: "GET",
+ Path: "/items",
+ Description: "List items",
+ },
+ },
+ },
+ },
+ }
+
+ outputDir := filepath.Join(t.TempDir(), naming.CLI(apiSpec.Name))
+ gen := New(apiSpec, outputDir)
+ require.NoError(t, gen.Generate())
+
+ const inlineTest = `package config
+
+import "testing"
+
+func TestSingleCredentialBasicAuthHeader(t *testing.T) {
+ cfg := &Config{BasicToken: "secret"}
+ if got := cfg.AuthHeader(); got != "Basic c2VjcmV0Og==" {
+ t.Fatalf("AuthHeader() = %q", got)
+ }
+}
+`
+ testPath := filepath.Join(outputDir, "internal", "config", "basic_auth_single_test.go")
+ require.NoError(t, os.WriteFile(testPath, []byte(inlineTest), 0o644))
+
+ runGoCommandRequired(t, outputDir, "test", "./internal/config")
+}
+
func countFiles(t *testing.T, root string) int {
t.Helper()
diff --git a/internal/generator/templates/config.go.tmpl b/internal/generator/templates/config.go.tmpl
index cb07be28..07a2f9c7 100644
--- a/internal/generator/templates/config.go.tmpl
+++ b/internal/generator/templates/config.go.tmpl
@@ -237,11 +237,21 @@ func (c *Config) AuthHeader() string {
{{- end}}
{{- if eq .Auth.Type "api_key"}}
{{- if $basicAuthEnvVars}}
+{{- if eq (len $basicAuthEnvVars) 1}}
+ if c.{{resolveEnvVarField (index $basicAuthEnvVars 0).Name}} == "" {
+ return ""
+ }
+ credentials := c.{{resolveEnvVarField (index $basicAuthEnvVars 0).Name}} + ":"
+ return "Basic " + base64.StdEncoding.EncodeToString([]byte(credentials))
+{{- else if eq (len $basicAuthEnvVars) 2}}
if c.{{resolveEnvVarField (index $basicAuthEnvVars 0).Name}} == "" || c.{{resolveEnvVarField (index $basicAuthEnvVars 1).Name}} == "" {
return ""
}
credentials := c.{{resolveEnvVarField (index $basicAuthEnvVars 0).Name}} + ":" + c.{{resolveEnvVarField (index $basicAuthEnvVars 1).Name}}
return "Basic " + base64.StdEncoding.EncodeToString([]byte(credentials))
+{{- else}}
+ return ""
+{{- end}}
{{- else if $isAuthEnvVarORCase}}
{{- range .Auth.EnvVarSpecs}}
if c.{{resolveEnvVarField .Name}} != "" {
← 3bcb9d90 fix(cli): descend --select into list-envelope responses (#13
·
back to Cli Printing Press
·
fix(skills): emit PRINTING_PRESS_BIN marker so later phases 2698690e →