35 lines
890 B
PHP
35 lines
890 B
PHP
<?php
|
|
|
|
namespace App\Filters;
|
|
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
use CodeIgniter\Filters\FilterInterface;
|
|
|
|
class RateLimitFilter implements FilterInterface
|
|
{
|
|
|
|
public function before(RequestInterface $request, $arguments = null)
|
|
{
|
|
$throttler = service('throttler');
|
|
|
|
// sanitize IP for cache
|
|
$key = preg_replace('/[^a-zA-Z0-9_]/', '_', $request->getIPAddress());
|
|
|
|
if ($throttler->check($key, 25, MINUTE) === false) {
|
|
return service('response')
|
|
->setStatusCode(429)
|
|
->setJSON([
|
|
'status' => 'error',
|
|
'message' => 'Too many requests. Try again later.'
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
|
{
|
|
// nothing
|
|
}
|
|
}
|