From 7969301976ddfaafff50b4b5634ab9ffaf01b108 Mon Sep 17 00:00:00 2001
From: Roeland Jago Douma <roeland@famdouma.nl>
Date: Mon, 23 Apr 2018 19:32:41 +0200
Subject: [PATCH] Swift v3 requires setting a scope

Unscoped auth is not guaranteed to return a catalog. So require the
scope to be set properly.

See https://developer.openstack.org/api-ref/identity/v3/index.html#password-authentication-with-unscoped-authorization

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
---
 config/config.sample.php                       | 10 +++++++++-
 lib/private/Files/ObjectStore/SwiftFactory.php |  4 ++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/config/config.sample.php b/config/config.sample.php
index e3b46069fe8..369873b1914 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1228,10 +1228,18 @@ $CONFIG = array(
 				'name' => 'default',
 			],
 		],
+		'scope' => [
+			'project' => [
+				'name' => 'service',
+				'domain' => [
+					'name' => 'default',
+				],
+			],
+		],
 		'tenantName' => 'service',
 		'serviceName' => 'swift',
 		'region' => 'regionOne',
-		'url' => "http://yourswifthost:5000/v3",
+		'url' => 'http://yourswifthost:5000/v3',
 		'bucket' => 'nextcloud',
 	],
 ],
diff --git a/lib/private/Files/ObjectStore/SwiftFactory.php b/lib/private/Files/ObjectStore/SwiftFactory.php
index 85bba573001..caa4774daba 100644
--- a/lib/private/Files/ObjectStore/SwiftFactory.php
+++ b/lib/private/Files/ObjectStore/SwiftFactory.php
@@ -108,6 +108,10 @@ class SwiftFactory {
 		]);
 
 		if (isset($this->params['user']) && isset($this->params['user']['name'])) {
+			if (!isset($this->params['scope'])) {
+				throw new StorageAuthException('Scope has to be defined for V3 requests');
+			}
+
 			return $this->auth(IdentityV3Service::factory($httpClient), $cacheKey);
 		} else {
 			return $this->auth(IdentityV2Service::factory($httpClient), $cacheKey);
-- 
GitLab