bump go-ucan
This commit is contained in:
committed by
Michael Muré
parent
3b6d70f47a
commit
cf3eb1b3f7
@@ -60,18 +60,18 @@ func (c *Client) PrepareInvoke(ctx context.Context, cmd command.Command, subject
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
invSealed, invCid, err := inv.ToSealed(c.privKey)
|
invSealed, _, err := inv.ToSealed(c.privKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
cont := container.NewWriter()
|
cont := container.NewWriter()
|
||||||
cont.AddSealed(invCid, invSealed)
|
cont.AddSealed(invSealed)
|
||||||
for bundle, err := range c.pool.GetBundles(proof) {
|
for bundle, err := range c.pool.GetBundles(proof) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
cont.AddSealed(bundle.Cid, bundle.Sealed)
|
cont.AddSealed(bundle.Sealed)
|
||||||
}
|
}
|
||||||
|
|
||||||
return cont, nil
|
return cont, nil
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import (
|
|||||||
// - issuer: the DID of the client, also the issuer of the invocation token
|
// - issuer: the DID of the client, also the issuer of the invocation token
|
||||||
// - cmd: the command to execute
|
// - cmd: the command to execute
|
||||||
// - subject: the DID of the resource to operate on, also the subject (or audience if defined) of the invocation token
|
// - subject: the DID of the resource to operate on, also the subject (or audience if defined) of the invocation token
|
||||||
|
// The returned delegation chain is ordered starting from the leaf (the one matching the invocation) to the root
|
||||||
|
// (the one given by the service).
|
||||||
// Note: you can read it as "(issuer) wants to do (cmd) on (subject)".
|
// Note: you can read it as "(issuer) wants to do (cmd) on (subject)".
|
||||||
// Note: the returned delegation(s) don't have to match exactly the parameters, as long as they allow them.
|
// Note: the returned delegation(s) don't have to match exactly the parameters, as long as they allow them.
|
||||||
// Note: the implemented algorithm won't perform well with a large number of delegations.
|
// Note: the implemented algorithm won't perform well with a large number of delegations.
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ type DelegationRequester interface {
|
|||||||
// - cmd: the command to execute
|
// - cmd: the command to execute
|
||||||
// - audience: the DID of the client, also the issuer of the invocation token
|
// - audience: the DID of the client, also the issuer of the invocation token
|
||||||
// - subject: the DID of the resource to operate on, also the subject (or audience if defined) of the invocation token
|
// - subject: the DID of the resource to operate on, also the subject (or audience if defined) of the invocation token
|
||||||
|
// The returned delegations MUST be ordered starting from the leaf (the one matching the invocation) to the root
|
||||||
|
// (the one given by the service).
|
||||||
// Note: you can read it as "(audience) wants to do (cmd) on (subject)".
|
// Note: you can read it as "(audience) wants to do (cmd) on (subject)".
|
||||||
// Note: the returned delegation(s) don't have to match exactly the parameters, as long as they allow them.
|
// Note: the returned delegation(s) don't have to match exactly the parameters, as long as they allow them.
|
||||||
RequestDelegation(ctx context.Context, audience did.DID, cmd command.Command, subject did.DID) (iter.Seq2[*delegation.Bundle, error], error)
|
RequestDelegation(ctx context.Context, audience did.DID, cmd command.Command, subject did.DID) (iter.Seq2[*delegation.Bundle, error], error)
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ type UcanCtx struct {
|
|||||||
infura *extargs.InfuraExtArgs
|
infura *extargs.InfuraExtArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FromContainer prepare a UcanCtx from a UCAN container, for further evaluation in a server pipeline.
|
||||||
|
// It is expected that the container holds a single invocation and the matching delegations. If not,
|
||||||
|
// an error is returned.
|
||||||
func FromContainer(cont container.Reader) (*UcanCtx, error) {
|
func FromContainer(cont container.Reader) (*UcanCtx, error) {
|
||||||
inv, err := cont.GetInvocation()
|
inv, err := cont.GetInvocation()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -95,7 +98,7 @@ func (ctn UcanCtx) Policies() policy.Policy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Meta returns all the meta values from the delegations.
|
// Meta returns all the meta values from the delegations.
|
||||||
// They are accumulated from the root delegation to the leaf delegation, with no overwrite.
|
// They are accumulated from the root delegation to the leaf delegation, with no overwriting.
|
||||||
func (ctn UcanCtx) Meta() meta.ReadOnly {
|
func (ctn UcanCtx) Meta() meta.ReadOnly {
|
||||||
return ctn.meta.ReadOnly()
|
return ctn.meta.ReadOnly()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,13 +57,13 @@ func ExampleContext() {
|
|||||||
invocation.WithExpirationIn(10*time.Minute),
|
invocation.WithExpirationIn(10*time.Minute),
|
||||||
invocation.WithArgument("myarg", "hello"), // we can specify invocation parameters
|
invocation.WithArgument("myarg", "hello"), // we can specify invocation parameters
|
||||||
)
|
)
|
||||||
invBytes, invCid, _ := inv.ToSealed(user.PrivKey())
|
invBytes, _, _ := inv.ToSealed(user.PrivKey())
|
||||||
|
|
||||||
// PACKAGING: no obligation for the transport, but the user needs to give the service the invocation
|
// PACKAGING: no obligation for the transport, but the user needs to give the service the invocation
|
||||||
// and all the proof delegations. We can use a container for that.
|
// and all the proof delegations. We can use a container for that.
|
||||||
cont := container.NewWriter()
|
cont := container.NewWriter()
|
||||||
cont.AddSealed(dlgCid, dlgBytes)
|
cont.AddSealed(dlgBytes)
|
||||||
cont.AddSealed(invCid, invBytes)
|
cont.AddSealed(invBytes)
|
||||||
contBytes, _ := cont.ToBase64StdPadding()
|
contBytes, _ := cont.ToBase64StdPadding()
|
||||||
|
|
||||||
// MAKING A REQUEST: we pass the container in the Bearer HTTP header
|
// MAKING A REQUEST: we pass the container in the Bearer HTTP header
|
||||||
|
|||||||
@@ -107,15 +107,15 @@ func TestHttp(t *testing.T) {
|
|||||||
// we don't test the args hash here
|
// we don't test the args hash here
|
||||||
emptyArgs := args.New().ReadOnly()
|
emptyArgs := args.New().ReadOnly()
|
||||||
|
|
||||||
extArgs := NewHttpExtArgs(pol, emptyArgs, r)
|
ctx := NewHttpExtArgs(pol, emptyArgs, r)
|
||||||
|
|
||||||
_, err := extArgs.Args()
|
_, err := ctx.Args()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if tc.expected {
|
if tc.expected {
|
||||||
require.NoError(t, extArgs.Verify())
|
require.NoError(t, ctx.Verify())
|
||||||
} else {
|
} else {
|
||||||
require.Error(t, extArgs.Verify())
|
require.Error(t, ctx.Verify())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,12 +173,12 @@ func TestHttpHash(t *testing.T) {
|
|||||||
err := invArgs.Add(HttpArgsKey, tc.hash)
|
err := invArgs.Add(HttpArgsKey, tc.hash)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
extArgs := NewHttpExtArgs(pol, invArgs.ReadOnly(), req)
|
ctx := NewHttpExtArgs(pol, invArgs.ReadOnly(), req)
|
||||||
|
|
||||||
if tc.expected {
|
if tc.expected {
|
||||||
require.NoError(t, extArgs.Verify())
|
require.NoError(t, ctx.Verify())
|
||||||
} else {
|
} else {
|
||||||
require.Error(t, extArgs.Verify())
|
require.Error(t, ctx.Verify())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,15 +97,15 @@ func TestJsonRpc(t *testing.T) {
|
|||||||
// we don't test the args hash here
|
// we don't test the args hash here
|
||||||
emptyArgs := args.New().ReadOnly()
|
emptyArgs := args.New().ReadOnly()
|
||||||
|
|
||||||
extArgs := NewJsonRpcExtArgs(tc.pol, emptyArgs, tc.req)
|
ctx := NewJsonRpcExtArgs(tc.pol, emptyArgs, tc.req)
|
||||||
|
|
||||||
_, err := extArgs.Args()
|
_, err := ctx.Args()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if tc.expected {
|
if tc.expected {
|
||||||
require.NoError(t, extArgs.Verify())
|
require.NoError(t, ctx.Verify())
|
||||||
} else {
|
} else {
|
||||||
require.Error(t, extArgs.Verify())
|
require.Error(t, ctx.Verify())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -152,12 +152,12 @@ func TestJsonRpcHash(t *testing.T) {
|
|||||||
err := invArgs.Add(JsonRpcArgsKey, tc.hash)
|
err := invArgs.Add(JsonRpcArgsKey, tc.hash)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
extArgs := NewJsonRpcExtArgs(pol, invArgs.ReadOnly(), req)
|
ctx := NewJsonRpcExtArgs(pol, invArgs.ReadOnly(), req)
|
||||||
|
|
||||||
if tc.expected {
|
if tc.expected {
|
||||||
require.NoError(t, extArgs.Verify())
|
require.NoError(t, ctx.Verify())
|
||||||
} else {
|
} else {
|
||||||
require.Error(t, extArgs.Verify())
|
require.Error(t, ctx.Verify())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user