fix(delegation): finish (haha) validation for tokens coming off the wire and for newly constructed tokens
This commit is contained in:
@@ -204,37 +204,39 @@ func WithSubject(sub did.DID) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// viewFromModel build a decoded view of the raw IPLD data.
|
// tokenFromModel build a decoded view of the raw IPLD data.
|
||||||
// This function also serves as validation.
|
// This function also serves as validation.
|
||||||
func viewFromModel(m tokenPayloadModel) (*Token, error) {
|
func tokenFromModel(m tokenPayloadModel) (*Token, error) {
|
||||||
var view Token
|
var (
|
||||||
var err error
|
tkn Token
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
view.issuer, err = did.Parse(m.Iss)
|
tkn.issuer, err = did.Parse(m.Iss)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse iss: %w", err)
|
return nil, fmt.Errorf("parse iss: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.audience, err = did.Parse(m.Aud)
|
tkn.audience, err = did.Parse(m.Aud)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse audience: %w", err)
|
return nil, fmt.Errorf("parse audience: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Sub != nil {
|
if m.Sub != nil {
|
||||||
view.subject, err = did.Parse(*m.Sub)
|
tkn.subject, err = did.Parse(*m.Sub)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse subject: %w", err)
|
return nil, fmt.Errorf("parse subject: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
view.subject = did.Undef
|
tkn.subject = did.Undef
|
||||||
}
|
}
|
||||||
|
|
||||||
view.command, err = command.Parse(m.Cmd)
|
tkn.command, err = command.Parse(m.Cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse command: %w", err)
|
return nil, fmt.Errorf("parse command: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.policy, err = policy.FromIPLD(m.Pol)
|
tkn.policy, err = policy.FromIPLD(m.Pol)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse policy: %w", err)
|
return nil, fmt.Errorf("parse policy: %w", err)
|
||||||
}
|
}
|
||||||
@@ -242,20 +244,24 @@ func viewFromModel(m tokenPayloadModel) (*Token, error) {
|
|||||||
if len(m.Nonce) == 0 {
|
if len(m.Nonce) == 0 {
|
||||||
return nil, fmt.Errorf("nonce is required")
|
return nil, fmt.Errorf("nonce is required")
|
||||||
}
|
}
|
||||||
view.nonce = m.Nonce
|
tkn.nonce = m.Nonce
|
||||||
|
|
||||||
// TODO: copy?
|
// TODO: copy?
|
||||||
view.meta = m.Meta.Values
|
tkn.meta = m.Meta.Values
|
||||||
|
|
||||||
if m.Nbf != nil {
|
if m.Nbf != nil {
|
||||||
t := time.Unix(*m.Nbf, 0)
|
t := time.Unix(*m.Nbf, 0)
|
||||||
view.notBefore = &t
|
tkn.notBefore = &t
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Exp != nil {
|
if m.Exp != nil {
|
||||||
t := time.Unix(*m.Exp, 0)
|
t := time.Unix(*m.Exp, 0)
|
||||||
view.expiration = &t
|
tkn.expiration = &t
|
||||||
}
|
}
|
||||||
|
|
||||||
return &view, nil
|
if err := tkn.validate(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &tkn, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user