feat: add secure on-demand HLS playback plugin
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\CallableEventDispatcherInterface;
|
||||
use App\Enums\StationPermissions;
|
||||
use App\Enums\StationFeatures;
|
||||
use App\Event;
|
||||
use App\Middleware;
|
||||
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(
|
||||
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->get(
|
||||
'/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)
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user