UNPKG

@omneedia/socketcluster

Version:

SocketCluster - A Highly parallelized WebSocket server cluster to make the most of multi-core machines/instances.

59 lines (48 loc) 1.69 kB
var AuthEngine = function () { this._internalStorage = {}; this.isLocalStorageEnabled = this._checkLocalStorageEnabled(); }; AuthEngine.prototype._checkLocalStorageEnabled = function () { var err; try { // Some browsers will throw an error here if localStorage is disabled. global.localStorage; // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem // throw QuotaExceededError. We're going to detect this and avoid hard to debug edge cases. global.localStorage.setItem('__scLocalStorageTest', 1); global.localStorage.removeItem('__scLocalStorageTest'); } catch (e) { err = e; } return !err; }; AuthEngine.prototype.saveToken = function (name, token, options, callback) { if (this.isLocalStorageEnabled && global.localStorage) { global.localStorage.setItem(name, token); } else { this._internalStorage[name] = token; } callback && callback(null, token); }; AuthEngine.prototype.removeToken = function (name, callback) { var token; this.loadToken(name, function (err, authToken) { token = authToken; }); if (this.isLocalStorageEnabled && global.localStorage) { global.localStorage.removeItem(name); } else { delete this._internalStorage[name]; } callback && callback(null, token); }; AuthEngine.prototype.loadToken = function (name, callback) { var token; if (this.isLocalStorageEnabled && global.localStorage) { token = global.localStorage.getItem(name); } else { token = this._internalStorage[name] || null; } callback(null, token); }; module.exports.AuthEngine = AuthEngine;