🚀 Allow ServiceWorker /ghost/ scope (#7967)

ServiceWorkers can only control the scope from which they have been served. Our service workers live, like all other files, in an `asset` folder - and could in theory only work on other files in there.

This commit fake-serves our service workers from `/ghost/`, thus allowing them to give everything offline powers.
This commit is contained in:
Felix Rieseberg 2017-02-11 06:43:09 -08:00 committed by Kevin Ansfield
parent a341bbde97
commit 53bd7da063
2 changed files with 19 additions and 0 deletions

View File

@ -41,6 +41,9 @@ module.exports = function setupAdminApp() {
{maxAge: utils.ONE_YEAR_MS, fallthrough: false}
));
// Service Worker for offline support
adminApp.get(/^\/(sw.js|sw-registration.js)$/, require('./serviceworker'));
// Render error page in case of maintenance
adminApp.use(maintenance);

View File

@ -0,0 +1,16 @@
var debug = require('debug')('ghost:admin:serviceworker'),
path = require('path');
// Route: index
// Path: /ghost/sw.js|sw-registration.js
// Method: GET
module.exports = function adminController(req, res) {
/*jslint unparam:true*/
debug('serviceworker called');
var sw = path.join(__dirname, '..', '..', 'built', 'assets', 'sw.js'),
swr = path.join(__dirname, '..', '..', 'built', 'assets', 'sw-registration.js'),
fileToSend = req.url === '/sw.js' ? sw : swr;
res.sendFile(fileToSend);
};