From 07b66906ad98188c8ae19d6d8e0bd5b45cf05d76 Mon Sep 17 00:00:00 2001 From: Sirisha Gopigiri Date: Tue, 10 Nov 2020 16:32:05 +0530 Subject: [PATCH] Cmd changes to add regex support Added support to accept regex parameter as part of `airshipctl secret generate encryptionkey` command. This allows user to pass regex parameter so that the passphrase generated matches the regex. Relates-To: #398 Change-Id: I3914e6a896bb669e3974fe67c466336e15989a8d --- .../generate/encryptionkey/encryptionkey.go | 41 +++++++++++++++++-- .../encryptionkey/encryptionkey_test.go | 7 ++++ .../generate-encryptionkey-cmd-error.golden | 19 +++++++++ ...enerate-encryptionkey-cmd-with-help.golden | 18 +++++++- ...irshipctl_secret_generate_encryptionkey.md | 22 +++++++++- 5 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-error.golden diff --git a/cmd/secret/generate/encryptionkey/encryptionkey.go b/cmd/secret/generate/encryptionkey/encryptionkey.go index 5c50f7504..a32b41b08 100644 --- a/cmd/secret/generate/encryptionkey/encryptionkey.go +++ b/cmd/secret/generate/encryptionkey/encryptionkey.go @@ -19,20 +19,55 @@ import ( "github.com/spf13/cobra" + "opendev.org/airship/airshipctl/pkg/errors" "opendev.org/airship/airshipctl/pkg/secret/generate" ) +const ( + cmdLong = ` +Generates a secure encryption key or passphrase. + +If regex arguments are passed the encryption key created would match the regular expression passed. +` + + cmdExample = ` +# Generates a secure encryption key or passphrase. +airshipctl secret generate encryptionkey + +# Generates a secure encryption key or passphrase matching the regular expression +airshipctl secret generate encryptionkey \ + --regex Xy[a-c][0-9]!a* +` +) + // NewGenerateEncryptionKeyCommand creates a new command for generating secret information func NewGenerateEncryptionKeyCommand() *cobra.Command { + var regex string + var limit int + encryptionKeyCmd := &cobra.Command{ - Use: "encryptionkey", - Short: "Generates a secure encryption key or passphrase", - Run: func(cmd *cobra.Command, args []string) { + Use: "encryptionkey", + Short: "Generates a secure encryption key or passphrase", + Long: cmdLong[1:], + Example: cmdExample, + RunE: func(cmd *cobra.Command, args []string) error { + if cmd.Flags().Changed("limit") && !cmd.Flags().Changed("regex") { + return fmt.Errorf("Required Regex flag with limit option") + } + if cmd.Flags().Changed("regex") && cmd.Flags().Changed("limit") { + return errors.ErrNotImplemented{What: "Regex support not implemented yet!"} + } engine := generate.NewEncryptionKeyEngine(nil) encryptionKey := engine.GenerateEncryptionKey() fmt.Fprintln(cmd.OutOrStdout(), encryptionKey) + return nil }, } + encryptionKeyCmd.Flags().StringVar(®ex, "regex", "", + "Regular expression string") + + encryptionKeyCmd.Flags().IntVar(&limit, "limit", 5, + "Limit number of characters for + or * regex") return encryptionKeyCmd } diff --git a/cmd/secret/generate/encryptionkey/encryptionkey_test.go b/cmd/secret/generate/encryptionkey/encryptionkey_test.go index 362e62797..bb4b0466b 100644 --- a/cmd/secret/generate/encryptionkey/encryptionkey_test.go +++ b/cmd/secret/generate/encryptionkey/encryptionkey_test.go @@ -15,6 +15,7 @@ package encryptionkey_test import ( + "fmt" "testing" "opendev.org/airship/airshipctl/cmd/secret/generate/encryptionkey" @@ -28,6 +29,12 @@ func TestGenerateEncryptionKey(t *testing.T) { CmdLine: "--help", Cmd: encryptionkey.NewGenerateEncryptionKeyCommand(), }, + { + Name: "generate-encryptionkey-cmd-error", + CmdLine: "--limit 10", + Error: fmt.Errorf("Required Regex flag with limit option"), + Cmd: encryptionkey.NewGenerateEncryptionKeyCommand(), + }, } for _, tt := range cmdTests { diff --git a/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-error.golden b/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-error.golden new file mode 100644 index 000000000..e4c8e1810 --- /dev/null +++ b/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-error.golden @@ -0,0 +1,19 @@ +Error: Required Regex flag with limit option +Usage: + encryptionkey [flags] + +Examples: + +# Generates a secure encryption key or passphrase. +airshipctl secret generate encryptionkey + +# Generates a secure encryption key or passphrase matching the regular expression +airshipctl secret generate encryptionkey \ + --regex Xy[a-c][0-9]!a* + + +Flags: + -h, --help help for encryptionkey + --limit int Limit number of characters for + or * regex (default 5) + --regex string Regular expression string + diff --git a/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-with-help.golden b/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-with-help.golden index 2c154a0a6..88dc69ebd 100644 --- a/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-with-help.golden +++ b/cmd/secret/generate/encryptionkey/testdata/TestGenerateEncryptionKeyGoldenOutput/generate-encryptionkey-cmd-with-help.golden @@ -1,7 +1,21 @@ -Generates a secure encryption key or passphrase +Generates a secure encryption key or passphrase. + +If regex arguments are passed the encryption key created would match the regular expression passed. Usage: encryptionkey [flags] +Examples: + +# Generates a secure encryption key or passphrase. +airshipctl secret generate encryptionkey + +# Generates a secure encryption key or passphrase matching the regular expression +airshipctl secret generate encryptionkey \ + --regex Xy[a-c][0-9]!a* + + Flags: - -h, --help help for encryptionkey + -h, --help help for encryptionkey + --limit int Limit number of characters for + or * regex (default 5) + --regex string Regular expression string diff --git a/docs/source/cli/airshipctl_secret_generate_encryptionkey.md b/docs/source/cli/airshipctl_secret_generate_encryptionkey.md index 8b903b7e4..5f133dc13 100644 --- a/docs/source/cli/airshipctl_secret_generate_encryptionkey.md +++ b/docs/source/cli/airshipctl_secret_generate_encryptionkey.md @@ -4,16 +4,34 @@ Generates a secure encryption key or passphrase ### Synopsis -Generates a secure encryption key or passphrase +Generates a secure encryption key or passphrase. + +If regex arguments are passed the encryption key created would match the regular expression passed. + ``` airshipctl secret generate encryptionkey [flags] ``` +### Examples + +``` + +# Generates a secure encryption key or passphrase. +airshipctl secret generate encryptionkey + +# Generates a secure encryption key or passphrase matching the regular expression +airshipctl secret generate encryptionkey \ + --regex Xy[a-c][0-9]!a* + +``` + ### Options ``` - -h, --help help for encryptionkey + -h, --help help for encryptionkey + --limit int Limit number of characters for + or * regex (default 5) + --regex string Regular expression string ``` ### Options inherited from parent commands