Skip to content

creafly/middleware

Repository files navigation

middleware

Collection of Gin middleware for Creafly Go microservices.

Installation

go get github.com/creafly/creago-middleware

Middlewares

Request ID

Generates or propagates request IDs for request tracing.

import middleware "github.com/creafly/creago-middleware"

r := gin.New()
r.Use(middleware.RequestID())

Reads X-Request-ID header if present, otherwise generates a new UUID.

CORS

Configurable Cross-Origin Resource Sharing middleware.

r.Use(middleware.CORS(middleware.CORSConfig{
    AllowedOrigins:   []string{"https://app.creafly.io"},
    AllowedMethods:   []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
    AllowedHeaders:   []string{"Authorization", "Content-Type"},
    AllowCredentials: true,
    MaxAge:           86400,
}))

Or use the default configuration:

r.Use(middleware.CORS(middleware.DefaultCORSConfig()))

Security Headers

Adds security-related HTTP headers.

r.Use(middleware.SecurityHeaders())

Headers added:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • X-XSS-Protection: 1; mode=block
  • Referrer-Policy: strict-origin-when-cross-origin
  • Cache-Control: no-store, no-cache, must-revalidate, private
  • Pragma: no-cache
  • Content-Security-Policy: default-src 'none'; frame-ancestors 'none'
  • Permissions-Policy: geolocation=(), microphone=(), camera=()

HSTS

HTTP Strict Transport Security header.

r.Use(middleware.HSTS(true))

Rate Limiting

IP-based rate limiting with automatic cleanup.

r.Use(middleware.RateLimit(middleware.RateLimitConfig{
    Enabled:           true,
    RequestsPerSecond: 100,
    BurstSize:         200,
    CleanupInterval:   10 * time.Minute,
}))

Or use the default configuration:

r.Use(middleware.RateLimit(middleware.DefaultRateLimitConfig()))

Logging

Request logging using creago-logger.

import logger "github.com/creafly/creago-logger"

logger.InitFromEnv("my-service")

r := gin.New()
r.Use(middleware.RequestID())
r.Use(middleware.Logging())

Compression

Gzip compression for responses.

r.Use(middleware.Compression())

Locale

Locale detection from Accept-Language header or query parameter.

r.Use(middleware.Locale())

func handler(c *gin.Context) {
    locale := middleware.GetLocale(c)
}

Supported locales: en-US, ru-RU

Complete Example

package main

import (
    "time"

    "github.com/gin-gonic/gin"
    logger "github.com/creafly/creago-logger"
    middleware "github.com/creafly/creago-middleware"
)

func main() {
    logger.InitFromEnv("my-service")

    r := gin.New()

    r.Use(middleware.RequestID())
    r.Use(middleware.SecurityHeaders())
    r.Use(middleware.HSTS(true))
    r.Use(middleware.CORS(middleware.DefaultCORSConfig()))
    r.Use(middleware.RateLimit(middleware.DefaultRateLimitConfig()))
    r.Use(middleware.Logging())
    r.Use(middleware.Locale())
    r.Use(middleware.Compression())

    r.GET("/health", func(c *gin.Context) {
        c.JSON(200, gin.H{"status": "ok"})
    })

    r.Run(":8080")
}

API Reference

Types

Type Description
CORSConfig CORS middleware configuration
RateLimitConfig Rate limiting configuration
SecurityConfig Security headers configuration

Functions

Function Description
RequestID() HandlerFunc Request ID middleware
CORS(cfg CORSConfig) HandlerFunc CORS middleware
DefaultCORSConfig() CORSConfig Default CORS configuration
SecurityHeaders() HandlerFunc Security headers middleware
HSTS(enabled bool) HandlerFunc HSTS middleware
RateLimit(cfg RateLimitConfig) HandlerFunc Rate limiting middleware
DefaultRateLimitConfig() RateLimitConfig Default rate limit configuration
Logging() HandlerFunc Request logging middleware
Compression() HandlerFunc Gzip compression middleware
Locale() HandlerFunc Locale detection middleware
GetLocale(c *gin.Context) string Get locale from context
GetClientIP(c *gin.Context) string Get client IP with proxy support

Constants

Constant Value Description
RequestIDHeader X-Request-ID Request ID header name
LocaleContextKey locale Locale context key
DefaultLocale en-US Default locale

Dependencies

  • github.com/creafly/creago-logger - Logging
  • github.com/gin-gonic/gin - Web framework
  • github.com/google/uuid - UUID generation
  • golang.org/x/time/rate - Rate limiting

License

Internal use only - Creafly

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages