Skip to content

Commit 312ab55

Browse files
Merge pull request nextcloud#58231 from nextcloud/backport/58228/stable32
[stable32] fix: delete CalDav and CardDav shares upon group deletion
2 parents f30ea8d + fcdb60f commit 312ab55

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

apps/dav/lib/AppInfo/Application.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
use OCP\DB\Events\AddMissingIndicesEvent;
8888
use OCP\Federation\Events\TrustedServerRemovedEvent;
8989
use OCP\Federation\ICloudFederationProviderManager;
90+
use OCP\Group\Events\GroupDeletedEvent;
9091
use OCP\IUserSession;
9192
use OCP\Server;
9293
use OCP\Settings\Events\DeclarativeSettingsGetValueEvent;
@@ -202,6 +203,7 @@ public function register(IRegistrationContext $context): void {
202203
$context->registerEventListener(UserCreatedEvent::class, UserEventsListener::class);
203204
$context->registerEventListener(UserChangedEvent::class, UserEventsListener::class);
204205
$context->registerEventListener(UserUpdatedEvent::class, UserEventsListener::class);
206+
$context->registerEventListener(GroupDeletedEvent::class, UserEventsListener::class);
205207

206208
$context->registerEventListener(SabrePluginAuthInitEvent::class, SabrePluginAuthInitListener::class);
207209

apps/dav/lib/Listener/UserEventsListener.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use OCP\Defaults;
2121
use OCP\EventDispatcher\Event;
2222
use OCP\EventDispatcher\IEventListener;
23+
use OCP\Group\Events\BeforeGroupDeletedEvent;
24+
use OCP\Group\Events\GroupDeletedEvent;
2325
use OCP\IUser;
2426
use OCP\IUserManager;
2527
use OCP\User\Events\BeforeUserDeletedEvent;
@@ -32,7 +34,7 @@
3234
use OCP\User\Events\UserIdUnassignedEvent;
3335
use Psr\Log\LoggerInterface;
3436

35-
/** @template-implements IEventListener<UserFirstTimeLoggedInEvent|UserIdAssignedEvent|BeforeUserIdUnassignedEvent|UserIdUnassignedEvent|BeforeUserDeletedEvent|UserDeletedEvent|UserCreatedEvent|UserChangedEvent|UserUpdatedEvent> */
37+
/** @template-implements IEventListener<UserFirstTimeLoggedInEvent|UserIdAssignedEvent|BeforeUserIdUnassignedEvent|UserIdUnassignedEvent|BeforeUserDeletedEvent|UserDeletedEvent|UserCreatedEvent|UserChangedEvent|UserUpdatedEvent|BeforeGroupDeletedEvent|GroupDeletedEvent> */
3638
class UserEventsListener implements IEventListener {
3739

3840
/** @var IUser[] */
@@ -77,6 +79,8 @@ public function handle(Event $event): void {
7779
$this->firstLogin($event->getUser());
7880
} elseif ($event instanceof UserUpdatedEvent) {
7981
$this->updateUser($event->getUser());
82+
} elseif ($event instanceof GroupDeletedEvent) {
83+
$this->postDeleteGroup($event->getGroup()->getGID());
8084
}
8185
}
8286

@@ -135,6 +139,12 @@ public function postDeleteUser(string $uid): void {
135139
unset($this->addressBooksToDelete[$uid]);
136140
}
137141

142+
public function postDeleteGroup(string $gid): void {
143+
$encodedGid = urlencode($gid);
144+
$this->calDav->deleteAllSharesByUser('principals/groups/' . $encodedGid);
145+
$this->cardDav->deleteAllSharesByUser('principals/groups/' . $encodedGid);
146+
}
147+
138148
public function changeUser(IUser $user, string $feature): void {
139149
// This case is already covered by the account manager firing up a signal
140150
// later on

apps/dav/tests/unit/DAV/Listener/UserEventsListenerTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,15 @@ public function testDeleteUserAutomationEvent(): void {
181181
$this->userEventsListener->preDeleteUser($user);
182182
$this->userEventsListener->postDeleteUser('newUser');
183183
}
184+
185+
public function testDeleteGroup(): void {
186+
$this->calDavBackend->expects($this->once())
187+
->method('deleteAllSharesByUser')
188+
->with('principals/groups/testGroup');
189+
$this->cardDavBackend->expects($this->once())
190+
->method('deleteAllSharesByUser')
191+
->with('principals/groups/testGroup');
192+
193+
$this->userEventsListener->postDeleteGroup('testGroup');
194+
}
184195
}

0 commit comments

Comments
 (0)