Documentation
¶
Index ¶
- Constants
- func Accepted(c *fiber.Ctx, s any) error
- func AllowFullOptionsWithCORS(app *fiber.App)
- func ApplyCursorPagination(findAll squirrel.SelectBuilder, decodedCursor Cursor, orderDirection string, ...) (squirrel.SelectBuilder, string)
- func BadRequest(c *fiber.Ctx, s any) error
- func Conflict(c *fiber.Ctx, code, title, message string) error
- func Created(c *fiber.Ctx, s any) error
- func ExtractTokenFromHeader(c *fiber.Ctx) string
- func File(filePath string) fiber.Handler
- func Forbidden(c *fiber.Ctx, code, title, message string) error
- func HandleFiberError(c *fiber.Ctx, err error) error
- func InternalServerError(c *fiber.Ctx, code, title, message string) error
- func JSONResponse(c *fiber.Ctx, status int, s any) error
- func JSONResponseError(c *fiber.Ctx, err commons.Response) error
- func KeyByHeader(headerName string) func(*fiber.Ctx) string
- func KeyByIP(c *fiber.Ctx) string
- func KeyByIPAndEndpoint(c *fiber.Ctx) string
- func KeyComposite(generators ...func(*fiber.Ctx) string) func(*fiber.Ctx) string
- func NoContent(c *fiber.Ctx) error
- func NotFound(c *fiber.Ctx, code, title, message string) error
- func NotImplemented(c *fiber.Ctx, message string) error
- func NotImplementedEndpoint(c *fiber.Ctx) error
- func OK(c *fiber.Ctx, s any) error
- func PaginateRecords[T any](isFirstPage bool, hasPagination bool, pointsNext bool, items []T, limit int, ...) []T
- func PartialContent(c *fiber.Ctx, s any) error
- func Ping(c *fiber.Ctx) error
- func RangeNotSatisfiable(c *fiber.Ctx) error
- func RateLimitMiddleware(config RateLimitConfig) fiber.Handler
- func ServeReverseProxy(target string, res http.ResponseWriter, req *http.Request)
- func Unauthorized(c *fiber.Ctx, code, title, message string) error
- func UnprocessableEntity(c *fiber.Ctx, code, title, message string) error
- func Version(c *fiber.Ctx) error
- func Welcome(service string, description string) fiber.Handler
- func WithBasicAuth(f BasicAuthFunc, realm string) fiber.Handler
- func WithCORS() fiber.Handler
- func WithGrpcLogging(opts ...LogMiddlewareOption) grpc.UnaryServerInterceptor
- func WithHTTPLogging(opts ...LogMiddlewareOption) fiber.Handler
- type BasicAuthFunc
- type Cursor
- type CursorPagination
- type LogMiddlewareOption
- type RateLimitConfig
- type RequestInfo
- type ResponseMetricsWrapper
- type TelemetryMiddleware
- func (tm *TelemetryMiddleware) EndTracingSpans(c *fiber.Ctx) error
- func (tm *TelemetryMiddleware) EndTracingSpansInterceptor() grpc.UnaryServerInterceptor
- func (tm *TelemetryMiddleware) WithTelemetry(tl *opentelemetry.Telemetry, excludedRoutes ...string) fiber.Handler
- func (tm *TelemetryMiddleware) WithTelemetryInterceptor(tl *opentelemetry.Telemetry) grpc.UnaryServerInterceptor
Constants ¶
const NotImplementedMessage = "Not implemented yet"
Variables ¶
This section is empty.
Functions ¶
func AllowFullOptionsWithCORS ¶
func AllowFullOptionsWithCORS(app *fiber.App)
AllowFullOptionsWithCORS set r.Use(WithCORS) and allow every request to use OPTION method.
func ApplyCursorPagination ¶
func ApplyCursorPagination( findAll squirrel.SelectBuilder, decodedCursor Cursor, orderDirection string, limit int, tableAlias ...string, ) (squirrel.SelectBuilder, string)
func BadRequest ¶
BadRequest sends an HTTP 400 Bad Request response with a custom body.
func ExtractTokenFromHeader ¶
func ExtractTokenFromHeader(c *fiber.Ctx) string
ExtractTokenFromHeader extracts the authentication token from the Authorization header. It handles both "Bearer TOKEN" format and raw token format.
func Forbidden ¶
Forbidden sends an HTTP 403 Forbidden response with a custom code, title and message.
func HandleFiberError ¶
HandleFiberError handles errors for Fiber, properly unwrapping errors to check for fiber.Error
func InternalServerError ¶
InternalServerError sends an HTTP 500 Internal Server Response response
func JSONResponse ¶
JSONResponse sends a custom status code and body as a JSON response.
func JSONResponseError ¶
JSONResponseError sends a JSON formatted error response with a custom error struct.
func KeyByHeader ¶ added in v2.4.0
KeyByHeader generates rate limit key from a specific header. Useful for API keys, tenant IDs, or custom identifiers.
func KeyByIP ¶ added in v2.4.0
func KeyByIP(c *fiber.Ctx) string
KeyByIP generates rate limit key from client IP address. This is the most common strategy and protects against IP-based attacks.
func KeyByIPAndEndpoint ¶ added in v2.4.0
func KeyByIPAndEndpoint(c *fiber.Ctx) string
KeyByIPAndEndpoint generates rate limit key from IP and endpoint path. This allows different rate limits per endpoint while still tracking per-IP.
func KeyComposite ¶ added in v2.4.0
KeyComposite generates a composite key from multiple dimensions. This allows hierarchical rate limiting (e.g., limit per IP AND per user). Example usage:
KeyComposite(
func(c) string { return "ip:" + c.IP() },
func(c) string { return "endpoint:" + c.Path() },
)
func NoContent ¶
func NoContent(c *fiber.Ctx) error
NoContent sends an HTTP 204 No Content response without anybody.
func NotFound ¶
NotFound sends an HTTP 404 Not Found response with a custom code, title and message.
func NotImplemented ¶
NotImplemented sends an HTTP 501 Not Implemented response with a custom message.
func NotImplementedEndpoint ¶
func NotImplementedEndpoint(c *fiber.Ctx) error
NotImplementedEndpoint returns HTTP 501 with not implemented message.
func PaginateRecords ¶
func PartialContent ¶
PartialContent sends an HTTP 206 Partial Content response with a custom body.
func RangeNotSatisfiable ¶
func RangeNotSatisfiable(c *fiber.Ctx) error
RangeNotSatisfiable sends an HTTP 416 Requested Range Not Satisfiable response.
func RateLimitMiddleware ¶ added in v2.4.0
func RateLimitMiddleware(config RateLimitConfig) fiber.Handler
RateLimitMiddleware creates a Fiber middleware for rate limiting. This middleware: 1. Extracts rate limit key from request (via KeyGenerator) 2. Checks rate limit using the Limiter 3. Sets standard rate limit response headers 4. Blocks request if rate limit exceeded 5. Handles errors gracefully based on FailureMode
This is a generic implementation suitable for any Fiber-based service.
func ServeReverseProxy ¶
func ServeReverseProxy(target string, res http.ResponseWriter, req *http.Request)
ServeReverseProxy serves a reverse proxy for a given url.
func Unauthorized ¶
Unauthorized sends an HTTP 401 Unauthorized response with a custom code, title and message.
func UnprocessableEntity ¶
UnprocessableEntity sends an HTTP 422 Unprocessable Entity response with a custom code, title and message.
func WithBasicAuth ¶
func WithBasicAuth(f BasicAuthFunc, realm string) fiber.Handler
WithBasicAuth creates a basic authentication middleware.
func WithCORS ¶
func WithCORS() fiber.Handler
WithCORS is a middleware that enables CORS. Replace it with a real CORS middleware implementation.
func WithGrpcLogging ¶
func WithGrpcLogging(opts ...LogMiddlewareOption) grpc.UnaryServerInterceptor
WithGrpcLogging is a gRPC unary interceptor to log access to gRPC server.
func WithHTTPLogging ¶
func WithHTTPLogging(opts ...LogMiddlewareOption) fiber.Handler
WithHTTPLogging is a middleware to log access to http server. It logs access log according to Apache Standard Logs which uses Common Log Format (CLF) Ref: https://httpd.apache.org/docs/trunk/logs.html#common
Types ¶
type BasicAuthFunc ¶
BasicAuthFunc represents a func which returns if a username and password was authenticated or not. It returns true if authenticated, and false when not authenticated.
func FixedBasicAuthFunc ¶
func FixedBasicAuthFunc(username, password string) BasicAuthFunc
FixedBasicAuthFunc is a fixed username and password to use as BasicAuthFunc.
type CursorPagination ¶
func CalculateCursor ¶
func CalculateCursor( isFirstPage, hasPagination, pointsNext bool, firstItemID, lastItemID string, ) (CursorPagination, error)
type LogMiddlewareOption ¶
type LogMiddlewareOption func(l *logMiddleware)
LogMiddlewareOption represents the log middleware function as an implementation.
func WithCustomLogger ¶
func WithCustomLogger(logger log.Logger) LogMiddlewareOption
WithCustomLogger is a functional option for logMiddleware.
type RateLimitConfig ¶ added in v2.4.0
type RateLimitConfig struct {
// Limiter is the rate limiting implementation (usually Redis-backed)
Limiter ratelimit.Limiter
// KeyGenerator extracts the rate limit key from the request
// Examples:
// - By IP: func(c) string { return c.IP() }
// - By User: func(c) string { return extractUserID(c) }
// - By API Key: func(c) string { return c.Get("X-API-Key") }
KeyGenerator func(c *fiber.Ctx) string
// SkipPaths defines paths that bypass rate limiting
// Typically: health checks, metrics endpoints
SkipPaths []string
// FailureMode determines behavior when rate limiter fails
// FailOpen: Allow requests (prioritize availability)
// FailClosed: Block requests (prioritize security)
FailureMode ratelimit.FailureMode
// ErrorCode is returned when rate limit is exceeded
ErrorCode string
// ErrorMessage is the human-readable error message
ErrorMessage string
// IncludeHeaders controls whether to add rate limit headers
// Standard headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
IncludeHeaders bool
// Logger is an optional function for logging rate limit events
// If nil, no logging is performed (service can inject its own logger)
Logger func(level string, format string, args ...any)
// OnRateLimitExceeded is an optional callback when rate limit is exceeded
// Useful for metrics, alerts, or custom actions
OnRateLimitExceeded func(c *fiber.Ctx, key string, result *ratelimit.Result)
// OnError is an optional callback when rate limiter encounters errors
// Useful for metrics, alerts, or custom error handling
OnError func(c *fiber.Ctx, err error)
}
RateLimitConfig configures the rate limiting middleware for Fiber. This is a generic configuration that can be used across all Fiber-based services.
type RequestInfo ¶
type RequestInfo struct {
Method string
Username string
URI string
Referer string
RemoteAddress string
Status int
Date time.Time
Duration time.Duration
UserAgent string
TraceID string
Protocol string
Size int
Body string
}
RequestInfo is a struct design to store http access log data.
func NewRequestInfo ¶
func NewRequestInfo(c *fiber.Ctx) *RequestInfo
NewRequestInfo creates an instance of RequestInfo.
func (*RequestInfo) CLFString ¶
func (r *RequestInfo) CLFString() string
CLFString produces a log entry format similar to Common Log Format (CLF) Ref: https://httpd.apache.org/docs/trunk/logs.html#common
func (*RequestInfo) FinishRequestInfo ¶
func (r *RequestInfo) FinishRequestInfo(rw *ResponseMetricsWrapper)
FinishRequestInfo calculates the duration of RequestInfo automatically using time.Now() It also set StatusCode and Size of RequestInfo passed by ResponseMetricsWrapper.
func (*RequestInfo) String ¶
func (r *RequestInfo) String() string
String implements fmt.Stringer interface and produces a log entry using RequestInfo.CLFExtendedString.
type ResponseMetricsWrapper ¶
ResponseMetricsWrapper is a Wrapper responsible for collect the response data such as status code and size It implements built-in ResponseWriter interface.
type TelemetryMiddleware ¶
type TelemetryMiddleware struct {
Telemetry *opentelemetry.Telemetry
}
func NewTelemetryMiddleware ¶
func NewTelemetryMiddleware(tl *opentelemetry.Telemetry) *TelemetryMiddleware
NewTelemetryMiddleware creates a new instance of TelemetryMiddleware.
func (*TelemetryMiddleware) EndTracingSpans ¶
func (tm *TelemetryMiddleware) EndTracingSpans(c *fiber.Ctx) error
EndTracingSpans is a middleware that ends the tracing spans.
func (*TelemetryMiddleware) EndTracingSpansInterceptor ¶
func (tm *TelemetryMiddleware) EndTracingSpansInterceptor() grpc.UnaryServerInterceptor
EndTracingSpansInterceptor is a gRPC interceptor that ends the tracing spans.
func (*TelemetryMiddleware) WithTelemetry ¶
func (tm *TelemetryMiddleware) WithTelemetry(tl *opentelemetry.Telemetry, excludedRoutes ...string) fiber.Handler
WithTelemetry is a middleware that adds tracing to the context.
func (*TelemetryMiddleware) WithTelemetryInterceptor ¶
func (tm *TelemetryMiddleware) WithTelemetryInterceptor(tl *opentelemetry.Telemetry) grpc.UnaryServerInterceptor
WithTelemetryInterceptor is a gRPC interceptor that adds tracing to the context.