X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fclient.ts;h=88f51907b4a2898ae897e5b04d0d9e2e9ba342bf;hb=caf2aaf4f9d38ad441a5562c3b8720f8779d6f78;hp=65b5a053c9f4004eabe78687feb80c82e79bb412;hpb=27647da17fe53ff24ed27ef8618bc244c0be6b26;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/client.ts b/server/controllers/client.ts index 65b5a053c..88f51907b 100644 --- a/server/controllers/client.ts +++ b/server/controllers/client.ts @@ -1,3 +1,4 @@ +import { constants, promises as fs } from 'fs' import * as express from 'express' import { join } from 'path' import { root } from '../helpers/core-utils' @@ -39,20 +40,40 @@ clientsRouter.use( ) // Static HTML/CSS/JS client files - const staticClientFiles = [ - 'manifest.webmanifest', 'ngsw-worker.js', 'ngsw.json' ] + for (const staticClientFile of staticClientFiles) { const path = join(root(), 'client', 'dist', staticClientFile) - clientsRouter.get('/' + staticClientFile, (req: express.Request, res: express.Response) => { + clientsRouter.get(`/${staticClientFile}`, (req: express.Request, res: express.Response) => { res.sendFile(path, { maxAge: STATIC_MAX_AGE.SERVER }) }) } +// Dynamic PWA manifest +clientsRouter.get('/manifest.webmanifest', asyncMiddleware(generateManifest)) + +// Static client overrides +const staticClientOverrides = [ + 'assets/images/logo.svg', + 'assets/images/favicon.png', + 'assets/images/icons/icon-36x36.png', + 'assets/images/icons/icon-48x48.png', + 'assets/images/icons/icon-72x72.png', + 'assets/images/icons/icon-96x96.png', + 'assets/images/icons/icon-144x144.png', + 'assets/images/icons/icon-192x192.png', + 'assets/images/icons/icon-512x512.png' +] + +for (const staticClientOverride of staticClientOverrides) { + const overridePhysicalPath = join(CONFIG.STORAGE.CLIENT_OVERRIDES_DIR, staticClientOverride) + clientsRouter.use(`/client/${staticClientOverride}`, asyncMiddleware(serveClientOverride(overridePhysicalPath))) +} + clientsRouter.use('/client/locales/:locale/:file.json', serveServerTranslations) clientsRouter.use('/client', express.static(distPath, { maxAge: STATIC_MAX_AGE.CLIENT })) @@ -130,3 +151,28 @@ function sendHTML (html: string, res: express.Response) { return res.send(html) } + +async function generateManifest (req: express.Request, res: express.Response) { + const manifestPhysicalPath = join(root(), 'client', 'dist', 'manifest.webmanifest') + const manifestJson = await fs.readFile(manifestPhysicalPath, 'utf8') + const manifest = JSON.parse(manifestJson) + + manifest.name = CONFIG.INSTANCE.NAME + manifest.short_name = CONFIG.INSTANCE.NAME + manifest.description = CONFIG.INSTANCE.SHORT_DESCRIPTION + + res.json(manifest) +} + +function serveClientOverride (path: string) { + return async (req: express.Request, res: express.Response, next: express.NextFunction) => { + try { + await fs.access(path, constants.F_OK) + // Serve override client + res.sendFile(path, { maxAge: STATIC_MAX_AGE.SERVER }) + } catch { + // Serve dist client + next() + } + } +}