diff options
author | Carl Schwan <carl@carlschwan.eu> | 2022-01-26 14:26:58 +0100 |
---|---|---|
committer | Carl Schwan <carl@carlschwan.eu> | 2022-01-26 14:26:58 +0100 |
commit | e3a12b348206adcfbfb0fbc8435ba91240ac2b0a (patch) | |
tree | a95db61139c9399dd51c10bed7faaeee42919c30 /apps | |
parent | a145edd00db95135bee6f584e21301267fb5ac16 (diff) | |
download | nextcloud-server-e3a12b348206adcfbfb0fbc8435ba91240ac2b0a.tar.gz nextcloud-server-e3a12b348206adcfbfb0fbc8435ba91240ac2b0a.zip |
Fix psalm issues in theming app
After this change, we are down to only one psalm warning for this app
and related to the Application.php. This also make composer
psam:update-baseline not silently ignore new errors.
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/testing/lib/Controller/LockingController.php | 51 | ||||
-rw-r--r-- | apps/theming/lib/Command/UpdateConfig.php | 1 | ||||
-rw-r--r-- | apps/theming/lib/Controller/IconController.php | 23 | ||||
-rw-r--r-- | apps/theming/lib/ImageManager.php | 10 | ||||
-rw-r--r-- | apps/theming/lib/ThemingDefaults.php | 8 | ||||
-rw-r--r-- | apps/theming/lib/Util.php | 7 |
6 files changed, 38 insertions, 62 deletions
diff --git a/apps/testing/lib/Controller/LockingController.php b/apps/testing/lib/Controller/LockingController.php index 808c7c2d3ba..c01ad218c84 100644 --- a/apps/testing/lib/Controller/LockingController.php +++ b/apps/testing/lib/Controller/LockingController.php @@ -80,10 +80,9 @@ class LockingController extends OCSController { } /** - * @return ILockingProvider * @throws \RuntimeException */ - protected function getLockingProvider() { + protected function getLockingProvider(): ILockingProvider { if ($this->lockingProvider instanceof DBLockingProvider) { return $this->fakeDBLockingProvider; } @@ -91,21 +90,17 @@ class LockingController extends OCSController { } /** - * @param string $user - * @param string $path - * @return string * @throws NotFoundException */ - protected function getPath($user, $path) { + protected function getPath(string $user, string $path): string { $node = $this->rootFolder->getUserFolder($user)->get($path); return 'files/' . md5($node->getStorage()->getId() . '::' . trim($node->getInternalPath(), '/')); } /** - * @return DataResponse * @throws OCSException */ - public function isLockingEnabled() { + public function isLockingEnabled(): DataResponse { try { $this->getLockingProvider(); return new DataResponse(); @@ -115,13 +110,9 @@ class LockingController extends OCSController { } /** - * @param int $type - * @param string $user - * @param string $path - * @return DataResponse * @throws OCSException */ - public function acquireLock($type, $user, $path) { + public function acquireLock(int $type, string $user, string $path): DataResponse { try { $path = $this->getPath($user, $path); } catch (NoUserException $e) { @@ -134,7 +125,7 @@ class LockingController extends OCSController { try { $lockingProvider->acquireLock($path, $type); - $this->config->setAppValue('testing', 'locking_' . $path, $type); + $this->config->setAppValue('testing', 'locking_' . $path, (string)$type); return new DataResponse(); } catch (LockedException $e) { throw new OCSException('', Http::STATUS_LOCKED, $e); @@ -142,13 +133,9 @@ class LockingController extends OCSController { } /** - * @param int $type - * @param string $user - * @param string $path - * @return DataResponse * @throws OCSException */ - public function changeLock($type, $user, $path) { + public function changeLock(int $type, string $user, string $path): DataResponse { try { $path = $this->getPath($user, $path); } catch (NoUserException $e) { @@ -161,7 +148,7 @@ class LockingController extends OCSController { try { $lockingProvider->changeLock($path, $type); - $this->config->setAppValue('testing', 'locking_' . $path, $type); + $this->config->setAppValue('testing', 'locking_' . $path, (string)$type); return new DataResponse(); } catch (LockedException $e) { throw new OCSException('', Http::STATUS_LOCKED, $e); @@ -169,13 +156,9 @@ class LockingController extends OCSController { } /** - * @param int $type - * @param string $user - * @param string $path - * @return DataResponse * @throws OCSException */ - public function releaseLock($type, $user, $path) { + public function releaseLock(int $type, string $user, string $path): DataResponse { try { $path = $this->getPath($user, $path); } catch (NoUserException $e) { @@ -196,13 +179,9 @@ class LockingController extends OCSController { } /** - * @param int $type - * @param string $user - * @param string $path - * @return DataResponse * @throws OCSException */ - public function isLocked($type, $user, $path) { + public function isLocked(int $type, string $user, string $path): DataResponse { try { $path = $this->getPath($user, $path); } catch (NoUserException $e) { @@ -220,11 +199,7 @@ class LockingController extends OCSController { throw new OCSException('', Http::STATUS_LOCKED); } - /** - * @param int $type - * @return DataResponse - */ - public function releaseAll($type = null) { + public function releaseAll(int $type = null): DataResponse { $lockingProvider = $this->getLockingProvider(); foreach ($this->config->getAppKeys('testing') as $lock) { @@ -232,11 +207,11 @@ class LockingController extends OCSController { $path = substr($lock, strlen('locking_')); if ($type === ILockingProvider::LOCK_EXCLUSIVE && (int)$this->config->getAppValue('testing', $lock) === ILockingProvider::LOCK_EXCLUSIVE) { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + $lockingProvider->releaseLock($path, (int)$this->config->getAppValue('testing', $lock)); } elseif ($type === ILockingProvider::LOCK_SHARED && (int)$this->config->getAppValue('testing', $lock) === ILockingProvider::LOCK_SHARED) { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + $lockingProvider->releaseLock($path, (int)$this->config->getAppValue('testing', $lock)); } else { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + $lockingProvider->releaseLock($path, (int)$this->config->getAppValue('testing', $lock)); } } } diff --git a/apps/theming/lib/Command/UpdateConfig.php b/apps/theming/lib/Command/UpdateConfig.php index 1ff75b5ba70..bb226668943 100644 --- a/apps/theming/lib/Command/UpdateConfig.php +++ b/apps/theming/lib/Command/UpdateConfig.php @@ -79,6 +79,7 @@ class UpdateConfig extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { $key = $input->getArgument('key'); $value = $input->getArgument('value'); + assert(is_string($value) || $value === null, 'At most one value should be provided.'); if ($key === null) { $output->writeln('Current theming config:'); diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php index b9df2e95622..4235c66a457 100644 --- a/apps/theming/lib/Controller/IconController.php +++ b/apps/theming/lib/Controller/IconController.php @@ -95,13 +95,9 @@ class IconController extends Controller { } $iconFile = $this->imageManager->setCachedImage('icon-' . $app . '-' . str_replace('/', '_',$image), $icon); } - if ($iconFile !== false) { - $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/svg+xml']); - $response->cacheFor(86400); - return $response; - } - - return new NotFoundResponse(); + $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/svg+xml']); + $response->cacheFor(86400); + return $response; } /** @@ -111,7 +107,8 @@ class IconController extends Controller { * @NoCSRFRequired * * @param $app string app name - * @return FileDisplayResponse|DataDisplayResponse + * @psalm-return FileDisplayResponse|DataDisplayResponse + * @return Response * @throws \Exception */ public function getFavicon(string $app = 'core'): Response { @@ -129,9 +126,7 @@ class IconController extends Controller { $icon = $this->iconBuilder->getFavicon($app); $iconFile = $this->imageManager->setCachedImage('favIcon-' . $app, $icon); } - if ($iconFile !== false) { - $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/x-icon']); - } + $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/x-icon']); } if ($response === null) { $fallbackLogo = \OC::$SERVERROOT . '/core/img/favicon.png'; @@ -148,7 +143,7 @@ class IconController extends Controller { * @NoCSRFRequired * * @param $app string app name - * @return FileDisplayResponse|NotFoundResponse + * @return DataDisplayResponse|FileDisplayResponse * @throws \Exception */ public function getTouchIcon(string $app = 'core'): Response { @@ -165,9 +160,7 @@ class IconController extends Controller { $icon = $this->iconBuilder->getTouchIcon($app); $iconFile = $this->imageManager->setCachedImage('touchIcon-' . $app, $icon); } - if ($iconFile !== false) { - $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/png']); - } + $response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/png']); } if ($response === null) { $fallbackLogo = \OC::$SERVERROOT . '/core/img/favicon-touch.png'; diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php index b5ace6c968e..762461e7a1a 100644 --- a/apps/theming/lib/ImageManager.php +++ b/apps/theming/lib/ImageManager.php @@ -92,6 +92,7 @@ class ImageManager { case 'background': return $this->urlGenerator->imagePath('core', 'background.png') . '?v=' . $cacheBusterCounter; } + return ''; } public function getImageUrlAbsolute(string $key, bool $useSvg = true): string { @@ -131,6 +132,9 @@ class ImageManager { return $folder->getFile($key); } + /** + * @return array<string, array{mime: string, url: string}> + */ public function getCustomImages(): array { $images = []; foreach ($this->supportedImageKeys as $key) { @@ -192,7 +196,7 @@ class ImageManager { return $file; } - public function delete(string $key) { + public function delete(string $key): void { /* ignore exceptions, since we don't want to fail hard if something goes wrong during cleanup */ try { $file = $this->appData->getFolder('images')->getFile($key); @@ -208,7 +212,7 @@ class ImageManager { } } - public function updateImage(string $key, string $tmpFile) { + public function updateImage(string $key, string $tmpFile): string { $this->delete($key); try { @@ -255,7 +259,7 @@ class ImageManager { * "favicon" images are only allowed to be SVG when imagemagick with SVG support is available. * * @param string $key The image key, e.g. "favicon" - * @return array + * @return string[] */ private function getSupportedUploadImageFormats(string $key): array { $supportedFormats = ['image/jpeg', 'image/png', 'image/gif', 'image/webp']; diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 3bfccda4a43..aafeb2498b6 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -157,6 +157,10 @@ class ThemingDefaults extends \OC_Defaults { return $this->config->getAppValue('theming', 'url', $this->url); } + /** + * @psalm-suppress InvalidReturnStatement + * @psalm-suppress InvalidReturnType + */ public function getSlogan(?string $lang = null) { return \OCP\Util::sanitizeHTML($this->config->getAppValue('theming', 'slogan', parent::getSlogan($lang))); } @@ -404,8 +408,8 @@ class ThemingDefaults extends \OC_Defaults { * Increases the cache buster key */ private function increaseCacheBuster() { - $cacheBusterKey = $this->config->getAppValue('theming', 'cachebuster', '0'); - $this->config->setAppValue('theming', 'cachebuster', (int)$cacheBusterKey + 1); + $cacheBusterKey = (int)$this->config->getAppValue('theming', 'cachebuster', '0'); + $this->config->setAppValue('theming', 'cachebuster', (string)($cacheBusterKey + 1)); $this->cacheFactory->createDistributed('theming-')->clear(); $this->cacheFactory->createDistributed('imagePath')->clear(); } diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php index 208cd42934e..05b954d5059 100644 --- a/apps/theming/lib/Util.php +++ b/apps/theming/lib/Util.php @@ -155,6 +155,7 @@ class Util { /** * @param string $color rgb color value * @return int[] + * @psalm-return array{0: int, 1: int, 2: int} */ public function hexToRGB($color) { $hex = preg_replace("/[^0-9A-Fa-f]/", '', $color); @@ -162,7 +163,7 @@ class Util { $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; } if (strlen($hex) !== 6) { - return 0; + return [0, 0, 0]; } return [ hexdec(substr($hex, 0, 2)), @@ -205,9 +206,7 @@ class Util { $logoFile = null; try { $folder = $this->appData->getFolder('images'); - if ($folder !== null) { - return $folder->getFile('logo'); - } + return $folder->getFile('logo'); } catch (NotFoundException $e) { } } |