You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.1 KiB
JavaScript
138 lines
4.1 KiB
JavaScript
/* global LokiAppDotNetServerAPI, semver, log */
|
|
// eslint-disable-next-line func-names
|
|
(function() {
|
|
'use strict';
|
|
|
|
// hold last result
|
|
let expiredVersion = null;
|
|
|
|
window.tokenlessFileServerAdnAPI = new LokiAppDotNetServerAPI(
|
|
'', // no pubkey needed
|
|
window.getDefaultFileServer()
|
|
);
|
|
// use the anonymous access token
|
|
window.tokenlessFileServerAdnAPI.token = 'loki';
|
|
// configure for file server comms
|
|
window.tokenlessFileServerAdnAPI.getPubKeyForUrl();
|
|
|
|
let nextWaitSeconds = 5;
|
|
const checkForUpgrades = async () => {
|
|
const result = await window.tokenlessFileServerAdnAPI.serverRequest(
|
|
'loki/v1/version/client/desktop'
|
|
);
|
|
if (
|
|
result &&
|
|
result.response &&
|
|
result.response.data &&
|
|
result.response.data.length &&
|
|
result.response.data[0].length
|
|
) {
|
|
const latestVer = semver.clean(result.response.data[0][0]);
|
|
if (semver.valid(latestVer)) {
|
|
const ourVersion = window.getVersion();
|
|
if (latestVer === ourVersion) {
|
|
log.info('You have the latest version', latestVer);
|
|
// change the following to true ot test/see expiration banner
|
|
expiredVersion = false;
|
|
} else {
|
|
// expire if latest is newer than current
|
|
expiredVersion = semver.gt(latestVer, ourVersion);
|
|
if (expiredVersion) {
|
|
log.info('There is a newer version available', latestVer);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
// give it a minute
|
|
log.warn('Could not check to see if newer version is available', result);
|
|
nextWaitSeconds = 60;
|
|
setTimeout(async () => {
|
|
await checkForUpgrades();
|
|
}, nextWaitSeconds * 1000); // wait a minute
|
|
}
|
|
// no message logged means serverRequest never returned...
|
|
};
|
|
|
|
// don't wait for this to finish
|
|
checkForUpgrades();
|
|
|
|
window.extension = window.extension || {};
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
const resolveWhenReady = (res, rej) => {
|
|
if (expiredVersion !== null) {
|
|
return res(expiredVersion);
|
|
}
|
|
function waitForVersion() {
|
|
if (expiredVersion !== null) {
|
|
return res(expiredVersion);
|
|
}
|
|
log.info(
|
|
`Delaying sending checks for ${nextWaitSeconds}s, no version yet`
|
|
);
|
|
setTimeout(waitForVersion, nextWaitSeconds * 1000);
|
|
return true;
|
|
}
|
|
waitForVersion();
|
|
return true;
|
|
};
|
|
|
|
// just get current status
|
|
window.extension.expiredStatus = () => expiredVersion;
|
|
// actually wait until we know for sure
|
|
window.extension.expiredPromise = () => new Promise(resolveWhenReady);
|
|
window.extension.expired = cb => {
|
|
if (expiredVersion === null) {
|
|
// just give it another second
|
|
log.info(`Delaying expire banner determination for ${nextWaitSeconds}s`);
|
|
setTimeout(() => {
|
|
window.extension.expired(cb);
|
|
}, nextWaitSeconds * 1000);
|
|
return;
|
|
}
|
|
// yes we know
|
|
cb(expiredVersion);
|
|
};
|
|
|
|
const getServerTime = async () => {
|
|
let timestamp = NaN;
|
|
|
|
try {
|
|
const res = await window.tokenlessFileServerAdnAPI.serverRequest(
|
|
'loki/v1/time'
|
|
);
|
|
if (res.statusCode === 200) {
|
|
timestamp = res.response;
|
|
}
|
|
} catch (e) {
|
|
return timestamp;
|
|
}
|
|
|
|
return Number(timestamp);
|
|
};
|
|
|
|
const getTimeDifferential = async () => {
|
|
// Get time differential between server and client in seconds
|
|
const serverTime = await getServerTime();
|
|
const clientTime = Math.ceil(Date.now() / 1000);
|
|
|
|
if (Number.isNaN(serverTime)) {
|
|
log.error('expire:::getTimeDifferential - serverTime is not valid');
|
|
return 0;
|
|
}
|
|
return serverTime - clientTime;
|
|
};
|
|
|
|
// require for PoW to work
|
|
window.setClockParams = async () => {
|
|
// Set server-client time difference
|
|
const maxTimeDifferential = 30 + 15; // + 15 for onion requests
|
|
const timeDifferential = await getTimeDifferential();
|
|
log.info('expire:::setClockParams - Clock difference', timeDifferential);
|
|
|
|
window.clientClockSynced = Math.abs(timeDifferential) < maxTimeDifferential;
|
|
return window.clientClockSynced;
|
|
};
|
|
window.setClockParams();
|
|
})();
|