auth0-js
Version:
Auth0 headless browser sdk
66 lines (59 loc) • 1.74 kB
JavaScript
import windowHandler from '../window';
import DummyStorage from './dummy';
import CookieStorage from './cookie';
import Warn from '../warn';
function StorageHandler() {
this.warn = new Warn({});
this.storage = new CookieStorage();
try {
// some browsers throw an error when trying to access localStorage
// when localStorage is disabled.
var localStorage = windowHandler.getWindow().localStorage;
if (localStorage) {
this.storage = localStorage;
}
} catch (e) {
this.warn.warning(e);
this.warn.warning("Can't use localStorage. Using CookieStorage instead.");
}
}
StorageHandler.prototype.failover = function() {
if (this.storage instanceof DummyStorage) {
this.warn.warning('DummyStorage: ignore failover');
return;
} else if (this.storage instanceof CookieStorage) {
this.warn.warning('CookieStorage: failing over DummyStorage');
this.storage = new DummyStorage();
} else {
this.warn.warning('LocalStorage: failing over CookieStorage');
this.storage = new CookieStorage();
}
};
StorageHandler.prototype.getItem = function(key) {
try {
return this.storage.getItem(key);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.getItem(key);
}
};
StorageHandler.prototype.removeItem = function(key) {
try {
return this.storage.removeItem(key);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.removeItem(key);
}
};
StorageHandler.prototype.setItem = function(key, value, options) {
try {
return this.storage.setItem(key, value, options);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.setItem(key, value, options);
}
};
export default StorageHandler;