@@ -18,6 +18,7 @@ package main
18
18
import (
19
19
"flag"
20
20
"fmt"
21
+ "io"
21
22
"os"
22
23
"path/filepath"
23
24
@@ -28,8 +29,10 @@ import (
28
29
const (
29
30
peerOrgBaseName = "peerOrg"
30
31
peerBaseName = "Peer"
32
+ userBaseName = "User"
33
+ adminBaseName = "Admin"
31
34
orderOrgBaseName = "ordererOrg"
32
- ordererBaseName = "orderer "
35
+ ordererBaseName = "Orderer "
33
36
)
34
37
35
38
//command line flags
38
41
"number of unique organizations with peers" )
39
42
numPeers = flag .Int ("peersPerOrg" , 1 ,
40
43
"number of peers per organization" )
44
+ numPeerOrgUsers = flag .Int ("peerOrgUsers" , 1 ,
45
+ "number of users per peer organization" )
41
46
numOrderers = flag .Int ("ordererNodes" , 1 ,
42
47
"number of ordering service nodes" )
43
48
baseDir = flag .String ("baseDir" , "." ,
@@ -87,6 +92,8 @@ func generatePeerOrgs(baseDir string, orgNames []string) {
87
92
caDir := filepath .Join (orgDir , "ca" )
88
93
mspDir := filepath .Join (orgDir , "msp" )
89
94
peersDir := filepath .Join (orgDir , "peers" )
95
+ usersDir := filepath .Join (orgDir , "users" )
96
+ adminCertsDir := filepath .Join (mspDir , "admincerts" )
90
97
rootCA , err := ca .NewCA (caDir , orgName )
91
98
if err != nil {
92
99
fmt .Printf ("Error generating CA for org %s:\n %v\n " , orgName , err )
@@ -106,9 +113,52 @@ func generatePeerOrgs(baseDir string, orgNames []string) {
106
113
orgName , peerBaseName , i ))
107
114
}
108
115
generateNodes (peersDir , peerNames , rootCA )
116
+
117
+ // TODO: add ability to specify usernames
118
+ usernames := []string {}
119
+ for j := 1 ; j <= * numPeerOrgUsers ; j ++ {
120
+ usernames = append (usernames , fmt .Sprintf ("%s%s%d" ,
121
+ orgName , userBaseName , j ))
122
+ }
123
+ // add an admin user
124
+ usernames = append (usernames , fmt .Sprintf ("%s%s" ,
125
+ orgName , adminBaseName ))
126
+ generateNodes (usersDir , usernames , rootCA )
127
+
128
+ // copy the admin cert to the org's MSP admincerts
129
+ adminUserName := fmt .Sprintf ("%s%s" ,
130
+ orgName , adminBaseName )
131
+ err = copyAdminCert (usersDir , adminCertsDir , adminUserName )
132
+ if err != nil {
133
+ fmt .Printf ("Error copying admin cert for org %s:\n %v\n " ,
134
+ orgName , err )
135
+ os .Exit (1 )
136
+ }
137
+
109
138
}
110
139
}
111
140
141
+ func copyAdminCert (usersDir , adminCertsDir , adminUserName string ) error {
142
+ // delete the contents of admincerts
143
+ err := os .RemoveAll (adminCertsDir )
144
+ if err != nil {
145
+ return err
146
+ }
147
+ // recreate the admincerts directory
148
+ err = os .MkdirAll (adminCertsDir , 0755 )
149
+ if err != nil {
150
+ return err
151
+ }
152
+ err = copyFile (filepath .Join (usersDir , adminUserName , "signcerts" ,
153
+ adminUserName + "-cert.pem" ), filepath .Join (adminCertsDir ,
154
+ adminUserName + "-cert.pem" ))
155
+ if err != nil {
156
+ return err
157
+ }
158
+ return nil
159
+
160
+ }
161
+
112
162
func generateNodes (baseDir string , nodeNames []string , rootCA * ca.CA ) {
113
163
114
164
for _ , nodeName := range nodeNames {
@@ -129,6 +179,8 @@ func generateOrdererOrg(baseDir, orgName string) {
129
179
caDir := filepath .Join (orgDir , "ca" )
130
180
mspDir := filepath .Join (orgDir , "msp" )
131
181
orderersDir := filepath .Join (orgDir , "orderers" )
182
+ usersDir := filepath .Join (orgDir , "users" )
183
+ adminCertsDir := filepath .Join (mspDir , "admincerts" )
132
184
rootCA , err := ca .NewCA (caDir , orgName )
133
185
if err != nil {
134
186
fmt .Printf ("Error generating CA for org %s:\n %v\n " , orgName , err )
@@ -149,4 +201,40 @@ func generateOrdererOrg(baseDir, orgName string) {
149
201
}
150
202
generateNodes (orderersDir , ordererNames , rootCA )
151
203
204
+ // generate an admin for the orderer org
205
+ usernames := []string {}
206
+ // add an admin user
207
+ usernames = append (usernames , fmt .Sprintf ("%s%s" ,
208
+ orgName , adminBaseName ))
209
+ generateNodes (usersDir , usernames , rootCA )
210
+
211
+ // copy the admin cert to the org's MSP admincerts
212
+ adminUserName := fmt .Sprintf ("%s%s" ,
213
+ orgName , adminBaseName )
214
+ err = copyAdminCert (usersDir , adminCertsDir , adminUserName )
215
+ if err != nil {
216
+ fmt .Printf ("Error copying admin cert for org %s:\n %v\n " ,
217
+ orgName , err )
218
+ os .Exit (1 )
219
+ }
220
+
221
+ }
222
+
223
+ func copyFile (src , dst string ) error {
224
+ in , err := os .Open (src )
225
+ if err != nil {
226
+ return err
227
+ }
228
+ defer in .Close ()
229
+ out , err := os .Create (dst )
230
+ if err != nil {
231
+ return err
232
+ }
233
+ defer out .Close ()
234
+ _ , err = io .Copy (out , in )
235
+ cerr := out .Close ()
236
+ if err != nil {
237
+ return err
238
+ }
239
+ return cerr
152
240
}
0 commit comments