WIP TOFU BOOTLOADER
This commit is contained in:
parent
01cb64d07d
commit
65dd8f1d6a
6 changed files with 82 additions and 22 deletions
|
@ -69,24 +69,76 @@ define([
|
||||||
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var urlArgs = RequireConfig().urlArgs;
|
||||||
var sw = window.navigator.serviceWorker;
|
var sw = window.navigator.serviceWorker;
|
||||||
|
// If the browser doesn't support service workers, just start loading normally
|
||||||
if (!sw) { return void load(); }
|
if (!sw) { return void load(); }
|
||||||
try {
|
|
||||||
sw
|
|
||||||
.register('/sw.js?'
|
|
||||||
+ RequireConfig().urlArgs
|
|
||||||
, { scope: '/' })
|
|
||||||
.then(function (reg) {
|
|
||||||
console.log("service-worker registered", reg);
|
|
||||||
load();
|
|
||||||
})
|
|
||||||
.catch(function (err) {
|
|
||||||
console.error(err);
|
|
||||||
load();
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
load();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// TOFU
|
||||||
|
// calling back 'true' means it's safe to proceed
|
||||||
|
// otherwise load the old version
|
||||||
|
var TOFU_KEY = 'TOFU_URL_ARGS';
|
||||||
|
var checkVersion = function (msg, cb) {
|
||||||
|
var newUrlArgs = urlArgs;
|
||||||
|
var k = TOFU_KEY;
|
||||||
|
try {
|
||||||
|
var oldUrlArgs = localStorage.getItem(k);
|
||||||
|
if (!oldUrlArgs) {
|
||||||
|
//localStorage.setItem(k, newUrlArgs);
|
||||||
|
return void cb(true);
|
||||||
|
}
|
||||||
|
if (oldUrlArgs === newUrlArgs) {
|
||||||
|
return void cb(true);
|
||||||
|
}
|
||||||
|
// we don't have our fancy loading screen or other UI, so use window.confirm
|
||||||
|
return void setTimeout(function () {
|
||||||
|
var answer = window.confirm(msg);
|
||||||
|
//localStorage.setItem(k, newUrlArgs);
|
||||||
|
return void cb(answer);
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
localStorage.removeItem(k);
|
||||||
|
return void cb(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var loadServiceWorker = function (args, offline) {
|
||||||
|
var path = '/sw.js?' + args; // + (offline ? '&offline=1': ''); // XXX wrong way to do offline...
|
||||||
|
try {
|
||||||
|
sw
|
||||||
|
.register(path, { scope: '/' })
|
||||||
|
.then(function (reg) {
|
||||||
|
// XXX tell the service worker if it should stay offline...
|
||||||
|
|
||||||
|
localStorage.setItem(TOFU_KEY, args);
|
||||||
|
console.log("service-worker registered", reg);
|
||||||
|
load();
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
console.error(err);
|
||||||
|
load();
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var msg = "ok to load a new version of cryptpad (" + urlArgs + ")?";
|
||||||
|
checkVersion(msg, function (consent) {
|
||||||
|
var consentfulWorker = urlArgs;
|
||||||
|
var offline = false;
|
||||||
|
|
||||||
|
//console.log(urlArgs);
|
||||||
|
if (!consent) {
|
||||||
|
consentfulWorker = localStorage.getItem(TOFU_KEY);
|
||||||
|
offline = true;
|
||||||
|
//return void loadServiceWorker(localStorage.getItem(TOFU_KEY), true);
|
||||||
|
} else {
|
||||||
|
console.error("THE USER CONSENTED TO THE UPDATE");
|
||||||
|
}
|
||||||
|
window.consentfulWorker = consentfulWorker;
|
||||||
|
|
||||||
|
loadServiceWorker(consentfulWorker, offline);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1932,7 +1932,7 @@ define([
|
||||||
|
|
||||||
var CRYPTPAD_VERSION = 'cryptpad-version';
|
var CRYPTPAD_VERSION = 'cryptpad-version';
|
||||||
var currentVersion = localStorage[CRYPTPAD_VERSION];
|
var currentVersion = localStorage[CRYPTPAD_VERSION];
|
||||||
var updateLocalVersion = function (newUrlArgs) {
|
var updateLocalVersion = function (newUrlArgs) { // XXX
|
||||||
// Check for CryptPad updates
|
// Check for CryptPad updates
|
||||||
var urlArgs = newUrlArgs || (Config.requireConf ? Config.requireConf.urlArgs : null);
|
var urlArgs = newUrlArgs || (Config.requireConf ? Config.requireConf.urlArgs : null);
|
||||||
if (!urlArgs) { return; }
|
if (!urlArgs) { return; }
|
||||||
|
@ -2089,7 +2089,7 @@ define([
|
||||||
STORE_READY: onStoreReady,
|
STORE_READY: onStoreReady,
|
||||||
// Network
|
// Network
|
||||||
NETWORK_DISCONNECT: common.onNetworkDisconnect.fire,
|
NETWORK_DISCONNECT: common.onNetworkDisconnect.fire,
|
||||||
NETWORK_RECONNECT: function (data) {
|
NETWORK_RECONNECT: function (data) { // XXX reconnect
|
||||||
require(['/api/config?' + (+new Date())], function (NewConfig) {
|
require(['/api/config?' + (+new Date())], function (NewConfig) {
|
||||||
var update = updateLocalVersion(NewConfig.requireConf && NewConfig.requireConf.urlArgs);
|
var update = updateLocalVersion(NewConfig.requireConf && NewConfig.requireConf.urlArgs);
|
||||||
if (update) {
|
if (update) {
|
||||||
|
|
|
@ -2659,7 +2659,7 @@ define([
|
||||||
if (typeof(cb) === 'function') { cb(returned); }
|
if (typeof(cb) === 'function') { cb(returned); }
|
||||||
|
|
||||||
store.offline = false;
|
store.offline = false;
|
||||||
sendDriveEvent('NETWORK_RECONNECT'); // Tell inner that we're now online
|
sendDriveEvent('NETWORK_RECONNECT'); // Tell inner that we're now online // XXX
|
||||||
broadcast([], "UPDATE_METADATA");
|
broadcast([], "UPDATE_METADATA");
|
||||||
broadcast([], "STORE_READY", returned);
|
broadcast([], "STORE_READY", returned);
|
||||||
|
|
||||||
|
@ -2826,7 +2826,7 @@ define([
|
||||||
});
|
});
|
||||||
rt.proxy.on('reconnect', function () {
|
rt.proxy.on('reconnect', function () {
|
||||||
store.offline = false;
|
store.offline = false;
|
||||||
sendDriveEvent('NETWORK_RECONNECT');
|
sendDriveEvent('NETWORK_RECONNECT'); // XXX reconnect
|
||||||
broadcast([], "UPDATE_METADATA");
|
broadcast([], "UPDATE_METADATA");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ define([
|
||||||
try {
|
try {
|
||||||
sw
|
sw
|
||||||
.register('/sw.js?'
|
.register('/sw.js?'
|
||||||
+ RequireConfig().urlArgs
|
+ RequireConfig().urlArgs // XXX should match the query string provided by outer
|
||||||
, { scope: '/' })
|
, { scope: '/' })
|
||||||
.then(function (reg) {
|
.then(function (reg) {
|
||||||
console.log("service-worker registered", reg);
|
console.log("service-worker registered", reg);
|
||||||
|
|
|
@ -12,6 +12,7 @@ define([
|
||||||
var requireConfig = RequireConfig();
|
var requireConfig = RequireConfig();
|
||||||
var lang = Messages._languageUsed;
|
var lang = Messages._languageUsed;
|
||||||
var req = {
|
var req = {
|
||||||
|
worker: window.consentfulWorker,
|
||||||
cfg: requireConfig,
|
cfg: requireConfig,
|
||||||
req: [ '/common/loading.js' ],
|
req: [ '/common/loading.js' ],
|
||||||
pfx: window.location.origin,
|
pfx: window.location.origin,
|
||||||
|
@ -30,6 +31,7 @@ define([
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX load with cached URL args via window.consentfulWorker
|
||||||
document.getElementById('sbox-iframe').setAttribute('src',
|
document.getElementById('sbox-iframe').setAttribute('src',
|
||||||
ApiConfig.httpSafeOrigin + (pathname || window.location.pathname) + 'inner.html?' +
|
ApiConfig.httpSafeOrigin + (pathname || window.location.pathname) + 'inner.html?' +
|
||||||
requireConfig.urlArgs + '#' + encodeURIComponent(JSON.stringify(req)));
|
requireConfig.urlArgs + '#' + encodeURIComponent(JSON.stringify(req)));
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
/* jshint esversion: 6 */
|
/* jshint esversion: 6 */
|
||||||
var version = self.location.search || "DEFAULT";
|
var version = self.location.search || "DEFAULT";
|
||||||
//console.log('worker location:', self.location);
|
//console.log('worker location:', self.location);
|
||||||
|
console.info('SW VERSION', version);
|
||||||
|
|
||||||
|
var params = new URLSearchParams(version);
|
||||||
|
var OFFLINE = params.has('offline');
|
||||||
|
|
||||||
|
console.info("SW OFFLINE?", OFFLINE);
|
||||||
|
|
||||||
var filesToCache = [
|
var filesToCache = [
|
||||||
'/common/sframe-app-outer.js',
|
'/common/sframe-app-outer.js',
|
||||||
|
|
Loading…
Reference in a new issue