From 8799d5563f80b56f9d1354e65f2156e702a86414 Mon Sep 17 00:00:00 2001 From: Tim Dettrick Date: Wed, 20 May 2015 17:04:43 +1000 Subject: [PATCH] Allowing access to Swift containers shared by ACL To avoid a confusing extra field, the bucket field is overloaded to optionally take a URL. --- apps/files_external/lib/swift.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index a64a02a4ed9f..4973f576ab66 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -32,6 +32,7 @@ namespace OC\Files\Storage; +use Guzzle\Http\Url; use Guzzle\Http\Exception\ClientErrorResponseException; use Icewind\Streams\IteratorDirectory; use OpenCloud; @@ -123,7 +124,14 @@ public function __construct($params) { } $this->id = 'swift::' . $params['user'] . md5($params['bucket']); - $this->bucket = $params['bucket']; + + $bucketUrl = Url::factory($params['bucket']); + if ($bucketUrl->isAbsolute()) { + $this->bucket = end(($bucketUrl->getPathSegments())); + $params['endpoint_url'] = $bucketUrl->addPath('..')->normalizePath(); + } else { + $this->bucket = $params['bucket']; + } if (empty($params['url'])) { $params['url'] = 'https://identity.api.rackspacecloud.com/v2.0/'; @@ -514,7 +522,16 @@ public function getConnection() { $this->anchor = new OpenStack($this->params['url'], $settings); } - $this->connection = $this->anchor->objectStoreService($this->params['service_name'], $this->params['region']); + $connection = $this->anchor->objectStoreService($this->params['service_name'], $this->params['region']); + + if (!empty($this->params['endpoint_url'])) { + $endpoint = $connection->getEndpoint(); + $endpoint->setPublicUrl($this->params['endpoint_url']); + $endpoint->setPrivateUrl($this->params['endpoint_url']); + $connection->setEndpoint($endpoint); + } + + $this->connection = $connection; return $this->connection; }