]> source.dussan.org Git - nextcloud-server.git/commitdiff
Correctly remove usergroup shares on removing group members
authorJoas Schilling <coding@schilljs.com>
Mon, 27 Jul 2020 10:12:11 +0000 (12:12 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 30 Jul 2020 07:51:14 +0000 (07:51 +0000)
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 b0991307dda9bfbaa1999feb690e33d04e798462..3616d9013a5661cc47f5367024d5003bb9868754 100644 (file)
@@ -59,6 +59,7 @@
  *
  */
 
+use OCP\Group\Events\UserRemovedEvent;
 use OCP\ILogger;
 use OCP\Share;
 use OC\Encryption\HookManager;
@@ -900,8 +901,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 800cec8a1ded6275810f5f9fbe5483d11badd93c..92c2dd94b2b9e7d679a6657120f106955682b42a 100644 (file)
@@ -1233,6 +1233,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 749f43a2eb94fb4acce2e57edfb9e8dfa30b9cc6..e24ce4c1c2de937f81f7bc00238a59e060a3dc59 100644 (file)
@@ -1262,6 +1262,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());
+       }
+}