first commit

This commit is contained in:
2025-03-07 10:04:42 +00:00
commit f3a71e8d12
23 changed files with 732 additions and 0 deletions

View File

@ -0,0 +1,42 @@
<?php
namespace Blog\Middleware;
use Blog\Middleware\middlewareInterface;
use Blog\Http\request;
use Blog\Http\response;
class AuthMiddleware implements MiddlewareInterface {
public function handle(Request $request, Response $response): bool {
if(!isset($_SESSION['user'])) {
$response
->setStatus(403)
->getBody()
->write("403 - Forbidden")
->send();
return false;
}
if($request->getMethod() !== 'GET' && !$this->validateCSRFToken($request)) {
$response
->setStatus(419)
->getBody()
->write("419 - Session expired or invalid CSRF token.")
->send();
return false;
}
return true;
}
private function validateCSRFToken(Request $request): bool {
$token = $request->getPost('_csrf_token') ?? '';
return hash_equals($_SESSION['_csrf_token'] ?? '', $token);
}
public static function generateCSRFToken(): string {
if(!isset($_SESSION['_csrf_token'])) {
$_SESSION['_csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['_csrf_token'];
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace Blog\Middleware;
use Blog\Http\request;
use Blog\Http\response;
interface MiddlewareInterface {
public function handle(Request $request, Response $response): bool;
}