From decd1961627986db094de4bf9b83589b9ccdb41e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 1 Aug 2018 10:56:22 +0200 Subject: [PATCH 1/2] Make the info available if the avatar was uploaded or generated Signed-off-by: Joas Schilling --- core/Controller/AvatarController.php | 11 ++++++----- lib/private/Avatar.php | 11 ++++++++++- lib/public/IAvatar.php | 8 ++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php index 0625265dd0..03efe4d1e5 100644 --- a/core/Controller/AvatarController.php +++ b/core/Controller/AvatarController.php @@ -132,12 +132,13 @@ class AvatarController extends Controller { } try { - $avatar = $this->avatarManager->getAvatar($userId)->getFile($size); + $avatar = $this->avatarManager->getAvatar($userId); + $avatarFile = $avatar->getFile($size); $resp = new FileDisplayResponse( - $avatar, - Http::STATUS_OK, - ['Content-Type' => $avatar->getMimeType() - ]); + $avatarFile, + $avatar->isCustomAvatar() ? Http::STATUS_OK : Http::STATUS_CREATED, + ['Content-Type' => $avatarFile->getMimeType()] + ); } catch (\Exception $e) { $resp = new Http\Response(); $resp->setStatus(Http::STATUS_NOT_FOUND); diff --git a/lib/private/Avatar.php b/lib/private/Avatar.php index 9dbeb4ac74..116f8368e7 100644 --- a/lib/private/Avatar.php +++ b/lib/private/Avatar.php @@ -119,6 +119,15 @@ class Avatar implements IAvatar { return $this->folder->fileExists('avatar.jpg') || $this->folder->fileExists('avatar.png'); } + /** + * Check if the avatar of a user is a custom uploaded one + * + * @return bool + */ + public function isCustomAvatar(): bool { + return !$this->folder->fileExists('generated'); + } + /** * sets the users avatar * @param IImage|resource|string $data An image object, imagedata or path to set a new avatar @@ -362,7 +371,7 @@ class Avatar implements IAvatar { * @param string $font font path * @param int $size font size * @param int $angle - * @return Array + * @return array */ protected function imageTTFCenter($image, string $text, string $font, int $size, $angle = 0): array { // Image width & height diff --git a/lib/public/IAvatar.php b/lib/public/IAvatar.php index 8586335706..448d5dfc02 100644 --- a/lib/public/IAvatar.php +++ b/lib/public/IAvatar.php @@ -53,6 +53,14 @@ interface IAvatar { */ public function exists(); + /** + * Check if the avatar of a user is a custom uploaded one + * + * @return bool + * @since 14.0.0 + */ + public function isCustomAvatar(): bool; + /** * sets the users avatar * @param \OCP\IImage|resource|string $data An image object, imagedata or path to set a new avatar From 38fffffe18dc705f29bbb477aebd8497f173d37a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 1 Aug 2018 14:46:44 +0200 Subject: [PATCH 2/2] Fix unit test Signed-off-by: Joas Schilling --- .../Core/Controller/AvatarControllerTest.php | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/Core/Controller/AvatarControllerTest.php b/tests/Core/Controller/AvatarControllerTest.php index 3194d67190..3369fa882c 100644 --- a/tests/Core/Controller/AvatarControllerTest.php +++ b/tests/Core/Controller/AvatarControllerTest.php @@ -34,7 +34,7 @@ namespace Tests\Core\Controller; use OC\AppFramework\Utility\TimeFactory; use OC\Core\Controller\AvatarController; use OCP\AppFramework\Http; -use OCP\Files\Cache\ICache; +use OCP\ICache; use OCP\Files\File; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; @@ -143,6 +143,9 @@ class AvatarControllerTest extends \Test\TestCase { public function testGetAvatar() { $this->avatarMock->method('getFile')->willReturn($this->avatarFile); $this->avatarManager->method('getAvatar')->with('userId')->willReturn($this->avatarMock); + $this->avatarMock->expects($this->once()) + ->method('isCustomAvatar') + ->willReturn(true); $response = $this->avatarController->getAvatar('userId', 32); @@ -153,6 +156,22 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertEquals('my etag', $response->getETag()); } + /** + * Fetch the user's avatar + */ + public function testGetGeneratedAvatar() { + $this->avatarMock->method('getFile')->willReturn($this->avatarFile); + $this->avatarManager->method('getAvatar')->with('userId')->willReturn($this->avatarMock); + + $response = $this->avatarController->getAvatar('userId', 32); + + $this->assertEquals(Http::STATUS_CREATED, $response->getStatus()); + $this->assertArrayHasKey('Content-Type', $response->getHeaders()); + $this->assertEquals('image type', $response->getHeaders()['Content-Type']); + + $this->assertEquals('my etag', $response->getETag()); + } + /** * Fetch the avatar of a non-existing user */