From a5056ed7b24401927ad36d03a16b1d87b75ecc58 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Thu, 5 Feb 2026 12:17:44 +0100 Subject: [PATCH] refactor: Fix some typing issues Signed-off-by: Carl Schwan --- lib/Controller/SettingsController.php | 90 +++++++++----------------- lib/Controller/TemplatesController.php | 68 ++++++------------- lib/TemplateManager.php | 8 ++- 3 files changed, 54 insertions(+), 112 deletions(-) diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 9ac94a2bc1..86d6a48f00 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -20,6 +20,8 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; +use OCP\AppFramework\Http\Attribute\PublicPage; use OCP\AppFramework\Http\DataDisplayResponse; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\JSONResponse; @@ -254,18 +256,12 @@ public function updateWatermarkSettings($settings = []): JSONResponse { return new JSONResponse($response); } - /** - * @NoAdminRequired - * - * @param $key - * @param $value - * @return JSONResponse - */ - public function setPersonalSettings($templateFolder, - $zoteroAPIKeyInput, - $documentSigningCertInput, - $documentSigningKeyInput, - $documentSigningCaInput) { + #[NoAdminRequired] + public function setPersonalSettings(?string $templateFolder, + ?string $zoteroAPIKeyInput, + ?string $documentSigningCertInput, + ?string $documentSigningKeyInput, + ?string $documentSigningCaInput): JSONResponse { $message = $this->l10n->t('Saved'); $status = 'success'; @@ -320,14 +316,12 @@ public function setPersonalSettings($templateFolder, } /** - * @NoAdminRequired - * @PublicPage - * @NoCSRFRequired - * - * @return JSONResponse|DataResponse * @throws \OCP\Files\NotPermittedException */ - public function getFontNames() { + #[NoAdminRequired] + #[PublicPage] + #[NoCSRFRequired] + public function getFontNames(): JSONResponse|DataResponse { $fileNames = $this->fontService->getFontFileNames(); $etag = md5(implode('/', $fileNames)); $ifNoneMatchHeader = $this->request->getHeader('If-None-Match'); @@ -340,14 +334,12 @@ public function getFontNames() { } /** - * @NoAdminRequired - * @PublicPage - * @NoCSRFRequired - * - * @return JSONResponse|DataResponse * @throws \OCP\Files\NotPermittedException */ - public function getJsonFontList() { + #[NoAdminRequired] + #[PublicPage] + #[NoCSRFRequired] + public function getJsonFontList(): JSONResponse|DataResponse { $files = $this->fontService->getFontFiles(); $etags = array_map( static fn (ISimpleFile $f) => $f->getETag(), @@ -366,15 +358,12 @@ public function getJsonFontList() { } /** - * @NoAdminRequired - * @PublicPage - * @NoCSRFRequired - * - * @param string $name - * @return DataDisplayResponse|DataResponse * @throws \OCP\Files\NotPermittedException */ - public function getFontFile(string $name) { + #[NoAdminRequired] + #[PublicPage] + #[NoCSRFRequired] + public function getFontFile(string $name): DataDisplayResponse|DataResponse { try { $fontFile = $this->fontService->getFontFile($name); $etag = $fontFile->getETag(); @@ -394,14 +383,11 @@ public function getFontFile(string $name) { } /** - * @NoAdminRequired - * @PublicPage - * @NoCSRFRequired - * - * @param string $name - * @return DataDisplayResponse * @throws \OCP\Files\NotPermittedException */ + #[NoAdminRequired] + #[PublicPage] + #[NoCSRFRequired] public function getFontFileOverview(string $name): DataDisplayResponse { try { $fontFileOverviewContent = $this->fontService->getFontFileOverview($name); @@ -416,11 +402,9 @@ public function getFontFileOverview(string $name): DataDisplayResponse { } /** - * @NoAdminRequired - * - * @param string $type - Type is 'admin' or 'user' - * @return DataResponse + * @param 'admin'|'user' $type */ + #[NoAdminRequired] public function generateIframeToken(string $type): DataResponse { try { $response = $this->settingsService->generateIframeToken($type, $this->userId); @@ -433,8 +417,6 @@ public function generateIframeToken(string $type): DataResponse { } /** - * @param string $name - * @return DataResponse * @throws NotFoundException * @throws \OCP\Files\NotPermittedException */ @@ -443,9 +425,6 @@ public function deleteFontFile(string $name): DataResponse { return new DataResponse(); } - /** - * @return JSONResponse - */ public function uploadFontFile(): JSONResponse { try { $file = $this->getUploadedFile('fontfile'); @@ -475,19 +454,10 @@ public function uploadFontFile(): JSONResponse { } } - /** - * @param string $type - * @param string $token - * @param string $category - * @param string $name - * - * @return DataDisplayResponse - * - * @NoAdminRequired - * @PublicPage - * @NoCSRFRequired - **/ - public function getSettingsFile(string $type, string $token, string $category, string $name) { + #[NoAdminRequired] + #[PublicPage] + #[NoCSRFRequired] + public function getSettingsFile(string $type, string $token, string $category, string $name): DataDisplayResponse { try { $wopi = $this->wopiMapper->getWopiForToken($token); $userId = $wopi->getEditorUid() ?: $wopi->getOwnerUid(); @@ -519,8 +489,6 @@ public function getSettingsFile(string $type, string $token, string $category, s } /** - * @param string $key - * @return array * @throws UploadException */ private function getUploadedFile(string $key): array { diff --git a/lib/Controller/TemplatesController.php b/lib/Controller/TemplatesController.php index 6d90f489f2..60c7d01a06 100644 --- a/lib/Controller/TemplatesController.php +++ b/lib/Controller/TemplatesController.php @@ -12,10 +12,14 @@ use OCA\Richdocuments\TemplateManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\NoCsrfRequired; +use OCP\AppFramework\Http\Attribute\PublicPage; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\FileDisplayResponse; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\NotFoundResponse; +use OCP\Files\File; use OCP\Files\IMimeTypeDetector; use OCP\Files\Node; use OCP\Files\NotFoundException; @@ -27,19 +31,10 @@ class TemplatesController extends Controller { /** @var int Max template size */ - private $maxSize = 20 * 1024 * 1024; + private int $maxSize = 20 * 1024 * 1024; - /** - * Templates controller - * - * @param string $appName - * @param IRequest $request - * @param IL10N $l10n - * @param TemplateManager $manager - * @param IPreview $preview - */ public function __construct( - $appName, + string $appName, IRequest $request, private IL10N $l10n, private TemplateManager $manager, @@ -48,33 +43,22 @@ public function __construct( private LoggerInterface $logger, ) { parent::__construct($appName, $request); - - $this->appName = $appName; - $this->request = $request; } /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - * * Get preview for a specific template * - * @param int $fileId The template id - * @param int $x - * @param int $y - * @param bool $a - * @param bool $forceIcon - * @param string $mode - * @return DataResponse * @throws NotFoundResponse */ - public function getPreview($fileId, - $x = 150, - $y = 150, - $a = false, - $forceIcon = true, - $mode = 'fill') { + #[NoAdminRequired] + #[NoCsrfRequired] + #[PublicPage] + public function getPreview(int $fileId, + int $x = 150, + int $y = 150, + bool $a = false, + bool $forceIcon = true, + string $mode = 'fill'): DataResponse { if ($fileId === '' || $x === 0 || $y === 0) { return new DataResponse([], Http::STATUS_BAD_REQUEST); } @@ -94,10 +78,8 @@ public function getPreview($fileId, /** * Add a global template - * - * @return JSONResponse */ - public function add() { + public function add(): JSONResponse { $files = $this->request->getUploadedFile('files'); if (!is_null($files)) { @@ -149,11 +131,8 @@ public function add() { /** * Delete a global template - * - * @param int $fileId - * @return JSONResponse */ - public function delete($fileId) { + public function delete(int $fileId): JSONResponse { try { $this->manager->delete($fileId); @@ -169,22 +148,13 @@ public function delete($fileId) { } } - /** - * @param Node $node - * @param int $x - * @param int $y - * @param bool $a - * @param bool $forceIcon - * @param string $mode - * @return DataResponse|FileDisplayResponse - */ private function fetchPreview( - Node $node, + File $node, int $x, int $y, bool $a = false, bool $forceIcon = true, - string $mode = IPreview::MODE_FILL): Http\Response { + string $mode = IPreview::MODE_FILL): DataResponse|FileDisplayResponse { if (!($node instanceof Node) || (!$forceIcon && !$this->preview->isAvailable($node))) { return new DataResponse([], Http::STATUS_NOT_FOUND); } diff --git a/lib/TemplateManager.php b/lib/TemplateManager.php index 3880267341..c40d97561b 100644 --- a/lib/TemplateManager.php +++ b/lib/TemplateManager.php @@ -113,10 +113,12 @@ public function setUserId(?string $userId): void { * @param int $fileId * @return File */ - public function get(int $fileId) { + public function get(int $fileId): File { // is this a global template ? $files = $this->getEmptyTemplateDir()->getDirectoryListing(); + $files = array_filter($files, fn (Node $node): bool => $node instanceof File); + foreach ($files as $file) { if ($file->getId() === $fileId) { return $file; @@ -130,6 +132,8 @@ public function get(int $fileId) { // is this a global template ? $files = $this->getSystemTemplateDir()->getDirectoryListing(); + $files = array_filter($files, fn (Node $node): bool => $node instanceof File); + foreach ($files as $file) { if ($file->getId() === $fileId) { return $file; @@ -139,7 +143,7 @@ public function get(int $fileId) { $templateDir = $this->getUserTemplateDir(); // finally get the template file $file = $templateDir->getFirstNodeById($fileId); - if ($file !== null) { + if ($file instanceof File) { return $file; }