uapi

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2023 License: MIT Imports: 13 Imported by: 23

Documentation

Overview

Defines a standard way to define routes

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CompileValidationErrors

func CompileValidationErrors(payload any) map[string]string

func SetupState

func SetupState(s UAPIState)

Types

type APIRouter

type APIRouter interface {
	Routes(r *chi.Mux)
	Tag() (string, string)
}

A API Router, not to be confused with Router which routes the actual routes

type AuthData

type AuthData struct {
	TargetType string         `json:"target_type"`
	ID         string         `json:"id"`
	Authorized bool           `json:"authorized"`
	Banned     bool           `json:"banned"` // Only applicable with AllowedScope
	Data       map[string]any `json:"data"`   // Additional data
}

type AuthType

type AuthType struct {
	URLVar       string
	Type         string
	AllowedScope string // If this is set, then ban checks are not fatal
}

type HttpResponse

type HttpResponse struct {
	// Data is the data to be sent to the client
	Data string
	// Optional, can be used in place of Data
	Bytes []byte
	// Json body to be sent to the client
	Json any
	// Headers to set
	Headers map[string]string
	// Status is the HTTP status code to send
	Status int
	// Cache the JSON to redis
	CacheKey string
	// Duration to cache the JSON for
	CacheTime time.Duration
	// Redirect to a URL
	Redirect string
}

func DefaultResponse

func DefaultResponse(statusCode int) HttpResponse

Creates a default HTTP response based on the status code 200 is treated as 204 No Content

func MarshalReq

func MarshalReq(r *http.Request, dst any) (resp HttpResponse, ok bool)

func MarshalReqWithHeaders

func MarshalReqWithHeaders(r *http.Request, dst any, headers map[string]string) (resp HttpResponse, ok bool)

func ValidatorErrorResponse

func ValidatorErrorResponse(compiled map[string]string, v validator.ValidationErrors) HttpResponse

type Method

type Method int
const (
	GET Method = iota
	POST
	PATCH
	PUT
	DELETE
	HEAD
)

func (Method) String

func (m Method) String() string

Returns the method as a string

type Route

type Route struct {
	Method       Method
	Pattern      string
	OpId         string
	Handler      func(d RouteData, r *http.Request) HttpResponse
	Setup        func()
	Docs         func() *docs.Doc
	Auth         []AuthType
	AuthOptional bool

	// Disables sanity check that ensures all variables are followed by a /
	//
	// e.g. /{foo}s/
	DisablePathSlashCheck bool
}

Represents a route on the API

func (Route) Route

func (r Route) Route(ro Router)

func (Route) String

func (r Route) String() string

type RouteData

type RouteData struct {
	Context context.Context
	Auth    AuthData
	Props   map[string]string // Stores additional properties
}

type Router

type Router interface {
	Get(pattern string, h http.HandlerFunc)
	Post(pattern string, h http.HandlerFunc)
	Patch(pattern string, h http.HandlerFunc)
	Put(pattern string, h http.HandlerFunc)
	Delete(pattern string, h http.HandlerFunc)
	Head(pattern string, h http.HandlerFunc)
}

type UAPIConstants

type UAPIConstants struct {
	// String returned when the resource could not be found
	ResourceNotFound string

	// String returned when the request is invalid
	BadRequest string

	// String returned when the user is not authorized (403)
	Forbidden string

	// String returned when the user is not authorized (401)
	Unauthorized string

	// String returned when the server encounters an internal error
	InternalServerError string

	// String returned when the method is not allowed
	MethodNotAllowed string

	// String returned when the body is required
	BodyRequired string
}

type UAPIDefaultResponder

type UAPIDefaultResponder interface {
	// Returns the msg with the response type
	New(msg string, ctx map[string]string) any
}

type UAPIInitData

type UAPIInitData struct {
	// The current tag being loaded
	Tag string
}

This struct contains initialization data while loading UAPI (such as the current tag etc.)

type UAPIState

type UAPIState struct {
	Logger              *zap.Logger
	Authorize           func(r Route, req *http.Request) (AuthData, HttpResponse, bool)
	AuthTypeMap         map[string]string // E.g. bot => Bot, user => User etc.
	RouteDataMiddleware func(rd *RouteData, req *http.Request) (*RouteData, error)

	// Used for caching
	//
	// TODO: Make this a interface
	Redis *redis.Client

	// Used in cache algo
	Context context.Context

	// Api constants
	Constants *UAPIConstants

	// UAPI default response type to use for default responses
	//
	// This is used for 404 errors, validation errors, default statuses etc.
	DefaultResponder UAPIDefaultResponder

	// Used to store init data
	InitData UAPIInitData
}

Setup struct

var (
	Json = jsoniter.ConfigFastest

	// Stores the UAPI state for UAPI plugins
	State *UAPIState
)

func (*UAPIState) SetCurrentTag added in v0.2.0

func (s *UAPIState) SetCurrentTag(tag string)

Directories

Path Synopsis
Ratelimits are only used for login and other endpoints that can be heavily abused
Ratelimits are only used for login and other endpoints that can be heavily abused

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL