github.com/simranvc/fabric-ca@v0.0.0-20191030094829-acc364294dde/lib/serveridemixenroll.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package lib 8 9 import ( 10 "github.com/cloudflare/cfssl/log" 11 "github.com/hyperledger/fabric-ca/lib/common" 12 "github.com/hyperledger/fabric-ca/lib/server/idemix" 13 "github.com/hyperledger/fabric-ca/lib/server/user" 14 ) 15 16 func newIdemixEnrollEndpoint(s *Server) *serverEndpoint { 17 return &serverEndpoint{ 18 Path: "idemix/credential", 19 Methods: []string{"POST"}, 20 Handler: handleIdemixEnrollReq, 21 Server: s, 22 successRC: 201, 23 } 24 } 25 26 // handleIdemixEnrollReq handles an Idemix enroll request 27 func handleIdemixEnrollReq(ctx *serverRequestContextImpl) (interface{}, error) { 28 ca, err := ctx.GetCA() 29 if err != nil { 30 return nil, err 31 } 32 33 idemixEnrollResp, err := ca.issuer.IssueCredential(&idemixServerCtx{ctx}) 34 if err != nil { 35 log.Errorf("Error processing the /idemix/credential request: %s", err.Error()) 36 return nil, err 37 } 38 resp := newIdemixEnrollmentResponseNet(idemixEnrollResp) 39 err = ctx.ca.fillCAInfo(&resp.CAInfo) 40 if err != nil { 41 return nil, err 42 } 43 return resp, nil 44 } 45 46 // newIdemixEnrollmentResponseNet returns an instance of IdemixEnrollmentResponseNet that is 47 // constructed using the specified idemix.EnrollmentResponse object 48 func newIdemixEnrollmentResponseNet(resp *idemix.EnrollmentResponse) common.IdemixEnrollmentResponseNet { 49 return common.IdemixEnrollmentResponseNet{ 50 Nonce: resp.Nonce, 51 Attrs: resp.Attrs, 52 Credential: resp.Credential, 53 CRI: resp.CRI, 54 CAInfo: common.CAInfoResponseNet{}} 55 } 56 57 // idemixServerCtx implements idemix.ServerRequestContext 58 type idemixServerCtx struct { 59 srvCtx *serverRequestContextImpl 60 } 61 62 func (c *idemixServerCtx) IsBasicAuth() bool { 63 _, _, isBasicAuth := c.srvCtx.req.BasicAuth() 64 return isBasicAuth 65 } 66 func (c *idemixServerCtx) BasicAuthentication() (string, error) { 67 return c.srvCtx.BasicAuthentication() 68 } 69 func (c *idemixServerCtx) TokenAuthentication() (string, error) { 70 return c.srvCtx.TokenAuthentication() 71 } 72 func (c *idemixServerCtx) GetCaller() (user.User, error) { 73 return c.srvCtx.GetCaller() 74 } 75 func (c *idemixServerCtx) ReadBody(body interface{}) error { 76 return c.srvCtx.ReadBody(body) 77 }