wormhole-explorer/api/middleware/extract_parameters.go

68 lines
1.6 KiB
Go
Raw Normal View History

package middleware
import (
"errors"
"strconv"
"github.com/certusone/wormhole/node/pkg/vaa"
"github.com/gofiber/fiber/v2"
)
var (
ErrMalformedChain = errors.New("WRONG_CHAIN_ID")
ErrMalformedAddr = errors.New("MALFORMED_EMITTER_ADDR")
ErrMalformedSequence = errors.New("MALFORMED_SEQUENCE_NUMBER")
ErrMalFormedGuardianAddress = errors.New("MALFORMED_GUARDIAN_ADDR")
)
func ExtractChainID(c *fiber.Ctx) (vaa.ChainID, error) {
chain, err := c.ParamsInt("chain")
if err != nil {
return vaa.ChainIDUnset, ErrMalformedChain
}
return vaa.ChainID(chain), nil
}
func ExtractEmitterAddr(c *fiber.Ctx) (*vaa.Address, error) {
emitterStr := c.Params("emitter")
emitter, err := vaa.StringToAddress(emitterStr)
if err != nil {
return nil, ErrMalformedAddr
}
return &emitter, nil
}
func ExtractSequence(c *fiber.Ctx) (uint64, error) {
sequence := c.Params("sequence")
seq, err := strconv.ParseUint(sequence, 10, 64)
if err != nil {
return 0, err
}
return seq, nil
}
func ExtractGuardianAddress(c *fiber.Ctx) (string, error) {
//TODO: check guardianAddress [vaa.StringToAddress(emitterStr)]
guardianAddress := c.Params("guardian_address")
if guardianAddress == "" {
return "", ErrMalFormedGuardianAddress
}
return guardianAddress, nil
}
func ExtractVAAParams(c *fiber.Ctx) (vaa.ChainID, *vaa.Address, uint64, error) {
chainID, err := ExtractChainID(c)
if err != nil {
return vaa.ChainIDUnset, nil, 0, err
}
address, err := ExtractEmitterAddr(c)
if err != nil {
return chainID, nil, 0, err
}
seq, err := ExtractSequence(c)
if err != nil {
return chainID, address, 0, err
}
return chainID, address, seq, nil
}