mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 01:34:24 +08:00
add generating secret key utility
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
@@ -32,6 +32,7 @@ func main() {
|
|||||||
cmd.WebServer,
|
cmd.WebServer,
|
||||||
cmd.Database,
|
cmd.Database,
|
||||||
cmd.UserData,
|
cmd.UserData,
|
||||||
|
cmd.SecurityUtils,
|
||||||
},
|
},
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
|
|||||||
@@ -17,8 +17,10 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
availableCharacters = "!#$&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"
|
availableCharacters = "!#$&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~"
|
||||||
|
availableNumberAndLetters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
availableNumberAndLowercaseLetters = "0123456789abcdefghijklmnopqrstuvwxyz"
|
availableNumberAndLowercaseLetters = "0123456789abcdefghijklmnopqrstuvwxyz"
|
||||||
availableCharactersLength = len(availableCharacters)
|
availableCharactersLength = len(availableCharacters)
|
||||||
|
availableNumberAndLettersLength = len(availableNumberAndLetters)
|
||||||
availableNumberAndLowercaseLettersLength = len(availableNumberAndLowercaseLetters)
|
availableNumberAndLowercaseLettersLength = len(availableNumberAndLowercaseLetters)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -90,6 +92,23 @@ func GetRandomString(n int) (string, error) {
|
|||||||
return string(result), nil
|
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
|
// GetRandomNumberOrLowercaseLetter returns a random string which only contains number or letter characters
|
||||||
func GetRandomNumberOrLowercaseLetter(n int) (string, error) {
|
func GetRandomNumberOrLowercaseLetter(n int) (string, error) {
|
||||||
var result = make([]byte, n)
|
var result = make([]byte, n)
|
||||||
|
|||||||
@@ -78,6 +78,11 @@ func TestGetRandomString(t *testing.T) {
|
|||||||
assert.Len(t, actualValue, 10)
|
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) {
|
func TestGetRandomNumberOrLowercaseLetter(t *testing.T) {
|
||||||
actualValue, err := GetRandomNumberOrLowercaseLetter(10)
|
actualValue, err := GetRandomNumberOrLowercaseLetter(10)
|
||||||
assert.Equal(t, nil, err)
|
assert.Equal(t, nil, err)
|
||||||
|
|||||||
Reference in New Issue
Block a user