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
This commit is contained in:
Sirisha Gopigiri 2020-11-10 16:32:05 +05:30 committed by SirishaGopigiri
parent 1918421ae8
commit 07b66906ad
5 changed files with 100 additions and 7 deletions

View File

@ -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(&regex, "regex", "",
"Regular expression string")
encryptionKeyCmd.Flags().IntVar(&limit, "limit", 5,
"Limit number of characters for + or * regex")
return encryptionKeyCmd
}

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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