wspr: Support for all methods on the blessing store
MultiPart: 1/2
Change-Id: If0bba07cd161d8ef577f0b1efa067f1cf2ada25a
diff --git a/services/wspr/internal/app/app.go b/services/wspr/internal/app/app.go
index 2f592c9..812fcd6 100644
--- a/services/wspr/internal/app/app.go
+++ b/services/wspr/internal/app/app.go
@@ -779,9 +779,9 @@
return encKey, handle, err
}
-// PutToBlessingStore puts a blessing with the provided name to the blessing store
-// with the specified blessing pattern.
-func (c *Controller) PutToBlessingStore(_ *context.T, _ rpc.ServerCall, handle principal.BlessingsHandle, pattern security.BlessingPattern) (*principal.JsBlessings, error) {
+// BlessingStoreSet puts the specified blessing in the blessing store under the
+// provided pattern.
+func (c *Controller) BlessingStoreSet(_ *context.T, _ rpc.ServerCall, handle principal.BlessingsHandle, pattern security.BlessingPattern) (*principal.JsBlessings, error) {
var inputBlessings security.Blessings
if inputBlessings = c.GetBlessings(handle); inputBlessings.IsZero() {
return nil, verror.New(invalidBlessingsHandle, nil, handle)
@@ -801,18 +801,33 @@
return jsBlessings, nil
}
-// AddToRoots adds the provided blessing as a root.
-func (c *Controller) AddToRoots(_ *context.T, _ rpc.ServerCall, handle principal.BlessingsHandle) error {
+// BlessingStoreForPeer puts the specified blessing in the blessing store under the
+// provided pattern.
+func (c *Controller) BlessingStoreForPeer(_ *context.T, _ rpc.ServerCall, peerBlessings []string) (*principal.JsBlessings, error) {
+ p := v23.GetPrincipal(c.ctx)
+ outBlessings := p.BlessingStore().ForPeer(peerBlessings...)
+
+ if outBlessings.IsZero() {
+ return nil, nil
+ }
+
+ jsBlessings := principal.ConvertBlessingsToHandle(outBlessings, c.blessingsCache.GetOrAddHandle(outBlessings))
+ return jsBlessings, nil
+}
+
+// BlessingStoreSetDefault sets the default blessings in the blessing store.
+func (c *Controller) BlessingStoreSetDefault(_ *context.T, _ rpc.ServerCall, handle principal.BlessingsHandle) error {
var inputBlessings security.Blessings
if inputBlessings = c.GetBlessings(handle); inputBlessings.IsZero() {
return verror.New(invalidBlessingsHandle, nil, handle)
}
p := v23.GetPrincipal(c.ctx)
- return p.AddToRoots(inputBlessings)
+ return p.BlessingStore().SetDefault(inputBlessings)
}
-func (c *Controller) GetDefaultBlessings(*context.T, rpc.ServerCall) (*principal.JsBlessings, error) {
+// BlessingStoreDefault fetches the default blessings for the principal of the controller.
+func (c *Controller) BlessingStoreDefault(*context.T, rpc.ServerCall) (*principal.JsBlessings, error) {
p := v23.GetPrincipal(c.ctx)
outBlessings := p.BlessingStore().Default()
@@ -824,6 +839,41 @@
return jsBlessing, nil
}
+// BlessingStorePublicKey fetches the public key used by the principal associated with the blessing store.
+func (c *Controller) BlessingStorePublicKey(*context.T, rpc.ServerCall) (string, error) {
+ p := v23.GetPrincipal(c.ctx)
+ pk := p.BlessingStore().PublicKey()
+ return principal.EncodePublicKey(pk)
+}
+
+// BlessingStorePeerBlessings returns all the blessings that the BlessingStore holds.
+func (c *Controller) BlessingStorePeerBlessings(*context.T, rpc.ServerCall) (map[security.BlessingPattern]*principal.JsBlessings, error) {
+ p := v23.GetPrincipal(c.ctx)
+ outBlessingsMap := map[security.BlessingPattern]*principal.JsBlessings{}
+ for pattern, blessings := range p.BlessingStore().PeerBlessings() {
+ outBlessingsMap[pattern] = principal.ConvertBlessingsToHandle(blessings, c.blessingsCache.GetOrAddHandle(blessings))
+ }
+ return outBlessingsMap, nil
+}
+
+// BlessingStoreDebugString retrieves a debug string describing the state of the blessing store
+func (c *Controller) BlessingStoreDebugString(*context.T, rpc.ServerCall) (string, error) {
+ p := v23.GetPrincipal(c.ctx)
+ ds := p.BlessingStore().DebugString()
+ return ds, nil
+}
+
+// AddToRoots adds the provided blessing as a root.
+func (c *Controller) AddToRoots(_ *context.T, _ rpc.ServerCall, handle principal.BlessingsHandle) error {
+ var inputBlessings security.Blessings
+ if inputBlessings = c.GetBlessings(handle); inputBlessings.IsZero() {
+ return verror.New(invalidBlessingsHandle, nil, handle)
+ }
+
+ p := v23.GetPrincipal(c.ctx)
+ return p.AddToRoots(inputBlessings)
+}
+
// UnionOfBlessings returns a Blessings object that carries the union of the provided blessings.
func (c *Controller) UnionOfBlessings(_ *context.T, _ rpc.ServerCall, handles []principal.BlessingsHandle) (*principal.JsBlessings, error) {
inputBlessings := make([]security.Blessings, len(handles))