From 4c87588eb85f0a1155754091e0355c1284f5f333 Mon Sep 17 00:00:00 2001 From: Luka Trovic Date: Tue, 4 Nov 2025 17:09:37 +0100 Subject: [PATCH 1/2] fix: check creation permission when import board Signed-off-by: Luka Trovic [skip ci] --- lib/Controller/BoardController.php | 1 + lib/Controller/BoardImportApiController.php | 6 +++++ .../BoardImportApiControllerTest.php | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/lib/Controller/BoardController.php b/lib/Controller/BoardController.php index e79ac276e8..75f688c1b7 100644 --- a/lib/Controller/BoardController.php +++ b/lib/Controller/BoardController.php @@ -9,6 +9,7 @@ use OCA\Deck\Db\Acl; use OCA\Deck\Db\Board; +use OCA\Deck\NoPermissionException; use OCA\Deck\Service\BoardService; use OCA\Deck\Service\PermissionService; use OCP\AppFramework\ApiController; diff --git a/lib/Controller/BoardImportApiController.php b/lib/Controller/BoardImportApiController.php index 2163a8c955..c4016acf14 100644 --- a/lib/Controller/BoardImportApiController.php +++ b/lib/Controller/BoardImportApiController.php @@ -7,7 +7,9 @@ namespace OCA\Deck\Controller; +use OCA\Deck\NoPermissionException; use OCA\Deck\Service\Importer\BoardImportService; +use OCA\Deck\Service\PermissionService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCSController; @@ -18,6 +20,7 @@ public function __construct( string $appName, IRequest $request, private BoardImportService $boardImportService, + private PermissionService $permissionService, private string $userId, ) { parent::__construct($appName, $request); @@ -29,6 +32,9 @@ public function __construct( * @NoCSRFRequired */ public function import(string $system, array $config, array $data): DataResponse { + if (!$this->permissionService->canCreate()) { + throw new NoPermissionException('Creating boards has been disabled for your account.'); + } $this->boardImportService->setSystem($system); $config = json_decode(json_encode($config)); $config->owner = $this->userId; diff --git a/tests/unit/controller/BoardImportApiControllerTest.php b/tests/unit/controller/BoardImportApiControllerTest.php index 2ff4a49472..da61d6005c 100644 --- a/tests/unit/controller/BoardImportApiControllerTest.php +++ b/tests/unit/controller/BoardImportApiControllerTest.php @@ -25,6 +25,7 @@ use OCA\Deck\Db\Board; use OCA\Deck\Service\Importer\BoardImportService; +use OCA\Deck\Service\PermissionService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\IRequest; @@ -37,16 +38,20 @@ class BoardImportApiControllerTest extends \Test\TestCase { private $controller; /** @var BoardImportService|MockObject */ private $boardImportService; + /** @var PermissionService|MockObject */ + private $permissionService; public function setUp(): void { parent::setUp(); $this->request = $this->createMock(IRequest::class); $this->boardImportService = $this->createMock(BoardImportService::class); + $this->permissionService = $this->createMock(PermissionService::class); $this->controller = new BoardImportApiController( $this->appName, $this->request, $this->boardImportService, + $this->permissionService, $this->userId ); } @@ -75,9 +80,27 @@ public function testImport() { $data = [ 'name' => 'test' ]; + $this->permissionService + ->method('canCreate') + ->willReturn(true); $actual = $this->controller->import($system, $config, $data); $board = $this->createMock(Board::class); $this->assertInstanceOf(Board::class, $board); $this->assertEquals(HTTP::STATUS_OK, $actual->getStatus()); } + + public function testImportWithoutPermission() { + $system = 'trelloJson'; + $config = [ + 'owner' => 'test' + ]; + $data = [ + 'name' => 'test' + ]; + $this->permissionService + ->method('canCreate') + ->willReturn(false); + $this->expectException(\OCA\Deck\NoPermissionException::class); + $this->controller->import($system, $config, $data); + } } From e37d2ab71bde9f6518eaeff9a48d07a3dd595641 Mon Sep 17 00:00:00 2001 From: Luka Trovic Date: Thu, 6 Nov 2025 09:16:43 +0100 Subject: [PATCH 2/2] fix: remove redundant file change Signed-off-by: Luka Trovic --- lib/Controller/BoardController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Controller/BoardController.php b/lib/Controller/BoardController.php index 75f688c1b7..e79ac276e8 100644 --- a/lib/Controller/BoardController.php +++ b/lib/Controller/BoardController.php @@ -9,7 +9,6 @@ use OCA\Deck\Db\Acl; use OCA\Deck\Db\Board; -use OCA\Deck\NoPermissionException; use OCA\Deck\Service\BoardService; use OCA\Deck\Service\PermissionService; use OCP\AppFramework\ApiController;