Merge pull request #19929 from nextcloud/bugfix/user-delete-avatar

Delete avatar if a user is deleted
This commit is contained in:
Morris Jobke 2020-04-27 11:06:50 +02:00 committed by GitHub
commit 673267cd91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -33,8 +33,10 @@ declare(strict_types=1);
namespace OC\Avatar; namespace OC\Avatar;
use OC\User\Manager; use OC\User\Manager;
use OC\User\NoUserException;
use OCP\Files\IAppData; use OCP\Files\IAppData;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\IAvatar; use OCP\IAvatar;
use OCP\IAvatarManager; use OCP\IAvatarManager;
use OCP\IConfig; use OCP\IConfig;
@ -125,6 +127,20 @@ class AvatarManager implements IAvatarManager {
} }
} }
public function deleteUserAvatar(string $userId): void {
try {
$folder = $this->appData->getFolder($userId);
$folder->delete();
} catch (NotFoundException $e) {
$this->logger->debug("No cache for the user $userId. Ignoring avatar deletion");
} catch (NotPermittedException $e) {
$this->logger->error("Unable to delete user avatars for $userId. gnoring avatar deletion");
} catch (NoUserException $e) {
$this->logger->debug("User $userId not found. gnoring avatar deletion");
}
$this->config->deleteUserValue($userId, 'avatar', 'generated');
}
/** /**
* Returns a GuestAvatar. * Returns a GuestAvatar.
* *

View File

@ -36,6 +36,7 @@
namespace OC\User; namespace OC\User;
use OC\Accounts\AccountManager; use OC\Accounts\AccountManager;
use OC\Avatar\AvatarManager;
use OC\Files\Cache\Storage; use OC\Files\Cache\Storage;
use OC\Hooks\Emitter; use OC\Hooks\Emitter;
use OC_Helper; use OC_Helper;
@ -238,6 +239,10 @@ class User implements IUser {
\OC::$server->getCommentsManager()->deleteReferencesOfActor('users', $this->uid); \OC::$server->getCommentsManager()->deleteReferencesOfActor('users', $this->uid);
\OC::$server->getCommentsManager()->deleteReadMarksFromUser($this); \OC::$server->getCommentsManager()->deleteReadMarksFromUser($this);
/** @var IAvatarManager $avatarManager */
$avatarManager = \OC::$server->query(AvatarManager::class);
$avatarManager->deleteUserAvatar($this->uid);
$notification = \OC::$server->getNotificationManager()->createNotification(); $notification = \OC::$server->getNotificationManager()->createNotification();
$notification->setUser($this->uid); $notification->setUser($this->uid);
\OC::$server->getNotificationManager()->markProcessed($notification); \OC::$server->getNotificationManager()->markProcessed($notification);