longganhua
2019-07-18 20333d49f0b31295fa87920fdd1ab6152950efd3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package command
 
import (
    "crypto/rand"
    "encoding/base64"
    "fmt"
    "strings"
 
    "github.com/mitchellh/cli"
)
 
// KeygenCommand is a Command implementation that generates an encryption
// key for use in `serf agent`.
type KeygenCommand struct {
    Ui cli.Ui
}
 
var _ cli.Command = &KeygenCommand{}
 
func (c *KeygenCommand) Run(_ []string) int {
    key := make([]byte, 16)
    n, err := rand.Reader.Read(key)
    if err != nil {
        c.Ui.Error(fmt.Sprintf("Error reading random data: %s", err))
        return 1
    }
    if n != 16 {
        c.Ui.Error(fmt.Sprintf("Couldn't read enough entropy. Generate more entropy!"))
        return 1
    }
 
    c.Ui.Output(base64.StdEncoding.EncodeToString(key))
    return 0
}
 
func (c *KeygenCommand) Synopsis() string {
    return "Generates a new encryption key"
}
 
func (c *KeygenCommand) Help() string {
    helpText := `
Usage: serf keygen
 
  Generates a new encryption key that can be used to configure the
  agent to encrypt traffic. The output of this command is already
  in the proper format that the agent expects.
`
    return strings.TrimSpace(helpText)
}