(env Envelope)
| 544 | } |
| 545 | |
| 546 | func validateKindEnvelopeRules(env Envelope) error { |
| 547 | body, err := env.DecodeBody() |
| 548 | if err != nil { |
| 549 | return err |
| 550 | } |
| 551 | |
| 552 | switch typed := body.(type) { |
| 553 | case GreetBody: |
| 554 | if typed.PeerCard.PeerID != env.From { |
| 555 | return fmt.Errorf("%w: greet peer_card.peer_id must match from", ErrInvalidBody) |
| 556 | } |
| 557 | if err := validatePeerCardPrivilegedCapabilities(typed.PeerCard, env.Proof); err != nil { |
| 558 | return err |
| 559 | } |
| 560 | case WhoisBody: |
| 561 | if typed.Type == WhoisTypeResponse { |
| 562 | if env.ReplyTo == nil { |
| 563 | return fmt.Errorf("%w: whois response reply_to is required", ErrMissingField) |
| 564 | } |
| 565 | if typed.PeerCard == nil { |
| 566 | return fmt.Errorf("%w: whois response peer_card is required", ErrInvalidBody) |
| 567 | } |
| 568 | if typed.PeerCard.PeerID != env.From { |
| 569 | return fmt.Errorf("%w: whois response peer_card.peer_id must match from", ErrInvalidBody) |
| 570 | } |
| 571 | if err := validatePeerCardPrivilegedCapabilities(*typed.PeerCard, env.Proof); err != nil { |
| 572 | return err |
| 573 | } |
| 574 | } |
| 575 | case ReceiptBody: |
| 576 | if env.WorkID == nil { |
| 577 | return fmt.Errorf("%w: receipt work_id is required", ErrMissingField) |
| 578 | } |
| 579 | case TraceBody: |
| 580 | if env.WorkID == nil { |
| 581 | return fmt.Errorf("%w: trace work_id is required", ErrMissingField) |
| 582 | } |
| 583 | } |
| 584 | |
| 585 | return nil |
| 586 | } |
| 587 | |
| 588 | func validateEnvelopeFreshness(env Envelope, opts ValidateOptions) error { |
| 589 | nowUnix := opts.Now.Unix() |
no test coverage detected