2022-02-20 21:22:07 +01:00
|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Akeeba Engine
|
|
|
|
|
*
|
|
|
|
|
* @package akeebaengine
|
2023-12-19 03:28:16 +01:00
|
|
|
|
* @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
|
2022-02-20 21:22:07 +01:00
|
|
|
|
* @license GNU General Public License version 3, or later
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace Akeeba\MiniTest\Test;
|
|
|
|
|
|
|
|
|
|
|
2023-12-19 03:28:16 +01:00
|
|
|
|
use Akeeba\S3\Acl;
|
|
|
|
|
use Akeeba\S3\Connector;
|
|
|
|
|
use Akeeba\S3\Input;
|
2022-02-20 21:22:07 +01:00
|
|
|
|
use RuntimeException;
|
|
|
|
|
|
|
|
|
|
class SignedURLs extends AbstractTest
|
|
|
|
|
{
|
|
|
|
|
public static function signedURLPublicObject(Connector $s3, array $options): bool
|
|
|
|
|
{
|
2023-12-19 03:28:16 +01:00
|
|
|
|
return static::signedURL($s3, $options, Acl::ACL_PUBLIC_READ);
|
2022-02-20 21:22:07 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function signedURLPrivateObject(Connector $s3, array $options): bool
|
|
|
|
|
{
|
2023-12-19 03:28:16 +01:00
|
|
|
|
return static::signedURL($s3, $options, Acl::ACL_PRIVATE);
|
2022-02-20 21:22:07 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static function signedURL(Connector $s3, array $options, string $aclPrivilege): bool
|
|
|
|
|
{
|
2023-12-19 03:28:16 +01:00
|
|
|
|
$tempData = static::getRandomData(AbstractTest::TEN_KB);
|
2022-02-20 21:22:07 +01:00
|
|
|
|
$input = Input::createFromData($tempData);
|
|
|
|
|
$uri = 'test.' . md5(microtime(false)) . '.dat';
|
|
|
|
|
|
|
|
|
|
$s3->putObject($input, $options['bucket'], $uri, $aclPrivilege);
|
|
|
|
|
|
|
|
|
|
$downloadURL = $s3->getAuthenticatedURL($options['bucket'], $uri, null, $options['ssl']);
|
|
|
|
|
$downloadedData = @file_get_contents($downloadURL);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
$s3->deleteObject($options['bucket'], $uri);
|
|
|
|
|
}
|
|
|
|
|
catch (\Exception $e)
|
|
|
|
|
{
|
|
|
|
|
// Ignore deletion errors
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($downloadedData === false)
|
|
|
|
|
{
|
|
|
|
|
throw new RuntimeException("Failed to download from signed URL ‘{$downloadURL}′");
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-19 03:28:16 +01:00
|
|
|
|
static::assert(static::areStringsEqual($tempData, $downloadedData), "Wrong data received from signed URL ‘{$downloadURL}′");
|
2022-02-20 21:22:07 +01:00
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|