pixelfed/app/Services/FilesystemService.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;
}
}