MCPcopy Create free account
hub / github.com/PerpetualSoftware/pad / writeRateLimitResponse

Function writeRateLimitResponse

internal/server/middleware_ratelimit.go:621–638  ·  view source on GitHub ↗

writeRateLimitResponse sends a 429 response with Retry-After and X-RateLimit-* headers.

(w http.ResponseWriter, cfg rateLimitConfig)

Source from the content-addressed store, hash-verified

619
620// writeRateLimitResponse sends a 429 response with Retry-After and X-RateLimit-* headers.
621func writeRateLimitResponse(w http.ResponseWriter, cfg rateLimitConfig) {
622 // Calculate retry-after from the rate (seconds until one token is available)
623 retryAfter := int(math.Ceil(1.0 / float64(cfg.Rate)))
624 if retryAfter < 1 {
625 retryAfter = 1
626 }
627 if retryAfter > 3600 {
628 retryAfter = 3600
629 }
630
631 // Calculate requests per minute for the limit header
632 limitPerMinute := int(math.Ceil(float64(cfg.Rate) * 60))
633
634 w.Header().Set("Retry-After", strconv.Itoa(retryAfter))
635 w.Header().Set("X-RateLimit-Limit", strconv.Itoa(limitPerMinute))
636 w.Header().Set("X-RateLimit-Remaining", "0")
637 writeError(w, http.StatusTooManyRequests, "rate_limited", "Too many requests. Please try again later.")
638}

Callers 4

RateLimitMethod · 0.85
handleLoginMethod · 0.85
handleTOTPLoginVerifyMethod · 0.85

Calls 3

writeErrorFunction · 0.85
SetMethod · 0.45
HeaderMethod · 0.45

Tested by

no test coverage detected