Files
kupshop/bundles/KupShop/ApiBundle/View/ApiView.php
2025-08-02 16:30:27 +02:00

74 lines
2.4 KiB
PHP

<?php
namespace KupShop\ApiBundle\View;
use KupShop\ApiBundle\Api\Errors;
use KupShop\KupShopBundle\Context\DomainContext;
use KupShop\KupShopBundle\Util\Contexts;
use KupShop\KupShopBundle\Views\View;
use Luracast\Restler\Defaults;
use Luracast\Restler\Explorer\Info;
use Luracast\Restler\Explorer\v1\Explorer;
use Luracast\Restler\Restler;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ApiView extends View
{
private LoggerInterface $logger;
public $requirements = [
'modules' => [
'eshop_users' => true,
'api' => true,
],
'logged_user' => true,
];
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getResponse(?Request $request = null)
{
// MRTĚ HUSTO KRUTOPŘÍSNEJ JOEŮV HACK:
$_SERVER['SCRIPT_NAME'] = '/api/launch.php';
Explorer::$hideProtected = false;
Explorer::$allowScalarValueOnRequestBody = false;
global $cfg;
Defaults::$useUrlBasedVersioning = true;
Defaults::$cacheDirectory = realpath($cfg['Path']['data'].'tmp/cache');
Defaults::$crossOriginResourceSharing = true;
Defaults::$accessControlAllowOrigin = '*';
Defaults::$returnResponse = true;
Defaults::$apiAccessLevel = 2;
$r = new Restler(!isDevelopment());
$r->onComplete(function () use ($r) {
Errors::log($this->logger, $r);
});
$r->addErrorClass(Errors::class);
Info::$contactEmail = 'wpj@wpj.cz';
Info::$description = 'Live B2B API Documentation';
Info::$title = 'B2B API Documentation';
$r->setAPIVersion(1);
$r->addAPIClass('KupShop\ApiBundle\Api\Endpoints\CartEndpoint', 'cart');
$r->addAPIClass('KupShop\ApiBundle\Api\Endpoints\OrderEndpoint', 'order');
$r->addAPIClass('KupShop\ApiBundle\Api\ApiExplorer', 'explorer');
$r->setSupportedFormats('JsonFormat', 'XmlFormat');
$r->addAuthenticationClass('KupShop\ApiBundle\Api\Auth');
$r->setBaseUrls('https://'.Contexts::get(DomainContext::class)->getActiveId());
$response = new Response($r->handle(), $r->responseCode);
$response->headers->set('Content-Type', $r->responseFormat->getMIME());
return $response;
}
}