diff options
author | Tim Dettrick <t.dettrick@uq.edu.au> | 2015-05-20 17:04:43 +1000 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2016-01-08 11:42:28 +0100 |
commit | 8799d5563f80b56f9d1354e65f2156e702a86414 (patch) | |
tree | fe060870bfa5cd2f0f22bbfb0857af650008faab /apps/files_external/lib/swift.php | |
parent | 88c4cba1f52a63da78da56e50ac9f22a643a5be0 (diff) | |
download | nextcloud-server-8799d5563f80b56f9d1354e65f2156e702a86414.tar.gz nextcloud-server-8799d5563f80b56f9d1354e65f2156e702a86414.zip |
Allowing access to Swift containers shared by ACL
To avoid a confusing extra field, the bucket field is overloaded to
optionally take a URL.
Diffstat (limited to 'apps/files_external/lib/swift.php')
-rw-r--r-- | apps/files_external/lib/swift.php | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index a64a02a4ed9..4973f576ab6 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 @@ class Swift extends \OC\Files\Storage\Common { } $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 @@ class Swift extends \OC\Files\Storage\Common { $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; } |