bump go-ucan

This commit is contained in:
Michael Muré
2025-01-16 15:16:01 +01:00
committed by Michael Muré
parent 3b6d70f47a
commit cf3eb1b3f7
7 changed files with 28 additions and 21 deletions

View File

@@ -60,18 +60,18 @@ func (c *Client) PrepareInvoke(ctx context.Context, cmd command.Command, subject
return nil, err
}
invSealed, invCid, err := inv.ToSealed(c.privKey)
invSealed, _, err := inv.ToSealed(c.privKey)
if err != nil {
return nil, err
}
cont := container.NewWriter()
cont.AddSealed(invCid, invSealed)
cont.AddSealed(invSealed)
for bundle, err := range c.pool.GetBundles(proof) {
if err != nil {
return nil, err
}
cont.AddSealed(bundle.Cid, bundle.Sealed)
cont.AddSealed(bundle.Sealed)
}
return cont, nil

View File

@@ -14,6 +14,8 @@ import (
// - issuer: the DID of the client, also the issuer of the invocation token
// - 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
// 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: 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.

View File

@@ -16,6 +16,8 @@ type DelegationRequester interface {
// - cmd: the command to execute
// - 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
// 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: 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)

View File

@@ -38,6 +38,9 @@ type UcanCtx struct {
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) {
inv, err := cont.GetInvocation()
if err != nil {
@@ -95,7 +98,7 @@ func (ctn UcanCtx) Policies() policy.Policy {
}
// 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 {
return ctn.meta.ReadOnly()
}

View File

@@ -57,13 +57,13 @@ func ExampleContext() {
invocation.WithExpirationIn(10*time.Minute),
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
// and all the proof delegations. We can use a container for that.
cont := container.NewWriter()
cont.AddSealed(dlgCid, dlgBytes)
cont.AddSealed(invCid, invBytes)
cont.AddSealed(dlgBytes)
cont.AddSealed(invBytes)
contBytes, _ := cont.ToBase64StdPadding()
// MAKING A REQUEST: we pass the container in the Bearer HTTP header

View File

@@ -107,15 +107,15 @@ func TestHttp(t *testing.T) {
// we don't test the args hash here
emptyArgs := args.New().ReadOnly()
extArgs := NewHttpExtArgs(pol, emptyArgs, r)
ctx := NewHttpExtArgs(pol, emptyArgs, r)
_, err := extArgs.Args()
_, err := ctx.Args()
require.NoError(t, err)
if tc.expected {
require.NoError(t, extArgs.Verify())
require.NoError(t, ctx.Verify())
} 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)
require.NoError(t, err)
extArgs := NewHttpExtArgs(pol, invArgs.ReadOnly(), req)
ctx := NewHttpExtArgs(pol, invArgs.ReadOnly(), req)
if tc.expected {
require.NoError(t, extArgs.Verify())
require.NoError(t, ctx.Verify())
} else {
require.Error(t, extArgs.Verify())
require.Error(t, ctx.Verify())
}
})
}

View File

@@ -97,15 +97,15 @@ func TestJsonRpc(t *testing.T) {
// we don't test the args hash here
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)
if tc.expected {
require.NoError(t, extArgs.Verify())
require.NoError(t, ctx.Verify())
} 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)
require.NoError(t, err)
extArgs := NewJsonRpcExtArgs(pol, invArgs.ReadOnly(), req)
ctx := NewJsonRpcExtArgs(pol, invArgs.ReadOnly(), req)
if tc.expected {
require.NoError(t, extArgs.Verify())
require.NoError(t, ctx.Verify())
} else {
require.Error(t, extArgs.Verify())
require.Error(t, ctx.Verify())
}
})
}