ulflow_phattt2901 4779071fcd
Some checks failed
CI Pipeline / Lint (push) Failing after 5m12s
CI Pipeline / Test (push) Has been skipped
CI Pipeline / Security Scan (push) Successful in 6m3s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Security Scan (pull_request) Successful in 2m36s
CI Pipeline / Notification (push) Successful in 2s
CI Pipeline / Lint (pull_request) Failing after 2m38s
CI Pipeline / Test (pull_request) Has been skipped
CI Pipeline / Build (pull_request) Has been skipped
CI Pipeline / Notification (pull_request) Successful in 1s
chore: add HTTP middleware with logger, CORS and rate limiting functionality
2025-05-25 23:48:55 +07:00

77 lines
2.1 KiB
Go

package middleware
import "github.com/gin-gonic/gin"
// CORSConfig chứa cấu hình CORS
type CORSConfig struct {
AllowOrigins []string `yaml:"allow_origins"`
AllowMethods []string `yaml:"allow_methods"`
AllowHeaders []string `yaml:"allow_headers"`
}
// DefaultCORSConfig trả về cấu hình CORS mặc định
func DefaultCORSConfig() CORSConfig {
return CORSConfig{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Length", "Content-Type", "Authorization"},
}
}
// CORS middleware xử lý CORS
func CORS(config CORSConfig) gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(204)
return
}
c.Next()
}
}
// RateLimiterConfig chứa cấu hình rate limiting
type RateLimiterConfig struct {
Rate int `yaml:"rate"` // Số request tối đa trong khoảng thời gian
}
// DefaultRateLimiterConfig trả về cấu hình rate limiting mặc định
func DefaultRateLimiterConfig() RateLimiterConfig {
return RateLimiterConfig{
Rate: 100, // 100 requests per minute
}
}
// NewRateLimiter tạo middleware rate limiting
func NewRateLimiter(config RateLimiterConfig) gin.HandlerFunc {
return func(c *gin.Context) {
// TODO: Implement rate limiting logic
c.Next()
}
}
// SecurityConfig chứa tất cả các cấu hình bảo mật
type SecurityConfig struct {
// CORS configuration
CORS CORSConfig `yaml:"cors"`
// Rate limiting configuration
RateLimit RateLimiterConfig `yaml:"rate_limit"`
}
// DefaultSecurityConfig trả về cấu hình bảo mật mặc định
func DefaultSecurityConfig() SecurityConfig {
return SecurityConfig{
CORS: DefaultCORSConfig(),
RateLimit: DefaultRateLimiterConfig(),
}
}
// Apply áp dụng tất cả các middleware bảo mật vào router
func (c *SecurityConfig) Apply(r *gin.Engine) {
// Áp dụng CORS middleware
r.Use(CORS(c.CORS))
// Áp dụng rate limiting
r.Use(NewRateLimiter(c.RateLimit))
}