security: UUID based caveat registration (Step 3/3)
More background in:
https://vanadium-review.googlesource.com/#/c/2635/
(Commit: 514b0ece4f0777911574ade2744995639acf3ec6)
In this final step, the ValidatorVOM field is gone.
Renaming/re-organizing packages (e.g., renaming v.io/core/veyron2/security to
v.io/core/security) should now be possible without breaking any existing
blessings out there.
Change-Id: I3ebae4f832d65f25a9bcb7004e1d5e35919f9137
diff --git a/services/identity/revocation/revocation_test.go b/services/identity/revocation/revocation_test.go
index 4dd214d..2aa0291 100644
--- a/services/identity/revocation/revocation_test.go
+++ b/services/identity/revocation/revocation_test.go
@@ -53,19 +53,19 @@
}
var impetus security.DischargeImpetus
- if _, err = discharger.Discharge(ctx, tp, impetus); err != nil {
+ if _, err = discharger.Discharge(ctx, caveat, impetus); err != nil {
t.Fatalf("failed to get discharge: %s", err)
}
if err = revoker.Revoke(tp.ID()); err != nil {
t.Fatalf("failed to revoke: %s", err)
}
- if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
+ if discharge, err := discharger.Discharge(ctx, caveat, impetus); err == nil || discharge != nil {
t.Fatalf("got a discharge for a revoked caveat: %s", err)
}
if err = revoker.Revoke(tp.ID()); err != nil {
t.Fatalf("failed to revoke again: %s", err)
}
- if discharge, err := discharger.Discharge(ctx, tp, impetus); err == nil || discharge != nil {
+ if discharge, err := discharger.Discharge(ctx, caveat, impetus); err == nil || discharge != nil {
t.Fatalf("got a discharge for a doubly revoked caveat: %s", err)
}
}
diff --git a/services/security/discharger.vdl b/services/security/discharger.vdl
index 7d4b527..42f2d1c 100644
--- a/services/security/discharger.vdl
+++ b/services/security/discharger.vdl
@@ -9,7 +9,5 @@
// this caveat.
//
// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
- // TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
- // security.Caveat.ValidatorVOM goes away.
- Discharge(Caveat any, Impetus security.DischargeImpetus) (Discharge any | error)
+ Discharge(Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge any | error)
}
diff --git a/services/security/discharger.vdl.go b/services/security/discharger.vdl.go
index e0f7d09..3b4f123 100644
--- a/services/security/discharger.vdl.go
+++ b/services/security/discharger.vdl.go
@@ -24,9 +24,7 @@
// this caveat.
//
// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
- // TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
- // security.Caveat.ValidatorVOM goes away.
- Discharge(ctx *context.T, Caveat vdl.AnyRep, Impetus security.DischargeImpetus, opts ...ipc.CallOpt) (Discharge vdl.AnyRep, err error)
+ Discharge(ctx *context.T, Caveat security.Caveat, Impetus security.DischargeImpetus, opts ...ipc.CallOpt) (Discharge vdl.AnyRep, err error)
}
// DischargerClientStub adds universal methods to DischargerClientMethods.
@@ -58,7 +56,7 @@
return veyron2.GetClient(ctx)
}
-func (c implDischargerClientStub) Discharge(ctx *context.T, i0 vdl.AnyRep, i1 security.DischargeImpetus, opts ...ipc.CallOpt) (o0 vdl.AnyRep, err error) {
+func (c implDischargerClientStub) Discharge(ctx *context.T, i0 security.Caveat, i1 security.DischargeImpetus, opts ...ipc.CallOpt) (o0 vdl.AnyRep, err error) {
var call ipc.Call
if call, err = c.c(ctx).StartCall(ctx, c.name, "Discharge", []interface{}{i0, i1}, opts...); err != nil {
return
@@ -79,9 +77,7 @@
// this caveat.
//
// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.
- // TODO(ataly,ashankar): Type of Caveat should become security.Caveat once
- // security.Caveat.ValidatorVOM goes away.
- Discharge(ctx ipc.ServerContext, Caveat vdl.AnyRep, Impetus security.DischargeImpetus) (Discharge vdl.AnyRep, err error)
+ Discharge(ctx ipc.ServerContext, Caveat security.Caveat, Impetus security.DischargeImpetus) (Discharge vdl.AnyRep, err error)
}
// DischargerServerStubMethods is the server interface containing
@@ -119,7 +115,7 @@
gs *ipc.GlobState
}
-func (s implDischargerServerStub) Discharge(ctx ipc.ServerContext, i0 vdl.AnyRep, i1 security.DischargeImpetus) (vdl.AnyRep, error) {
+func (s implDischargerServerStub) Discharge(ctx ipc.ServerContext, i0 security.Caveat, i1 security.DischargeImpetus) (vdl.AnyRep, error) {
return s.impl.Discharge(ctx, i0, i1)
}
@@ -142,9 +138,9 @@
Methods: []ipc.MethodDesc{
{
Name: "Discharge",
- Doc: "// Discharge is called by a principal that holds a blessing with a third\n// party caveat and seeks to get a discharge that proves the fulfillment of\n// this caveat.\n//\n// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.\n// TODO(ataly,ashankar): Type of Caveat should become security.Caveat once\n// security.Caveat.ValidatorVOM goes away.",
+ Doc: "// Discharge is called by a principal that holds a blessing with a third\n// party caveat and seeks to get a discharge that proves the fulfillment of\n// this caveat.\n//\n// TODO(ataly,ashankar): Figure out a VDL representation for Discharge.",
InArgs: []ipc.ArgDesc{
- {"Caveat", ``}, // vdl.AnyRep
+ {"Caveat", ``}, // security.Caveat
{"Impetus", ``}, // security.DischargeImpetus
},
OutArgs: []ipc.ArgDesc{
diff --git a/services/security/discharger/discharger.go b/services/security/discharger/discharger.go
index e32b8fc..a61aea1 100644
--- a/services/security/discharger/discharger.go
+++ b/services/security/discharger/discharger.go
@@ -8,36 +8,16 @@
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/security"
"v.io/core/veyron2/vdl"
- "v.io/core/veyron2/vom"
)
// dischargerd issues discharges for all caveats present in the current
// namespace with no additional caveats iff the caveat is valid.
type dischargerd struct{}
-func (dischargerd) Discharge(ctx ipc.ServerContext, caveatAny vdl.AnyRep, _ security.DischargeImpetus) (vdl.AnyRep, error) {
- // TODO(ashankar): When security.Caveat.ValidatorVOM goes away
- // (before the release), then this whole "if..else if" block below
- // should vanish, we'll start with the:
- // tp := caveat.ThirdPartyDetails()
- // line (and "caveatAny vdl.AnyRep" will become "caveat security.Caveat")
- var caveat security.Caveat
- if c, ok := caveatAny.(security.Caveat); ok {
- caveat = c
- } else if tp, ok := caveatAny.(security.ThirdPartyCaveat); ok {
- // This whole block is a temporary hack that works
- // because there is only a single valid implementation
- // of security.ThirdPartyCaveat.
- // It will go away before the release. See TODO above.
- copy(caveat.Id[:], security.PublicKeyThirdPartyCaveatX.Id[:])
- var err error
- if caveat.ParamVom, err = vom.Encode(tp); err != nil {
- return nil, fmt.Errorf("hack error: %v", err)
- }
- }
+func (dischargerd) Discharge(ctx ipc.ServerContext, caveat security.Caveat, _ security.DischargeImpetus) (vdl.AnyRep, error) {
tp := caveat.ThirdPartyDetails()
if tp == nil {
- return nil, fmt.Errorf("type %T(%v) does not represent a third party caveat")
+ return nil, fmt.Errorf("Caveat %v does not represent a third party caveat", caveat)
}
if err := tp.Dischargeable(ctx); err != nil {
return nil, fmt.Errorf("third-party caveat %v cannot be discharged for this context: %v", tp, err)