mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-13 00:22:49 +00:00
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package app
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/phishingclub/phishingclub/config"
|
|
"github.com/phishingclub/phishingclub/middleware"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Middlwares is a collection of middlewares
|
|
type Middlewares struct {
|
|
IPLimiter gin.HandlerFunc
|
|
LoginRateLimiter gin.HandlerFunc
|
|
SessionHandler gin.HandlerFunc
|
|
}
|
|
|
|
// NewMiddlewares creates a collection of middlewares
|
|
func NewMiddlewares(
|
|
requestPerSecond float64,
|
|
requestBurst int,
|
|
conf *config.Config,
|
|
services *Services,
|
|
utils *Utilities,
|
|
logger *zap.SugaredLogger,
|
|
) *Middlewares {
|
|
ipLimiter := middleware.NewAllowIPMiddleware(conf, logger)
|
|
loginThrottle := middleware.NewIPRateLimiterMiddleware(
|
|
requestPerSecond, // requests per second
|
|
requestBurst, // burst
|
|
)
|
|
sessionHandler := middleware.NewSessionHandler(
|
|
services.Session,
|
|
services.User,
|
|
utils.JSONResponseHandler,
|
|
logger,
|
|
)
|
|
|
|
return &Middlewares{
|
|
IPLimiter: ipLimiter,
|
|
LoginRateLimiter: loginThrottle,
|
|
SessionHandler: sessionHandler,
|
|
}
|
|
}
|
|
|
|
// ExtendedTimeout returns a middleware that extends the write deadline for long-running operations.
|
|
func (m *Middlewares) ExtendedTimeout(timeout time.Duration) gin.HandlerFunc {
|
|
return middleware.ExtendedTimeout(timeout)
|
|
}
|