-
Notifications
You must be signed in to change notification settings - Fork 1
/
fabric-base64.go
134 lines (111 loc) · 3.18 KB
/
fabric-base64.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"github.com/spf13/cobra"
)
var (
base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
coder = base64.NewEncoding(base64Digits)
ordererMspFloder string
peerMspFloder string
outFile string
)
var mainCmd = &cobra.Command{
Use: "fabric-base",
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
return nil
},
Run: func(cmd *cobra.Command, args []string) {
result, err := generateBase64(ordererMspFloder, peerMspFloder, outFile)
if err != nil {
fmt.Printf("Error: %v\n", err)
cmd.HelpFunc()(cmd, args)
return
}
fmt.Println(string(result))
},
}
func main() {
mainFlags := mainCmd.PersistentFlags()
mainFlags.StringVarP(&ordererMspFloder, "orderermsp", "O", "", "The floder which store orderer msp files")
mainFlags.StringVarP(&peerMspFloder, "peermsp", "P", "", "The floder which store peer msp files")
mainFlags.StringVarP(&outFile, "outfile", "o", "", "The file which store result json")
if mainCmd.Execute() != nil {
os.Exit(1)
}
}
func generateBase64(ordMsp, peerMsp, outFile string) ([]byte, error) {
var result []byte
if ordMsp == "" && peerMsp == "" {
return result, fmt.Errorf("Both orderer msp and peer msp is nil")
}
jsonMap := make(map[string]interface{})
if ordMsp != "" {
ordMap, err := readDirPem(ordMsp)
if err != nil {
return result, fmt.Errorf("Read orderer cert error:%v", err)
}
jsonMap["orderer"] = ordMap
}
if peerMsp != "" {
peerMap, err := readDirPem(peerMsp)
if err != nil {
return result, fmt.Errorf("Read peer cert error:%v", err)
}
jsonMap["peer"] = peerMap
}
data, err := json.Marshal(jsonMap)
if err != nil {
return result, fmt.Errorf("Json marshal error:%v", err)
}
var out bytes.Buffer
err = json.Indent(&out, data, "", "\t")
if err != nil {
return result, fmt.Errorf("Json indent error:%v", err)
}
if outFile != "" {
err := ioutil.WriteFile(outFile, out.Bytes(), 0666)
if err != nil {
return result, fmt.Errorf("Write to %v error:%v", outFile, err)
}
return []byte("Success"), nil
}
return out.Bytes(), nil
}
func readDirPem(dir string) (result map[string]interface{}, err error) {
result = make(map[string]interface{})
var data []byte
// admin cert
admincertDirList, _ := ioutil.ReadDir(dir + "/admincerts")
data, err = ioutil.ReadFile(dir + "/admincerts/" + admincertDirList[0].Name())
if err != nil {
return result, err
}
result["admincert"] = string(base64Encode(data))
// ca cert
cacertDirList, _ := ioutil.ReadDir(dir + "/cacerts")
data, err = ioutil.ReadFile(dir + "/cacerts/" + cacertDirList[0].Name())
if err != nil {
return result, err
}
result["cacert"] = string(base64Encode(data))
// tls cert
tlscertDirList, _ := ioutil.ReadDir(dir + "/tlscacerts")
data, err = ioutil.ReadFile(dir + "/tlscacerts/" + tlscertDirList[0].Name())
if err != nil {
return result, err
}
result["tlscert"] = string(base64Encode(data))
return result, nil
}
func base64Encode(src []byte) []byte {
return []byte(coder.EncodeToString(src))
}
func base64Decode(src []byte) ([]byte, error) {
return coder.DecodeString(string(src))
}