summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2020-09-17 18:14:10 +0200
committerGitHub <noreply@github.com>2020-09-17 18:14:10 +0200
commit7fcb754901a836fd8b9ce5d2c78008706c50b5c9 (patch)
tree91aed9f08f9a63a7696ab19e8cb22521aba74f97
parent792b3d52cbe94fd375302ef9c8b46958fe3670a5 (diff)
parentcd88b93a8bc543e85e0f156151a6fe23ebea8ec8 (diff)
downloadnextcloud-server-7fcb754901a836fd8b9ce5d2c78008706c50b5c9.tar.gz
nextcloud-server-7fcb754901a836fd8b9ce5d2c78008706c50b5c9.zip
Merge pull request #22910 from nextcloud/user-quota-event
add event to allow apps to overwrite user quota
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/private/User/User.php11
-rw-r--r--lib/public/User/GetQuotaEvent.php64
4 files changed, 76 insertions, 1 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index a1960f678fd..f28e7977a03 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -530,6 +530,7 @@ return array(
'OCP\\User\\Events\\UserLoggedInEvent' => $baseDir . '/lib/public/User/Events/UserLoggedInEvent.php',
'OCP\\User\\Events\\UserLoggedInWithCookieEvent' => $baseDir . '/lib/public/User/Events/UserLoggedInWithCookieEvent.php',
'OCP\\User\\Events\\UserLoggedOutEvent' => $baseDir . '/lib/public/User/Events/UserLoggedOutEvent.php',
+ 'OCP\\User\\GetQuotaEvent' => $baseDir . '/lib/public/User/GetQuotaEvent.php',
'OCP\\Util' => $baseDir . '/lib/public/Util.php',
'OCP\\WorkflowEngine\\EntityContext\\IContextPortation' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IContextPortation.php',
'OCP\\WorkflowEngine\\EntityContext\\IDisplayName' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IDisplayName.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 8c7db5e5723..e584c63c644 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -559,6 +559,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\User\\Events\\UserLoggedInEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/UserLoggedInEvent.php',
'OCP\\User\\Events\\UserLoggedInWithCookieEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/UserLoggedInWithCookieEvent.php',
'OCP\\User\\Events\\UserLoggedOutEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/UserLoggedOutEvent.php',
+ 'OCP\\User\\GetQuotaEvent' => __DIR__ . '/../../..' . '/lib/public/User/GetQuotaEvent.php',
'OCP\\Util' => __DIR__ . '/../../..' . '/lib/public/Util.php',
'OCP\\WorkflowEngine\\EntityContext\\IContextPortation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IContextPortation.php',
'OCP\\WorkflowEngine\\EntityContext\\IDisplayName' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IDisplayName.php',
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index 2d27b204d09..365b8ae33a1 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -50,6 +50,7 @@ use OCP\IImage;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserBackend;
+use OCP\User\GetQuotaEvent;
use OCP\UserInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
@@ -406,7 +407,15 @@ class User implements IUser {
* @since 9.0.0
*/
public function getQuota() {
- $quota = $this->config->getUserValue($this->uid, 'files', 'quota', 'default');
+ // allow apps to modify the user quota by hooking into the event
+ $event = new GetQuotaEvent($this);
+ $this->dispatcher->dispatchTyped($event);
+ $overwriteQuota = $event->getQuota();
+ if ($overwriteQuota) {
+ $quota = $overwriteQuota;
+ } else {
+ $quota = $this->config->getUserValue($this->uid, 'files', 'quota', 'default');
+ }
if ($quota === 'default') {
$quota = $this->config->getAppValue('files', 'default_quota', 'none');
}
diff --git a/lib/public/User/GetQuotaEvent.php b/lib/public/User/GetQuotaEvent.php
new file mode 100644
index 00000000000..e7706db1730
--- /dev/null
+++ b/lib/public/User/GetQuotaEvent.php
@@ -0,0 +1,64 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2020 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\User;
+
+use OCP\EventDispatcher\Event;
+use OCP\IUser;
+
+/**
+ * Event to allow apps to
+ */
+class GetQuotaEvent extends Event {
+ /** @var IUser */
+ private $user;
+ /** @var string|null */
+ private $quota = null;
+
+ public function __construct(IUser $user) {
+ parent::__construct();
+ $this->user = $user;
+ }
+
+ public function getUser(): IUser {
+ return $this->user;
+ }
+
+ /**
+ * Get the set quota as human readable string, or null if no overwrite is set
+ *
+ * @return string|null
+ */
+ public function getQuota(): ?string {
+ return $this->quota;
+ }
+
+ /**
+ * Set the quota overwrite as human readable string
+ *
+ * @param string $quota
+ */
+ public function setQuota(string $quota): void {
+ $this->quota = $quota;
+ }
+}