feat: implement JWT authentication and scope validation middleware #11

Merged
rrise merged 7 commits from feat/jwt-middlewares into master 2025-11-07 17:14:24 +00:00
2 changed files with 28 additions and 2 deletions
Showing only changes of commit 1550577638 - Show all commits

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Siteworxpro\App\Controllers;
use Nyholm\Psr7\ServerRequest;
use Psr\Http\Message\ResponseInterface;
use Siteworxpro\App\Http\JsonResponseFactory;
class HealthcheckController extends Controller
{
/**
* @throws \JsonException
*/
public function get(ServerRequest $request): ResponseInterface
{
return JsonResponseFactory::createJsonResponse(
['status_code' => 200, 'message' => 'Healthcheck OK']
);
}
}

View File

@@ -12,6 +12,7 @@ use League\Route\Http\Exception\NotFoundException;
use League\Route\Router; use League\Route\Router;
use Nyholm\Psr7\Factory\Psr17Factory; use Nyholm\Psr7\Factory\Psr17Factory;
use Siteworx\Config\Config as SWConfig; use Siteworx\Config\Config as SWConfig;
use Siteworxpro\App\Controllers\HealthcheckController;
use Siteworxpro\App\Controllers\IndexController; use Siteworxpro\App\Controllers\IndexController;
use Siteworxpro\App\Http\JsonResponseFactory; use Siteworxpro\App\Http\JsonResponseFactory;
use Siteworxpro\App\Http\Middleware\CorsMiddleware; use Siteworxpro\App\Http\Middleware\CorsMiddleware;
@@ -22,6 +23,7 @@ use Siteworxpro\App\Services\Facades\Config;
use Siteworxpro\App\Services\Facades\Logger; use Siteworxpro\App\Services\Facades\Logger;
use Siteworxpro\App\Services\ServiceProviders\LoggerServiceProvider; use Siteworxpro\App\Services\ServiceProviders\LoggerServiceProvider;
use Siteworxpro\App\Services\ServiceProviders\RedisServiceProvider; use Siteworxpro\App\Services\ServiceProviders\RedisServiceProvider;
use Siteworxpro\HttpStatus\CodesEnum;
use Spiral\RoadRunner\Http\PSR7Worker; use Spiral\RoadRunner\Http\PSR7Worker;
use Spiral\RoadRunner\Worker; use Spiral\RoadRunner\Worker;
@@ -140,6 +142,7 @@ class Server
protected function registerRoutes(): void protected function registerRoutes(): void
{ {
$this->router->get('/', IndexController::class . '::get'); $this->router->get('/', IndexController::class . '::get');
$this->router->get('/healthz', HealthcheckController::class . '::get');
$this->router->middleware(new CorsMiddleware()); $this->router->middleware(new CorsMiddleware());
$this->router->middleware(new JwtMiddleware()); $this->router->middleware(new JwtMiddleware());
@@ -177,7 +180,7 @@ class Server
$this->worker->respond( $this->worker->respond(
JsonResponseFactory::createJsonResponse( JsonResponseFactory::createJsonResponse(
['status_code' => 404, 'reason_phrase' => 'Not Found'], ['status_code' => 404, 'reason_phrase' => 'Not Found'],
404 CodesEnum::NOT_FOUND
) )
); );
} catch (\Throwable $e) { } catch (\Throwable $e) {
@@ -194,7 +197,7 @@ class Server
]; ];
} }
$this->worker->respond(JsonResponseFactory::createJsonResponse($json, 500)); $this->worker->respond(JsonResponseFactory::createJsonResponse($json, CodesEnum::INTERNAL_SERVER_ERROR));
} }
} }
} }