handle method

Middleware handle()

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();
  };
}