summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Controller/AvatarController.php11
-rw-r--r--lib/private/Avatar.php11
-rw-r--r--lib/public/IAvatar.php8
-rw-r--r--tests/Core/Controller/AvatarControllerTest.php21
4 files changed, 44 insertions, 7 deletions
diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php
index 0625265dd05..03efe4d1e52 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 9dbeb4ac745..116f8368e71 100644
--- a/lib/private/Avatar.php
+++ b/lib/private/Avatar.php
@@ -120,6 +120,15 @@ class Avatar implements IAvatar {
}
/**
+ * 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
* @throws \Exception if the provided file is not a jpg or png image
@@ -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 85863357069..448d5dfc02f 100644
--- a/lib/public/IAvatar.php
+++ b/lib/public/IAvatar.php
@@ -54,6 +54,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
* @throws \Exception if the provided file is not a jpg or png image
diff --git a/tests/Core/Controller/AvatarControllerTest.php b/tests/Core/Controller/AvatarControllerTest.php
index 3194d671908..3369fa882c8 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);
@@ -154,6 +157,22 @@ class AvatarControllerTest extends \Test\TestCase {
}
/**
+ * 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
*/
public function testGetAvatarNoUser() {