1, 'csrf' => 'test-csrf'];
}
protected function tearDown(): void
{
unset($_SESSION);
}
public function testConnectionDetailsNeverRedisplaySecrets(): void
{
$resp = Views::connect(
['id' => 1, 'username' => 'admin'],
[
[
'access_key_id' => 'AKIATESTKEY0001',
'description' => 'laptop-rclone',
'secret_access_key' => 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY',
],
],
['photos', 'backups'],
'https://s3.example.com',
'eu-west-1',
);
self::assertSame(200, $resp->status);
self::assertSame('no-store', $resp->headers['Cache-Control'] ?? '');
foreach ([
'https://s3.example.com',
'eu-west-1',
'AKIATESTKEY0001',
'laptop-rclone',
'photos',
'backups',
'data-copy="f-endpoint"',
'data-copy="f-region"',
'data-copy="f-bucket"',
'data-copy="f-akid"',
'f-keyselect',
] as $needle) {
self::assertStringContainsString($needle, $resp->body);
}
self::assertStringNotContainsString('wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY', $resp->body);
self::assertStringContainsString('never redisplays a secret', $resp->body);
}
public function testEmptyStateStillRendersEndpointAndRegion(): void
{
$resp = Views::connect(
['id' => 1, 'username' => 'admin'],
[],
[],
'http://127.0.0.1:8099',
'us-east-1',
);
self::assertSame(200, $resp->status);
self::assertStringContainsString('No keys yet', $resp->body);
self::assertStringContainsString('* (all buckets)', $resp->body);
self::assertStringContainsString('http://127.0.0.1:8099', $resp->body);
self::assertStringContainsString('us-east-1', $resp->body);
}
public function testUserSuppliedStringsAreHtmlEscaped(): void
{
$xss = '';
$resp = Views::connect(
['id' => 1, 'username' => 'admin'],
[['access_key_id' => 'AKIA"EVIL', 'description' => $xss, 'secret_access_key' => 's']],
['
'],
'https://s3.example.com',
'us-east-1',
);
self::assertStringNotContainsString($xss, $resp->body);
self::assertStringContainsString('<script>alert(1)</script>', $resp->body);
self::assertStringNotContainsString('
', $resp->body);
self::assertStringNotContainsString('value="AKIA"EVIL"', $resp->body);
self::assertStringNotContainsString('s', $resp->body);
self::assertStringNotContainsString('<b>s</b>', $resp->body);
}
}