handle method
Returns a Middleware that enforces the rate limit.
Implementation
Middleware handle() {
return (Context ctx, Next next) async {
final ip = ctx.request.rawRequest.connectionInfo?.remoteAddress.address ?? 'unknown';
final now = DateTime.now();
_requests[ip] ??= [];
_requests[ip] = _requests[ip]!.where((d) => now.difference(d) < window).toList();
if (_requests[ip]!.length >= maxRequests) {
return Response(
statusCode: 429,
body: 'Too Many Requests',
headers: {'Retry-After': window.inSeconds.toString()},
);
}
_requests[ip]!.add(now);
return await next();
};
}