Skip to content

Commit

Permalink
Merge pull request #49494 from nextcloud/s3-bucket-create-exception
Browse files Browse the repository at this point in the history
fix: throw correct exception type when we can't verify if an s3 bucket exists
  • Loading branch information
icewind1991 authored Nov 26, 2024
2 parents 14f7e56 + eb05cc2 commit 01b2ae4
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/files-external-smb-kerberos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ jobs:
repository: nextcloud/user_saml
path: apps/user_saml

- name: Install user_saml
run: |
cd apps/user_saml
composer i
cd ../..
- name: Pull images
run: |
docker pull ghcr.io/icewind1991/samba-krb-test-dc
Expand Down
9 changes: 5 additions & 4 deletions lib/private/Files/ObjectStore/S3ConnectionTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Aws\S3\S3Client;
use GuzzleHttp\Promise\Create;
use GuzzleHttp\Promise\RejectedPromise;
use OCP\Files\StorageNotAvailableException;
use OCP\ICertificateManager;
use OCP\Server;
use Psr\Log\LoggerInterface;
Expand Down Expand Up @@ -132,7 +133,7 @@ public function getConnection() {
try {
$logger->info('Bucket "' . $this->bucket . '" does not exist - creating it.', ['app' => 'objectstore']);
if (!$this->connection::isBucketDnsCompatible($this->bucket)) {
throw new \Exception('The bucket will not be created because the name is not dns compatible, please correct it: ' . $this->bucket);
throw new StorageNotAvailableException('The bucket will not be created because the name is not dns compatible, please correct it: ' . $this->bucket);
}
$this->connection->createBucket(['Bucket' => $this->bucket]);
$this->testTimeout();
Expand All @@ -142,17 +143,17 @@ public function getConnection() {
'app' => 'objectstore',
]);
if ($e->getAwsErrorCode() !== 'BucketAlreadyOwnedByYou') {
throw new \Exception('Creation of bucket "' . $this->bucket . '" failed. ' . $e->getMessage());
throw new StorageNotAvailableException('Creation of bucket "' . $this->bucket . '" failed. ' . $e->getMessage());
}
}
}

// google cloud's s3 compatibility doesn't like the EncodingType parameter
if (strpos($base_url, 'storage.googleapis.com')) {
$this->connection->getHandlerList()->remove('s3.auto_encode');
}
} catch (S3Exception $e) {
throw new \Exception('S3 service is unable to handle request: ' . $e->getMessage());
throw new StorageNotAvailableException('S3 service is unable to handle request: ' . $e->getMessage());
}

return $this->connection;
Expand Down
4 changes: 2 additions & 2 deletions lib/private/Files/SetupManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
use OC_App;
use OC_Hook;
use OC_Util;
use OCA\Files_External\Config\ConfigAdapter;
use OCA\Files_External\Config\ExternalMountPoint;
use OCA\Files_Sharing\External\Mount;
use OCA\Files_Sharing\ISharedMountPoint;
use OCA\Files_Sharing\SharedMount;
Expand Down Expand Up @@ -135,7 +135,7 @@ function ($mountPoint, IStorage $storage, IMountPoint $mount) use ($reSharingEna

// install storage availability wrapper, before most other wrappers
Filesystem::addStorageWrapper('oc_availability', function ($mountPoint, IStorage $storage, IMountPoint $mount) {
$externalMount = $mount instanceof ConfigAdapter || $mount instanceof Mount;
$externalMount = $mount instanceof ExternalMountPoint || $mount instanceof Mount;
if ($externalMount && !$storage->isLocal()) {
return new Availability(['storage' => $storage]);
}
Expand Down

0 comments on commit 01b2ae4

Please sign in to comment.