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}