Documentation ¶
Index ¶
- Constants
- Variables
- func WithAlarmer(ala Alarmer) func(*Option)
- func WithDefaultLogOption(lo LogOption) func(*Option)
- func WithJsonMasker(jm JsonMasker) func(*Option)
- func WithLogger(log *zerolog.Logger) func(*WsOption)
- func WithMetricReporter(mr MetricReporter) func(*Option)
- func WithRequestID() func(*Option)
- func WithStaticLoggingLevel() func(*Option)
- func WithTokenDecoder(td TokenDecoder) func(*WsOption)
- func WithUrlPrefix(s string) func(*Option)
- func WithVerboseError(b bool) func(*Option)
- func WithWebsocketSupport(wv *WebsocketVatel) func(*Option)
- type AccessTokenUpdateHandler
- type Alarmer
- type AuthMessageData
- type Authorizer
- type Context
- type Dater
- type Endpoint
- type Endpointer
- type Handler
- type Inputer
- type JsonMasker
- type LogOption
- type Logger
- type MetricReporter
- type MiddlewarePos
- type Option
- type Paramer
- type PermissionManager
- type RequestDebugger
- type Resulter
- type RevokeTokenChecker
- type TokenDecoder
- type TokenPayloader
- type Tokener
- type Vatel
- func (v *Vatel) Add(e ...Endpointer)
- func (v *Vatel) AddMiddleware(pos MiddlewarePos, f ...func(Context) error)
- func (v *Vatel) BuildHandlers(mux *router.Router, l *zerolog.Logger) error
- func (v *Vatel) DisableAuthorizer()
- func (v *Vatel) Endpoints() []Endpoint
- func (v *Vatel) MustBuildHandlers(mux *router.Router, l *zerolog.Logger)
- func (v *Vatel) SetAuthorizer(a Authorizer)
- func (v *Vatel) SetPermissionManager(pm PermissionManager)
- func (v *Vatel) SetRequestDebugger(rd RequestDebugger)
- func (v *Vatel) SetRevokeTokenChecker(rtc RevokeTokenChecker)
- func (v *Vatel) SetTokenDecoder(tp TokenDecoder)
- type VatelContext
- func (ctx *VatelContext) BodyWriter() io.Writer
- func (ctx *VatelContext) FormFile(key string) (*multipart.FileHeader, error)
- func (ctx *VatelContext) FormValue(key string) []byte
- func (ctx *VatelContext) Get(key string) interface{}
- func (ctx *VatelContext) Header(name string) []byte
- func (ctx *VatelContext) Log(key string, val interface{}) Context
- func (ctx *VatelContext) LogValues() map[string]interface{}
- func (ctx *VatelContext) RequestCtx() *fasthttp.RequestCtx
- func (ctx *VatelContext) SaveMultipartFile(fh *multipart.FileHeader, path string) error
- func (ctx *VatelContext) Set(key string, val interface{}) Context
- func (ctx *VatelContext) SetContentType(contentType []byte) Context
- func (ctx *VatelContext) SetHeader(name, val []byte) Context
- func (ctx *VatelContext) SetStatusCode(code int) Context
- func (ctx *VatelContext) SetTokenPayload(tp TokenPayloader)
- func (ctx *VatelContext) TokenPayload() TokenPayloader
- func (ctx *VatelContext) VisitUserValues(f func(key []byte, v interface{}))
- type WebsocketContext
- type WebsocketHandler
- type WebsocketRequest
- type WebsocketVatel
- func (wv *WebsocketVatel) Endpoints() []Endpoint
- func (ww *WebsocketVatel) OnClose(f func(*websocket.Conn, error))
- func (ww *WebsocketVatel) OnOpen(f func(*websocket.Conn))
- func (ww *WebsocketVatel) RegisterEndpoint(v *Vatel, e *Endpoint, l *zerolog.Logger) error
- func (wv *WebsocketVatel) UpdateAccessToken(cid uint64, token string) error
- func (ww *WebsocketVatel) Upgrade(ctx *fasthttp.RequestCtx)
- func (ww *WebsocketVatel) UpgradeWithID(ctx *fasthttp.RequestCtx, id uint64)
- type WsContext
- func (ctx *WsContext) BodyWriter() io.Writer
- func (ctx *WsContext) Created() time.Time
- func (ctx *WsContext) Get(key string) interface{}
- func (ctx *WsContext) ID() uint64
- func (ctx *WsContext) Set(key string, val interface{}) WebsocketContext
- func (ctx *WsContext) SetTokenPayload(tp TokenPayloader)
- func (ctx *WsContext) TokenPayload() TokenPayloader
- func (ctx *WsContext) VisitValues(f func(key []byte, v interface{}))
- type WsOption
Constants ¶
const ( LogUnknown LogOption = 0 LogFull = LogEnter | LogExit | LogReqBody | LogReqInput | LogRespBody LogFullOnExit = LogExit | LogReqBody | LogReqInput | LogRespBody LogConfidential = LogExit )
Variables ¶
var ( ErrAuthorizationHeaderMissed = errors.New("header Authorization missed").Code("VTL-0001").StatusCode(401).Critical() ErrAccessTokenRevoked = errors.New("access token revoked").Code("VTL-0002").StatusCode(401).Critical() )
Functions ¶
func WithAlarmer ¶ added in v0.10.0
func WithDefaultLogOption ¶ added in v0.7.0
func WithJsonMasker ¶ added in v0.10.0
func WithJsonMasker(jm JsonMasker) func(*Option)
func WithLogger ¶ added in v0.13.2
func WithMetricReporter ¶ added in v0.11.0
func WithMetricReporter(mr MetricReporter) func(*Option)
func WithRequestID ¶ added in v0.8.0
func WithRequestID() func(*Option)
func WithStaticLoggingLevel ¶ added in v0.7.0
func WithStaticLoggingLevel() func(*Option)
func WithTokenDecoder ¶ added in v0.13.5
func WithTokenDecoder(td TokenDecoder) func(*WsOption)
func WithUrlPrefix ¶ added in v0.7.0
func WithVerboseError ¶ added in v0.7.2
WithVerboseError sets verbose mode for error response to the client.
func WithWebsocketSupport ¶ added in v0.13.5
func WithWebsocketSupport(wv *WebsocketVatel) func(*Option)
Types ¶
type AccessTokenUpdateHandler ¶ added in v0.13.5
type AccessTokenUpdateHandler struct {
// contains filtered or unexported fields
}
func (*AccessTokenUpdateHandler) Handle ¶ added in v0.13.5
func (c *AccessTokenUpdateHandler) Handle(ctx WebsocketContext) error
Handle implements github.com/axkit/vatel Handler interface. The handler has no logic because if access token is invalid, middleware would not pass it to the handler.
func (*AccessTokenUpdateHandler) Input ¶ added in v0.13.5
func (c *AccessTokenUpdateHandler) Input() interface{}
func (*AccessTokenUpdateHandler) Result ¶ added in v0.13.5
func (c *AccessTokenUpdateHandler) Result() interface{}
type Alarmer ¶ added in v0.10.0
type Alarmer interface {
Alarm(err error)
}
Alarmer is the interface that wraps a single method Alarm.
type AuthMessageData ¶ added in v0.13.0
type AuthMessageData struct {
AccessToken string `json:"accessToken"`
}
type Authorizer ¶
Authorizer is the interface that wraps IsAllowed method.
Authorizer accepts request permissions and permissions required by endpoint. Returns true if all endpointPerms are inside requestPerms.
type Context ¶
type Context interface { BodyWriter() io.Writer SetContentType([]byte) Context SetStatusCode(code int) Context FormFile(key string) (*multipart.FileHeader, error) FormValue(key string) []byte SaveMultipartFile(fh *multipart.FileHeader, path string) error Header(name string) []byte TokenPayload() TokenPayloader SetTokenPayload(tp TokenPayloader) SetHeader(name, val []byte) Context RequestCtx() *fasthttp.RequestCtx Set(key string, val interface{}) Context Get(key string) interface{} VisitUserValues(func(key []byte, val interface{})) }
func NewContext ¶
func NewContext(ctx *fasthttp.RequestCtx) Context
type Endpoint ¶
type Endpoint struct { LogOptions LogOption // Method holds HTTP method name (e.g GET, POST, PUT, DELETE, WS). Method string // Wraps response by gzip compression function. Compress bool // Path holds url path with fasthttp parameters (e.g. /customers/{id}). Path string // Perms holds list of permissions. Nil if endpoint is public. Perms []string // Controller holds reference to the object implementing interface Handler. Controller func() Handler WebsocketController func() WebsocketHandler // ResponseContentType by default has "application/json; charset: utf-8;" ResponseContentType string // NoInputLog defines debug logging rule for request data. If true, endpoint request body // will not be written to the log. (i.e authentication endpoint). NoInputLog bool // NoResultLog defines debug logging rule for response data. If true, endpoint response body // will not be written to the log. (i.e authentication endpoint) NoResultLog bool ManualStatusCode bool // SuccessStatusCode int LanguageLabel string // contains filtered or unexported fields }
Endpoint describes a REST endpoint attributes and related request Handler.
type Endpointer ¶
type Endpointer interface {
Endpoints() []Endpoint
}
Endpointer is the interface that wraps a single Endpoints method.
Endpoints returns []Endpoints to be handled by API gateway.
type Handler ¶
Handler is the interface what wraps Handle method.
Handle invocates by API gateway mux.
type Inputer ¶
type Inputer interface {
Input() interface{}
}
Inputer is the interface what wraps Input method.
Input returns reference to the object what will be promoted with input data by vatel.
If endpoint's handler expects input data, Input method should be implemented.
GET, DELETE methods: input values will be taken from URL query. POST, PUT, PATCH methods: input values will be taken from JSON body.
type JsonMasker ¶ added in v0.10.0
type JsonMasker interface { Fields(structure interface{}, tag string) jsonmask.Fields Mask(src []byte, fields jsonmask.Fields) ([]byte, error) }
JsonMasker is the interface that wraps Mask and Fields methods.
Fields returns meta data of the struct which is receiver of coming JSON data. The metadata is used further in the method Mask.
Mask modifies JSON using rules specified for each field structure. Returns JSON with masked sensitive values.
type MetricReporter ¶ added in v0.11.0
type MetricReporter interface {
ReportMetric(method, path string, statusCode int, dur float64, size int)
}
MetricReporter is the interface what wraps a single method ReportMetric.
HTTP requests handler uses MetricReporter to submit processing metrics to prometheus.
type MiddlewarePos ¶ added in v0.8.0
type MiddlewarePos int
const ( BeforeAuthorization MiddlewarePos = iota AfterAuthorization OnSuccessResponse OnErrorResponse )
type Paramer ¶
type Paramer interface {
Param() interface{}
}
Paramer is the interface what wraps a single Param method.
Param returns reference to the struct what will be promoted with values from URL.
Example: if we have /customer/{id}/bill/{billnum} then Param() should return reference to struct
{ CustomerID int `param:"id" BillNum string `param:"billnum"` }
If there is URL params and variables like /customer/{id}?sortBy=name&balanceAbove=100 methods Param and Input can return reference to the same struct.
type PermissionManager ¶
PermissionManager ...
type RequestDebugger ¶
type RequestDebugger interface {
IsDebugRequired(TokenPayloader) (in, out bool)
}
type Resulter ¶
type Resulter interface {
Result() interface{}
}
Resulter is the interface what wraps a single Result method.
Result returns reference to the object what will be send to the client when endpoint handler completes successfully.
If endpoint's controller have outgoing data, Result method should be implemented.
type RevokeTokenChecker ¶ added in v0.3.0
RevokeTokenChecker is the interface what wraps a single method IsTokenRevoked.
IsTokenRevoked returns true if access token was revoked.
type TokenDecoder ¶
TokenDecoder is the interface what wraps a single method Decode.
TokenDecoder decodes token and returns object Tokener.
type TokenPayloader ¶
type TokenPayloader interface { User() int Login() string Role() int Perms() []byte Extra() interface{} Debug() bool }
TokenPayloader is the interface that wraps access methods to JWT payload parts.
User returns value of user attribute from the token.
Perms returns bitset array with user role's permissions.
type Tokener ¶
type Tokener interface { SystemPayload() map[string]interface{} ApplicationPayload() TokenPayloader }
Tokener is the interface that wraps methods SystemPayload and UserPayload.
SystemPayload returns JWT part related to JWT itself.
UserPayload returns an object that represents JWT payload specified by user.
type Vatel ¶
type Vatel struct {
// contains filtered or unexported fields
}
Vatel holds
func (*Vatel) Add ¶
func (v *Vatel) Add(e ...Endpointer)
Add add endpoints to the list.
The method does not check Endpoint for correctness and uniqueness here. Paths validation implemented by method BuildHandlers.
func (*Vatel) AddMiddleware ¶ added in v0.3.0
func (v *Vatel) AddMiddleware(pos MiddlewarePos, f ...func(Context) error)
AddMiddleware adds middleware to be called for every requests in the order of adding.
func (*Vatel) BuildHandlers ¶
BuildHandlers initializes http mux with rules by converting []Endpoint added before. Returns errors instead of panic.
func (*Vatel) DisableAuthorizer ¶
func (v *Vatel) DisableAuthorizer()
func (*Vatel) Endpoints ¶
Endpoints returns all registered endpoints. Vatel itself has only one endpoint GET /, which returns the list of all registered endpoints.
func (*Vatel) MustBuildHandlers ¶
MustBuildHandlers initializes http mux with rules by converting []Endpoint added before. Panics if:
- there are Perms but SetAuthorizer or SetTokenDecoder were not called. -
func (*Vatel) SetAuthorizer ¶
func (v *Vatel) SetAuthorizer(a Authorizer)
SetAuthorizer assigns authorization implementation. If Authorizer is not assigned, all Endpoint's Perms will be ignored.
func (*Vatel) SetPermissionManager ¶
func (v *Vatel) SetPermissionManager(pm PermissionManager)
SetPermissionManager assigns implementation of permission manager.
func (*Vatel) SetRequestDebugger ¶
func (v *Vatel) SetRequestDebugger(rd RequestDebugger)
SetRequestDebugger assigns request debugger implementation.
func (*Vatel) SetRevokeTokenChecker ¶ added in v0.6.0
func (v *Vatel) SetRevokeTokenChecker(rtc RevokeTokenChecker)
SetRevokeTokenChecker assigns implementation of access token validation in the storage of revoked access tokens.
func (*Vatel) SetTokenDecoder ¶
func (v *Vatel) SetTokenDecoder(tp TokenDecoder)
SetTokenDecoder assigns session token decoder.
type VatelContext ¶
type VatelContext struct {
// contains filtered or unexported fields
}
func (*VatelContext) BodyWriter ¶
func (ctx *VatelContext) BodyWriter() io.Writer
func (*VatelContext) FormFile ¶
func (ctx *VatelContext) FormFile(key string) (*multipart.FileHeader, error)
func (*VatelContext) FormValue ¶
func (ctx *VatelContext) FormValue(key string) []byte
func (*VatelContext) Get ¶ added in v0.7.0
func (ctx *VatelContext) Get(key string) interface{}
func (*VatelContext) Header ¶
func (ctx *VatelContext) Header(name string) []byte
func (*VatelContext) Log ¶
func (ctx *VatelContext) Log(key string, val interface{}) Context
func (*VatelContext) LogValues ¶
func (ctx *VatelContext) LogValues() map[string]interface{}
func (*VatelContext) RequestCtx ¶ added in v0.1.0
func (ctx *VatelContext) RequestCtx() *fasthttp.RequestCtx
RequestCtx returns fasthttp's context.
func (*VatelContext) SaveMultipartFile ¶
func (ctx *VatelContext) SaveMultipartFile(fh *multipart.FileHeader, path string) error
func (*VatelContext) Set ¶ added in v0.7.0
func (ctx *VatelContext) Set(key string, val interface{}) Context
func (*VatelContext) SetContentType ¶
func (ctx *VatelContext) SetContentType(contentType []byte) Context
func (*VatelContext) SetHeader ¶
func (ctx *VatelContext) SetHeader(name, val []byte) Context
func (*VatelContext) SetStatusCode ¶
func (ctx *VatelContext) SetStatusCode(code int) Context
SetStatusCode sets HTTP status code.
func (*VatelContext) SetTokenPayload ¶
func (ctx *VatelContext) SetTokenPayload(tp TokenPayloader)
func (*VatelContext) TokenPayload ¶
func (ctx *VatelContext) TokenPayload() TokenPayloader
func (*VatelContext) VisitUserValues ¶ added in v0.7.0
func (ctx *VatelContext) VisitUserValues(f func(key []byte, v interface{}))
type WebsocketContext ¶ added in v0.13.0
type WebsocketContext interface { BodyWriter() io.Writer TokenPayload() TokenPayloader SetTokenPayload(tp TokenPayloader) Set(key string, val interface{}) WebsocketContext Get(key string) interface{} VisitValues(func(key []byte, val interface{})) Created() time.Time ID() uint64 }
func NewWsContext ¶ added in v0.13.0
func NewWsContext(c *websocket.Conn) WebsocketContext
type WebsocketHandler ¶ added in v0.13.0
type WebsocketHandler interface {
Handle(WebsocketContext) error
}
WebsocketHandler is the interface what wraps Handle method.
Handle invocates by websocket message processing func.
type WebsocketRequest ¶ added in v0.13.5
type WebsocketRequest struct { Path string `json:"path"` Data json.RawMessage `json:"data,omitempty"` }
type WebsocketVatel ¶ added in v0.13.5
type WebsocketVatel struct {
// contains filtered or unexported fields
}
func NewWebsocketVatel ¶ added in v0.13.5
func NewWebsocketVatel(optFunc ...func(*WsOption)) *WebsocketVatel
func (*WebsocketVatel) Endpoints ¶ added in v0.13.5
func (wv *WebsocketVatel) Endpoints() []Endpoint
func (*WebsocketVatel) OnClose ¶ added in v0.13.5
func (ww *WebsocketVatel) OnClose(f func(*websocket.Conn, error))
func (*WebsocketVatel) OnOpen ¶ added in v0.13.5
func (ww *WebsocketVatel) OnOpen(f func(*websocket.Conn))
OnOpen invocates by websocket server when new connection established.
func (*WebsocketVatel) RegisterEndpoint ¶ added in v0.13.5
RegisterEndpoint is invocated by Vatel.MustBuildHandler() for every endpoint having method "WS".
func (*WebsocketVatel) UpdateAccessToken ¶ added in v0.13.5
func (wv *WebsocketVatel) UpdateAccessToken(cid uint64, token string) error
func (*WebsocketVatel) Upgrade ¶ added in v0.13.5
func (ww *WebsocketVatel) Upgrade(ctx *fasthttp.RequestCtx)
func (*WebsocketVatel) UpgradeWithID ¶ added in v0.13.5
func (ww *WebsocketVatel) UpgradeWithID(ctx *fasthttp.RequestCtx, id uint64)
type WsContext ¶ added in v0.13.0
type WsContext struct {
// contains filtered or unexported fields
}
func (*WsContext) BodyWriter ¶ added in v0.13.0
func (*WsContext) Set ¶ added in v0.13.0
func (ctx *WsContext) Set(key string, val interface{}) WebsocketContext
func (*WsContext) SetTokenPayload ¶ added in v0.13.0
func (ctx *WsContext) SetTokenPayload(tp TokenPayloader)
func (*WsContext) TokenPayload ¶ added in v0.13.0
func (ctx *WsContext) TokenPayload() TokenPayloader