wire the DID resolution options
This commit is contained in:
@@ -3,6 +3,7 @@ package delegation
|
|||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/MetaMask/go-did-it"
|
||||||
"github.com/MetaMask/go-did-it/crypto"
|
"github.com/MetaMask/go-did-it/crypto"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/ipld/go-ipld-prime"
|
"github.com/ipld/go-ipld-prime"
|
||||||
@@ -46,8 +47,8 @@ func (t *Token) ToSealedWriter(w io.Writer, privKey crypto.PrivateKeySigningByte
|
|||||||
// verifies that the envelope's signature is correct based on the public
|
// verifies that the envelope's signature is correct based on the public
|
||||||
// key taken from the issuer (iss) field and calculates the CID of the
|
// key taken from the issuer (iss) field and calculates the CID of the
|
||||||
// incoming data.
|
// incoming data.
|
||||||
func FromSealed(data []byte) (*Token, cid.Cid, error) {
|
func FromSealed(data []byte, resolvOpts ...did.ResolutionOption) (*Token, cid.Cid, error) {
|
||||||
tkn, err := FromDagCbor(data)
|
tkn, err := FromDagCbor(data, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, cid.Undef, err
|
return nil, cid.Undef, err
|
||||||
}
|
}
|
||||||
@@ -61,10 +62,10 @@ func FromSealed(data []byte) (*Token, cid.Cid, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FromSealedReader is the same as Unseal but accepts an io.Reader.
|
// FromSealedReader is the same as Unseal but accepts an io.Reader.
|
||||||
func FromSealedReader(r io.Reader) (*Token, cid.Cid, error) {
|
func FromSealedReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, cid.Cid, error) {
|
||||||
cidReader := envelope.NewCIDReader(r)
|
cidReader := envelope.NewCIDReader(r)
|
||||||
|
|
||||||
tkn, err := FromDagCborReader(cidReader)
|
tkn, err := FromDagCborReader(cidReader, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, cid.Undef, err
|
return nil, cid.Undef, err
|
||||||
}
|
}
|
||||||
@@ -123,29 +124,29 @@ func (t *Token) ToDagJsonWriter(w io.Writer, privKey crypto.PrivateKeySigningByt
|
|||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func Decode(b []byte, decFn codec.Decoder) (*Token, error) {
|
func Decode(b []byte, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
node, err := ipld.Decode(b, decFn)
|
node, err := ipld.Decode(b, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return FromIPLD(node)
|
return FromIPLD(node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeReader is the same as Decode, but accept an io.Reader.
|
// DecodeReader is the same as Decode, but accept an io.Reader.
|
||||||
func DecodeReader(r io.Reader, decFn codec.Decoder) (*Token, error) {
|
func DecodeReader(r io.Reader, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
node, err := ipld.DecodeStreaming(r, decFn)
|
node, err := ipld.DecodeStreaming(r, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return FromIPLD(node)
|
return FromIPLD(node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCbor unmarshals the input data into a Token.
|
// FromDagCbor unmarshals the input data into a Token.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func FromDagCbor(data []byte) (*Token, error) {
|
func FromDagCbor(data []byte, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
pay, err := envelope.FromDagCbor[*tokenPayloadModel](data)
|
pay, err := envelope.FromDagCbor[*tokenPayloadModel](data, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -159,26 +160,26 @@ func FromDagCbor(data []byte) (*Token, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
||||||
func FromDagCborReader(r io.Reader) (*Token, error) {
|
func FromDagCborReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return DecodeReader(r, dagcbor.Decode)
|
return DecodeReader(r, dagcbor.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJson unmarshals the input data into a Token.
|
// FromDagJson unmarshals the input data into a Token.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func FromDagJson(data []byte) (*Token, error) {
|
func FromDagJson(data []byte, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return Decode(data, dagjson.Decode)
|
return Decode(data, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
||||||
func FromDagJsonReader(r io.Reader) (*Token, error) {
|
func FromDagJsonReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return DecodeReader(r, dagjson.Decode)
|
return DecodeReader(r, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromIPLD decode the given IPLD representation into a Token.
|
// FromIPLD decode the given IPLD representation into a Token.
|
||||||
func FromIPLD(node datamodel.Node) (*Token, error) {
|
func FromIPLD(node datamodel.Node, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
pay, err := envelope.FromIPLD[*tokenPayloadModel](node)
|
pay, err := envelope.FromIPLD[*tokenPayloadModel](node, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,56 +70,56 @@ type Tokener interface {
|
|||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Tokener is invalid.
|
// Tokener is invalid.
|
||||||
func Decode[T Tokener](b []byte, decFn codec.Decoder) (T, error) {
|
func Decode[T Tokener](b []byte, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
node, err := ipld.Decode(b, decFn)
|
node, err := ipld.Decode(b, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return *new(T), err
|
return *new(T), err
|
||||||
}
|
}
|
||||||
|
|
||||||
return FromIPLD[T](node)
|
return FromIPLD[T](node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeReader is the same as Decode, but accept an io.Reader.
|
// DecodeReader is the same as Decode, but accept an io.Reader.
|
||||||
func DecodeReader[T Tokener](r io.Reader, decFn codec.Decoder) (T, error) {
|
func DecodeReader[T Tokener](r io.Reader, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
node, err := ipld.DecodeStreaming(r, decFn)
|
node, err := ipld.DecodeStreaming(r, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return *new(T), err
|
return *new(T), err
|
||||||
}
|
}
|
||||||
|
|
||||||
return FromIPLD[T](node)
|
return FromIPLD[T](node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCbor unmarshals the input data into a Tokener.
|
// FromDagCbor unmarshals the input data into a Tokener.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Tokener is invalid.
|
// Tokener is invalid.
|
||||||
func FromDagCbor[T Tokener](b []byte) (T, error) {
|
func FromDagCbor[T Tokener](b []byte, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
return Decode[T](b, dagcbor.Decode)
|
return Decode[T](b, dagcbor.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
||||||
func FromDagCborReader[T Tokener](r io.Reader) (T, error) {
|
func FromDagCborReader[T Tokener](r io.Reader, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
return DecodeReader[T](r, dagcbor.Decode)
|
return DecodeReader[T](r, dagcbor.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJson unmarshals the input data into a Tokener.
|
// FromDagJson unmarshals the input data into a Tokener.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Tokener is invalid.
|
// Tokener is invalid.
|
||||||
func FromDagJson[T Tokener](b []byte) (T, error) {
|
func FromDagJson[T Tokener](b []byte, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
return Decode[T](b, dagjson.Decode)
|
return Decode[T](b, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
||||||
func FromDagJsonReader[T Tokener](r io.Reader) (T, error) {
|
func FromDagJsonReader[T Tokener](r io.Reader, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
return DecodeReader[T](r, dagjson.Decode)
|
return DecodeReader[T](r, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromIPLD unwraps a Tokener from the provided IPLD datamodel.Node.
|
// FromIPLD unwraps a Tokener from the provided IPLD datamodel.Node.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Tokener is invalid.
|
// Tokener is invalid.
|
||||||
func FromIPLD[T Tokener](node datamodel.Node) (T, error) {
|
func FromIPLD[T Tokener](node datamodel.Node, resolvOpts ...did.ResolutionOption) (T, error) {
|
||||||
zero := *new(T)
|
zero := *new(T)
|
||||||
|
|
||||||
info, err := Inspect(node)
|
info, err := Inspect(node)
|
||||||
@@ -173,8 +173,7 @@ func FromIPLD[T Tokener](node datamodel.Node) (T, error) {
|
|||||||
return zero, err
|
return zero, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: pass resolution options
|
issuerDoc, err := issuerDID.Document(resolvOpts...)
|
||||||
issuerDoc, err := issuerDID.Document()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return zero, err
|
return zero, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package invocation
|
|||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/MetaMask/go-did-it"
|
||||||
"github.com/MetaMask/go-did-it/crypto"
|
"github.com/MetaMask/go-did-it/crypto"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/ipld/go-ipld-prime"
|
"github.com/ipld/go-ipld-prime"
|
||||||
@@ -46,8 +47,8 @@ func (t *Token) ToSealedWriter(w io.Writer, privKey crypto.PrivateKeySigningByte
|
|||||||
// verifies that the envelope's signature is correct based on the public
|
// verifies that the envelope's signature is correct based on the public
|
||||||
// key taken from the issuer (iss) field and calculates the CID of the
|
// key taken from the issuer (iss) field and calculates the CID of the
|
||||||
// incoming data.
|
// incoming data.
|
||||||
func FromSealed(data []byte) (*Token, cid.Cid, error) {
|
func FromSealed(data []byte, resolvOpts ...did.ResolutionOption) (*Token, cid.Cid, error) {
|
||||||
tkn, err := FromDagCbor(data)
|
tkn, err := FromDagCbor(data, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, cid.Undef, err
|
return nil, cid.Undef, err
|
||||||
}
|
}
|
||||||
@@ -61,10 +62,10 @@ func FromSealed(data []byte) (*Token, cid.Cid, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FromSealedReader is the same as Unseal but accepts an io.Reader.
|
// FromSealedReader is the same as Unseal but accepts an io.Reader.
|
||||||
func FromSealedReader(r io.Reader) (*Token, cid.Cid, error) {
|
func FromSealedReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, cid.Cid, error) {
|
||||||
cidReader := envelope.NewCIDReader(r)
|
cidReader := envelope.NewCIDReader(r)
|
||||||
|
|
||||||
tkn, err := FromDagCborReader(cidReader)
|
tkn, err := FromDagCborReader(cidReader, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, cid.Undef, err
|
return nil, cid.Undef, err
|
||||||
}
|
}
|
||||||
@@ -123,29 +124,29 @@ func (t *Token) ToDagJsonWriter(w io.Writer, privKey crypto.PrivateKeySigningByt
|
|||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func Decode(b []byte, decFn codec.Decoder) (*Token, error) {
|
func Decode(b []byte, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
node, err := ipld.Decode(b, decFn)
|
node, err := ipld.Decode(b, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return FromIPLD(node)
|
return FromIPLD(node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeReader is the same as Decode, but accept an io.Reader.
|
// DecodeReader is the same as Decode, but accept an io.Reader.
|
||||||
func DecodeReader(r io.Reader, decFn codec.Decoder) (*Token, error) {
|
func DecodeReader(r io.Reader, decFn codec.Decoder, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
node, err := ipld.DecodeStreaming(r, decFn)
|
node, err := ipld.DecodeStreaming(r, decFn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return FromIPLD(node)
|
return FromIPLD(node, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCbor unmarshals the input data into a Token.
|
// FromDagCbor unmarshals the input data into a Token.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func FromDagCbor(data []byte) (*Token, error) {
|
func FromDagCbor(data []byte, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
pay, err := envelope.FromDagCbor[*tokenPayloadModel](data)
|
pay, err := envelope.FromDagCbor[*tokenPayloadModel](data, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -159,26 +160,26 @@ func FromDagCbor(data []byte) (*Token, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
// FromDagCborReader is the same as FromDagCbor, but accept an io.Reader.
|
||||||
func FromDagCborReader(r io.Reader) (*Token, error) {
|
func FromDagCborReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return DecodeReader(r, dagcbor.Decode)
|
return DecodeReader(r, dagcbor.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJson unmarshals the input data into a Token.
|
// FromDagJson unmarshals the input data into a Token.
|
||||||
//
|
//
|
||||||
// An error is returned if the conversion fails, or if the resulting
|
// An error is returned if the conversion fails, or if the resulting
|
||||||
// Token is invalid.
|
// Token is invalid.
|
||||||
func FromDagJson(data []byte) (*Token, error) {
|
func FromDagJson(data []byte, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return Decode(data, dagjson.Decode)
|
return Decode(data, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
// FromDagJsonReader is the same as FromDagJson, but accept an io.Reader.
|
||||||
func FromDagJsonReader(r io.Reader) (*Token, error) {
|
func FromDagJsonReader(r io.Reader, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
return DecodeReader(r, dagjson.Decode)
|
return DecodeReader(r, dagjson.Decode, resolvOpts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromIPLD decode the given IPLD representation into a Token.
|
// FromIPLD decode the given IPLD representation into a Token.
|
||||||
func FromIPLD(node datamodel.Node) (*Token, error) {
|
func FromIPLD(node datamodel.Node, resolvOpts ...did.ResolutionOption) (*Token, error) {
|
||||||
pay, err := envelope.FromIPLD[*tokenPayloadModel](node)
|
pay, err := envelope.FromIPLD[*tokenPayloadModel](node, resolvOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user