Merge pull request #28659 from nextcloud/backport/28419/stable22

[stable22] Delete calendar subscriptions as well when deleting user
This commit is contained in:
MichaIng 2022-01-04 15:46:56 +01:00 committed by GitHub
commit 46336898ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 20 deletions

View file

@ -56,6 +56,9 @@ class HookManager {
/** @var array */
private $calendarsToDelete = [];
/** @var array */
private $subscriptionsToDelete = [];
/** @var array */
private $addressBooksToDelete = [];
@ -110,9 +113,11 @@ class HookManager {
public function preDeleteUser($params) {
$uid = $params['uid'];
$userPrincipalUri = 'principals/users/' . $uid;
$this->usersToDelete[$uid] = $this->userManager->get($uid);
$this->calendarsToDelete = $this->calDav->getUsersOwnCalendars('principals/users/' . $uid);
$this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks('principals/users/' . $uid);
$this->calendarsToDelete = $this->calDav->getUsersOwnCalendars($userPrincipalUri);
$this->subscriptionsToDelete = $this->calDav->getSubscriptionsForUser($userPrincipalUri);
$this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks($userPrincipalUri);
}
public function preUnassignedUserId($uid) {
@ -131,6 +136,12 @@ class HookManager {
true // Make sure the data doesn't go into the trashbin, a new user with the same UID would later see it otherwise
);
}
foreach ($this->subscriptionsToDelete as $subscription) {
$this->calDav->deleteSubscription(
$subscription['id'],
);
}
$this->calDav->deleteAllSharesByUser('principals/users/' . $uid);
foreach ($this->addressBooksToDelete as $addressBook) {

View file

@ -37,6 +37,7 @@ use OCA\DAV\HookManager;
use OCP\IL10N;
use OCP\IUser;
use OCP\IUserManager;
use PHPUnit\Framework\MockObject\MockObject;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Test\TestCase;
@ -44,7 +45,7 @@ class HookManagerTest extends TestCase {
/** @var IL10N */
private $l10n;
/** @var EventDispatcherInterface | \PHPUnit\Framework\MockObject\MockObject */
/** @var EventDispatcherInterface | MockObject */
private $eventDispatcher;
protected function setUp(): void {
@ -65,17 +66,17 @@ class HookManagerTest extends TestCase {
->getMock();
$user->expects($this->once())->method('getUID')->willReturn('newUser');
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
/** @var IUserManager | MockObject $userManager */
$userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
/** @var SyncService | MockObject $syncService */
$syncService = $this->getMockBuilder(SyncService::class)
->disableOriginalConstructor()
->getMock();
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
/** @var CalDavBackend | MockObject $cal */
$cal = $this->getMockBuilder(CalDavBackend::class)
->disableOriginalConstructor()
->getMock();
@ -84,7 +85,7 @@ class HookManagerTest extends TestCase {
'principals/users/newUser',
'personal', ['{DAV:}displayname' => 'Personal']);
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
/** @var CardDavBackend | MockObject $card */
$card = $this->getMockBuilder(CardDavBackend::class)
->disableOriginalConstructor()
->getMock();
@ -103,24 +104,24 @@ class HookManagerTest extends TestCase {
->getMock();
$user->expects($this->once())->method('getUID')->willReturn('newUser');
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
/** @var IUserManager | MockObject $userManager */
$userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
/** @var SyncService | MockObject $syncService */
$syncService = $this->getMockBuilder(SyncService::class)
->disableOriginalConstructor()
->getMock();
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
/** @var CalDavBackend | MockObject $cal */
$cal = $this->getMockBuilder(CalDavBackend::class)
->disableOriginalConstructor()
->getMock();
$cal->expects($this->once())->method('getCalendarsForUserCount')->willReturn(1);
$cal->expects($this->never())->method('createCalendar');
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
/** @var CardDavBackend | MockObject $card */
$card = $this->getMockBuilder(CardDavBackend::class)
->disableOriginalConstructor()
->getMock();
@ -137,17 +138,17 @@ class HookManagerTest extends TestCase {
->getMock();
$user->expects($this->once())->method('getUID')->willReturn('newUser');
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
/** @var IUserManager | MockObject $userManager */
$userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
/** @var SyncService | MockObject $syncService */
$syncService = $this->getMockBuilder(SyncService::class)
->disableOriginalConstructor()
->getMock();
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
/** @var CalDavBackend | MockObject $cal */
$cal = $this->getMockBuilder(CalDavBackend::class)
->disableOriginalConstructor()
->getMock();
@ -156,7 +157,7 @@ class HookManagerTest extends TestCase {
'principals/users/newUser',
'personal', ['{DAV:}displayname' => 'Personal']);
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
/** @var CardDavBackend | MockObject $card */
$card = $this->getMockBuilder(CardDavBackend::class)
->disableOriginalConstructor()
->getMock();
@ -174,30 +175,34 @@ class HookManagerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
/** @var IUserManager | MockObject $userManager */
$userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
$userManager->expects($this->once())->method('get')->willReturn($user);
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
/** @var SyncService | MockObject $syncService */
$syncService = $this->getMockBuilder(SyncService::class)
->disableOriginalConstructor()
->getMock();
$syncService->expects($this->once())
->method('deleteUser');
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
/** @var CalDavBackend | MockObject $cal */
$cal = $this->getMockBuilder(CalDavBackend::class)
->disableOriginalConstructor()
->getMock();
$cal->expects($this->once())->method('getUsersOwnCalendars')->willReturn([
['id' => 'personal']
]);
$cal->expects($this->once())->method('deleteCalendar');
$cal->expects($this->once())->method('getSubscriptionsForUser')->willReturn([
['id' => 'some-subscription']
]);
$cal->expects($this->once())->method('deleteCalendar')->with('personal');
$cal->expects($this->once())->method('deleteSubscription')->with('some-subscription');
$cal->expects($this->once())->method('deleteAllSharesByUser');
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
/** @var CardDavBackend | MockObject $card */
$card = $this->getMockBuilder(CardDavBackend::class)
->disableOriginalConstructor()
->getMock();