feat: Add hexadecimal secret generation #701
@ -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 ""
|
||||
|
||||
@ -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 ""
|
||||
|
||||
@ -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":
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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}
|
||||
|
||||
Reference in New Issue
Block a user