Skip to content

Commit

Permalink
[FAB-2087] - support for admin policy principals
Browse files Browse the repository at this point in the history
This change set introduces admin-based MSP and cauthdsl validation.

Change-Id: If6d6b69c2c13b0279988c254a9b86e4b63ead0e8
Signed-off-by: Alessandro Sorniotti <ale.linux@sopit.net>
  • Loading branch information
ale-linux committed Feb 22, 2017
1 parent 2fc6bc6 commit 3e0481b
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 14 deletions.
33 changes: 33 additions & 0 deletions msp/msp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,39 @@ func TestOUPolicyPrincipal(t *testing.T) {
assert.NoError(t, err)
}

func TestAdminPolicyPrincipal(t *testing.T) {
id, err := localMsp.GetDefaultSigningIdentity()
assert.NoError(t, err)

principalBytes, err := proto.Marshal(&common.MSPRole{Role: common.MSPRole_ADMIN, MspIdentifier: "DEFAULT"})
assert.NoError(t, err)

principal := &common.MSPPrincipal{
PrincipalClassification: common.MSPPrincipal_ROLE,
Principal: principalBytes}

err = id.SatisfiesPrincipal(principal)
assert.NoError(t, err)
}

func TestAdminPolicyPrincipalFails(t *testing.T) {
id, err := localMsp.GetDefaultSigningIdentity()
assert.NoError(t, err)

principalBytes, err := proto.Marshal(&common.MSPRole{Role: common.MSPRole_ADMIN, MspIdentifier: "DEFAULT"})
assert.NoError(t, err)

principal := &common.MSPPrincipal{
PrincipalClassification: common.MSPPrincipal_ROLE,
Principal: principalBytes}

// remove the admin so validation will fail
localMsp.(*bccspmsp).admins = make([]Identity, 0)

err = id.SatisfiesPrincipal(principal)
assert.Error(t, err)
}

var conf *msp.MSPConfig
var localMsp MSP
var mspMgr MSPManager
Expand Down
25 changes: 22 additions & 3 deletions msp/mspimpl.go
Original file line number Diff line number Diff line change
Expand Up @@ -528,12 +528,31 @@ func (msp *bccspmsp) SatisfiesPrincipal(id Identity, principal *common.MSPPrinci

// now we validate the different msp roles
switch mspRole.Role {
// in the case of member, we simply check
// whether this identity is valid for the MSP
case common.MSPRole_MEMBER:
// in the case of member, we simply check
// whether this identity is valid for the MSP
return msp.Validate(id)
case common.MSPRole_ADMIN:
panic("Not yet implemented")
// in the case of admin, we check that the
// id is exactly one of our admins
idBytes, err := id.Serialize()
if err != nil {
return fmt.Errorf("Could not serialize this identity instance, err %s", err)
}

for _, admincert := range msp.admins {
adBytes, err := admincert.Serialize()
if err != nil {
return fmt.Errorf("Could not serialize admin cert, err %s", err)
}

rv := bytes.Compare(idBytes, adBytes)
if rv == 0 {
return nil
}
}

return errors.New("This identity is not an admin")
default:
return fmt.Errorf("Invalid MSP role type %d", int32(mspRole.Role))
}
Expand Down
23 changes: 12 additions & 11 deletions msp/sampleconfig/admincerts/admincert.pem
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
-----BEGIN CERTIFICATE-----
MIICYjCCAgmgAwIBAgIUB3CTDOU47sUC5K4kn/Caqnh114YwCgYIKoZIzj0EAwIw
MIICjDCCAjKgAwIBAgIUBEVwsSx0TmqdbzNwleNBBzoIT0wwCgYIKoZIzj0EAwIw
fzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh
biBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK
BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMDEyMTkzMTAw
WhcNMjExMDExMTkzMTAwWjB/MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEChMWSW50ZXJuZXQg
V2lkZ2V0cywgSW5jLjEMMAoGA1UECxMDV1dXMRQwEgYDVQQDEwtleGFtcGxlLmNv
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKIH5b2JaSmqiQXHyqC+cmknICcF
i5AddVjsQizDV6uZ4v6s+PWiJyzfA/rTtMvYAPq/yeEHpBUB1j053mxnpMujYzBh
MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXZ0I9
qp6CP8TFHZ9bw5nRtZxIEDAfBgNVHSMEGDAWgBQXZ0I9qp6CP8TFHZ9bw5nRtZxI
EDAKBggqhkjOPQQDAgNHADBEAiAHp5Rbp9Em1G/UmKn8WsCbqDfWecVbZPQj3RK4
oG5kQQIgQAe4OOKYhJdh3f7URaKfGTf492/nmRmtK+ySKjpHSrU=
BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMTExMTcwNzAw
WhcNMTcxMTExMTcwNzAwWjBjMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGgg
Q2Fyb2xpbmExEDAOBgNVBAcTB1JhbGVpZ2gxGzAZBgNVBAoTEkh5cGVybGVkZ2Vy
IEZhYnJpYzEMMAoGA1UECxMDQ09QMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
HBuKsAO43hs4JGpFfiGMkB/xsILTsOvmN2WmwpsPHZNL6w8HWe3xCPQtdG/XJJvZ
+C756KEsUBM3yw5PTfku8qOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOFC
dcUZ4es3ltiCgAVDoyLfVpPIMB8GA1UdIwQYMBaAFBdnQj2qnoI/xMUdn1vDmdG1
nEgQMCUGA1UdEQQeMByCCm15aG9zdC5jb22CDnd3dy5teWhvc3QuY29tMAoGCCqG
SM49BAMCA0gAMEUCIDf9Hbl4xn3z4EwNKmilM9lX2Fq4jWpAaRVB97OmVEeyAiEA
25aDPQHGGq2AvhKT0wvt08cX1GTGCIbfmuLpMwKQj38=
-----END CERTIFICATE-----

0 comments on commit 3e0481b

Please sign in to comment.