48 lines
2.2 KiB
PHP
48 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Plugin\AzuraCastOnDemandHls\Tests\Service;
|
|
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use Plugin\AzuraCastOnDemandHls\Config;
|
|
use Plugin\AzuraCastOnDemandHls\Security\ResourcePath;
|
|
use Plugin\AzuraCastOnDemandHls\Service\AssetAuthorizer;
|
|
use Plugin\AzuraCastOnDemandHls\Service\CachePaths;
|
|
use Plugin\AzuraCastOnDemandHls\Service\SessionRepository;
|
|
use Plugin\AzuraCastOnDemandHls\Tests\Support\TemporaryDirectoryTestCase;
|
|
|
|
#[CoversClass(AssetAuthorizer::class)]
|
|
final class AssetAuthorizerTest extends TemporaryDirectoryTestCase
|
|
{
|
|
public function testPlaylistAndSegmentRequireValidUnexpiredStationBoundSession(): void
|
|
{
|
|
$config = new Config(sessionTtl: 60, cacheTtl: 60);
|
|
$paths = new CachePaths($config);
|
|
$sessions = new SessionRepository($config, $paths);
|
|
$cacheKey = str_repeat('a', 64);
|
|
$assetDirectory = $paths->asset($this->temporaryDirectory, $cacheKey);
|
|
mkdir($assetDirectory, 0755, true);
|
|
file_put_contents($assetDirectory . '/master.m3u8', '#EXTM3U');
|
|
file_put_contents($assetDirectory . '/media.m3u8', '#EXTM3U');
|
|
file_put_contents($assetDirectory . '/segment00000.ts', 'segment');
|
|
|
|
$created = $sessions->create(
|
|
$this->temporaryDirectory,
|
|
7,
|
|
'abcdef123456abcdef123456',
|
|
$cacheKey,
|
|
str_repeat('c', 64),
|
|
1000,
|
|
);
|
|
$authorizer = new AssetAuthorizer($sessions, $paths);
|
|
|
|
self::assertNotNull($authorizer->authorize($this->temporaryDirectory, 7, $created['token'], 'master.m3u8', 1059));
|
|
self::assertNotNull($authorizer->authorize($this->temporaryDirectory, 7, $created['token'], 'segment00000.ts', 1059));
|
|
self::assertNull($authorizer->authorize($this->temporaryDirectory, 8, $created['token'], 'master.m3u8', 1059));
|
|
self::assertNull($authorizer->authorize($this->temporaryDirectory, 7, $created['token'], 'master.m3u8', 1060));
|
|
self::assertNull($authorizer->authorize($this->temporaryDirectory, 7, 'x' . substr($created['token'], 1), 'master.m3u8', 1059));
|
|
self::assertNull($authorizer->authorize($this->temporaryDirectory, 7, $created['token'], '../master.m3u8', 1059));
|
|
}
|
|
}
|