Do not copy skeleton on avatar access

Fixes #22119

Just try to get the folder of the user. If it is not there a
NotFoundException will be thrown. Which will be handled by the avatar
endpoint.
This commit is contained in:
Roeland Jago Douma 2016-02-15 20:49:07 +01:00
parent 907430a808
commit 47d28155a8
2 changed files with 40 additions and 33 deletions

View File

@ -26,6 +26,7 @@
namespace OC; namespace OC;
use OCP\Files\Folder;
use OCP\IAvatarManager; use OCP\IAvatarManager;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
@ -45,6 +46,13 @@ class AvatarManager implements IAvatarManager {
/** @var IL10N */ /** @var IL10N */
private $l; private $l;
/**
* AvatarManager constructor.
*
* @param IUserManager $userManager
* @param IRootFolder $rootFolder
* @param IL10N $l
*/
public function __construct( public function __construct(
IUserManager $userManager, IUserManager $userManager,
IRootFolder $rootFolder, IRootFolder $rootFolder,
@ -57,7 +65,7 @@ class AvatarManager implements IAvatarManager {
/** /**
* return a user specific instance of \OCP\IAvatar * return a user specific instance of \OCP\IAvatar
* @see \OCP\IAvatar * @see \OCP\IAvatar
* @param string $user the ownCloud user id * @param string $userId the ownCloud user id
* @return \OCP\IAvatar * @return \OCP\IAvatar
* @throws \Exception In case the username is potentially dangerous * @throws \Exception In case the username is potentially dangerous
*/ */
@ -66,6 +74,16 @@ class AvatarManager implements IAvatarManager {
if (is_null($user)) { if (is_null($user)) {
throw new \Exception('user does not exist'); throw new \Exception('user does not exist');
} }
return new Avatar($this->rootFolder->getUserFolder($userId)->getParent(), $this->l, $user);
/*
* Fix for #22119
* Basically we do not want to copy the skeleton folder
*/
\OC\Files\Filesystem::initMountPoints($userId);
$dir = '/' . $userId;
/** @var Folder $folder */
$folder = $this->rootFolder->get($dir);
return new Avatar($folder, $this->l, $user);
} }
} }

View File

@ -19,30 +19,32 @@
* *
*/ */
use OC\AvatarManager; use OC\AvatarManager;
use OCP\Files\IRootFolder; use Test\Traits\UserTrait;
use OCP\IUserManager; use Test\Traits\MountProviderTrait;
/**
* Class AvatarManagerTest
* @group DB
*/
class AvatarManagerTest extends \Test\TestCase { class AvatarManagerTest extends \Test\TestCase {
/** @var IRootFolder */ use UserTrait;
private $rootFolder; use MountProviderTrait;
/** @var AvatarManager */ /** @var AvatarManager */
private $avatarManager; private $avatarManager;
/** @var IUserManager */ /** @var \OC\Files\Storage\Temporary */
private $userManager; private $storage;
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->rootFolder = $this->getMock('\OCP\Files\IRootFolder'); $this->createUser('valid-user', 'valid-user');
$this->userManager = $this->getMock('\OCP\IUserManager');
$l = $this->getMock('\OCP\IL10N'); $this->storage = new \OC\Files\Storage\Temporary();
$l->method('t')->will($this->returnArgument(0)); $this->registerMount('valid-user', $this->storage, '/valid-user/');
$this->avatarManager = new \OC\AvatarManager(
$this->userManager, $this->avatarManager = \OC::$server->getAvatarManager();
$this->rootFolder,
$l);;
} }
/** /**
@ -54,23 +56,10 @@ class AvatarManagerTest extends \Test\TestCase {
} }
public function testGetAvatarValidUser() { public function testGetAvatarValidUser() {
$this->userManager->expects($this->once()) $avatar = $this->avatarManager->getAvatar('valid-user');
->method('get')
->with('validUser')
->willReturn(true);
$folder = $this->getMock('\OCP\Files\Folder');
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('validUser')
->willReturn($folder);
$folder->expects($this->once())
->method('getParent')
->will($this->returnSelf());
$this->avatarManager->getAvatar('validUser');
$this->assertInstanceOf('\OCP\IAvatar', $avatar);
$this->assertFalse($this->storage->file_exists('files'));
} }
} }