Added api.response.headers to be included in all api responses.
This commit is contained in:
@@ -38,6 +38,13 @@ return (function () {
|
|||||||
'backend' => '[a-zA-Z0-9_-]+',
|
'backend' => '[a-zA-Z0-9_-]+',
|
||||||
],
|
],
|
||||||
'logInternal' => (bool)env('WS_API_LOG_INTERNAL', false),
|
'logInternal' => (bool)env('WS_API_LOG_INTERNAL', false),
|
||||||
|
'response' => [
|
||||||
|
'headers' => [
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'X-Application-Version' => fn() => getAppVersion(),
|
||||||
|
'Access-Control-Allow-Origin' => '*',
|
||||||
|
],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'webui' => [
|
'webui' => [
|
||||||
'enabled' => (bool)env('WEBUI_ENABLED', env('WS_WEBUI_ENABLED', true)),
|
'enabled' => (bool)env('WEBUI_ENABLED', env('WS_WEBUI_ENABLED', true)),
|
||||||
|
|||||||
@@ -4,16 +4,25 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace App\Libs\Middlewares;
|
namespace App\Libs\Middlewares;
|
||||||
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface as iResponse;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface as iRequest;
|
||||||
use Psr\Http\Server\MiddlewareInterface;
|
use Psr\Http\Server\MiddlewareInterface as iMiddleware;
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
use Psr\Http\Server\RequestHandlerInterface as iHandler;
|
||||||
|
|
||||||
final class AddCorsMiddleware implements MiddlewareInterface
|
final class AddCorsMiddleware implements iMiddleware
|
||||||
{
|
{
|
||||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
public function process(iRequest $request, iHandler $handler): iResponse
|
||||||
{
|
{
|
||||||
return $handler->handle($request)->withHeader('Access-Control-Allow-Origin', '*')
|
$response = $handler->handle($request);
|
||||||
->withHeader('Access-Control-Allow-Credentials', 'true');
|
|
||||||
|
if (!$response->hasHeader('Access-Control-Allow-Origin')) {
|
||||||
|
$response = $response->withHeader('Access-Control-Allow-Origin', '*');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$response->hasHeader('Access-Control-Allow-Credentials')) {
|
||||||
|
$response = $response->withHeader('Access-Control-Allow-Credentials', 'true');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ if (!function_exists('api_response')) {
|
|||||||
array $headers = [],
|
array $headers = [],
|
||||||
string|null $reason = null
|
string|null $reason = null
|
||||||
): iResponse {
|
): iResponse {
|
||||||
return (new Response(
|
$response = (new Response(
|
||||||
status: $status->value,
|
status: $status->value,
|
||||||
headers: $headers,
|
headers: $headers,
|
||||||
body: null !== $body ? json_encode(
|
body: null !== $body ? json_encode(
|
||||||
@@ -412,7 +412,16 @@ if (!function_exists('api_response')) {
|
|||||||
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_UNESCAPED_SLASHES
|
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_UNESCAPED_SLASHES
|
||||||
) : null,
|
) : null,
|
||||||
reason: $reason,
|
reason: $reason,
|
||||||
))->withHeader('Content-Type', 'application/json')->withHeader('X-Application-Version', getAppVersion());
|
));
|
||||||
|
|
||||||
|
foreach (Config::get('api.response.headers', []) as $key => $val) {
|
||||||
|
if ($response->hasHeader($key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$response = $response->withHeader($key, getValue($val));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -319,6 +319,17 @@ class HelpersTest extends TestCase
|
|||||||
|
|
||||||
public function test_api_response(): void
|
public function test_api_response(): void
|
||||||
{
|
{
|
||||||
|
Config::append([
|
||||||
|
'api' => [
|
||||||
|
'response' => [
|
||||||
|
'headers' => [
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'X-Application-Version' => fn() => getAppVersion(),
|
||||||
|
'Access-Control-Allow-Origin' => '*',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]);
|
||||||
$data = ['foo' => 'bar'];
|
$data = ['foo' => 'bar'];
|
||||||
$response = api_response(HTTP_STATUS::HTTP_OK, $data);
|
$response = api_response(HTTP_STATUS::HTTP_OK, $data);
|
||||||
$this->assertSame(HTTP_STATUS::HTTP_OK->value, $response->getStatusCode());
|
$this->assertSame(HTTP_STATUS::HTTP_OK->value, $response->getStatusCode());
|
||||||
@@ -329,6 +340,18 @@ class HelpersTest extends TestCase
|
|||||||
|
|
||||||
public function test_error_response(): void
|
public function test_error_response(): void
|
||||||
{
|
{
|
||||||
|
Config::append([
|
||||||
|
'api' => [
|
||||||
|
'response' => [
|
||||||
|
'headers' => [
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'X-Application-Version' => fn() => getAppVersion(),
|
||||||
|
'Access-Control-Allow-Origin' => '*',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
$data = ['error' => ['code' => HTTP_STATUS::HTTP_BAD_REQUEST->value, 'message' => 'error message']];
|
$data = ['error' => ['code' => HTTP_STATUS::HTTP_BAD_REQUEST->value, 'message' => 'error message']];
|
||||||
$response = api_error('error message', HTTP_STATUS::HTTP_BAD_REQUEST);
|
$response = api_error('error message', HTTP_STATUS::HTTP_BAD_REQUEST);
|
||||||
$this->assertSame(HTTP_STATUS::HTTP_BAD_REQUEST->value, $response->getStatusCode());
|
$this->assertSame(HTTP_STATUS::HTTP_BAD_REQUEST->value, $response->getStatusCode());
|
||||||
|
|||||||
Reference in New Issue
Block a user