master
1package generate
2
3import (
4 "crypto/rand"
5 "encoding/base64"
6 "fmt"
7
8 "github.com/kahnwong/swissknife/internal/utils"
9)
10
11func generateKey(n int) (string, error) {
12 // https://stackoverflow.com/questions/32349807/how-can-i-generate-a-random-int-using-the-crypto-rand-package/32351471#32351471
13 // generate random bytes
14 b := make([]byte, n)
15 _, err := rand.Read(b)
16 // Note that err == nil only if we read len(b) bytes.
17 if err != nil {
18 return "", fmt.Errorf("failed to generate random bytes: %w", err)
19 }
20
21 // convert to base64
22 return base64.URLEncoding.EncodeToString(b), nil
23}
24
25func Key() error {
26 key, err := generateKey(48)
27 if err != nil {
28 return err
29 }
30
31 if err = utils.WriteToClipboard(key); err != nil {
32 return err
33 }
34
35 fmt.Printf("%s\n", key)
36 return nil
37}