97 lines
4.1 KiB
PHP
97 lines
4.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\CallableEventDispatcherInterface;
|
|
use App\Event\BuildConsoleCommands;
|
|
use App\Event\BuildDoctrineMappingPaths;
|
|
use App\Event\BuildMigrationConfigurationArray;
|
|
use App\Enums\StationPermissions;
|
|
use App\Enums\StationFeatures;
|
|
use App\Event;
|
|
use App\Middleware;
|
|
use Plugin\AzuraCastOnDemandHls\Command\AddCorsOriginCommand;
|
|
use Plugin\AzuraCastOnDemandHls\Command\ClearCorsOriginsCommand;
|
|
use Plugin\AzuraCastOnDemandHls\Command\ListCorsOriginsCommand;
|
|
use Plugin\AzuraCastOnDemandHls\Command\RemoveCorsOriginCommand;
|
|
use Plugin\AzuraCastOnDemandHls\Command\SetCorsOriginsCommand;
|
|
use Plugin\AzuraCastOnDemandHls\Controller\CreatePlaybackAction;
|
|
use Plugin\AzuraCastOnDemandHls\Controller\ServePlaybackAssetAction;
|
|
use Plugin\AzuraCastOnDemandHls\EventHandler\NginxConfiguration;
|
|
use Plugin\AzuraCastOnDemandHls\Service\ScheduledCleanupTask;
|
|
|
|
return static function (CallableEventDispatcherInterface $dispatcher): void {
|
|
$dispatcher->addListener(
|
|
BuildConsoleCommands::class,
|
|
static fn(BuildConsoleCommands $event) => $event->addAliases([
|
|
'azuracast:ondemand-hls:cors:list' => ListCorsOriginsCommand::class,
|
|
'azuracast:ondemand-hls:cors:set' => SetCorsOriginsCommand::class,
|
|
'azuracast:ondemand-hls:cors:add' => AddCorsOriginCommand::class,
|
|
'azuracast:ondemand-hls:cors:remove' => RemoveCorsOriginCommand::class,
|
|
'azuracast:ondemand-hls:cors:clear' => ClearCorsOriginsCommand::class,
|
|
])
|
|
);
|
|
|
|
$dispatcher->addListener(
|
|
BuildDoctrineMappingPaths::class,
|
|
static function (BuildDoctrineMappingPaths $event): void {
|
|
$paths = $event->getMappingClassesPaths();
|
|
$paths[] = __DIR__ . '/src/Entity';
|
|
$event->setMappingClassesPaths(array_values(array_unique($paths)));
|
|
}
|
|
);
|
|
|
|
$dispatcher->addListener(
|
|
BuildMigrationConfigurationArray::class,
|
|
static function (BuildMigrationConfigurationArray $event): void {
|
|
$configuration = $event->getMigrationConfigurations();
|
|
$configuration['migrations_paths'] ??= [];
|
|
$configuration['migrations_paths']['Plugin\AzuraCastOnDemandHls\Entity\Migration'] = __DIR__ . '/src/Entity/Migration';
|
|
$event->setMigrationConfigurations($configuration);
|
|
}
|
|
);
|
|
$dispatcher->addListener(
|
|
Event\BuildRoutes::class,
|
|
static function (Event\BuildRoutes $event): void {
|
|
$app = $event->getApp();
|
|
|
|
$app->post(
|
|
'/api/station/{station_id}/ondemand-hls/{media_id:[a-zA-Z0-9-]+}',
|
|
CreatePlaybackAction::class
|
|
)
|
|
->setName('ondemand-hls:create')
|
|
->add(new Middleware\RateLimit('ondemand_hls_create', 60, 10))
|
|
->add(new Middleware\Permissions(StationPermissions::Media, true))
|
|
->add(new Middleware\StationSupportsFeature(StationFeatures::OnDemand))
|
|
->add(Middleware\RequireStation::class)
|
|
->add(Middleware\GetStation::class)
|
|
->add(Middleware\Module\Api::class)
|
|
->add(Middleware\Auth\ApiAuth::class)
|
|
->add(Middleware\InjectSession::class);
|
|
|
|
$app->map(
|
|
['GET', 'HEAD', 'OPTIONS'],
|
|
'/api/station/{station_id}/ondemand-hls/playback/{token:[A-Za-z0-9_-]+}/{resource:[A-Za-z0-9._-]+}',
|
|
ServePlaybackAssetAction::class
|
|
)
|
|
->setName('ondemand-hls:asset')
|
|
->add(new Middleware\RateLimit('ondemand_hls_asset', 5, 150))
|
|
->add(Middleware\RequireStation::class)
|
|
->add(Middleware\GetStation::class)
|
|
->add(Middleware\Module\Api::class)
|
|
->add(Middleware\Auth\PublicAuth::class);
|
|
}
|
|
);
|
|
|
|
$dispatcher->addCallableListener(
|
|
Event\Nginx\WriteNginxConfiguration::class,
|
|
NginxConfiguration::class,
|
|
priority: 20
|
|
);
|
|
|
|
$dispatcher->addListener(
|
|
Event\GetSyncTasks::class,
|
|
static fn(Event\GetSyncTasks $event) => $event->addTask(ScheduledCleanupTask::class)
|
|
);
|
|
};
|