@@ -129,3 +129,15 @@ func Personas() []Persona {
|
|||||||
PersonaFrank,
|
PersonaFrank,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DidToName retrieve the persona's name from its DID.
|
||||||
|
func DidToName(d did.DID) string {
|
||||||
|
return map[did.DID]string{
|
||||||
|
PersonaAlice.DID(): "Alice",
|
||||||
|
PersonaBob.DID(): "Bob",
|
||||||
|
PersonaCarol.DID(): "Carol",
|
||||||
|
PersonaDan.DID(): "Dan",
|
||||||
|
PersonaErin.DID(): "Erin",
|
||||||
|
PersonaFrank.DID(): "Frank",
|
||||||
|
}[d]
|
||||||
|
}
|
||||||
|
|||||||
@@ -257,17 +257,17 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
once sync.Once
|
once sync.Once
|
||||||
ts *schema.TypeSystem
|
ts *schema.TypeSystem
|
||||||
err error
|
errSchema error
|
||||||
)
|
)
|
||||||
|
|
||||||
func argsType() schema.Type {
|
func argsType() schema.Type {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
ts, err = ipld.LoadSchemaBytes([]byte(argsSchema))
|
ts, errSchema = ipld.LoadSchemaBytes([]byte(argsSchema))
|
||||||
})
|
})
|
||||||
if err != nil {
|
if errSchema != nil {
|
||||||
panic(err)
|
panic(errSchema)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ts.TypeByName(argsName)
|
return ts.TypeByName(argsName)
|
||||||
|
|||||||
@@ -214,6 +214,9 @@ func tokenFromModel(m tokenPayloadModel) (*Token, error) {
|
|||||||
tkn.nonce = m.Nonce
|
tkn.nonce = m.Nonce
|
||||||
|
|
||||||
tkn.meta = m.Meta
|
tkn.meta = m.Meta
|
||||||
|
if tkn.meta == nil {
|
||||||
|
tkn.meta = meta.NewMeta()
|
||||||
|
}
|
||||||
|
|
||||||
tkn.notBefore, err = parse.OptionalTimestamp(m.Nbf)
|
tkn.notBefore, err = parse.OptionalTimestamp(m.Nbf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -213,33 +213,60 @@ func (g *generator) writeGoFile() error {
|
|||||||
err = f.Close()
|
err = f.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
fmt.Fprintln(f, "// Code generated by delegationtest - DO NOT EDIT.")
|
_, _ = fmt.Fprintln(f, "// Code generated by delegationtest - DO NOT EDIT.")
|
||||||
fmt.Fprintln(f)
|
_, _ = fmt.Fprintln(f)
|
||||||
fmt.Fprintln(f, "package delegationtest")
|
_, _ = fmt.Fprintln(f, "package delegationtest")
|
||||||
fmt.Fprintln(f)
|
_, _ = fmt.Fprintln(f)
|
||||||
fmt.Fprintln(f, "import \"github.com/ipfs/go-cid\"")
|
_, _ = fmt.Fprintln(f, "import (")
|
||||||
|
_, _ = fmt.Fprintln(f, "\t\"github.com/ipfs/go-cid\"")
|
||||||
|
_, _ = fmt.Fprintln(f)
|
||||||
|
_, _ = fmt.Fprintln(f, "\t\"github.com/ucan-wg/go-ucan/token/delegation\"")
|
||||||
|
_, _ = fmt.Fprintln(f, ")")
|
||||||
|
|
||||||
refs := make(map[cid.Cid]string, len(g.dlgs))
|
refs := make(map[cid.Cid]string, len(g.dlgs))
|
||||||
|
|
||||||
for _, d := range g.dlgs {
|
for _, d := range g.dlgs {
|
||||||
refs[d.id] = d.name + "CID"
|
refs[d.id] = d.name + "CID"
|
||||||
|
|
||||||
fmt.Fprintln(f)
|
_, _ = fmt.Fprintln(f)
|
||||||
fmt.Fprintln(f, "var (")
|
_, _ = fmt.Fprintln(f, "var (")
|
||||||
fmt.Fprintf(f, "\t%s = cid.MustParse(\"%s\")\n", d.name+"CID", d.id.String())
|
_, _ = fmt.Fprintf(f, "\t%sCID = cid.MustParse(\"%s\")\n", d.name, d.id.String())
|
||||||
fmt.Fprintf(f, "\t%s = mustGetDelegation(%s)\n", d.name, d.name+"CID")
|
_, _ = fmt.Fprintf(f, "\t%sSealed = mustGetBundle(%s).Sealed\n", d.name, d.name+"CID")
|
||||||
fmt.Fprintln(f, ")")
|
_, _ = fmt.Fprintf(f, "\t%sBundle = mustGetBundle(%s)\n", d.name, d.name+"CID")
|
||||||
|
_, _ = fmt.Fprintf(f, "\t%s = mustGetBundle(%s).Decoded\n", d.name, d.name+"CID")
|
||||||
|
_, _ = fmt.Fprintln(f, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintln(f)
|
||||||
|
_, _ = fmt.Fprintln(f, "var AllTokens = []*delegation.Token{")
|
||||||
|
for _, d := range g.dlgs {
|
||||||
|
_, _ = fmt.Fprintf(f, "\t%s,\n", d.name)
|
||||||
|
}
|
||||||
|
_, _ = fmt.Fprintln(f, "}")
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintln(f)
|
||||||
|
_, _ = fmt.Fprintln(f, "var AllBundles = []*delegation.Bundle{")
|
||||||
|
for _, d := range g.dlgs {
|
||||||
|
_, _ = fmt.Fprintf(f, "\t%sBundle,\n", d.name)
|
||||||
|
}
|
||||||
|
_, _ = fmt.Fprintln(f, "}")
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintln(f)
|
||||||
|
_, _ = fmt.Fprintln(f, "var cidToName = map[cid.Cid]string{")
|
||||||
|
for _, d := range g.dlgs {
|
||||||
|
_, _ = fmt.Fprintf(f, "\t%sCID: \"%s\",\n", d.name, d.name)
|
||||||
|
}
|
||||||
|
_, _ = fmt.Fprintln(f, "}")
|
||||||
|
|
||||||
for _, c := range g.chains {
|
for _, c := range g.chains {
|
||||||
fmt.Fprintln(f)
|
_, _ = fmt.Fprintln(f)
|
||||||
fmt.Fprintf(f, "var %s = []cid.Cid{\n", c.name)
|
_, _ = fmt.Fprintf(f, "var %s = []cid.Cid{\n", c.name)
|
||||||
|
|
||||||
for _, d := range slices.Backward(c.prf) {
|
for _, d := range slices.Backward(c.prf) {
|
||||||
fmt.Fprintf(f, "\t%s,\n", refs[d])
|
_, _ = fmt.Fprintf(f, "\t%s,\n", refs[d])
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintln(f, "}")
|
_, _ = fmt.Fprintln(f, "}")
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ var (
|
|||||||
// Execution of this command is generally prohibited in tests.
|
// Execution of this command is generally prohibited in tests.
|
||||||
ExpandedCommand = command.MustParse("/expanded")
|
ExpandedCommand = command.MustParse("/expanded")
|
||||||
|
|
||||||
// NominalCommand is the command used for most test tokens and proof-
|
// NominalCommand is the command used for most test tokens and proof-chains.
|
||||||
// chains. Execution of this command is generally allowed in tests.
|
// Execution of this command is generally allowed in tests.
|
||||||
NominalCommand = ExpandedCommand.Join("nominal")
|
NominalCommand = ExpandedCommand.Join("nominal")
|
||||||
|
|
||||||
// AttenuatedCommand is a sub-command of the NominalCommand. Execution
|
// AttenuatedCommand is a sub-command of the NominalCommand.
|
||||||
// of this command is generally allowed in tests.
|
// Execution of this command is generally allowed in tests.
|
||||||
AttenuatedCommand = NominalCommand.Join("attenuated")
|
AttenuatedCommand = NominalCommand.Join("attenuated")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,21 +35,21 @@ const TokenDir = "data"
|
|||||||
//go:embed data
|
//go:embed data
|
||||||
var fs embed.FS
|
var fs embed.FS
|
||||||
|
|
||||||
var _ delegation.Loader = (*delegationLoader)(nil)
|
var _ delegation.Loader = (*DelegationLoader)(nil)
|
||||||
|
|
||||||
type delegationLoader struct {
|
type DelegationLoader struct {
|
||||||
tokens map[cid.Cid]*delegation.Token
|
bundles map[cid.Cid]*delegation.Bundle
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
once sync.Once
|
once sync.Once
|
||||||
ldr delegation.Loader
|
ldr *DelegationLoader
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetDelegationLoader returns a singleton instance of a test
|
// GetDelegationLoader returns a singleton instance of a test
|
||||||
// DelegationLoader containing all the tokens present in the data/
|
// DelegationLoader containing all the tokens present in the data/
|
||||||
// directory.
|
// directory.
|
||||||
func GetDelegationLoader() delegation.Loader {
|
func GetDelegationLoader() *DelegationLoader {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
var err error
|
var err error
|
||||||
ldr, err = loadDelegations()
|
ldr, err = loadDelegations()
|
||||||
@@ -61,22 +61,21 @@ func GetDelegationLoader() delegation.Loader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetDelegation implements invocation.DelegationLoader.
|
// GetDelegation implements invocation.DelegationLoader.
|
||||||
func (l *delegationLoader) GetDelegation(id cid.Cid) (*delegation.Token, error) {
|
func (l *DelegationLoader) GetDelegation(id cid.Cid) (*delegation.Token, error) {
|
||||||
tkn, ok := l.tokens[id]
|
bundle, ok := l.bundles[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, delegation.ErrDelegationNotFound
|
return nil, delegation.ErrDelegationNotFound
|
||||||
}
|
}
|
||||||
|
return bundle.Decoded, nil
|
||||||
return tkn, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadDelegations() (delegation.Loader, error) {
|
func loadDelegations() (*DelegationLoader, error) {
|
||||||
dirEntries, err := fs.ReadDir(TokenDir)
|
dirEntries, err := fs.ReadDir(TokenDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tkns := make(map[cid.Cid]*delegation.Token, len(dirEntries))
|
bundles := make(map[cid.Cid]*delegation.Bundle, len(dirEntries))
|
||||||
|
|
||||||
for _, dirEntry := range dirEntries {
|
for _, dirEntry := range dirEntries {
|
||||||
data, err := fs.ReadFile(filepath.Join(TokenDir, dirEntry.Name()))
|
data, err := fs.ReadFile(filepath.Join(TokenDir, dirEntry.Name()))
|
||||||
@@ -89,11 +88,11 @@ func loadDelegations() (delegation.Loader, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tkns[id] = tkn
|
bundles[id] = &delegation.Bundle{Cid: id, Decoded: tkn, Sealed: data}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &delegationLoader{
|
return &DelegationLoader{
|
||||||
tokens: tkns,
|
bundles: bundles,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,10 +102,14 @@ func GetDelegation(id cid.Cid) (*delegation.Token, error) {
|
|||||||
return GetDelegationLoader().GetDelegation(id)
|
return GetDelegationLoader().GetDelegation(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustGetDelegation(id cid.Cid) *delegation.Token {
|
func CidToName(id cid.Cid) string {
|
||||||
tkn, err := GetDelegation(id)
|
return cidToName[id]
|
||||||
if err != nil {
|
}
|
||||||
panic(err)
|
|
||||||
}
|
func mustGetBundle(id cid.Cid) *delegation.Bundle {
|
||||||
return tkn
|
bundle, ok := GetDelegationLoader().bundles[id]
|
||||||
|
if !ok {
|
||||||
|
panic(delegation.ErrDelegationNotFound)
|
||||||
|
}
|
||||||
|
return bundle
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,123 +2,251 @@
|
|||||||
|
|
||||||
package delegationtest
|
package delegationtest
|
||||||
|
|
||||||
import "github.com/ipfs/go-cid"
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
var (
|
"github.com/ucan-wg/go-ucan/token/delegation"
|
||||||
TokenAliceBobCID = cid.MustParse("bafyreicidrwvmac5lvjypucgityrtjsknojraio7ujjli4r5eyby66wjzm")
|
|
||||||
TokenAliceBob = mustGetDelegation(TokenAliceBobCID)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenBobCarolCID = cid.MustParse("bafyreihxv2uhq43oxllzs2xfvxst7wtvvvl7pohb2chcz6hjvfv2ntea5u")
|
TokenAliceBobCID = cid.MustParse("bafyreicidrwvmac5lvjypucgityrtjsknojraio7ujjli4r5eyby66wjzm")
|
||||||
TokenBobCarol = mustGetDelegation(TokenBobCarolCID)
|
TokenAliceBobSealed = mustGetBundle(TokenAliceBobCID).Sealed
|
||||||
|
TokenAliceBobBundle = mustGetBundle(TokenAliceBobCID)
|
||||||
|
TokenAliceBob = mustGetBundle(TokenAliceBobCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDanCID = cid.MustParse("bafyreihclsgiroazq3heqdswvj2cafwqbpboicq7immo65scl7ahktpsdq")
|
TokenBobCarolCID = cid.MustParse("bafyreihxv2uhq43oxllzs2xfvxst7wtvvvl7pohb2chcz6hjvfv2ntea5u")
|
||||||
TokenCarolDan = mustGetDelegation(TokenCarolDanCID)
|
TokenBobCarolSealed = mustGetBundle(TokenBobCarolCID).Sealed
|
||||||
|
TokenBobCarolBundle = mustGetBundle(TokenBobCarolCID)
|
||||||
|
TokenBobCarol = mustGetBundle(TokenBobCarolCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErinCID = cid.MustParse("bafyreicja6ihewy64p3ake56xukotafjlkh4uqep2qhj52en46zzfwby3e")
|
TokenCarolDanCID = cid.MustParse("bafyreihclsgiroazq3heqdswvj2cafwqbpboicq7immo65scl7ahktpsdq")
|
||||||
TokenDanErin = mustGetDelegation(TokenDanErinCID)
|
TokenCarolDanSealed = mustGetBundle(TokenCarolDanCID).Sealed
|
||||||
|
TokenCarolDanBundle = mustGetBundle(TokenCarolDanCID)
|
||||||
|
TokenCarolDan = mustGetBundle(TokenCarolDanCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrankCID = cid.MustParse("bafyreicjlx3lobxm6hl5s4htd4ydwkkqeiou6rft4rnvulfdyoew565vka")
|
TokenDanErinCID = cid.MustParse("bafyreicja6ihewy64p3ake56xukotafjlkh4uqep2qhj52en46zzfwby3e")
|
||||||
TokenErinFrank = mustGetDelegation(TokenErinFrankCID)
|
TokenDanErinSealed = mustGetBundle(TokenDanErinCID).Sealed
|
||||||
|
TokenDanErinBundle = mustGetBundle(TokenDanErinCID)
|
||||||
|
TokenDanErin = mustGetBundle(TokenDanErinCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_InvalidExpandedCommandCID = cid.MustParse("bafyreid3m3pk53gqgp5rlzqhvpedbwsqbidqlp4yz64vknwbzj7bxrmsr4")
|
TokenErinFrankCID = cid.MustParse("bafyreicjlx3lobxm6hl5s4htd4ydwkkqeiou6rft4rnvulfdyoew565vka")
|
||||||
TokenCarolDan_InvalidExpandedCommand = mustGetDelegation(TokenCarolDan_InvalidExpandedCommandCID)
|
TokenErinFrankSealed = mustGetBundle(TokenErinFrankCID).Sealed
|
||||||
|
TokenErinFrankBundle = mustGetBundle(TokenErinFrankCID)
|
||||||
|
TokenErinFrank = mustGetBundle(TokenErinFrankCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_InvalidExpandedCommandCID = cid.MustParse("bafyreifn4sy5onwajx3kqvot5mib6m6xarzrqjozqbzgmzpmc5ox3g2uzm")
|
TokenCarolDan_InvalidExpandedCommandCID = cid.MustParse("bafyreid3m3pk53gqgp5rlzqhvpedbwsqbidqlp4yz64vknwbzj7bxrmsr4")
|
||||||
TokenDanErin_InvalidExpandedCommand = mustGetDelegation(TokenDanErin_InvalidExpandedCommandCID)
|
TokenCarolDan_InvalidExpandedCommandSealed = mustGetBundle(TokenCarolDan_InvalidExpandedCommandCID).Sealed
|
||||||
|
TokenCarolDan_InvalidExpandedCommandBundle = mustGetBundle(TokenCarolDan_InvalidExpandedCommandCID)
|
||||||
|
TokenCarolDan_InvalidExpandedCommand = mustGetBundle(TokenCarolDan_InvalidExpandedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_InvalidExpandedCommandCID = cid.MustParse("bafyreidmpgd36jznmq42bs34o4qi3fcbrsh4idkg6ejahudejzwb76fwxe")
|
TokenDanErin_InvalidExpandedCommandCID = cid.MustParse("bafyreifn4sy5onwajx3kqvot5mib6m6xarzrqjozqbzgmzpmc5ox3g2uzm")
|
||||||
TokenErinFrank_InvalidExpandedCommand = mustGetDelegation(TokenErinFrank_InvalidExpandedCommandCID)
|
TokenDanErin_InvalidExpandedCommandSealed = mustGetBundle(TokenDanErin_InvalidExpandedCommandCID).Sealed
|
||||||
|
TokenDanErin_InvalidExpandedCommandBundle = mustGetBundle(TokenDanErin_InvalidExpandedCommandCID)
|
||||||
|
TokenDanErin_InvalidExpandedCommand = mustGetBundle(TokenDanErin_InvalidExpandedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_ValidAttenuatedCommandCID = cid.MustParse("bafyreiekhtm237vyapk3c6voeb5lnz54crebqdqi3x4wn4u4cbrrhzsqfe")
|
TokenErinFrank_InvalidExpandedCommandCID = cid.MustParse("bafyreidmpgd36jznmq42bs34o4qi3fcbrsh4idkg6ejahudejzwb76fwxe")
|
||||||
TokenCarolDan_ValidAttenuatedCommand = mustGetDelegation(TokenCarolDan_ValidAttenuatedCommandCID)
|
TokenErinFrank_InvalidExpandedCommandSealed = mustGetBundle(TokenErinFrank_InvalidExpandedCommandCID).Sealed
|
||||||
|
TokenErinFrank_InvalidExpandedCommandBundle = mustGetBundle(TokenErinFrank_InvalidExpandedCommandCID)
|
||||||
|
TokenErinFrank_InvalidExpandedCommand = mustGetBundle(TokenErinFrank_InvalidExpandedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_ValidAttenuatedCommandCID = cid.MustParse("bafyreicrvzqferyy7rgo75l5rn6r2nl7zyeexxjmu3dm4ff7rn2coblj4y")
|
TokenCarolDan_ValidAttenuatedCommandCID = cid.MustParse("bafyreiekhtm237vyapk3c6voeb5lnz54crebqdqi3x4wn4u4cbrrhzsqfe")
|
||||||
TokenDanErin_ValidAttenuatedCommand = mustGetDelegation(TokenDanErin_ValidAttenuatedCommandCID)
|
TokenCarolDan_ValidAttenuatedCommandSealed = mustGetBundle(TokenCarolDan_ValidAttenuatedCommandCID).Sealed
|
||||||
|
TokenCarolDan_ValidAttenuatedCommandBundle = mustGetBundle(TokenCarolDan_ValidAttenuatedCommandCID)
|
||||||
|
TokenCarolDan_ValidAttenuatedCommand = mustGetBundle(TokenCarolDan_ValidAttenuatedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_ValidAttenuatedCommandCID = cid.MustParse("bafyreie6fhspk53kplcc2phla3e7z7fzldlbmmpuwk6nbow5q6s2zjmw2q")
|
TokenDanErin_ValidAttenuatedCommandCID = cid.MustParse("bafyreicrvzqferyy7rgo75l5rn6r2nl7zyeexxjmu3dm4ff7rn2coblj4y")
|
||||||
TokenErinFrank_ValidAttenuatedCommand = mustGetDelegation(TokenErinFrank_ValidAttenuatedCommandCID)
|
TokenDanErin_ValidAttenuatedCommandSealed = mustGetBundle(TokenDanErin_ValidAttenuatedCommandCID).Sealed
|
||||||
|
TokenDanErin_ValidAttenuatedCommandBundle = mustGetBundle(TokenDanErin_ValidAttenuatedCommandCID)
|
||||||
|
TokenDanErin_ValidAttenuatedCommand = mustGetBundle(TokenDanErin_ValidAttenuatedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_InvalidSubjectCID = cid.MustParse("bafyreifgksz6756if42tnc6rqsnbaa2u3fdrveo7ek44lnj2d64d5sw26u")
|
TokenErinFrank_ValidAttenuatedCommandCID = cid.MustParse("bafyreie6fhspk53kplcc2phla3e7z7fzldlbmmpuwk6nbow5q6s2zjmw2q")
|
||||||
TokenCarolDan_InvalidSubject = mustGetDelegation(TokenCarolDan_InvalidSubjectCID)
|
TokenErinFrank_ValidAttenuatedCommandSealed = mustGetBundle(TokenErinFrank_ValidAttenuatedCommandCID).Sealed
|
||||||
|
TokenErinFrank_ValidAttenuatedCommandBundle = mustGetBundle(TokenErinFrank_ValidAttenuatedCommandCID)
|
||||||
|
TokenErinFrank_ValidAttenuatedCommand = mustGetBundle(TokenErinFrank_ValidAttenuatedCommandCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_InvalidSubjectCID = cid.MustParse("bafyreibdwew5nypsxrm4fq73wu6hw3lgwwiolj3bi33xdrbgcf3ogm6fty")
|
TokenCarolDan_InvalidSubjectCID = cid.MustParse("bafyreifgksz6756if42tnc6rqsnbaa2u3fdrveo7ek44lnj2d64d5sw26u")
|
||||||
TokenDanErin_InvalidSubject = mustGetDelegation(TokenDanErin_InvalidSubjectCID)
|
TokenCarolDan_InvalidSubjectSealed = mustGetBundle(TokenCarolDan_InvalidSubjectCID).Sealed
|
||||||
|
TokenCarolDan_InvalidSubjectBundle = mustGetBundle(TokenCarolDan_InvalidSubjectCID)
|
||||||
|
TokenCarolDan_InvalidSubject = mustGetBundle(TokenCarolDan_InvalidSubjectCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_InvalidSubjectCID = cid.MustParse("bafyreicr364mj3n7x4iyhcksxypelktcqkkw3ptg7ggxtqegw3p3mr6zc4")
|
TokenDanErin_InvalidSubjectCID = cid.MustParse("bafyreibdwew5nypsxrm4fq73wu6hw3lgwwiolj3bi33xdrbgcf3ogm6fty")
|
||||||
TokenErinFrank_InvalidSubject = mustGetDelegation(TokenErinFrank_InvalidSubjectCID)
|
TokenDanErin_InvalidSubjectSealed = mustGetBundle(TokenDanErin_InvalidSubjectCID).Sealed
|
||||||
|
TokenDanErin_InvalidSubjectBundle = mustGetBundle(TokenDanErin_InvalidSubjectCID)
|
||||||
|
TokenDanErin_InvalidSubject = mustGetBundle(TokenDanErin_InvalidSubjectCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_InvalidExpiredCID = cid.MustParse("bafyreici5ggrh6yyoqfqwfssks4737icit2exxrhhcsljpc6lniz64ejay")
|
TokenErinFrank_InvalidSubjectCID = cid.MustParse("bafyreicr364mj3n7x4iyhcksxypelktcqkkw3ptg7ggxtqegw3p3mr6zc4")
|
||||||
TokenCarolDan_InvalidExpired = mustGetDelegation(TokenCarolDan_InvalidExpiredCID)
|
TokenErinFrank_InvalidSubjectSealed = mustGetBundle(TokenErinFrank_InvalidSubjectCID).Sealed
|
||||||
|
TokenErinFrank_InvalidSubjectBundle = mustGetBundle(TokenErinFrank_InvalidSubjectCID)
|
||||||
|
TokenErinFrank_InvalidSubject = mustGetBundle(TokenErinFrank_InvalidSubjectCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_InvalidExpiredCID = cid.MustParse("bafyreidnkdvkwhuoiwldua4z7mupuoaixktmuihd4h3gqff4nk4lfuoxlq")
|
TokenCarolDan_InvalidExpiredCID = cid.MustParse("bafyreic7cpi2j65je6rwiyxzq233lpbljvl6ggs5ew53nnye3tc3jdltqm")
|
||||||
TokenDanErin_InvalidExpired = mustGetDelegation(TokenDanErin_InvalidExpiredCID)
|
TokenCarolDan_InvalidExpiredSealed = mustGetBundle(TokenCarolDan_InvalidExpiredCID).Sealed
|
||||||
|
TokenCarolDan_InvalidExpiredBundle = mustGetBundle(TokenCarolDan_InvalidExpiredCID)
|
||||||
|
TokenCarolDan_InvalidExpired = mustGetBundle(TokenCarolDan_InvalidExpiredCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_InvalidExpiredCID = cid.MustParse("bafyreighom66dfg3scp26huljbiovkuuv2bh4izdqahccutrilqz46nz3e")
|
TokenDanErin_InvalidExpiredCID = cid.MustParse("bafyreiguafxrlpncpjxxfuled2izocjp5s3kcclkdl4edpd22tr2gfcad4")
|
||||||
TokenErinFrank_InvalidExpired = mustGetDelegation(TokenErinFrank_InvalidExpiredCID)
|
TokenDanErin_InvalidExpiredSealed = mustGetBundle(TokenDanErin_InvalidExpiredCID).Sealed
|
||||||
|
TokenDanErin_InvalidExpiredBundle = mustGetBundle(TokenDanErin_InvalidExpiredCID)
|
||||||
|
TokenDanErin_InvalidExpired = mustGetBundle(TokenDanErin_InvalidExpiredCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_InvalidInactiveCID = cid.MustParse("bafyreicea5y2nvlitvxijkupeavtg23i7ktjk3uejnaquguurzptiabk4u")
|
TokenErinFrank_InvalidExpiredCID = cid.MustParse("bafyreid4blvceraqiz32vca4gwk2hcf7dqtu6ydpmq3xlbj5biiq46mo44")
|
||||||
TokenCarolDan_InvalidInactive = mustGetDelegation(TokenCarolDan_InvalidInactiveCID)
|
TokenErinFrank_InvalidExpiredSealed = mustGetBundle(TokenErinFrank_InvalidExpiredCID).Sealed
|
||||||
|
TokenErinFrank_InvalidExpiredBundle = mustGetBundle(TokenErinFrank_InvalidExpiredCID)
|
||||||
|
TokenErinFrank_InvalidExpired = mustGetBundle(TokenErinFrank_InvalidExpiredCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_InvalidInactiveCID = cid.MustParse("bafyreifsgqzkmxj2vexuts3z766mwcjreiisjg2jykyzf7tbj5sclutpvq")
|
TokenCarolDan_InvalidInactiveCID = cid.MustParse("bafyreicea5y2nvlitvxijkupeavtg23i7ktjk3uejnaquguurzptiabk4u")
|
||||||
TokenDanErin_InvalidInactive = mustGetDelegation(TokenDanErin_InvalidInactiveCID)
|
TokenCarolDan_InvalidInactiveSealed = mustGetBundle(TokenCarolDan_InvalidInactiveCID).Sealed
|
||||||
|
TokenCarolDan_InvalidInactiveBundle = mustGetBundle(TokenCarolDan_InvalidInactiveCID)
|
||||||
|
TokenCarolDan_InvalidInactive = mustGetBundle(TokenCarolDan_InvalidInactiveCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_InvalidInactiveCID = cid.MustParse("bafyreifbfegon24c6dndiqyktahzs65vhyasrygbw7nhsvojn6distsdre")
|
TokenDanErin_InvalidInactiveCID = cid.MustParse("bafyreifsgqzkmxj2vexuts3z766mwcjreiisjg2jykyzf7tbj5sclutpvq")
|
||||||
TokenErinFrank_InvalidInactive = mustGetDelegation(TokenErinFrank_InvalidInactiveCID)
|
TokenDanErin_InvalidInactiveSealed = mustGetBundle(TokenDanErin_InvalidInactiveCID).Sealed
|
||||||
|
TokenDanErin_InvalidInactiveBundle = mustGetBundle(TokenDanErin_InvalidInactiveCID)
|
||||||
|
TokenDanErin_InvalidInactive = mustGetBundle(TokenDanErin_InvalidInactiveCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenCarolDan_ValidExamplePolicyCID = cid.MustParse("bafyreibtfrp2njnkjrcuhxd4ebaecmpcql5knek2h2j2fjzu2sij2tv6ei")
|
TokenErinFrank_InvalidInactiveCID = cid.MustParse("bafyreifbfegon24c6dndiqyktahzs65vhyasrygbw7nhsvojn6distsdre")
|
||||||
TokenCarolDan_ValidExamplePolicy = mustGetDelegation(TokenCarolDan_ValidExamplePolicyCID)
|
TokenErinFrank_InvalidInactiveSealed = mustGetBundle(TokenErinFrank_InvalidInactiveCID).Sealed
|
||||||
|
TokenErinFrank_InvalidInactiveBundle = mustGetBundle(TokenErinFrank_InvalidInactiveCID)
|
||||||
|
TokenErinFrank_InvalidInactive = mustGetBundle(TokenErinFrank_InvalidInactiveCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenDanErin_ValidExamplePolicyCID = cid.MustParse("bafyreidxfwbkzujpu7ivulkc7b6ff4cpbzrkeklmxqvyhhmkmym5b45e2e")
|
TokenCarolDan_ValidExamplePolicyCID = cid.MustParse("bafyreibtfrp2njnkjrcuhxd4ebaecmpcql5knek2h2j2fjzu2sij2tv6ei")
|
||||||
TokenDanErin_ValidExamplePolicy = mustGetDelegation(TokenDanErin_ValidExamplePolicyCID)
|
TokenCarolDan_ValidExamplePolicySealed = mustGetBundle(TokenCarolDan_ValidExamplePolicyCID).Sealed
|
||||||
|
TokenCarolDan_ValidExamplePolicyBundle = mustGetBundle(TokenCarolDan_ValidExamplePolicyCID)
|
||||||
|
TokenCarolDan_ValidExamplePolicy = mustGetBundle(TokenCarolDan_ValidExamplePolicyCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
TokenErinFrank_ValidExamplePolicyCID = cid.MustParse("bafyreiatkvtvgakqcrdk6vgrv7tbq5rbeiqct52ep4plcftp2agffjyvp4")
|
TokenDanErin_ValidExamplePolicyCID = cid.MustParse("bafyreidxfwbkzujpu7ivulkc7b6ff4cpbzrkeklmxqvyhhmkmym5b45e2e")
|
||||||
TokenErinFrank_ValidExamplePolicy = mustGetDelegation(TokenErinFrank_ValidExamplePolicyCID)
|
TokenDanErin_ValidExamplePolicySealed = mustGetBundle(TokenDanErin_ValidExamplePolicyCID).Sealed
|
||||||
|
TokenDanErin_ValidExamplePolicyBundle = mustGetBundle(TokenDanErin_ValidExamplePolicyCID)
|
||||||
|
TokenDanErin_ValidExamplePolicy = mustGetBundle(TokenDanErin_ValidExamplePolicyCID).Decoded
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
TokenErinFrank_ValidExamplePolicyCID = cid.MustParse("bafyreiatkvtvgakqcrdk6vgrv7tbq5rbeiqct52ep4plcftp2agffjyvp4")
|
||||||
|
TokenErinFrank_ValidExamplePolicySealed = mustGetBundle(TokenErinFrank_ValidExamplePolicyCID).Sealed
|
||||||
|
TokenErinFrank_ValidExamplePolicyBundle = mustGetBundle(TokenErinFrank_ValidExamplePolicyCID)
|
||||||
|
TokenErinFrank_ValidExamplePolicy = mustGetBundle(TokenErinFrank_ValidExamplePolicyCID).Decoded
|
||||||
|
)
|
||||||
|
|
||||||
|
var AllTokens = []*delegation.Token{
|
||||||
|
TokenAliceBob,
|
||||||
|
TokenBobCarol,
|
||||||
|
TokenCarolDan,
|
||||||
|
TokenDanErin,
|
||||||
|
TokenErinFrank,
|
||||||
|
TokenCarolDan_InvalidExpandedCommand,
|
||||||
|
TokenDanErin_InvalidExpandedCommand,
|
||||||
|
TokenErinFrank_InvalidExpandedCommand,
|
||||||
|
TokenCarolDan_ValidAttenuatedCommand,
|
||||||
|
TokenDanErin_ValidAttenuatedCommand,
|
||||||
|
TokenErinFrank_ValidAttenuatedCommand,
|
||||||
|
TokenCarolDan_InvalidSubject,
|
||||||
|
TokenDanErin_InvalidSubject,
|
||||||
|
TokenErinFrank_InvalidSubject,
|
||||||
|
TokenCarolDan_InvalidExpired,
|
||||||
|
TokenDanErin_InvalidExpired,
|
||||||
|
TokenErinFrank_InvalidExpired,
|
||||||
|
TokenCarolDan_InvalidInactive,
|
||||||
|
TokenDanErin_InvalidInactive,
|
||||||
|
TokenErinFrank_InvalidInactive,
|
||||||
|
TokenCarolDan_ValidExamplePolicy,
|
||||||
|
TokenDanErin_ValidExamplePolicy,
|
||||||
|
TokenErinFrank_ValidExamplePolicy,
|
||||||
|
}
|
||||||
|
|
||||||
|
var AllBundles = []*delegation.Bundle{
|
||||||
|
TokenAliceBobBundle,
|
||||||
|
TokenBobCarolBundle,
|
||||||
|
TokenCarolDanBundle,
|
||||||
|
TokenDanErinBundle,
|
||||||
|
TokenErinFrankBundle,
|
||||||
|
TokenCarolDan_InvalidExpandedCommandBundle,
|
||||||
|
TokenDanErin_InvalidExpandedCommandBundle,
|
||||||
|
TokenErinFrank_InvalidExpandedCommandBundle,
|
||||||
|
TokenCarolDan_ValidAttenuatedCommandBundle,
|
||||||
|
TokenDanErin_ValidAttenuatedCommandBundle,
|
||||||
|
TokenErinFrank_ValidAttenuatedCommandBundle,
|
||||||
|
TokenCarolDan_InvalidSubjectBundle,
|
||||||
|
TokenDanErin_InvalidSubjectBundle,
|
||||||
|
TokenErinFrank_InvalidSubjectBundle,
|
||||||
|
TokenCarolDan_InvalidExpiredBundle,
|
||||||
|
TokenDanErin_InvalidExpiredBundle,
|
||||||
|
TokenErinFrank_InvalidExpiredBundle,
|
||||||
|
TokenCarolDan_InvalidInactiveBundle,
|
||||||
|
TokenDanErin_InvalidInactiveBundle,
|
||||||
|
TokenErinFrank_InvalidInactiveBundle,
|
||||||
|
TokenCarolDan_ValidExamplePolicyBundle,
|
||||||
|
TokenDanErin_ValidExamplePolicyBundle,
|
||||||
|
TokenErinFrank_ValidExamplePolicyBundle,
|
||||||
|
}
|
||||||
|
|
||||||
|
var cidToName = map[cid.Cid]string{
|
||||||
|
TokenAliceBobCID: "TokenAliceBob",
|
||||||
|
TokenBobCarolCID: "TokenBobCarol",
|
||||||
|
TokenCarolDanCID: "TokenCarolDan",
|
||||||
|
TokenDanErinCID: "TokenDanErin",
|
||||||
|
TokenErinFrankCID: "TokenErinFrank",
|
||||||
|
TokenCarolDan_InvalidExpandedCommandCID: "TokenCarolDan_InvalidExpandedCommand",
|
||||||
|
TokenDanErin_InvalidExpandedCommandCID: "TokenDanErin_InvalidExpandedCommand",
|
||||||
|
TokenErinFrank_InvalidExpandedCommandCID: "TokenErinFrank_InvalidExpandedCommand",
|
||||||
|
TokenCarolDan_ValidAttenuatedCommandCID: "TokenCarolDan_ValidAttenuatedCommand",
|
||||||
|
TokenDanErin_ValidAttenuatedCommandCID: "TokenDanErin_ValidAttenuatedCommand",
|
||||||
|
TokenErinFrank_ValidAttenuatedCommandCID: "TokenErinFrank_ValidAttenuatedCommand",
|
||||||
|
TokenCarolDan_InvalidSubjectCID: "TokenCarolDan_InvalidSubject",
|
||||||
|
TokenDanErin_InvalidSubjectCID: "TokenDanErin_InvalidSubject",
|
||||||
|
TokenErinFrank_InvalidSubjectCID: "TokenErinFrank_InvalidSubject",
|
||||||
|
TokenCarolDan_InvalidExpiredCID: "TokenCarolDan_InvalidExpired",
|
||||||
|
TokenDanErin_InvalidExpiredCID: "TokenDanErin_InvalidExpired",
|
||||||
|
TokenErinFrank_InvalidExpiredCID: "TokenErinFrank_InvalidExpired",
|
||||||
|
TokenCarolDan_InvalidInactiveCID: "TokenCarolDan_InvalidInactive",
|
||||||
|
TokenDanErin_InvalidInactiveCID: "TokenDanErin_InvalidInactive",
|
||||||
|
TokenErinFrank_InvalidInactiveCID: "TokenErinFrank_InvalidInactive",
|
||||||
|
TokenCarolDan_ValidExamplePolicyCID: "TokenCarolDan_ValidExamplePolicy",
|
||||||
|
TokenDanErin_ValidExamplePolicyCID: "TokenDanErin_ValidExamplePolicy",
|
||||||
|
TokenErinFrank_ValidExamplePolicyCID: "TokenErinFrank_ValidExamplePolicy",
|
||||||
|
}
|
||||||
|
|
||||||
var ProofAliceBob = []cid.Cid{
|
var ProofAliceBob = []cid.Cid{
|
||||||
TokenAliceBobCID,
|
TokenAliceBobCID,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,3 +15,10 @@ type Loader interface {
|
|||||||
// If not found, ErrDelegationNotFound is returned.
|
// If not found, ErrDelegationNotFound is returned.
|
||||||
GetDelegation(cid cid.Cid) (*Token, error)
|
GetDelegation(cid cid.Cid) (*Token, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bundle carries together a decoded delegation with its Cid and raw signed data.
|
||||||
|
type Bundle struct {
|
||||||
|
Cid cid.Cid
|
||||||
|
Decoded *Token
|
||||||
|
Sealed []byte
|
||||||
|
}
|
||||||
@@ -41,18 +41,18 @@ const (
|
|||||||
var schemaBytes []byte
|
var schemaBytes []byte
|
||||||
|
|
||||||
var (
|
var (
|
||||||
once sync.Once
|
once sync.Once
|
||||||
ts *schema.TypeSystem
|
ts *schema.TypeSystem
|
||||||
err error
|
errSchema error
|
||||||
)
|
)
|
||||||
|
|
||||||
func mustLoadSchema() *schema.TypeSystem {
|
func mustLoadSchema() *schema.TypeSystem {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
ts, err = ipld.LoadSchemaBytes(schemaBytes)
|
ts, errSchema = ipld.LoadSchemaBytes(schemaBytes)
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if errSchema != nil {
|
||||||
panic(fmt.Errorf("failed to load IPLD schema: %s", err))
|
panic(fmt.Errorf("failed to load IPLD schema: %s", errSchema))
|
||||||
}
|
}
|
||||||
|
|
||||||
return ts
|
return ts
|
||||||
|
|||||||
@@ -277,7 +277,11 @@ func tokenFromModel(m tokenPayloadModel) (*Token, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tkn.proof = m.Prf
|
tkn.proof = m.Prf
|
||||||
|
|
||||||
tkn.meta = m.Meta
|
tkn.meta = m.Meta
|
||||||
|
if tkn.meta == nil {
|
||||||
|
tkn.meta = meta.NewMeta()
|
||||||
|
}
|
||||||
|
|
||||||
tkn.expiration, err = parse.OptionalTimestamp(m.Exp)
|
tkn.expiration, err = parse.OptionalTimestamp(m.Exp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user