Carl Schwan 2 days ago
committed by GitHub
parent
commit
da73215c85
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 13
      lib/Controller/TempAvatarController.php
  2. 9
      lib/Service/AvatarService.php
  3. 4
      tests/php/Service/AvatarServiceTest.php
  4. 12
      tests/psalm-baseline.xml

13
lib/Controller/TempAvatarController.php

@ -8,13 +8,13 @@ declare(strict_types=1);
namespace OCA\Talk\Controller; namespace OCA\Talk\Controller;
use OC\Files\Filesystem;
use OC\NotSquareException; use OC\NotSquareException;
use OCP\AppFramework\Http; use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\OpenAPI; use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController; use OCP\AppFramework\OCSController;
use OCP\Files\IFilenameValidator;
use OCP\IAvatarManager; use OCP\IAvatarManager;
use OCP\IL10N; use OCP\IL10N;
use OCP\IRequest; use OCP\IRequest;
@ -28,6 +28,7 @@ class TempAvatarController extends OCSController {
private IAvatarManager $avatarManager, private IAvatarManager $avatarManager,
private IL10N $l, private IL10N $l,
private LoggerInterface $logger, private LoggerInterface $logger,
private IFilenameValidator $filenameValidator,
private string $userId, private string $userId,
) { ) {
parent::__construct($appName, $request); parent::__construct($appName, $request);
@ -53,11 +54,7 @@ class TempAvatarController extends OCSController {
); );
} }
if (
$files['error'][0] === 0
&& is_uploaded_file($files['tmp_name'][0])
&& !Filesystem::isFileBlacklisted($files['tmp_name'][0])
) {
if ($files['error'][0] === 0 && is_uploaded_file($files['tmp_name'][0])) {
if ($files['size'][0] > 20 * 1024 * 1024) { if ($files['size'][0] > 20 * 1024 * 1024) {
return new DataResponse( return new DataResponse(
['message' => $this->l->t('File is too big')], ['message' => $this->l->t('File is too big')],
@ -82,7 +79,7 @@ class TempAvatarController extends OCSController {
if (!$image->valid()) { if (!$image->valid()) {
return new DataResponse( return new DataResponse(
['data' => ['message' => $this->l->t('Invalid image')]],
['message' => $this->l->t('Invalid image')],
Http::STATUS_BAD_REQUEST Http::STATUS_BAD_REQUEST
); );
} }
@ -90,7 +87,7 @@ class TempAvatarController extends OCSController {
$mimeType = $image->mimeType(); $mimeType = $image->mimeType();
if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') { if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
return new DataResponse( return new DataResponse(
['data' => ['message' => $this->l->t('Unknown filetype')]],
['message' => $this->l->t('Unknown filetype')],
Http::STATUS_BAD_REQUEST Http::STATUS_BAD_REQUEST
); );
} }

9
lib/Service/AvatarService.php

@ -10,9 +10,9 @@ declare(strict_types=1);
namespace OCA\Talk\Service; namespace OCA\Talk\Service;
use InvalidArgumentException; use InvalidArgumentException;
use OC\Files\Filesystem;
use OCA\Talk\Room; use OCA\Talk\Room;
use OCP\Files\IAppData; use OCP\Files\IAppData;
use OCP\Files\IFilenameValidator;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\Files\SimpleFS\InMemoryFile; use OCP\Files\SimpleFS\InMemoryFile;
use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFile;
@ -36,6 +36,7 @@ class AvatarService {
private RoomService $roomService, private RoomService $roomService,
private IAvatarManager $avatarManager, private IAvatarManager $avatarManager,
private EmojiService $emojiService, private EmojiService $emojiService,
private IFilenameValidator $filenameValidator,
) { ) {
} }
@ -48,11 +49,7 @@ class AvatarService {
throw new InvalidArgumentException($this->l->t('No image file provided')); throw new InvalidArgumentException($this->l->t('No image file provided'));
} }
if (
$file['error'] !== 0
|| !is_uploaded_file($file['tmp_name'])
|| Filesystem::isFileBlacklisted($file['tmp_name'])
) {
if ($file['error'] !== 0 || !is_uploaded_file($file['tmp_name'])) {
throw new InvalidArgumentException($this->l->t('Invalid file provided')); throw new InvalidArgumentException($this->l->t('Invalid file provided'));
} }
if ($file['size'] > 20 * 1024 * 1024) { if ($file['size'] > 20 * 1024 * 1024) {

4
tests/php/Service/AvatarServiceTest.php

@ -13,6 +13,7 @@ use OCA\Talk\Service\AvatarService;
use OCA\Talk\Service\EmojiService; use OCA\Talk\Service\EmojiService;
use OCA\Talk\Service\RoomService; use OCA\Talk\Service\RoomService;
use OCP\Files\IAppData; use OCP\Files\IAppData;
use OCP\Files\IFilenameValidator;
use OCP\IAvatarManager; use OCP\IAvatarManager;
use OCP\IL10N; use OCP\IL10N;
use OCP\IURLGenerator; use OCP\IURLGenerator;
@ -33,6 +34,7 @@ class AvatarServiceTest extends TestCase {
protected RoomService&MockObject $roomService; protected RoomService&MockObject $roomService;
protected IAvatarManager&MockObject $avatarManager; protected IAvatarManager&MockObject $avatarManager;
protected EmojiService $emojiService; protected EmojiService $emojiService;
protected IFilenameValidator $filenameValidator;
protected ?AvatarService $service = null; protected ?AvatarService $service = null;
public function setUp(): void { public function setUp(): void {
@ -45,6 +47,7 @@ class AvatarServiceTest extends TestCase {
$this->roomService = $this->createMock(RoomService::class); $this->roomService = $this->createMock(RoomService::class);
$this->avatarManager = $this->createMock(IAvatarManager::class); $this->avatarManager = $this->createMock(IAvatarManager::class);
$this->emojiService = Server::get(EmojiService::class); $this->emojiService = Server::get(EmojiService::class);
$this->filenameValidator = Server::get(IFilenameValidator::class);
$this->service = new AvatarService( $this->service = new AvatarService(
$this->appData, $this->appData,
$this->l, $this->l,
@ -53,6 +56,7 @@ class AvatarServiceTest extends TestCase {
$this->roomService, $this->roomService,
$this->avatarManager, $this->avatarManager,
$this->emojiService, $this->emojiService,
$this->filenameValidator,
); );
} }

12
tests/psalm-baseline.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="6.12.1@e71404b0465be25cf7f8a631b298c01c5ddd864f">
<files psalm-version="6.13.1@1e3b7f0a8ab32b23197b91107adc0a7ed8a05b51">
<file src="lib/AppInfo/Application.php"> <file src="lib/AppInfo/Application.php">
<UndefinedClass> <UndefinedClass>
<code><![CDATA[BeforeTemplateRenderedEvent]]></code> <code><![CDATA[BeforeTemplateRenderedEvent]]></code>
@ -61,8 +61,12 @@
</NullArgument> </NullArgument>
</file> </file>
<file src="lib/Controller/TempAvatarController.php"> <file src="lib/Controller/TempAvatarController.php">
<MissingDependency>
<code><![CDATA[\OCP\Image]]></code>
</MissingDependency>
<UndefinedClass> <UndefinedClass>
<code><![CDATA[Filesystem]]></code>
<code><![CDATA[$e]]></code>
<code><![CDATA[NotSquareException]]></code>
</UndefinedClass> </UndefinedClass>
</file> </file>
<file src="lib/Federation/Authenticator.php"> <file src="lib/Federation/Authenticator.php">
@ -138,10 +142,8 @@
<file src="lib/Service/AvatarService.php"> <file src="lib/Service/AvatarService.php">
<MissingDependency> <MissingDependency>
<code><![CDATA[\OCP\Image]]></code> <code><![CDATA[\OCP\Image]]></code>
<code><![CDATA[\OCP\Image]]></code>
</MissingDependency> </MissingDependency>
<UndefinedClass>
<code><![CDATA[Filesystem]]></code>
</UndefinedClass>
</file> </file>
<file src="lib/Service/RecordingService.php"> <file src="lib/Service/RecordingService.php">
<LessSpecificReturnStatement> <LessSpecificReturnStatement>

Loading…
Cancel
Save