UNPKG

dl

Version:

DreamLab Libs

89 lines (66 loc) 3 kB
var core = require('core'); var CredentialsProvider = core.credentials.CredentialsProvider; var Event = core.event.Event; var ConfigServiceClient = require('./ConfigServiceClient.js').ConfigServiceClient; var instances = {}; var CSCredentialsProvider = function (application, segment) { return CSCredentialsProvider.getInstance(application, segment); }; CSCredentialsProvider.getInstance = function (application, segment) { var instanceId = application + '_' + segment; if (!instances.hasOwnProperty(instanceId)) { instances[instanceId] = CSCredentialsProvider.createInstance(application, segment); } return instances[instanceId]; }; CSCredentialsProvider.createInstance = function (application, segment) { var obj = Object.create(CSCredentialsProvider.prototype); CredentialsProvider.call(obj); obj._csClient = new ConfigServiceClient(application, segment); obj._csClient.addEventListener(ConfigServiceClient.Event.LOADED, obj._onCSClientLoaded.bind(obj)); obj._csClient.addEventListener(ConfigServiceClient.Event.ERROR, obj._onCSClientError.bind(obj)); obj._csClient.start(); obj._permError = null; obj._refreshInProgress = true; return obj; }; CSCredentialsProvider.prototype = Object.create(CredentialsProvider.prototype); CSCredentialsProvider.prototype._credentialsCopy = function () { return JSON.parse(JSON.stringify(this._csClient.data)); }; CSCredentialsProvider.prototype._onCSClientLoaded = function() { this._refreshInProgress = false; this.dispatchEvent(new Event(CredentialsProvider.Event.LOAD, this._credentialsCopy())); }; CSCredentialsProvider.prototype._onCSClientError = function(ev) { this._permError = ev.data; this._refreshInProgress = true; this.dispatchEvent(new Event(CredentialsProvider.Event.ERROR, ev.data)); }; CSCredentialsProvider.prototype.getCredentialId = function() { return this._csClient._application; }; CSCredentialsProvider.prototype.get = function(callback) { if (this._csClient.data && !this._refreshInProgress) { return callback(null, this._credentialsCopy()); } else if (this._permError) { return callback(CredentialsProvider.Event.ERROR, this._csClient._watchErr); } else { var that = this; var removeListeners = function() { that.removeEventListener(CredentialsProvider.Event.LOAD, onCredentials); that.removeEventListener(CredentialsProvider.Event.ERROR, onCredentialsError); }; var onCredentials = function (e) { removeListeners(); callback(null, e.data); }; var onCredentialsError = function (e) { removeListeners(); callback(e.type, e.data); }; this.addEventListener(CredentialsProvider.Event.LOAD, onCredentials, this); this.addEventListener(CredentialsProvider.Event.ERROR, onCredentialsError, this); } }; exports.CSCredentialsProvider = CSCredentialsProvider;