/**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
 {
     $key = $request->fingerprint();
     if ($this->limiter->tooManyAttempts($key, $maxAttempts, $decayMinutes)) {
         return new Response('Too Many Attempts.', 429, ['Retry-After' => $this->limiter->availableIn($key), 'X-RateLimit-Limit' => $maxAttempts, 'X-RateLimit-Remaining' => 0]);
     }
     $this->limiter->hit($key, $decayMinutes);
     return $next($request)->withHeaders(['X-RateLimit-Limit' => $maxAttempts, 'X-RateLimit-Remaining' => $maxAttempts - $this->limiter->attempts($key) + 1]);
 }
Example #2
0
 /**
  * Get a unique fingerprint for the request / route / IP address.
  *
  * @return string 
  * @static 
  */
 public static function fingerprint()
 {
     return \Illuminate\Http\Request::fingerprint();
 }
Example #3
0
 /**
  * Resolve request signature.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return string
  */
 protected function resolveRequestSignature($request)
 {
     return $request->fingerprint();
 }