Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
45 lines
970 B
Go
45 lines
970 B
Go
//go:build dev
|
|
// +build dev
|
|
|
|
package mw
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
func RateLimit(limit int, window time.Duration) func(http.Handler) http.Handler {
|
|
return func(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
}
|
|
|
|
type ProgressiveRateLimiter struct {
|
|
requests map[string]*ipProgressiveState
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
type ipProgressiveState struct {
|
|
timestamps []time.Time
|
|
}
|
|
|
|
func NewProgressiveRateLimiter() *ProgressiveRateLimiter {
|
|
return &ProgressiveRateLimiter{
|
|
requests: make(map[string]*ipProgressiveState),
|
|
}
|
|
}
|
|
|
|
func (prl *ProgressiveRateLimiter) cleanup() {}
|
|
func (prl *ProgressiveRateLimiter) Check(ip string) int { return 0 }
|
|
|
|
var globalProgressiveLimiter = NewProgressiveRateLimiter()
|
|
|
|
func ProgressiveRateLimit(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|