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) ); };