forked from mirror/pixelfed
83 lines
2.1 KiB
PHP
83 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Aws\S3\S3Client;
|
|
use Aws\S3\Exception\S3Exception;
|
|
use GuzzleHttp\Exception\ConnectException;
|
|
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
|
|
use League\Flysystem\Filesystem;
|
|
use League\Flysystem\UnableToRetrieveMetadata;
|
|
use League\Flysystem\FilesystemException;
|
|
use League\Flysystem\UnableToListContents;
|
|
use League\Flysystem\FileAttributes;
|
|
use League\Flysystem\UnableToWriteFile;
|
|
|
|
class FilesystemService
|
|
{
|
|
const VERIFY_FILE_NAME = 'cfstest.txt';
|
|
|
|
public static function getVerifyCredentials($key, $secret, $region, $bucket, $endpoint)
|
|
{
|
|
$client = new S3Client([
|
|
'version' => 'latest',
|
|
'region' => $region,
|
|
'endpoint' => $endpoint,
|
|
'credentials' => [
|
|
'key' => $key,
|
|
'secret' => $secret,
|
|
]
|
|
]);
|
|
|
|
$adapter = new AwsS3V3Adapter(
|
|
$client,
|
|
$bucket,
|
|
);
|
|
|
|
$throw = false;
|
|
$filesystem = new Filesystem($adapter);
|
|
|
|
$writable = false;
|
|
try {
|
|
$filesystem->write(self::VERIFY_FILE_NAME, 'ok', []);
|
|
$writable = true;
|
|
} catch (FilesystemException | UnableToWriteFile $exception) {
|
|
$writable = false;
|
|
}
|
|
|
|
if(!$writable) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
$response = $filesystem->read(self::VERIFY_FILE_NAME);
|
|
if($response === 'ok') {
|
|
$writable = true;
|
|
$res[] = self::VERIFY_FILE_NAME;
|
|
} else {
|
|
$writable = false;
|
|
}
|
|
} catch (FilesystemException | UnableToReadFile $exception) {
|
|
$writable = false;
|
|
}
|
|
|
|
if(in_array(self::VERIFY_FILE_NAME, $res)) {
|
|
try {
|
|
$filesystem->delete(self::VERIFY_FILE_NAME);
|
|
} catch (FilesystemException | UnableToDeleteFile $exception) {
|
|
$writable = false;
|
|
}
|
|
}
|
|
|
|
if(!$writable) {
|
|
return false;
|
|
}
|
|
|
|
if(in_array(self::VERIFY_FILE_NAME, $res)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|