Switch request/response invocation strategy on controllers.
This commit is contained in:
parent
9f7825eba8
commit
f83ff18f6c
|
@ -585,7 +585,7 @@ return static function (RouteCollectorProxy $group) {
|
|||
* Reports
|
||||
*/
|
||||
|
||||
$group->get('/history', Controller\Api\Stations\HistoryController::class)
|
||||
$group->get('/history', Controller\Api\Stations\HistoryAction::class)
|
||||
->setName('api:stations:history')
|
||||
->add(new Middleware\Permissions(StationPermissions::Reports, true));
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ return static function (RouteCollectorProxy $app) {
|
|||
$group->get('/schedule[/{embed:embed}]', Controller\Frontend\PublicPages\ScheduleAction::class)
|
||||
->setName('public:schedule');
|
||||
|
||||
$group->get('/podcasts', Controller\Frontend\PublicPages\PodcastsController::class)
|
||||
$group->get('/podcasts', Controller\Frontend\PublicPages\PodcastsAction::class)
|
||||
->setName('public:podcasts');
|
||||
|
||||
$group->get(
|
||||
|
|
|
@ -16,7 +16,7 @@ use Monolog\Registry;
|
|||
use Psr\EventDispatcher\EventDispatcherInterface;
|
||||
use Slim\App;
|
||||
use Slim\Factory\ServerRequestCreatorFactory;
|
||||
use Slim\Handlers\Strategies\RequestResponseNamedArgs;
|
||||
use Slim\Handlers\Strategies\RequestResponse;
|
||||
|
||||
final class AppFactory
|
||||
{
|
||||
|
@ -54,8 +54,7 @@ final class AppFactory
|
|||
$container->set(App::class, $app);
|
||||
|
||||
$routeCollector = $app->getRouteCollector();
|
||||
|
||||
$routeCollector->setDefaultInvocationStrategy(new RequestResponseNamedArgs());
|
||||
$routeCollector->setDefaultInvocationStrategy(new RequestResponse());
|
||||
|
||||
$environment = $container->get(Environment::class);
|
||||
if ($environment->isProduction()) {
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ApiKeysAction
|
||||
final class ApiKeysAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class AuditLogAction
|
||||
final class AuditLogAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Enums\StorageLocationTypes;
|
||||
use App\Entity\Repository\StorageLocationRepository;
|
||||
use App\Entity\Settings;
|
||||
|
@ -12,7 +13,7 @@ use App\Http\Response;
|
|||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class BackupsAction
|
||||
final class BackupsAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
|
@ -23,7 +24,8 @@ final class BackupsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,16 +5,18 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Settings;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class BrandingAction
|
||||
final class BrandingAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,16 +4,18 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Media\Enums\MetadataTags;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class CustomFieldsAction
|
||||
final class CustomFieldsAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,11 +5,12 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Console\Application;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ClearCacheAction
|
||||
final class ClearCacheAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Application $console,
|
||||
|
@ -18,7 +19,8 @@ final class ClearCacheAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
[, $resultOutput] = $this->console->runCommandWithArgs(
|
||||
'cache:clear'
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\MessageQueue\QueueManagerInterface;
|
||||
use App\MessageQueue\QueueNames;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ClearQueueAction
|
||||
final class ClearQueueAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly QueueManagerInterface $queueManager
|
||||
|
@ -20,8 +21,11 @@ final class ClearQueueAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $queue = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string|null $queue */
|
||||
$queue = $params['queue'] ?? null;
|
||||
|
||||
if (!empty($queue)) {
|
||||
$this->queueManager->clearQueue(
|
||||
QueueNames::from($queue)
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationQueueRepository;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -13,7 +14,7 @@ use Monolog\Handler\TestHandler;
|
|||
use Monolog\Level;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ClearStationQueueAction
|
||||
final class ClearStationQueueAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -26,7 +27,7 @@ final class ClearStationQueueAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Console\Command\Sync\SingleTaskCommand;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Event\GetSyncTasks;
|
||||
use App\Http\Response;
|
||||
|
@ -18,7 +19,7 @@ use Psr\EventDispatcher\EventDispatcherInterface;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\SimpleCache\CacheInterface;
|
||||
|
||||
final class IndexAction
|
||||
final class IndexAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo,
|
||||
|
@ -30,7 +31,8 @@ final class IndexAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Radio\AutoDJ\Annotations;
|
||||
|
@ -12,7 +13,7 @@ use Monolog\Handler\TestHandler;
|
|||
use Monolog\Level;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class NextSongAction
|
||||
final class NextSongAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -24,7 +25,7 @@ final class NextSongAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Sync\NowPlaying\Task\NowPlayingTask;
|
||||
|
@ -12,7 +13,7 @@ use Monolog\Handler\TestHandler;
|
|||
use Monolog\Level;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class NowPlayingAction
|
||||
final class NowPlayingAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -24,7 +25,7 @@ final class NowPlayingAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Admin\Debug;
|
|||
|
||||
use App\Console\Command\Sync\SingleTaskCommand;
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Event\GetSyncTasks;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -14,7 +15,7 @@ use Monolog\Level;
|
|||
use Psr\EventDispatcher\EventDispatcherInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class SyncAction
|
||||
final class SyncAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -24,14 +25,14 @@ final class SyncAction
|
|||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param class-string|string $task
|
||||
*/
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $task
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var class-string|string $task */
|
||||
$task = $params['task'];
|
||||
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Admin\Debug;
|
||||
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Exception\StationUnsupportedException;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -13,7 +14,7 @@ use Monolog\Handler\TestHandler;
|
|||
use Monolog\Level;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class TelnetAction
|
||||
final class TelnetAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -25,7 +26,7 @@ final class TelnetAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$testHandler = new TestHandler(Level::Debug, false);
|
||||
$this->logger->pushHandler($testHandler);
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GeoLiteAction
|
||||
final class GeoLiteAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class IndexAction
|
||||
final class IndexAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
$view = $request->getView();
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Enums\StationPermissions;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class LogsAction
|
||||
final class LogsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo
|
||||
|
@ -19,7 +20,8 @@ final class LogsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,12 +4,13 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PermissionsAction
|
||||
final class PermissionsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo,
|
||||
|
@ -18,7 +19,8 @@ final class PermissionsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class RelaysAction
|
||||
final class RelaysAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Settings;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Version;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class SettingsAction
|
||||
final class SettingsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Version $version,
|
||||
|
@ -19,7 +20,8 @@ final class SettingsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,16 +4,18 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use RuntimeException;
|
||||
|
||||
final class ShoutcastAction
|
||||
final class ShoutcastAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
if ('x86_64' !== php_uname('m')) {
|
||||
throw new RuntimeException('Shoutcast cannot be installed on non-X86_64 systems.');
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Radio\Adapters;
|
||||
use App\VueComponent\StationFormComponent;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class StationsAction
|
||||
final class StationsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationFormComponent $stationFormComponent,
|
||||
|
@ -20,7 +21,8 @@ final class StationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class StereoToolAction
|
||||
final class StereoToolAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class StorageLocationsAction
|
||||
final class StorageLocationsAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -6,12 +6,13 @@ namespace App\Controller\Admin;
|
|||
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Version;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class UpdatesAction
|
||||
final class UpdatesAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
use SettingsAwareTrait;
|
||||
|
@ -23,7 +24,8 @@ final class UpdatesAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$settings = $this->readSettings();
|
||||
|
||||
|
|
|
@ -4,12 +4,13 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\RoleRepository;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class UsersAction
|
||||
final class UsersAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RoleRepository $roleRepo,
|
||||
|
@ -18,7 +19,8 @@ final class UsersAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Interfaces\IdentifiableEntityInterface;
|
||||
use App\Exception\ValidationException;
|
||||
use App\Http\Response;
|
||||
|
@ -38,6 +40,16 @@ abstract class AbstractApiCrudController
|
|||
) {
|
||||
}
|
||||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$query = $this->em->createQuery('SELECT e FROM ' . $this->entityClass . ' e');
|
||||
|
||||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
protected function listPaginatedFromQuery(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
|
@ -52,6 +64,53 @@ abstract class AbstractApiCrudController
|
|||
return $paginator->write($response);
|
||||
}
|
||||
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$row = $this->createRecord($request, (array)$request->getParsedBody());
|
||||
|
||||
$return = $this->viewRecord($row, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function createRecord(ServerRequest $request, array $data): object
|
||||
{
|
||||
return $this->editRecord($data);
|
||||
}
|
||||
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request, $params);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$return = $this->viewRecord($record, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TEntity|null
|
||||
*/
|
||||
protected function getRecord(ServerRequest $request, array $params): ?object
|
||||
{
|
||||
/** @var string $id */
|
||||
$id = $params['id'];
|
||||
|
||||
return $this->em->find($this->entityClass, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TEntity $record
|
||||
* @param ServerRequest $request
|
||||
|
@ -128,6 +187,23 @@ abstract class AbstractApiCrudController
|
|||
return get_class($object) . ': ' . spl_object_hash($object);
|
||||
}
|
||||
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request, $params);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->editRecord((array)$request->getParsedBody(), $record);
|
||||
|
||||
return $response->withJson(Status::updated());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<mixed>|null $data
|
||||
* @param TEntity|null $record
|
||||
|
@ -170,6 +246,23 @@ abstract class AbstractApiCrudController
|
|||
return $this->serializer->denormalize($data, $this->entityClass, null, $context);
|
||||
}
|
||||
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request, $params);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->deleteRecord($record);
|
||||
|
||||
return $response->withJson(Status::deleted());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TEntity $record
|
||||
*/
|
||||
|
|
|
@ -1,107 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* @template TEntity as object
|
||||
* @extends AbstractApiCrudController<TEntity>
|
||||
*/
|
||||
abstract class AbstractAdminApiCrudController extends AbstractApiCrudController
|
||||
{
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$query = $this->em->createQuery('SELECT e FROM ' . $this->entityClass . ' e');
|
||||
|
||||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
): ResponseInterface {
|
||||
$row = $this->createRecord((array)$request->getParsedBody());
|
||||
|
||||
$return = $this->viewRecord($row, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function createRecord(array $data): object
|
||||
{
|
||||
return $this->editRecord($data);
|
||||
}
|
||||
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$return = $this->viewRecord($record, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $id
|
||||
*
|
||||
* @return TEntity|null
|
||||
*/
|
||||
protected function getRecord(string $id): ?object
|
||||
{
|
||||
return $this->em->find($this->entityClass, $id);
|
||||
}
|
||||
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->editRecord((array)$request->getParsedBody(), $record);
|
||||
|
||||
return $response->withJson(Status::updated());
|
||||
}
|
||||
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->deleteRecord($record);
|
||||
|
||||
return $response->withJson(Status::deleted());
|
||||
}
|
||||
}
|
|
@ -5,20 +5,24 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\Acme;
|
||||
|
||||
use App\Controller\Api\Traits\HasLogViewer;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Utilities\File;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class CertificateLogAction
|
||||
final class CertificateLogAction implements SingleActionInterface
|
||||
{
|
||||
use HasLogViewer;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $path
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $path */
|
||||
$path = $params['path'];
|
||||
|
||||
$tempPath = File::validateTempPath($path);
|
||||
|
||||
return $this->streamLogToResponse(
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Acme;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Message\GenerateAcmeCertificate;
|
||||
|
@ -11,7 +12,7 @@ use App\Utilities\File;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Symfony\Component\Messenger\MessageBus;
|
||||
|
||||
final class GenerateCertificateAction
|
||||
final class GenerateCertificateAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly MessageBus $messageBus
|
||||
|
@ -20,7 +21,8 @@ final class GenerateCertificateAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$tempFile = File::generateTempPath('acme_test.log');
|
||||
|
||||
|
|
|
@ -4,12 +4,13 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\ApiKey;
|
||||
|
||||
/**
|
||||
* @extends AbstractAdminApiCrudController<ApiKey>
|
||||
* @extends AbstractApiCrudController<ApiKey>
|
||||
*/
|
||||
final class ApiKeysController extends AbstractAdminApiCrudController
|
||||
final class ApiKeysController extends AbstractApiCrudController
|
||||
{
|
||||
protected string $entityClass = ApiKey::class;
|
||||
protected string $resourceRouteName = 'api:admin:api-key';
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Backups;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Enums\StorageLocationTypes;
|
||||
use App\Entity\Repository\StorageLocationRepository;
|
||||
use App\Entity\StorageLocation;
|
||||
use App\Exception\NotFoundException;
|
||||
use InvalidArgumentException;
|
||||
|
||||
abstract class AbstractFileAction
|
||||
abstract class AbstractFileAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
protected readonly StorageLocationRepository $storageLocationRepo
|
||||
|
|
|
@ -15,8 +15,11 @@ final class DeleteAction extends AbstractFileAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $path
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $path */
|
||||
$path = $params['path'];
|
||||
|
||||
[$path, $fs] = $this->getFile($path);
|
||||
|
||||
/** @var ExtendedFilesystemInterface $fs */
|
||||
|
|
|
@ -14,8 +14,11 @@ final class DownloadAction extends AbstractFileAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $path
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $path */
|
||||
$path = $params['path'];
|
||||
|
||||
[$path, $fs] = $this->getFile($path);
|
||||
|
||||
/** @var ExtendedFilesystemInterface $fs */
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Backups;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Enums\StorageLocationTypes;
|
||||
use App\Entity\Repository\StorageLocationRepository;
|
||||
use App\Flysystem\Attributes\FileAttributes;
|
||||
|
@ -13,7 +14,7 @@ use App\Paginator;
|
|||
use League\Flysystem\StorageAttributes;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetAction
|
||||
final class GetAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StorageLocationRepository $storageLocationRepo,
|
||||
|
@ -22,7 +23,8 @@ final class GetAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -5,20 +5,24 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\Backups;
|
||||
|
||||
use App\Controller\Api\Traits\HasLogViewer;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Utilities\File;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetLogAction
|
||||
final class GetLogAction implements SingleActionInterface
|
||||
{
|
||||
use HasLogViewer;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $path
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $path */
|
||||
$path = $params['path'];
|
||||
|
||||
$logPath = File::validateTempPath($path);
|
||||
|
||||
return $this->streamLogToResponse($request, $response, $logPath);
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Backups;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Message\BackupMessage;
|
||||
|
@ -11,7 +12,7 @@ use App\Utilities\File;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Symfony\Component\Messenger\MessageBus;
|
||||
|
||||
final class RunAction
|
||||
final class RunAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly MessageBus $messageBus,
|
||||
|
@ -20,7 +21,8 @@ final class RunAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$data = (array)$request->getParsedBody();
|
||||
|
||||
|
|
|
@ -6,20 +6,24 @@ namespace App\Controller\Api\Admin\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DeleteCustomAssetAction
|
||||
final class DeleteCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject($this->environment);
|
||||
$customAsset->delete();
|
||||
|
||||
|
|
|
@ -6,19 +6,23 @@ namespace App\Controller\Api\Admin\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetCustomAssetAction
|
||||
final class GetCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject($this->environment);
|
||||
|
||||
return $response->withJson(
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Admin\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -13,15 +14,18 @@ use App\Media\AlbumArt;
|
|||
use App\Service\Flow;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PostCustomAssetAction
|
||||
final class PostCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject($this->environment);
|
||||
|
||||
$flowResponse = Flow::process($request, $response);
|
||||
|
|
|
@ -4,11 +4,12 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\CustomField;
|
||||
use App\OpenApi;
|
||||
use OpenApi\Attributes as OA;
|
||||
|
||||
/** @extends AbstractAdminApiCrudController<CustomField> */
|
||||
/** @extends AbstractApiCrudController<CustomField> */
|
||||
#[
|
||||
OA\Get(
|
||||
path: '/admin/custom_fields',
|
||||
|
@ -119,7 +120,7 @@ use OpenApi\Attributes as OA;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class CustomFieldsController extends AbstractAdminApiCrudController
|
||||
final class CustomFieldsController extends AbstractApiCrudController
|
||||
{
|
||||
protected string $entityClass = CustomField::class;
|
||||
protected string $resourceRouteName = 'api:admin:custom_field';
|
||||
|
|
|
@ -5,18 +5,20 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\GeoLite;
|
||||
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Service\IpGeolocator\GeoLite;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetAction
|
||||
final class GetAction implements SingleActionInterface
|
||||
{
|
||||
use SettingsAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$version = GeoLite::getVersion();
|
||||
$settings = $this->readSettings();
|
||||
|
|
|
@ -5,13 +5,14 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\GeoLite;
|
||||
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Service\IpGeolocator\GeoLite;
|
||||
use App\Sync\Task\UpdateGeoLiteTask;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PostAction
|
||||
final class PostAction implements SingleActionInterface
|
||||
{
|
||||
use SettingsAwareTrait;
|
||||
|
||||
|
@ -22,7 +23,8 @@ final class PostAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$newKey = trim($request->getParsedBodyParam('geolite_license_key', ''));
|
||||
|
||||
|
|
|
@ -25,8 +25,11 @@ final class LogsAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $log = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string|null $log */
|
||||
$log = $params['log'] ?? null;
|
||||
|
||||
$logPaths = $this->getGlobalLogs();
|
||||
|
||||
if (null === $log) {
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Acl;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\OpenApi;
|
||||
|
@ -29,7 +30,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class PermissionsAction
|
||||
final class PermissionsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Acl $acl,
|
||||
|
@ -38,7 +39,8 @@ final class PermissionsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$permissions = [];
|
||||
foreach ($this->acl->listPermissions() as $group => $actions) {
|
||||
|
|
|
@ -5,18 +5,20 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Relay;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class RelaysAction
|
||||
final class RelaysAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$relays = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Acl;
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Controller\Api\Traits\CanSortResults;
|
||||
use App\Entity\Repository\RolePermissionRepository;
|
||||
use App\Entity\Role;
|
||||
|
@ -20,7 +21,7 @@ use RuntimeException;
|
|||
use Symfony\Component\Serializer\Serializer;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
/** @extends AbstractAdminApiCrudController<Role> */
|
||||
/** @extends AbstractApiCrudController<Role> */
|
||||
#[
|
||||
OA\Get(
|
||||
path: '/admin/roles',
|
||||
|
@ -134,7 +135,7 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class RolesController extends AbstractAdminApiCrudController
|
||||
final class RolesController extends AbstractApiCrudController
|
||||
{
|
||||
use CanSortResults;
|
||||
|
||||
|
@ -156,7 +157,8 @@ final class RolesController extends AbstractAdminApiCrudController
|
|||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
->select('r, rp')
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Exception\ValidationException;
|
||||
|
@ -16,7 +17,7 @@ use Symfony\Component\Validator\Constraints\Email;
|
|||
use Symfony\Component\Validator\Constraints\Required;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
final class SendTestMessageAction
|
||||
final class SendTestMessageAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly ValidatorInterface $validator,
|
||||
|
@ -26,7 +27,8 @@ final class SendTestMessageAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$emailAddress = $request->getParam('email', '');
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\OpenApi;
|
||||
|
@ -35,13 +36,14 @@ use Psr\Http\Message\ResponseInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class ServerStatsAction
|
||||
final class ServerStatsAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$firstCpuMeasurement = CpuStats::getCurrentLoad();
|
||||
$firstNetworkMeasurement = NetworkStats::getNetworkUsage();
|
||||
|
|
|
@ -48,8 +48,11 @@ final class ServiceControlController
|
|||
public function restartAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $service
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $service */
|
||||
$service = $params['service'];
|
||||
|
||||
$this->serviceControl->restart($service);
|
||||
|
||||
return $response->withJson(Status::success());
|
||||
|
|
|
@ -67,8 +67,11 @@ final class SettingsController extends AbstractApiCrudController
|
|||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $group = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string|null $group */
|
||||
$group = $params['group'] ?? null;
|
||||
|
||||
$context = [];
|
||||
if (null !== $group && in_array($group, Settings::VALID_GROUPS, true)) {
|
||||
$context[AbstractNormalizer::GROUPS] = [$group];
|
||||
|
@ -81,8 +84,11 @@ final class SettingsController extends AbstractApiCrudController
|
|||
public function updateAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $group = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string|null $group */
|
||||
$group = $params['group'] ?? null;
|
||||
|
||||
$context = [];
|
||||
if (null !== $group && in_array($group, Settings::VALID_GROUPS, true)) {
|
||||
$context[AbstractNormalizer::GROUPS] = [$group];
|
||||
|
|
|
@ -4,12 +4,13 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Shoutcast;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Radio\Frontend\Shoutcast;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetAction
|
||||
final class GetAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Shoutcast $shoutcast,
|
||||
|
@ -18,7 +19,8 @@ final class GetAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
return $response->withJson(
|
||||
[
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\Shoutcast;
|
||||
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -13,13 +14,14 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use RuntimeException;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
final class PostAction
|
||||
final class PostAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
if ('x86_64' !== php_uname('m')) {
|
||||
throw new RuntimeException('Shoutcast cannot be installed on non-X86_64 systems.');
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Admin\Stations;
|
|||
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\Api\Admin\StationsController;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Interfaces\StationCloneAwareInterface;
|
||||
use App\Entity\RolePermission;
|
||||
|
@ -22,7 +23,7 @@ use Doctrine\Common\Collections\Collection;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Throwable;
|
||||
|
||||
final class CloneAction extends StationsController
|
||||
final class CloneAction extends StationsController implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
|
@ -40,9 +41,9 @@ final class CloneAction extends StationsController
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
$record = $this->getRecord($request, $params);
|
||||
$data = (array)$request->getParsedBody();
|
||||
|
||||
$toClone = $data['clone'];
|
||||
|
|
|
@ -5,16 +5,18 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\Stations;
|
||||
|
||||
use App\Controller\Api\Admin\StationsController;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Station;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class StorageLocationsAction extends StationsController
|
||||
final class StorageLocationsAction extends StationsController implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$newStorageLocationMessage = __('Create a new storage location based on the base directory.');
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Controller\Api\Traits\CanSortResults;
|
||||
use App\Entity\Repository\StationQueueRepository;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
|
@ -24,7 +25,7 @@ use Symfony\Component\Serializer\Serializer;
|
|||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
use Throwable;
|
||||
|
||||
/** @extends AbstractAdminApiCrudController<Station> */
|
||||
/** @extends AbstractApiCrudController<Station> */
|
||||
#[
|
||||
OA\Get(
|
||||
path: '/admin/stations',
|
||||
|
@ -138,7 +139,7 @@ use Throwable;
|
|||
]
|
||||
)
|
||||
]
|
||||
class StationsController extends AbstractAdminApiCrudController
|
||||
class StationsController extends AbstractApiCrudController
|
||||
{
|
||||
use CanSortResults;
|
||||
|
||||
|
@ -158,7 +159,8 @@ class StationsController extends AbstractAdminApiCrudController
|
|||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
|
|
|
@ -4,16 +4,18 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\StereoTool;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Radio\StereoTool;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetAction
|
||||
final class GetAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
return $response->withJson(
|
||||
[
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\StereoTool;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
|
@ -12,11 +13,12 @@ use App\Radio\StereoTool;
|
|||
use App\Service\Flow;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PostAction
|
||||
final class PostAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$flowResponse = Flow::process($request, $response);
|
||||
if ($flowResponse instanceof ResponseInterface) {
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\Api\Admin\StorageLocation as ApiStorageLocation;
|
||||
use App\Entity\Repository\StorageLocationRepository;
|
||||
use App\Entity\StorageLocation;
|
||||
|
@ -17,7 +18,7 @@ use RuntimeException;
|
|||
use Symfony\Component\Serializer\Serializer;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
/** @extends AbstractAdminApiCrudController<StorageLocation> */
|
||||
/** @extends AbstractApiCrudController<StorageLocation> */
|
||||
#[
|
||||
OA\Get(
|
||||
path: '/admin/storage_locations',
|
||||
|
@ -131,7 +132,7 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
final class StorageLocationsController extends AbstractAdminApiCrudController
|
||||
final class StorageLocationsController extends AbstractApiCrudController
|
||||
{
|
||||
protected string $entityClass = StorageLocation::class;
|
||||
protected string $resourceRouteName = 'api:admin:storage_location';
|
||||
|
@ -146,7 +147,8 @@ final class StorageLocationsController extends AbstractAdminApiCrudController
|
|||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Admin\Updates;
|
||||
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Service\AzuraCastCentral;
|
||||
|
@ -12,7 +13,7 @@ use GuzzleHttp\Exception\TransferException;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use RuntimeException;
|
||||
|
||||
final class GetUpdatesAction
|
||||
final class GetUpdatesAction implements SingleActionInterface
|
||||
{
|
||||
use SettingsAwareTrait;
|
||||
|
||||
|
@ -23,7 +24,8 @@ final class GetUpdatesAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$settings = $this->readSettings();
|
||||
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin\Updates;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Service\WebUpdater;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PutUpdatesAction
|
||||
final class PutUpdatesAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly WebUpdater $webUpdater
|
||||
|
@ -19,7 +20,8 @@ final class PutUpdatesAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$this->webUpdater->triggerUpdate();
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Admin;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Controller\Api\Traits\CanSortResults;
|
||||
use App\Controller\Frontend\Account\MasqueradeAction;
|
||||
use App\Entity\Api\Error;
|
||||
|
@ -16,7 +17,7 @@ use InvalidArgumentException;
|
|||
use OpenApi\Attributes as OA;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/** @extends AbstractAdminApiCrudController<User> */
|
||||
/** @extends AbstractApiCrudController<User> */
|
||||
#[
|
||||
OA\Get(
|
||||
path: '/admin/users',
|
||||
|
@ -130,7 +131,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
]
|
||||
)
|
||||
]
|
||||
class UsersController extends AbstractAdminApiCrudController
|
||||
class UsersController extends AbstractApiCrudController
|
||||
{
|
||||
use CanSortResults;
|
||||
|
||||
|
@ -139,7 +140,8 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$qb = $this->em->createQueryBuilder()
|
||||
->select('e')
|
||||
|
@ -200,9 +202,9 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
$record = $this->getRecord($request, $params);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
|
@ -223,9 +225,9 @@ class UsersController extends AbstractAdminApiCrudController
|
|||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($id);
|
||||
$record = $this->getRecord($request, $params);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
|
|
|
@ -5,11 +5,8 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\ApiKey;
|
||||
use App\Entity\Interfaces\EntityGroupsInterface;
|
||||
use App\Entity\User;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Security\SplitToken;
|
||||
|
@ -27,7 +24,8 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
|
||||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$query = $this->em->createQuery(
|
||||
<<<'DQL'
|
||||
|
@ -40,7 +38,8 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$newKey = SplitToken::generate();
|
||||
|
||||
|
@ -58,50 +57,18 @@ final class ApiKeysController extends AbstractApiCrudController
|
|||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request->getUser(), $id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$return = $this->viewRecord($record, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($request->getUser(), $id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->deleteRecord($record);
|
||||
|
||||
return $response->withJson(Status::deleted());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $id
|
||||
*
|
||||
* @return TEntity|null
|
||||
*/
|
||||
private function getRecord(User $user, string $id): ?object
|
||||
protected function getRecord(ServerRequest $request, array $params): ?object
|
||||
{
|
||||
/** @var string $id */
|
||||
$id = $params['id'];
|
||||
|
||||
/** @var TEntity|null $record */
|
||||
$record = $this->em->getRepository(ApiKey::class)->findOneBy([
|
||||
'id' => $id,
|
||||
'user' => $user,
|
||||
'user' => $request->getUser(),
|
||||
]);
|
||||
return $record;
|
||||
}
|
||||
|
|
|
@ -5,18 +5,20 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DeleteTwoFactorAction
|
||||
final class DeleteTwoFactorAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
$user = $this->em->refetch($user);
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Frontend\Account;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\Api\Admin\UsersController;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Interfaces\EntityGroupsInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -15,7 +16,7 @@ use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
|||
use Symfony\Component\Serializer\Serializer;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
final class GetMeAction extends UsersController
|
||||
final class GetMeAction extends UsersController implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
@ -29,7 +30,8 @@ final class GetMeAction extends UsersController
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
$user = $this->em->refetch($user);
|
||||
|
|
|
@ -4,15 +4,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetTwoFactorAction
|
||||
final class GetTwoFactorAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Controller\Api\Admin\UsersController;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Interfaces\EntityGroupsInterface;
|
||||
use App\Http\Response;
|
||||
|
@ -12,11 +13,12 @@ use App\Http\ServerRequest;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
||||
|
||||
final class PutMeAction extends UsersController
|
||||
final class PutMeAction extends UsersController implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
$user = $this->em->refetch($user);
|
||||
|
|
|
@ -4,7 +4,8 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Controller\Api\Admin\UsersController;
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
|
@ -13,11 +14,14 @@ use InvalidArgumentException;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Throwable;
|
||||
|
||||
final class PutPasswordAction extends UsersController
|
||||
final class PutPasswordAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$user = $request->getUser();
|
||||
$body = (array)$request->getParsedBody();
|
||||
|
|
|
@ -5,7 +5,8 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Frontend\Account;
|
||||
|
||||
use App\Auth;
|
||||
use App\Controller\Api\Admin\UsersController;
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
|
@ -17,11 +18,14 @@ use ParagonIE\ConstantTime\Base32;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Throwable;
|
||||
|
||||
final class PutTwoFactorAction extends UsersController
|
||||
final class PutTwoFactorAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$params = (array)$request->getParsedBody();
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Frontend\Dashboard;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Enums\AnalyticsIntervals;
|
||||
use App\Entity\Station;
|
||||
|
@ -17,7 +18,7 @@ use Carbon\CarbonImmutable;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\SimpleCache\CacheInterface;
|
||||
|
||||
final class ChartsAction
|
||||
final class ChartsAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
use SettingsAwareTrait;
|
||||
|
@ -29,7 +30,8 @@ final class ChartsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
if (!$this->readSettings()->isAnalyticsEnabled()) {
|
||||
return $response->withStatus(403, 'Forbidden')
|
||||
|
|
|
@ -5,12 +5,13 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Frontend\Dashboard;
|
||||
|
||||
use App\CallableEventDispatcherInterface;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Event;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class NotificationsAction
|
||||
final class NotificationsAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly CallableEventDispatcherInterface $eventDispatcher,
|
||||
|
@ -19,7 +20,8 @@ final class NotificationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$event = new Event\GetNotifications($request);
|
||||
$this->eventDispatcher->dispatch($event);
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Frontend\Dashboard;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Container\SettingsAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Dashboard;
|
||||
use App\Entity\ApiGenerator\NowPlayingApiGenerator;
|
||||
use App\Entity\Station;
|
||||
|
@ -15,7 +16,7 @@ use App\Http\ServerRequest;
|
|||
use App\Paginator;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class StationsAction
|
||||
final class StationsAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
use SettingsAwareTrait;
|
||||
|
@ -27,7 +28,8 @@ final class StationsAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
$acl = $request->getAcl();
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Internal;
|
|||
|
||||
use App\Container\ContainerAwareTrait;
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Enums\StationPermissions;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -16,7 +17,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use RuntimeException;
|
||||
use Throwable;
|
||||
|
||||
final class LiquidsoapAction
|
||||
final class LiquidsoapAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
use ContainerAwareTrait;
|
||||
|
@ -24,9 +25,11 @@ final class LiquidsoapAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $action
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $action */
|
||||
$action = $params['action'];
|
||||
|
||||
$station = $request->getStation();
|
||||
$asAutoDj = $request->hasHeader('X-Liquidsoap-Api-Key');
|
||||
$payload = (array)$request->getParsedBody();
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Internal;
|
||||
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Enums\StationPermissions;
|
||||
use App\Exception\PermissionDeniedException;
|
||||
use App\Http\Response;
|
||||
|
@ -12,7 +13,7 @@ use App\Http\ServerRequest;
|
|||
use App\Radio\Frontend\Blocklist\BlocklistParser;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ListenerAuthAction
|
||||
final class ListenerAuthAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
|
@ -24,7 +25,7 @@ final class ListenerAuthAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -6,19 +6,21 @@ namespace App\Controller\Api\Internal;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\SftpUser;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class SftpAuthAction
|
||||
final class SftpAuthAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$errorResponse = $response
|
||||
->withStatus(500)
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Internal;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StorageLocationRepository;
|
||||
use App\Entity\SftpUser;
|
||||
use App\Entity\StorageLocation;
|
||||
|
@ -19,7 +20,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use Symfony\Component\Messenger\MessageBus;
|
||||
use Throwable;
|
||||
|
||||
final class SftpEventAction
|
||||
final class SftpEventAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
use EntityManagerAwareTrait;
|
||||
|
@ -33,7 +34,8 @@ final class SftpEventAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$errorResponse = $response->withStatus(500)->withJson(['success' => false]);
|
||||
|
||||
|
|
|
@ -57,12 +57,15 @@ final class NowPlayingController
|
|||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
?string $station_id = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string|null $stationId */
|
||||
$stationId = $params['station_id'] ?? null;
|
||||
|
||||
$router = $request->getRouter();
|
||||
|
||||
if (!empty($station_id)) {
|
||||
$np = $this->nowPlayingCache->getForStation($station_id);
|
||||
if (!empty($stationId)) {
|
||||
$np = $this->nowPlayingCache->getForStation($stationId);
|
||||
|
||||
if ($np instanceof NowPlaying) {
|
||||
$np->resolveUrls($router->getBaseUrl());
|
||||
|
@ -97,10 +100,12 @@ final class NowPlayingController
|
|||
public function getArtAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
?string $timestamp = null
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$np = $this->nowPlayingCache->getForStation($station_id);
|
||||
/** @var string $stationId */
|
||||
$stationId = $params['station_id'];
|
||||
|
||||
$np = $this->nowPlayingCache->getForStation($stationId);
|
||||
|
||||
if ($np instanceof NowPlaying) {
|
||||
$np->resolveUrls($request->getRouter()->getBaseUrl());
|
||||
|
|
|
@ -5,11 +5,12 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api;
|
||||
|
||||
use App\Console\Command\GenerateApiDocsCommand;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class OpenApiAction
|
||||
final class OpenApiAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly GenerateApiDocsCommand $apiDocsCommand
|
||||
|
@ -18,7 +19,8 @@ final class OpenApiAction
|
|||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$apiBaseUrl = str_replace(
|
||||
'/openapi.yml',
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\ApiGenerator\SongApiGenerator;
|
||||
use App\Entity\StationMedia;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -12,7 +13,7 @@ use App\Paginator;
|
|||
use Psr\Cache\CacheItemPoolInterface;
|
||||
use RuntimeException;
|
||||
|
||||
abstract class AbstractSearchableListAction
|
||||
abstract class AbstractSearchableListAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations;
|
||||
|
||||
use App\Controller\Api\AbstractApiCrudController;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Station;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -22,7 +20,7 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
public function listAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
|
||||
|
@ -36,6 +34,44 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
return $this->listPaginatedFromQuery($request, $response, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function createRecord(ServerRequest $request, array $data): object
|
||||
{
|
||||
return $this->editRecord(
|
||||
$data,
|
||||
null,
|
||||
[
|
||||
AbstractNormalizer::DEFAULT_CONSTRUCTOR_ARGUMENTS => [
|
||||
$this->entityClass => [
|
||||
'station' => $request->getStation(),
|
||||
],
|
||||
],
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function getRecord(
|
||||
ServerRequest $request,
|
||||
array $params
|
||||
): ?object {
|
||||
$station = $request->getStation();
|
||||
|
||||
/** @var int|string $id */
|
||||
$id = $params['id'];
|
||||
|
||||
return $this->em->getRepository($this->entityClass)->findOneBy(
|
||||
[
|
||||
'station' => $station,
|
||||
'id' => $id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A placeholder function to retrieve the current station that some controllers can
|
||||
* override to verify that the station can perform the specified task.
|
||||
|
@ -46,108 +82,4 @@ abstract class AbstractStationApiCrudController extends AbstractApiCrudControlle
|
|||
{
|
||||
return $request->getStation();
|
||||
}
|
||||
|
||||
public function createAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
$row = $this->createRecord((array)$request->getParsedBody(), $station);
|
||||
|
||||
$return = $this->viewRecord($row, $request);
|
||||
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @param Station $station
|
||||
*
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function createRecord(array $data, Station $station): object
|
||||
{
|
||||
return $this->editRecord(
|
||||
$data,
|
||||
null,
|
||||
[
|
||||
AbstractNormalizer::DEFAULT_CONSTRUCTOR_ARGUMENTS => [
|
||||
$this->entityClass => [
|
||||
'station' => $station,
|
||||
],
|
||||
],
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function getAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$station = $this->getStation($request);
|
||||
$record = $this->getRecord($station, $id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$return = $this->viewRecord($record, $request);
|
||||
return $response->withJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Station $station
|
||||
* @param int|string $id
|
||||
*
|
||||
* @return TEntity
|
||||
*/
|
||||
protected function getRecord(Station $station, int|string $id): ?object
|
||||
{
|
||||
return $this->em->getRepository($this->entityClass)->findOneBy(
|
||||
[
|
||||
'station' => $station,
|
||||
'id' => $id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function editAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($this->getStation($request), $id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->editRecord((array)$request->getParsedBody(), $record);
|
||||
|
||||
return $response->withJson(Status::updated());
|
||||
}
|
||||
|
||||
public function deleteAction(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $id
|
||||
): ResponseInterface {
|
||||
$record = $this->getRecord($this->getStation($request), $id);
|
||||
|
||||
if (null === $record) {
|
||||
return $response->withStatus(404)
|
||||
->withJson(Error::notFound());
|
||||
}
|
||||
|
||||
$this->deleteRecord($record);
|
||||
|
||||
return $response->withJson(Status::deleted());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Art;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Repository\StationMediaRepository;
|
||||
use App\Http\Response;
|
||||
|
@ -39,7 +40,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
new OA\Response(ref: OpenApi::REF_RESPONSE_GENERIC_ERROR, response: 500),
|
||||
]
|
||||
)]
|
||||
final class DeleteArtAction
|
||||
final class DeleteArtAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationMediaRepository $mediaRepo,
|
||||
|
@ -49,12 +50,14 @@ final class DeleteArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $media_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $mediaId */
|
||||
$mediaId = $params['media_id'];
|
||||
|
||||
$station = $request->getStation();
|
||||
|
||||
$media = $this->mediaRepo->requireForStation($media_id, $station);
|
||||
$media = $this->mediaRepo->requireForStation($mediaId, $station);
|
||||
$this->mediaRepo->removeAlbumArt($media);
|
||||
|
||||
return $response->withJson(Status::deleted());
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Art;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationMediaRepository;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Entity\Station;
|
||||
|
@ -41,7 +42,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
),
|
||||
]
|
||||
)]
|
||||
final class GetArtAction
|
||||
final class GetArtAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo,
|
||||
|
@ -53,21 +54,23 @@ final class GetArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $media_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $mediaId */
|
||||
$mediaId = $params['media_id'];
|
||||
|
||||
$station = $request->getStation();
|
||||
|
||||
if (str_contains($media_id, '-')) {
|
||||
if (str_contains($mediaId, '-')) {
|
||||
$response = $response->withCacheLifetime(Response::CACHE_ONE_YEAR);
|
||||
}
|
||||
|
||||
// If a timestamp delimiter is added, strip it automatically.
|
||||
$media_id = explode('-', $media_id, 2)[0];
|
||||
$mediaId = explode('-', $mediaId, 2)[0];
|
||||
|
||||
$fsMedia = $this->stationFilesystems->getMediaFilesystem($station);
|
||||
|
||||
$mediaPath = $this->getMediaPath($station, $fsMedia, $media_id);
|
||||
$mediaPath = $this->getMediaPath($station, $fsMedia, $mediaId);
|
||||
if (null !== $mediaPath) {
|
||||
return $response->streamFilesystemFile(
|
||||
$fsMedia,
|
||||
|
@ -84,17 +87,17 @@ final class GetArtAction
|
|||
private function getMediaPath(
|
||||
Station $station,
|
||||
ExtendedFilesystemInterface $fsMedia,
|
||||
string $media_id
|
||||
string $mediaId
|
||||
): ?string {
|
||||
if (StationMedia::UNIQUE_ID_LENGTH === strlen($media_id)) {
|
||||
$mediaPath = StationMedia::getArtPath($media_id);
|
||||
if (StationMedia::UNIQUE_ID_LENGTH === strlen($mediaId)) {
|
||||
$mediaPath = StationMedia::getArtPath($mediaId);
|
||||
|
||||
if ($fsMedia->fileExists($mediaPath)) {
|
||||
return $mediaPath;
|
||||
}
|
||||
}
|
||||
|
||||
$media = $this->mediaRepo->findForStation($media_id, $station);
|
||||
$media = $this->mediaRepo->findForStation($mediaId, $station);
|
||||
if (!($media instanceof StationMedia)) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations\Art;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Repository\StationMediaRepository;
|
||||
use App\Http\Response;
|
||||
|
@ -41,7 +42,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
new OA\Response(ref: OpenApi::REF_RESPONSE_GENERIC_ERROR, response: 500),
|
||||
]
|
||||
)]
|
||||
final class PostArtAction
|
||||
final class PostArtAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
@ -53,12 +54,14 @@ final class PostArtAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $media_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $mediaId */
|
||||
$mediaId = $params['media_id'];
|
||||
|
||||
$station = $request->getStation();
|
||||
|
||||
$media = $this->mediaRepo->requireForStation($media_id, $station);
|
||||
$media = $this->mediaRepo->requireForStation($mediaId, $station);
|
||||
|
||||
$flowResponse = Flow::process($request, $response, $station->getRadioTempDir());
|
||||
if ($flowResponse instanceof ResponseInterface) {
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations\BulkMedia;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\CustomFieldRepository;
|
||||
use App\Entity\Repository\StationPlaylistRepository;
|
||||
use App\Http\Response;
|
||||
|
@ -13,7 +14,7 @@ use League\Csv\Writer;
|
|||
use Psr\Http\Message\ResponseInterface;
|
||||
use RuntimeException;
|
||||
|
||||
final class DownloadAction
|
||||
final class DownloadAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
@ -26,7 +27,7 @@ final class DownloadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations\BulkMedia;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\StationPlaylistImportResult;
|
||||
use App\Entity\Repository\CustomFieldRepository;
|
||||
use App\Entity\Repository\StationPlaylistMediaRepository;
|
||||
|
@ -25,7 +26,7 @@ use Throwable;
|
|||
use function count;
|
||||
use function str_starts_with;
|
||||
|
||||
final class UploadAction
|
||||
final class UploadAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
@ -56,7 +57,7 @@ final class UploadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -6,21 +6,24 @@ namespace App\Controller\Api\Stations\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DeleteCustomAssetAction
|
||||
final class DeleteCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject(
|
||||
$this->environment,
|
||||
$request->getStation()
|
||||
|
|
|
@ -6,20 +6,23 @@ namespace App\Controller\Api\Stations\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class GetCustomAssetAction
|
||||
final class GetCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject(
|
||||
$this->environment,
|
||||
$request->getStation()
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Stations\CustomAssets;
|
|||
|
||||
use App\Assets\AssetTypes;
|
||||
use App\Container\EnvironmentAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
|
@ -13,16 +14,18 @@ use App\Media\AlbumArt;
|
|||
use App\Service\Flow;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PostCustomAssetAction
|
||||
final class PostCustomAssetAction implements SingleActionInterface
|
||||
{
|
||||
use EnvironmentAwareTrait;
|
||||
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $type
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
/** @var string $type */
|
||||
$type = $params['type'];
|
||||
|
||||
$customAsset = AssetTypes::from($type)->createObject(
|
||||
$this->environment,
|
||||
$request->getStation()
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Fallback;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Http\Response;
|
||||
|
@ -27,7 +28,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
new OA\Response(ref: OpenApi::REF_RESPONSE_GENERIC_ERROR, response: 500),
|
||||
]
|
||||
)]
|
||||
final class DeleteFallbackAction
|
||||
final class DeleteFallbackAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo,
|
||||
|
@ -37,7 +38,7 @@ final class DeleteFallbackAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$this->stationRepo->clearFallback($station);
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Fallback;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Flysystem\StationFilesystems;
|
||||
use App\Http\Response;
|
||||
|
@ -30,12 +31,12 @@ use Psr\Http\Message\ResponseInterface;
|
|||
new OA\Response(ref: OpenApi::REF_RESPONSE_GENERIC_ERROR, response: 500),
|
||||
]
|
||||
)]
|
||||
final class GetFallbackAction
|
||||
final class GetFallbackAction implements SingleActionInterface
|
||||
{
|
||||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Fallback;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Repository\StationRepository;
|
||||
use App\Http\Response;
|
||||
|
@ -28,7 +29,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
new OA\Response(ref: OpenApi::REF_RESPONSE_GENERIC_ERROR, response: 500),
|
||||
]
|
||||
)]
|
||||
final class PostFallbackAction
|
||||
final class PostFallbackAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationRepository $stationRepo
|
||||
|
@ -38,7 +39,7 @@ final class PostFallbackAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace App\Controller\Api\Stations\Files;
|
||||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\BatchResult;
|
||||
use App\Entity\Interfaces\PathAwareInterface;
|
||||
use App\Entity\Repository\StationPlaylistFolderRepository;
|
||||
|
@ -36,7 +37,7 @@ use RuntimeException;
|
|||
use Symfony\Component\Messenger\MessageBus;
|
||||
use Throwable;
|
||||
|
||||
final class BatchAction
|
||||
final class BatchAction implements SingleActionInterface
|
||||
{
|
||||
use EntityManagerAwareTrait;
|
||||
|
||||
|
@ -55,7 +56,7 @@ final class BatchAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
$storageLocation = $station->getMediaStorageLocation();
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Files;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Flysystem\StationFilesystems;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class DownloadAction
|
||||
final class DownloadAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationFilesystems $stationFilesystems
|
||||
|
@ -20,7 +21,7 @@ final class DownloadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Stations\Files;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Container\LoggerAwareTrait;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Entity\Repository\StationPlaylistMediaRepository;
|
||||
|
@ -19,7 +20,7 @@ use App\Media\MediaProcessor;
|
|||
use App\Service\Flow;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class FlowUploadAction
|
||||
final class FlowUploadAction implements SingleActionInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
use EntityManagerAwareTrait;
|
||||
|
@ -33,7 +34,7 @@ final class FlowUploadAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$allParams = $request->getParams();
|
||||
$station = $request->getStation();
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace App\Controller\Api\Stations\Files;
|
|||
|
||||
use App\Container\EntityManagerAwareTrait;
|
||||
use App\Controller\Api\Traits\CanSortResults;
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\FileList;
|
||||
use App\Entity\Api\FileListMedia;
|
||||
use App\Entity\Station;
|
||||
|
@ -25,7 +26,7 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use Psr\SimpleCache\CacheInterface;
|
||||
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
||||
|
||||
final class ListAction
|
||||
final class ListAction implements SingleActionInterface
|
||||
{
|
||||
use CanSortResults;
|
||||
use EntityManagerAwareTrait;
|
||||
|
@ -39,7 +40,7 @@ final class ListAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$router = $request->getRouter();
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Files;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\StationMedia;
|
||||
use App\Flysystem\StationFilesystems;
|
||||
use App\Http\Response;
|
||||
|
@ -11,7 +12,7 @@ use App\Http\ServerRequest;
|
|||
use League\Flysystem\StorageAttributes;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class ListDirectoriesAction
|
||||
final class ListDirectoriesAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationFilesystems $stationFilesystems
|
||||
|
@ -21,7 +22,7 @@ final class ListDirectoriesAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$station = $request->getStation();
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Files;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Api\Error;
|
||||
use App\Entity\Api\Status;
|
||||
use App\Flysystem\StationFilesystems;
|
||||
|
@ -12,7 +13,7 @@ use App\Http\ServerRequest;
|
|||
use League\Flysystem\UnableToCreateDirectory;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class MakeDirectoryAction
|
||||
final class MakeDirectoryAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationFilesystems $stationFilesystems
|
||||
|
@ -22,7 +23,7 @@ final class MakeDirectoryAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
$currentDir = $request->getParam('currentDirectory', '');
|
||||
$newDirName = $request->getParam('name', '');
|
||||
|
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Controller\Api\Stations\Files;
|
||||
|
||||
use App\Controller\SingleActionInterface;
|
||||
use App\Entity\Repository\StationMediaRepository;
|
||||
use App\Flysystem\StationFilesystems;
|
||||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
final class PlayAction
|
||||
final class PlayAction implements SingleActionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly StationMediaRepository $mediaRepo,
|
||||
|
@ -21,11 +22,13 @@ final class PlayAction
|
|||
public function __invoke(
|
||||
ServerRequest $request,
|
||||
Response $response,
|
||||
string $station_id,
|
||||
string $id
|
||||
array $params
|
||||
): ResponseInterface {
|
||||
set_time_limit(600);
|
||||
|
||||
/** @var string $id */
|
||||
$id = $params['id'];
|
||||
|
||||
$station = $request->getStation();
|
||||
|
||||
$media = $this->mediaRepo->requireForStation($id, $station);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue