add generating secret key utility

This commit is contained in:
MaysWind
2021-06-28 00:41:14 +08:00
parent 163b75e81b
commit e7c4261b86
4 changed files with 74 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
package cmd
import (
"fmt"
"github.com/urfave/cli/v2"
"github.com/mayswind/ezbookkeeping/pkg/utils"
)
// SecurityUtils represents the security command
var SecurityUtils = &cli.Command{
Name: "security",
Usage: "ezBookkeeping security utilities",
Subcommands: []*cli.Command{
{
Name: "gen-secret-key",
Usage: "Generate a random secret key",
Action: genSecretKey,
Flags: []cli.Flag{
&cli.IntFlag{
Name: "length",
Aliases: []string{"l"},
Required: false,
DefaultText: "32",
Usage: "The length of secret key",
},
},
},
},
}
func genSecretKey(c *cli.Context) error {
length := c.Int("length")
if length <= 0 {
length = 32
}
secretKey, err := utils.GetRandomNumberOrLetter(length)
if err != nil {
return err
}
fmt.Printf("[Secret Key] %s\n", secretKey)
return nil
}
+1
View File
@@ -32,6 +32,7 @@ func main() {
cmd.WebServer,
cmd.Database,
cmd.UserData,
cmd.SecurityUtils,
},
Flags: []cli.Flag{
&cli.StringFlag{
+19
View File
@@ -17,8 +17,10 @@ import (
const (
availableCharacters = "!#$&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"
availableNumberAndLetters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
availableNumberAndLowercaseLetters = "0123456789abcdefghijklmnopqrstuvwxyz"
availableCharactersLength = len(availableCharacters)
availableNumberAndLettersLength = len(availableNumberAndLetters)
availableNumberAndLowercaseLettersLength = len(availableNumberAndLowercaseLetters)
)
@@ -90,6 +92,23 @@ func GetRandomString(n int) (string, error) {
return string(result), nil
}
// GetRandomNumberOrLetter returns a random string which only contains number or letter characters
func GetRandomNumberOrLetter(n int) (string, error) {
var result = make([]byte, n)
for i := 0; i < n; i++ {
index, err := GetRandomInteger(availableNumberAndLettersLength)
if err != nil {
return "", err
}
result[i] = availableNumberAndLetters[index]
}
return string(result), nil
}
// GetRandomNumberOrLowercaseLetter returns a random string which only contains number or letter characters
func GetRandomNumberOrLowercaseLetter(n int) (string, error) {
var result = make([]byte, n)
+5
View File
@@ -78,6 +78,11 @@ func TestGetRandomString(t *testing.T) {
assert.Len(t, actualValue, 10)
}
func TestGetRandomNumberOrLetter(t *testing.T) {
actualValue, err := GetRandomNumberOrLetter(10)
assert.Equal(t, nil, err)
assert.Len(t, actualValue, 10)
}
func TestGetRandomNumberOrLowercaseLetter(t *testing.T) {
actualValue, err := GetRandomNumberOrLowercaseLetter(10)
assert.Equal(t, nil, err)