add initial solution (made with copilot)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
$container = require __DIR__ . '/../bootstrap.php';
|
||||
|
||||
use Core\Router;
|
||||
use Core\Request;
|
||||
use Core\Response;
|
||||
use Core\RateLimiter\RateLimiterInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
$logger = $container->make(LoggerInterface::class);
|
||||
$limiter = $container->make(RateLimiterInterface::class);
|
||||
|
||||
$router = new Router($container); // vedi nota: router può ricevere container
|
||||
|
||||
// register routes (path without version prefix)
|
||||
$router->get('/users', 'UsersController@index');
|
||||
$router->post('/users', 'UsersController@create');
|
||||
$router->get('/example', 'ExampleController@test');
|
||||
|
||||
$request = new Request();
|
||||
$response = new Response();
|
||||
|
||||
// Rate limiting by IP address
|
||||
$key = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
|
||||
if (!$limiter->allow($key)) {
|
||||
$retry = $limiter->getRetryAfter($key);
|
||||
header('Retry-After: ' . $retry);
|
||||
$logger->warning('Rate limit exceeded', ['ip' => $key]);
|
||||
$response->json(['error' => 'Too Many Requests'], 429);
|
||||
}
|
||||
|
||||
$logger->info('Dispatching request', ['path' => $request->path(), 'method' => $request->method()]);
|
||||
$router->dispatch($request, $response);
|
||||
Reference in New Issue
Block a user