forked from hyperledger/fabric-ca
/
enroll.go
92 lines (74 loc) · 1.93 KB
/
enroll.go
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package command
import (
"io/ioutil"
"path/filepath"
"strings"
"github.com/cloudflare/cfssl/log"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
type enrollCmd struct {
Command
}
func newEnrollCmd(c Command) *enrollCmd {
enrollCmd := &enrollCmd{c}
return enrollCmd
}
func (c *enrollCmd) getCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "enroll -u http://user:userpw@serverAddr:serverPort",
Short: "Enroll an identity",
Long: "Enroll identity with Fabric CA server",
PreRunE: c.preRunEnroll,
RunE: c.runEnroll,
}
return cmd
}
func (c *enrollCmd) preRunEnroll(cmd *cobra.Command, args []string) error {
if len(args) > 0 {
return errors.Errorf(extraArgsError, args, cmd.UsageString())
}
err := c.ConfigInit()
if err != nil {
return err
}
log.Debugf("Client configuration settings: %+v", c.GetClientCfg())
return nil
}
func (c *enrollCmd) runEnroll(cmd *cobra.Command, args []string) error {
log.Debug("Entered runEnroll")
cfgFileName := c.GetCfgFileName()
cfg := c.GetClientCfg()
resp, err := cfg.Enroll(cfg.URL, filepath.Dir(cfgFileName))
if err != nil {
return err
}
ID := resp.Identity
cfgFile, err := ioutil.ReadFile(cfgFileName)
if err != nil {
return errors.Wrapf(err, "Failed to read file at '%s'", cfgFileName)
}
cfgStr := strings.Replace(string(cfgFile), "<<<ENROLLMENT_ID>>>", ID.GetName(), 1)
err = ioutil.WriteFile(cfgFileName, []byte(cfgStr), 0644)
if err != nil {
return errors.Wrapf(err, "Failed to write file at '%s'", cfgFileName)
}
err = ID.Store()
if err != nil {
return errors.WithMessage(err, "Failed to store enrollment information")
}
// Store issuer public key
err = storeCAChain(cfg, &resp.CAInfo)
if err != nil {
return err
}
err = storeIssuerPublicKey(cfg, &resp.CAInfo)
if err != nil {
return err
}
return storeIssuerRevocationPublicKey(cfg, &resp.CAInfo)
}