2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 06:47:20 +08:00
Files
panel/internal/http/middleware/throttle.go
2024-10-12 02:52:23 +08:00

29 lines
631 B
Go

package middleware
import (
"log"
"net/http"
"time"
"github.com/sethvargo/go-limiter/httplimit"
"github.com/sethvargo/go-limiter/memorystore"
)
// Throttle 限流器
func Throttle(tokens uint64, interval time.Duration) func(next http.Handler) http.Handler {
store, err := memorystore.New(&memorystore.Config{
Tokens: tokens,
Interval: interval,
})
if err != nil {
log.Fatalf("failed to create throttle memorystore: %v", err)
}
limiter, err := httplimit.NewMiddleware(store, httplimit.IPKeyFunc())
if err != nil {
log.Fatalf("failed to initialize throttle middleware: %v", err)
}
return limiter.Handle
}