]> source.dussan.org Git - nextcloud-server.git/commitdiff
Correctly remove usergroup shares on removing group members 22015/head
authorJoas Schilling <coding@schilljs.com>
Mon, 27 Jul 2020 10:12:11 +0000 (12:12 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Thu, 30 Jul 2020 07:47:31 +0000 (09:47 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
lib/base.php
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/Share20/Hooks.php
lib/private/Share20/UserRemovedListener.php [new file with mode: 0644]

index 6d0790e92850a682c087f45b80f37993ff2af0a0..a491cb11c80795faeca2c99bbecb627fbc3f50a4 100644 (file)
@@ -61,6 +61,7 @@
  *
  */
 
+use OCP\Group\Events\UserRemovedEvent;
 use OCP\ILogger;
 use OCP\Share;
 use OC\Encryption\HookManager;
@@ -897,8 +898,12 @@ class OC {
        public static function registerShareHooks() {
                if (\OC::$server->getSystemConfig()->getValue('installed')) {
                        OC_Hook::connect('OC_User', 'post_deleteUser', Hooks::class, 'post_deleteUser');
-                       OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroup');
+                       OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroupLDAP');
                        OC_Hook::connect('OC_User', 'post_deleteGroup', Hooks::class, 'post_deleteGroup');
+
+                       /** @var \OCP\EventDispatcher\IEventDispatcher $dispatcher */
+                       $dispatcher = \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class);
+                       $dispatcher->addServiceListener(UserRemovedEvent::class, \OC\Share20\UserRemovedListener::class);
                }
        }
 
index dfddc407dc6cf9c8bc2e4a939401e6aa535d065a..ae8d6349dc267674a5e8f5cbddc6b70f60aaacce 100644 (file)
@@ -1307,6 +1307,7 @@ return array(
     'OC\\Share20\\ProviderFactory' => $baseDir . '/lib/private/Share20/ProviderFactory.php',
     'OC\\Share20\\Share' => $baseDir . '/lib/private/Share20/Share.php',
     'OC\\Share20\\ShareHelper' => $baseDir . '/lib/private/Share20/ShareHelper.php',
+    'OC\\Share20\\UserRemovedListener' => $baseDir . '/lib/private/Share20/UserRemovedListener.php',
     'OC\\Share\\Constants' => $baseDir . '/lib/private/Share/Constants.php',
     'OC\\Share\\Helper' => $baseDir . '/lib/private/Share/Helper.php',
     'OC\\Share\\SearchResultSorter' => $baseDir . '/lib/private/Share/SearchResultSorter.php',
index 67561567268bdac15f178a910b55ad6fbdcc7a71..37771cafa78db61cbbc646d92b8b5bf7bcc9abc9 100644 (file)
@@ -1336,6 +1336,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
         'OC\\Share20\\ProviderFactory' => __DIR__ . '/../../..' . '/lib/private/Share20/ProviderFactory.php',
         'OC\\Share20\\Share' => __DIR__ . '/../../..' . '/lib/private/Share20/Share.php',
         'OC\\Share20\\ShareHelper' => __DIR__ . '/../../..' . '/lib/private/Share20/ShareHelper.php',
+        'OC\\Share20\\UserRemovedListener' => __DIR__ . '/../../..' . '/lib/private/Share20/UserRemovedListener.php',
         'OC\\Share\\Constants' => __DIR__ . '/../../..' . '/lib/private/Share/Constants.php',
         'OC\\Share\\Helper' => __DIR__ . '/../../..' . '/lib/private/Share/Helper.php',
         'OC\\Share\\SearchResultSorter' => __DIR__ . '/../../..' . '/lib/private/Share/SearchResultSorter.php',
index 711306db6fedf49bd364c98493c057ae669bd0fc..0e41e20a2cd0f921f8a2acfcaeedecec64c49a6d 100644 (file)
@@ -31,7 +31,7 @@ class Hooks {
                \OC::$server->getShareManager()->groupDeleted($arguments['gid']);
        }
 
-       public static function post_removeFromGroup($arguments) {
+       public static function post_removeFromGroupLDAP($arguments) {
                \OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']);
        }
 }
diff --git a/lib/private/Share20/UserRemovedListener.php b/lib/private/Share20/UserRemovedListener.php
new file mode 100644 (file)
index 0000000..06ac52c
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
+ *
+ * @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 OC\Share20;
+
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
+use OCP\Group\Events\UserRemovedEvent;
+use OCP\Share\IManager;
+
+class UserRemovedListener implements IEventListener {
+
+       /** @var IManager */
+       protected $shareManager;
+
+       public function __construct(IManager $shareManager) {
+               $this->shareManager = $shareManager;
+       }
+
+       public function handle(Event $event): void {
+               if (!$event instanceof UserRemovedEvent) {
+                       return;
+               }
+
+               $this->shareManager->userDeletedFromGroup($event->getUser()->getUID(), $event->getGroup()->getGID());
+       }
+}