cryptpad/www/common/outer/local-store.js

145 lines
4.5 KiB
JavaScript
Raw Normal View History

2017-11-23 11:28:49 +00:00
define([
'/common/common-constants.js',
'/common/common-hash.js',
'/bower_components/localforage/dist/localforage.min.js',
'/customize/application_config.js',
], function (Constants, Hash, localForage, AppConfig) {
2017-11-23 11:28:49 +00:00
var LocalStore = {};
LocalStore.setThumbnail = function (key, value, cb) {
localForage.setItem(key, value, cb);
};
LocalStore.getThumbnail = function (key, cb) {
localForage.getItem(key, cb);
};
LocalStore.clearThumbnail = function (cb) {
cb = cb || function () {};
localForage.clear(cb);
};
LocalStore.setFSHash = function (hash) {
var sHash = Hash.serializeHash(hash);
localStorage[Constants.fileHashKey] = sHash;
};
LocalStore.getFSHash = function () {
var hash = localStorage[Constants.fileHashKey];
if (['undefined', 'undefined/'].indexOf(hash) !== -1) {
localStorage.removeItem(Constants.fileHashKey);
return;
}
if (hash) {
var sHash = Hash.serializeHash(hash);
if (sHash !== hash) { localStorage[Constants.fileHashKey] = sHash; }
}
return hash;
};
var getUserHash = LocalStore.getUserHash = function () {
var hash = localStorage[Constants.userHashKey];
if (['undefined', 'undefined/'].indexOf(hash) !== -1) {
localStorage.removeItem(Constants.userHashKey);
return;
}
if (hash) {
var sHash = Hash.serializeHash(hash);
if (sHash !== hash) { localStorage[Constants.userHashKey] = sHash; }
}
return hash;
};
2017-11-27 11:18:04 +00:00
LocalStore.setUserHash = function (hash) {
2017-11-24 14:12:00 +00:00
var sHash = Hash.serializeHash(hash);
localStorage[Constants.userHashKey] = sHash;
};
LocalStore.getBlockHash = function () {
return localStorage[Constants.blockHashKey];
};
LocalStore.setBlockHash = function (hash) {
localStorage[Constants.blockHashKey] = hash;
};
2017-11-23 11:28:49 +00:00
LocalStore.getAccountName = function () {
return localStorage[Constants.userNameKey];
};
LocalStore.isLoggedIn = function () {
return typeof getUserHash() === "string";
2017-11-23 11:28:49 +00:00
};
LocalStore.login = function (hash, name, cb) {
if (!hash) { throw new Error('expected a user hash'); }
2017-11-23 11:28:49 +00:00
if (!name) { throw new Error('expected a user name'); }
hash = Hash.serializeHash(hash);
localStorage.setItem(Constants.userHashKey, hash);
2017-11-23 11:28:49 +00:00
localStorage.setItem(Constants.userNameKey, name);
if (cb) { cb(); }
};
var logoutHandlers = [];
2018-03-21 17:27:20 +00:00
LocalStore.logout = function (cb, isDeletion) {
2017-11-23 11:28:49 +00:00
[
Constants.userNameKey,
Constants.userHashKey,
Constants.blockHashKey,
2017-11-23 11:28:49 +00:00
'loginToken',
'plan',
].forEach(function (k) {
localStorage.removeItem(k);
delete localStorage[k];
});
2020-09-08 09:50:52 +00:00
try {
Object.keys(localStorage || {}).forEach(function (k) {
// Remvoe everything in localStorage except CACHE and FS_hash
if (/^CRYPTPAD_CACHE/.test(k) || /^LESS_CACHE/.test(k) || k === Constants.fileHashKey) { return; }
delete localStorage[k];
});
} catch (e) { console.error(e); }
2017-11-23 11:28:49 +00:00
LocalStore.clearThumbnail();
// Make sure we have an FS_hash in localStorage before reloading all the tabs
// so that we don't end up with tabs using different anon hashes
if (!LocalStore.getFSHash()) {
LocalStore.setFSHash(Hash.createRandomHash('drive'));
2017-11-23 11:28:49 +00:00
}
2018-03-21 17:27:20 +00:00
if (!isDeletion) {
logoutHandlers.forEach(function (h) {
if (typeof (h) === "function") { h(); }
});
}
2017-11-23 11:28:49 +00:00
if (typeof(AppConfig.customizeLogout) === 'function') {
return void AppConfig.customizeLogout(cb);
}
2017-11-23 11:28:49 +00:00
if (cb) { cb(); }
};
2020-08-05 13:03:06 +00:00
var loginHandlers = [];
LocalStore.loginReload = function () {
loginHandlers.forEach(function (h) {
if (typeof (h) === "function") { h(); }
});
document.location.reload();
};
LocalStore.onLogin = function (h) {
if (typeof (h) !== "function") { return; }
if (loginHandlers.indexOf(h) !== -1) { return; }
loginHandlers.push(h);
};
2017-11-23 11:28:49 +00:00
LocalStore.onLogout = function (h) {
if (typeof (h) !== "function") { return; }
if (logoutHandlers.indexOf(h) !== -1) { return; }
logoutHandlers.push(h);
};
return LocalStore;
});