dl
Version:
DreamLab Libs
89 lines (66 loc) • 3 kB
JavaScript
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;