Documentation
¶
Index ¶
- Constants
- Variables
- func AuthMiddleware() echo.MiddlewareFunc
- func AuthorizeRefreshToken(cfg AuthorizeRefreshTokenConfig) (user hexa.User, err error)
- func CSRFSkipperByAuthTokenLocation(ctx echo.Context) bool
- func CorrelationID() echo.MiddlewareFunc
- func CorrelationIDWithConfig(config CorrelationIDConfig) echo.MiddlewareFunc
- func CurrentUser(uf UserFinderBySub) echo.MiddlewareFunc
- func CurrentUserBySub(uf UserFinderBySub) echo.MiddlewareFunc
- func CurrentUserBySubWithConfig(cfg CurrentUserBySubConfig) echo.MiddlewareFunc
- func CurrentUserWithConfig(cfg CurrentUserConfig) echo.MiddlewareFunc
- func CurrentUserWithoutFetch() echo.MiddlewareFunc
- func DebugMiddleware(e *echo.Echo) echo.MiddlewareFunc
- func ExtractAuthToken(extractors ...TokenExtractor) echo.MiddlewareFunc
- func ExtractTokenWithConfig(cfg ExtractTokenConfig) echo.MiddlewareFunc
- func GenerateToken(u hexa.User, cfg GenerateTokenConfig) (token string, err error)
- func GuestMiddleware() echo.MiddlewareFunc
- func HTTPErrorHandler(l hlog.Logger, t hexa.Translator, debug bool) echo.HTTPErrorHandler
- func HexaContext(logger hlog.Logger, translator hexa.Translator) echo.MiddlewareFunc
- func HexaToEchoLogger(logger hlog.Logger, level string) echo.Logger
- func IDAsSubjectGenerator(user hexa.User) (string, error)
- func IPKeyExtractor(c echo.Context) (string, error)
- func JwtClaimAuthorizer(cfg JwtClaimAuthorizerConfig) echo.MiddlewareFunc
- func JwtErrorHandler(err error) error
- func LimitBodySize(n int64) echo.MiddlewareFunc
- func Metrics(cfg MetricsConfig) echo.MiddlewareFunc
- func NewRenderer(pattern string) echo.Renderer
- func NewSingleHostReverseProxyRewriteHost(target *url.URL) *httputil.ReverseProxy
- func Proxy(balancer ProxyBalancer) echo.MiddlewareFunc
- func ProxyWithConfig(config ProxyConfig) echo.MiddlewareFunc
- func RateLimiter(cfg RateLimiterConfig) echo.MiddlewareFunc
- func RateLimiterByIP(rl limiter.Store) echo.MiddlewareFunc
- func Recover() echo.MiddlewareFunc
- func RecoverWithConfig(skipper middleware.Skipper) echo.MiddlewareFunc
- func RequestID() echo.MiddlewareFunc
- func RequestIDWithConfig(config RequestIDConfig) echo.MiddlewareFunc
- func ResourceAPI(group *echo.Group, resource any, prefix string, m ...echo.MiddlewareFunc)
- func SetContextLogger(level string) echo.MiddlewareFunc
- func SkipIfNotProvidedHeader(header string) middleware.Skipper
- func Tracing(cfg TracingConfig) echo.MiddlewareFunc
- func TracingDataFromUserContext() echo.MiddlewareFunc
- func UserGateMiddleware(cfg GateMiddlewareConfig) echo.MiddlewareFunc
- func Write(c echo.Context, reply hexa.Reply) error
- func WriteWithOpts(c echo.Context, l hlog.Logger, t hexa.Translator, reply hexa.Reply) error
- type AuthorizeRefreshTokenConfig
- type CorrelationIDConfig
- type CreateResource
- type CurrentUserBySubConfig
- type CurrentUserConfig
- type DeleteResource
- type EchoService
- func (s *EchoService) HealthIdentifier() string
- func (s *EchoService) HealthStatus(ctx context.Context) hexa.HealthStatus
- func (s *EchoService) LivenessStatus(ctx context.Context) hexa.LivenessStatus
- func (s *EchoService) ReadinessStatus(ctx context.Context) hexa.ReadinessStatus
- func (s *EchoService) Run() error
- func (s *EchoService) Shutdown(ctx context.Context) error
- type ExtractTokenConfig
- type GateMiddlewareConfig
- type GenerateTokenConfig
- type GetResource
- type JwtClaimAuthorizerConfig
- type KeyExtractor
- type MetricsConfig
- type PatchResource
- type ProxyBalancer
- type ProxyConfig
- type ProxyTarget
- type QueryResource
- type RateLimiterConfig
- type RequestIDConfig
- type SubGenerator
- type Template
- type TokenAuthorizer
- type TokenExtractor
- type TokenLocation
- type TracingConfig
- type UpdateResource
- type UserFinderBySub
Constants ¶
const ( // ContextKeyHexaRequestID uses as key in context to store request id to use in context middleware ContextKeyHexaRequestID = "_hexa_ctx.rid" // ContextKeyHexaCorrelationID uses as key in context to store correlation id to use in context middleware ContextKeyHexaCorrelationID = "_hexa_ctx.cid" // ContextKeyHexaUser is the identifier to set the hexa user as a field in the context of a request. ContextKeyHexaUser = "_hexa_ctx.user" )
const ( AlgorithmHS256 = "HS256" AlgorithmHS384 = "HS384" AlgorithmHS512 = "HS512" AlgorithmRS256 = "RS256" AlgorithmRS384 = "RS384" AlgorithmRS512 = "RS512" AlgorithmES256 = "ES256" AlgorithmES384 = "ES384" AlgorithmES512 = "ES512" )
Cryptography algorithms to sign our jwt token
const ( TokenLocationUnknown = iota TokenLocationHeader TokenLocationCookie TokenLocationSession )
const AuthTokenContextKey = "auth_token"
const AuthTokenLocationContextKey = "auth_token_location"
const JwtContextKey = "jwt"
const TokenCookieFieldAuthToken = "hexa_auth_token"
const TokenHeaderAuthorization = "Authorization"
const TokenSessionFieldToken = "token"
Variables ¶
var ( // HeaderCorrelationID is the http X-Correlation-ID header name. HeaderCorrelationID = "X-Correlation-ID" // DefaultCorrelationIDConfig is the default CorrelationID middleware config. DefaultCorrelationIDConfig = CorrelationIDConfig{ Skipper: middleware.DefaultSkipper, Generator: uuidGenerator, } )
var ( // CurrentUserContextKey is the context key to set // the current user in the request context. CurrentUserContextKey = "user" SubContextKey = "sub" )
var ( // DefaultProxyConfig is the default Proxy middleware config. DefaultProxyConfig = ProxyConfig{ Skipper: middleware.DefaultSkipper, ContextKey: "target", } )
var DefaultRequestIDConfig = RequestIDConfig{ Skipper: middleware.DefaultSkipper, Generator: uuidGenerator, }
DefaultRequestIDConfig is the default RequestID middleware config.
var ErrTooManyRequests = hexa.NewError(http.StatusTooManyRequests, "lib.http.too_many_requests_error")
Functions ¶
func AuthMiddleware ¶
func AuthMiddleware() echo.MiddlewareFunc
AuthMiddleware is a middleware that force user to authenticate to access to specific API. AuthMiddleware should be after the HexaContext middleware.
func AuthorizeRefreshToken ¶
func AuthorizeRefreshToken(cfg AuthorizeRefreshTokenConfig) (user hexa.User, err error)
AuthorizeRefreshToken authorize provided jwt token. it first fetch the user from token, and then provide user and claim to the authorizer.
func CSRFSkipperByAuthTokenLocation ¶
func CSRFSkipperByAuthTokenLocation(ctx echo.Context) bool
CSRFSkipperByAuthTokenLocation skips if request doesn't need to csrf check. We do csrf check when user's token is in the cookie or session. and the request method is post too.
func CorrelationID ¶
func CorrelationID() echo.MiddlewareFunc
CorrelationID returns a X-Request-ID middleware.
func CorrelationIDWithConfig ¶
func CorrelationIDWithConfig(config CorrelationIDConfig) echo.MiddlewareFunc
CorrelationIDWithConfig returns a X-Correlation-ID middleware with config.
func CurrentUser ¶
func CurrentUser(uf UserFinderBySub) echo.MiddlewareFunc
CurrentUser is a middleware to set the user in the context. If provided jwt, so this function find user and set it as user otherwise set guest user.
func CurrentUserBySub ¶
func CurrentUserBySub(uf UserFinderBySub) echo.MiddlewareFunc
func CurrentUserBySubWithConfig ¶
func CurrentUserBySubWithConfig(cfg CurrentUserBySubConfig) echo.MiddlewareFunc
func CurrentUserWithConfig ¶
func CurrentUserWithConfig(cfg CurrentUserConfig) echo.MiddlewareFunc
CurrentUser is a middleware to set the user in the context. If provided jwt, so this function find user and set it as user otherwise set guest user.
func CurrentUserWithoutFetch ¶
func CurrentUserWithoutFetch() echo.MiddlewareFunc
CurrentUserWithoutFetch is for when you have a gateway that find the user and include it in the jwt. so you will dont need to any user finder.
func DebugMiddleware ¶
func DebugMiddleware(e *echo.Echo) echo.MiddlewareFunc
DebugMiddleware make a route available just in debug mode.
func ExtractAuthToken ¶
func ExtractAuthToken(extractors ...TokenExtractor) echo.MiddlewareFunc
ExtractAuthToken extracts the authentication token. If you want to ignore session, set nil store and empty session name.
func ExtractTokenWithConfig ¶
func ExtractTokenWithConfig(cfg ExtractTokenConfig) echo.MiddlewareFunc
ExtractTokenWithConfig extracts the authentication token from the cookie or Authorization header.
func GenerateToken ¶
func GenerateToken(u hexa.User, cfg GenerateTokenConfig) (token string, err error)
GenerateToken generate new token for the user.
func GuestMiddleware ¶
func GuestMiddleware() echo.MiddlewareFunc
GuestMiddleware is a middleware that force user to be guest to access to specific API. GuestMiddleware should be after the hexaContext middleware.
func HTTPErrorHandler ¶
func HTTPErrorHandler(l hlog.Logger, t hexa.Translator, debug bool) echo.HTTPErrorHandler
HTTPErrorHandler is the echo error handler. This function needs to the HexaContext middleware.
func HexaContext ¶
func HexaContext(logger hlog.Logger, translator hexa.Translator) echo.MiddlewareFunc
HexaContext set hexa context on each request.
func HexaToEchoLogger ¶
HexaToEchoLogger convert hexa logger to echo logger.
func IDAsSubjectGenerator ¶
IDAsSubjectGenerator return user's id as jwt subject (sub).
func IPKeyExtractor ¶
func JwtClaimAuthorizer ¶
func JwtClaimAuthorizer(cfg JwtClaimAuthorizerConfig) echo.MiddlewareFunc
func JwtErrorHandler ¶
JwtErrorHandler check errors type and return relative hexa error.
func LimitBodySize ¶
func LimitBodySize(n int64) echo.MiddlewareFunc
LimitBodySize limits the request body size. n less than or equal to zero means unlimited. n is in bytes.
func Metrics ¶
func Metrics(cfg MetricsConfig) echo.MiddlewareFunc
func NewRenderer ¶
func NewRenderer(pattern string) echo.Renderer
NewTemplate creaets new template engine. This engine parses the template definitions from the files identified by the pattern.
func NewSingleHostReverseProxyRewriteHost ¶
func NewSingleHostReverseProxyRewriteHost(target *url.URL) *httputil.ReverseProxy
NewSingleHostReverseProxyRewriteHost is just like httputil.NewSingleHostReverseProxyRewriteHost, but it overwrite host of the request also.
func Proxy ¶
func Proxy(balancer ProxyBalancer) echo.MiddlewareFunc
Proxy returns a Proxy middleware.
Proxy middleware forwards the request to upstream server using a configured load balancing technique.
func ProxyWithConfig ¶
func ProxyWithConfig(config ProxyConfig) echo.MiddlewareFunc
ProxyWithConfig returns a Proxy middleware with config. See: `Proxy()`
func RateLimiter ¶
func RateLimiter(cfg RateLimiterConfig) echo.MiddlewareFunc
func RateLimiterByIP ¶
func RateLimiterByIP(rl limiter.Store) echo.MiddlewareFunc
func Recover ¶
func Recover() echo.MiddlewareFunc
Recover returns a middleware which recovers from panics anywhere in the chain and handles the control to the centralized HTTPErrorHandler.
func RecoverWithConfig ¶
func RecoverWithConfig(skipper middleware.Skipper) echo.MiddlewareFunc
RecoverWithConfig returns a Recover middleware with config. See `Recover()` document.
func RequestIDWithConfig ¶
func RequestIDWithConfig(config RequestIDConfig) echo.MiddlewareFunc
RequestIDWithConfig returns a X-Request-ID middleware with config.
func ResourceAPI ¶
ResourceAPI defines every http route which its method is satisfied by the resource.
func SetContextLogger ¶
func SetContextLogger(level string) echo.MiddlewareFunc
SetContextLogger set the hexa logger on each context.
func SkipIfNotProvidedHeader ¶
func SkipIfNotProvidedHeader(header string) middleware.Skipper
SkipIfNotProvidedHeader skip jwt middleware if jwt authorization header is not provided.
func Tracing ¶
func Tracing(cfg TracingConfig) echo.MiddlewareFunc
Tracing Enables distributed tracing using openTelemetry library. In echo if a handler panic error, it will catch by the `Recover` middleware, to get panic errors too, please use this middleware before the Recover middleware, so it will get the recovered errors too. You can use TracingDataFromUserContext middleware to set user_id and correlation_id too.
func TracingDataFromUserContext ¶
func TracingDataFromUserContext() echo.MiddlewareFunc
TracingDataFromUserContext sets some tags,... on tracing span using hexa context. This middleware should be after hexa context middleware because if needs to the hexa context.
func UserGateMiddleware ¶
func UserGateMiddleware(cfg GateMiddlewareConfig) echo.MiddlewareFunc
UserGateMiddleware is a middleware to specify user should be authenticated or be guest to access to specific API.
func Write ¶
Write writes reply as response. You MUST have hexa context in your echo context to use this function to use its logger and translator.
func WriteWithOpts ¶
WriteWithOpts writes the reply as response.
Types ¶
type AuthorizeRefreshTokenConfig ¶
type AuthorizeRefreshTokenConfig struct { SingingMethod jwt.SigningMethod Key any // for rsa this is the public key Token string // Use Authorizer to verify that can get new token. Authorizer TokenAuthorizer UserFinder UserFinderBySub }
AuthorizeRefreshTokenConfig use as config to refresh access token.
type CorrelationIDConfig ¶
type CorrelationIDConfig struct { // Skipper defines a function to skip middleware. Skipper middleware.Skipper // Generator defines a function to generate an ID. // Optional. Default value unique uuid. Generator func() string }
CorrelationIDConfig defines the config for CorrelationID middleware.
type CreateResource ¶
type CreateResource interface {
Create(c echo.Context) error
}
type CurrentUserBySubConfig ¶
type CurrentUserBySubConfig struct { UserFinder UserFinderBySub SubContextKey string UserContextKey string }
type CurrentUserConfig ¶
type CurrentUserConfig struct { ExtendJWT bool UserContextKey string JWTContextKey string // contains filtered or unexported fields }
CurrentUserConfig is the config to use in CurrentUser middleware.
type DeleteResource ¶
type DeleteResource interface {
Delete(c echo.Context) error
}
type EchoService ¶
type EchoService struct { *echo.Echo Address string }
EchoService implements hexa service.
func (*EchoService) HealthIdentifier ¶
func (s *EchoService) HealthIdentifier() string
func (*EchoService) HealthStatus ¶
func (s *EchoService) HealthStatus(ctx context.Context) hexa.HealthStatus
func (*EchoService) LivenessStatus ¶
func (s *EchoService) LivenessStatus(ctx context.Context) hexa.LivenessStatus
func (*EchoService) ReadinessStatus ¶
func (s *EchoService) ReadinessStatus(ctx context.Context) hexa.ReadinessStatus
func (*EchoService) Run ¶
func (s *EchoService) Run() error
type ExtractTokenConfig ¶
type ExtractTokenConfig struct { Skipper middleware.Skipper TokenContextKey string TokenLocationContextKey string Extractors []TokenExtractor }
type GateMiddlewareConfig ¶
type GateMiddlewareConfig struct {
MustBeGuest bool
}
type GenerateTokenConfig ¶
type GenerateTokenConfig struct { SingingMethod jwt.SigningMethod Key any // for rsa this is the private key SubGenerator SubGenerator Claims jwt.MapClaims ExpireTokenAfter time.Duration }
GenerateTokenConfig use as config to generate new token.
type GetResource ¶
type GetResource interface {
Get(c echo.Context) error
}
type JwtClaimAuthorizerConfig ¶
type JwtClaimAuthorizerConfig struct { Skipper middleware.Skipper JWTContextKey string Authorizer TokenAuthorizer }
type KeyExtractor ¶
type MetricsConfig ¶
type MetricsConfig struct { Skipper middleware.Skipper MeterProvider metric.MeterProvider }
type PatchResource ¶
type PatchResource interface {
Patch(c echo.Context) error
}
type ProxyBalancer ¶
type ProxyBalancer interface { AddTarget(*ProxyTarget) bool RemoveTarget(string) bool Next(echo.Context) *ProxyTarget }
ProxyBalancer defines an interface to implement a load balancing technique.
func NewRandomBalancer ¶
func NewRandomBalancer(targets []*ProxyTarget) ProxyBalancer
NewRandomBalancer returns a random proxy balancer.
func NewRoundRobinBalancer ¶
func NewRoundRobinBalancer(targets []*ProxyTarget) ProxyBalancer
NewRoundRobinBalancer returns a round-robin proxy balancer.
type ProxyConfig ¶
type ProxyConfig struct { // Skipper defines a function to skip middleware. Skipper middleware.Skipper // Balancer defines a load balancing technique. // Required. Balancer ProxyBalancer // Rewrite defines URL path rewrite rules. The values captured in asterisk can be // retrieved by index e.g. $1, $2 and so on. // Examples: // "/old": "/new", // "/api/*": "/$1", // "/js/*": "/public/javascripts/$1", // "/users/*/orders/*": "/user/$1/order/$2", Rewrite map[string]string // Context key to store selected ProxyTarget into context. // Optional. Default value "target". ContextKey string // To customize the transport to remote. // Examples: If custom TLS certificates are required. Transport http.RoundTripper ReverseProxyProvider func(target *url.URL) *httputil.ReverseProxy // contains filtered or unexported fields }
ProxyConfig defines the config for Proxy middleware.
type ProxyTarget ¶
ProxyTarget defines the upstream target.
type QueryResource ¶
type QueryResource interface {
Query(c echo.Context) error
}
type RateLimiterConfig ¶
type RateLimiterConfig struct { Skipper middleware.Skipper RateLimiter limiter.Store KeyExtractor KeyExtractor }
type RequestIDConfig ¶
type RequestIDConfig struct { // Skipper defines a function to skip middleware. Skipper middleware.Skipper // Generator defines a function to generate an ID. // Optional. Default value random.String(32). Generator func() string }
RequestIDConfig defines the config for RequestID middleware.
type Template ¶
type Template struct {
// contains filtered or unexported fields
}
Template is very simple template engine
type TokenAuthorizer ¶
TokenAuthorizer authorize the token.
func AuthorizeAudience ¶
func AuthorizeAudience(aud string) TokenAuthorizer
type TokenExtractor ¶
type TokenExtractor func(ctx echo.Context) (string, TokenLocation, error)
TokenExtractor extracts a token from somewhere and then returns the token and its location.
func CookieTokenExtractor ¶
func CookieTokenExtractor(cookieFieldName string) TokenExtractor
func HeaderAuthTokenExtractor ¶
func HeaderAuthTokenExtractor(headerFieldName string) TokenExtractor
func SessionTokenExtractor ¶
func SessionTokenExtractor(store sessions.Store, sessionName string, tokenField string) TokenExtractor
type TokenLocation ¶
type TokenLocation int
type TracingConfig ¶
type TracingConfig struct { Skipper middleware.Skipper Propagator propagation.TextMapPropagator TracerProvider trace.TracerProvider ServerName string }
type UpdateResource ¶
type UpdateResource interface {
Update(c echo.Context) error
}
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
examples
|
|
docexample/doc
Package classification awesome.
|
Package classification awesome. |