From eb1e224bfa562ec4015266c51ecccffdfc4abbe4 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Fri, 20 Oct 2023 12:21:41 -0700 Subject: [PATCH] refactor: generalize sw route Signed-off-by: Varun Patil --- appinfo/routes.php | 4 ++-- lib/Controller/OtherController.php | 27 +++++++++++++++++++-------- src/App.vue | 4 ++-- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 6e4a55e6..294dc958 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -98,7 +98,7 @@ return [ ['name' => 'Admin#setSystemConfig', 'url' => '/api/system-config/{key}', 'verb' => 'PUT'], ['name' => 'Admin#placesSetup', 'url' => '/api/occ/places-setup', 'verb' => 'POST'], - // Service worker - ['name' => 'Other#serviceWorker', 'url' => '/service-worker.js', 'verb' => 'GET'], + // Service worker and assets + ['name' => 'Other#static', 'url' => '/static/{name}', 'verb' => 'GET'], ], ]; diff --git a/lib/Controller/OtherController.php b/lib/Controller/OtherController.php index 1e6c6e6a..44a2415c 100644 --- a/lib/Controller/OtherController.php +++ b/lib/Controller/OtherController.php @@ -157,15 +157,26 @@ class OtherController extends GenericApiController * * @NoCSRFRequired */ - public function serviceWorker(): StreamResponse + public function static(string $name): Http\Response { - $response = new StreamResponse(__DIR__.'/../../js/memories-service-worker.js'); - $response->setHeaders([ - 'Content-Type' => 'application/javascript', - 'Service-Worker-Allowed' => '/', - ]); - $response->setContentSecurityPolicy(PageController::getCSP()); + return Util::guardEx(static function () use ($name) { + switch ($name) { + case 'service-worker.js': + $response = (new StreamResponse(__DIR__.'/../../js/memories-service-worker.js'))->setHeaders([ + 'Content-Type' => 'application/javascript', + 'Service-Worker-Allowed' => '/', + ]); - return $response; + break; + + default: + throw new \Exception('Unknown static file'); + } + + /** @var Http\Response $response */ + $response->setContentSecurityPolicy(PageController::getCSP()); + + return $response; + }); } } diff --git a/src/App.vue b/src/App.vue index 329c8fdb..af60c11b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -274,11 +274,11 @@ export default defineComponent({ // Use the window load event to keep the page load performant window.addEventListener('load', async () => { try { - const url = generateUrl('/apps/memories/service-worker.js'); + const url = generateUrl('/apps/memories/static/service-worker.js'); const registration = await navigator.serviceWorker.register(url, { scope: generateUrl('/apps/memories'), }); - console.log('SW registered: ', registration); + console.info('SW registered: ', registration); // Check for updates const currentVersion = await staticConfig.get('version');