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();
final clientRequests = _requests[ip] ??= [];
final recentRequests = clientRequests.where((d) => now.difference(d) < window).toList();
_requests[ip] = recentRequests;
if (recentRequests.length >= maxRequests) {
return Response(
statusCode: 429,
body: 'Too Many Requests',
headers: {'Retry-After': window.inSeconds.toString()},
);
}
recentRequests.add(now);
return next();
};
}