From 2198fe16c9e17efa674e64eecaefdc5b5a15be67 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Wed, 23 Oct 2024 12:54:25 +0200 Subject: [PATCH] fix(app-store): Also proxy images of locally installed apps Before this only app store apps got their screenshots proxied, but this will cause locally installed apps to not be correctly shown on the app-store. Signed-off-by: Ferdinand Thiessen --- .../lib/Controller/AppSettingsController.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php index ccd0b418040eb..b9eb325c9fbe1 100644 --- a/apps/settings/lib/Controller/AppSettingsController.php +++ b/apps/settings/lib/Controller/AppSettingsController.php @@ -229,11 +229,25 @@ private function getAllCategories() { ], $categories); } + /** + * Convert URL to proxied URL so CSP is no problem + */ + private function createProxyPreviewUrl(string $url): string { + if ($url === '') { + return ''; + } + return 'https://usercontent.apps.nextcloud.com/' . base64_encode($url); + } + private function fetchApps() { $appClass = new \OC_App(); $apps = $appClass->listAllApps(); foreach ($apps as $app) { $app['installed'] = true; + // locally installed apps have a flatted screenshot property + if (isset($app['screenshot'][0])) { + $app['screenshot'] = $this->createProxyPreviewUrl($app['screenshot'][0]); + } $this->allApps[$app['id']] = $app; } @@ -292,7 +306,7 @@ public function listApps(): JSONResponse { $apps = array_map(function (array $appData) use ($dependencyAnalyzer, $ignoreMaxApps) { if (isset($appData['appstoreData'])) { $appstoreData = $appData['appstoreData']; - $appData['screenshot'] = isset($appstoreData['screenshots'][0]['url']) ? 'https://usercontent.apps.nextcloud.com/' . base64_encode($appstoreData['screenshots'][0]['url']) : ''; + $appData['screenshot'] = $this->createProxyPreviewUrl($appstoreData['screenshots'][0]['url'] ?? ''); $appData['category'] = $appstoreData['categories']; $appData['releases'] = $appstoreData['releases']; }