feat: Add hexadecimal secret generation #701

Merged
decentral1se merged 2 commits from feat/3wc/695-hex-secret into main 2025-10-19 09:55:57 +00:00
6 changed files with 23 additions and 10 deletions

View File

@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2025-10-01 21:13+0200\n"
"POT-Creation-Date: 2025-10-18 16:03-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -201,7 +201,7 @@ msgstr ""
msgid "%s OVERVIEW"
msgstr ""
#: ./cli/server/add.go:127 ./pkg/secret/secret.go:233 ./pkg/secret/secret.go:253 ./pkg/server/server.go:21
#: ./cli/server/add.go:127 ./pkg/secret/secret.go:235 ./pkg/secret/secret.go:255 ./pkg/server/server.go:21
#, c-format
msgid "%s already exists"
msgstr ""
@ -1847,7 +1847,7 @@ msgstr ""
msgid "attempting to create client for %s"
msgstr ""
#: ./pkg/secret/secret.go:222
#: ./pkg/secret/secret.go:224
#, c-format
msgid "attempting to generate and store %s on %s"
msgstr ""
@ -3062,7 +3062,7 @@ msgstr ""
msgid "generated %s"
msgstr ""
#: ./pkg/secret/secret.go:278
#: ./pkg/secret/secret.go:280
#, c-format
msgid "generated and stored %v on %s"
msgstr ""
@ -4857,7 +4857,7 @@ msgstr ""
msgid "skipping domain checks, no DOMAIN=... configured"
msgstr ""
#: ./pkg/secret/secret.go:217
#: ./pkg/secret/secret.go:219
#, c-format
msgid "skipping generation of %s (generate=false)"
msgstr ""

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2025-10-01 21:13+0200\n"
"POT-Creation-Date: 2025-10-18 16:03-0400\n"
"PO-Revision-Date: 2025-09-04 08:14+0000\n"
"Last-Translator: chasqui <chasqui@cryptolab.net>\n"
"Language-Team: Spanish <https://translate.coopcloud.tech/projects/co-op-"
@ -211,7 +211,7 @@ msgstr ""
msgid "%s OVERVIEW"
msgstr ""
#: cli/server/add.go:127 pkg/secret/secret.go:233 pkg/secret/secret.go:253
#: cli/server/add.go:127 pkg/secret/secret.go:235 pkg/secret/secret.go:255
#: pkg/server/server.go:21
#, c-format
msgid "%s already exists"
@ -2010,7 +2010,7 @@ msgstr ""
msgid "attempting to create client for %s"
msgstr ""
#: pkg/secret/secret.go:222
#: pkg/secret/secret.go:224
#, c-format
msgid "attempting to generate and store %s on %s"
msgstr ""
@ -3260,7 +3260,7 @@ msgstr ""
msgid "generated %s"
msgstr ""
#: pkg/secret/secret.go:278
#: pkg/secret/secret.go:280
#, c-format
msgid "generated and stored %v on %s"
msgstr ""
@ -5111,7 +5111,7 @@ msgstr ""
msgid "skipping domain checks, no DOMAIN=... configured"
msgstr ""
#: pkg/secret/secret.go:217
#: pkg/secret/secret.go:219
#, c-format
msgid "skipping generation of %s (generate=false)"
msgstr ""

View File

@ -188,6 +188,8 @@ func ReadSecretsConfig(appEnvPath string, composeFiles []string, stackName strin
// resolveCharset sets the passgen Alphabet required for a secret
func resolveCharset(input string) string {
switch strings.ToLower(input) {
case "hex":
return passgen.AlphabetNumericAmbiguous + "abcdef"
case "special":
return passgen.AlphabetSpecial
case "safespecial":

View File

@ -48,6 +48,12 @@ func TestReadSecretsConfig(t *testing.T) {
assert.Equal(t, "v1", secretsFromConfig["test_pass_six"].Version)
assert.Equal(t, 0, secretsFromConfig["test_pass_six"].Length)
assert.Equal(t, "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!@#$%^&*_-+=", secretsFromConfig["test_pass_six"].Charset)
// Has a length modifier and a charset=hex modifier
assert.Equal(t, "test_example_com_test_pass_seven_v1", secretsFromConfig["test_pass_seven"].RemoteName)
assert.Equal(t, "v1", secretsFromConfig["test_pass_seven"].Version)
assert.Equal(t, 32, secretsFromConfig["test_pass_seven"].Length)
assert.Equal(t, "0123456789abcdef", secretsFromConfig["test_pass_seven"].Charset)
}
func TestReadSecretsConfigWithLongDomain(t *testing.T) {

View File

@ -4,3 +4,4 @@ SECRET_TEST_PASS_THREE_VERSION=v2
SECRET_TEST_PASS_FOUR_VERSION=v1 # length=12 charset=default,safespecial
SECRET_TEST_PASS_FIVE_VERSION=v1 # length=12 charset=default,special
SECRET_TEST_PASS_SIX_VERSION=v1 # charset=default,special
SECRET_TEST_PASS_SEVEN_VERSION=v1 # length=32 charset=hex

View File

@ -11,6 +11,7 @@ services:
- test_pass_four
- test_pass_five
- test_pass_six
- test_pass_seven
secrets:
test_pass_one:
@ -31,3 +32,6 @@ secrets:
test_pass_six:
external: true
name: ${STACK_NAME}_test_pass_six_${SECRET_TEST_PASS_SIX_VERSION}
test_pass_seven:
external: true
name: ${STACK_NAME}_test_pass_seven_${SECRET_TEST_PASS_SEVEN_VERSION}