dl
Version:
DreamLab Libs
117 lines (91 loc) • 3.9 kB
JavaScript
var Class = require("core").Class;
var Assertions = require("core").common.Assertions;
var Types = require("core").common.Types;
var EventDispatcher = require("core").event.EventDispatcher;
var Event = require("core").event.Event;
var ErrorEvent = require("core").event.ErrorEvent;
var OpalRequest = require('../opal/OpalRequest.js').OpalRequest;
var OpalLoader = require('../opal/OpalLoader.js').OpalLoader;
var Loader = require('core').http.Loader;
var JsonRpcResponse = require("core").jsonrpc.JsonRpcResponse;
var SingletonEnforcer = function(){};
SingletonEnforcer = new Class(new SingletonEnforcer());
var CredentialsManagerInstance = null;
var CredentialsManager = function () {
this.Extends = EventDispatcher;
/*
this._credentials = {};
this._jobs = {};
this._applicationName;
*/
this.initialize = function (enforcer, appName) {
this.parent();
this._credentials = {};
this._jobs = {};
Assertions.isInstanceOf(enforcer, SingletonEnforcer, CredentialsManager.Exception.SINGLETON);
this._applicationName = appName;
};
this.addEventListener = function (eventName, key, callback, context) {
return this.parent(eventName + key, callback, context);
};
this.removeEventListener = function (eventName, key, callback) {
return this.parent(eventName + key, callback);
};
this.getCredential = function (key) {
if (this._credentials.hasOwnProperty(key)) {
this.dispatchEvent(new Event(CredentialsManager.Event.LOADED + key, this._credentials[key]));
} else {
this.renewCredential(key);
}
};
this.renewCredential = function (key) {
var self = this;
if (this._jobs.hasOwnProperty(key)) {
return;
}
this._jobs[key] = true;
(new OpalLoader(new OpalRequest({
"url": "router.opaladmin.onetapi.pl",
"method": "get_credentials",
"params": {
"ds_alias": key
},
"application": this._applicationName
}))).addEventListener(OpalLoader.Event.JSON_RESPONSE, function(data){
var rpc = data.data.getBody();
if (rpc.isError()) {
delete self._jobs[key];
self.dispatchEvent(new ErrorEvent(CredentialsManager.Event.ERROR + key, rpc.getError()));
return;
}
self._credentials[key] = rpc.getResult();
delete self._jobs[key];
self.dispatchEvent(new Event(CredentialsManager.Event.LOADED + key, self._credentials[key]));
}).addEventListener(Loader.Event.ERROR, function(data){
delete self._jobs[key];
self.dispatchEvent(new ErrorEvent(CredentialsManager.Event.ERROR + key, data));
}).load();
};
};
CredentialsManager = new Class(new CredentialsManager());
var factoryInstances = {};
CredentialsManager.factory = function (appName) {
if (!Types.isString(appName)) {
if (process.env['OPAL_IDENTITY']) {
appName = process.env['OPAL_IDENTITY'];
} else {
appName = "edgeserver.edgeserver.onetapi.pl";
}
}
if (factoryInstances.hasOwnProperty(appName)) {
return factoryInstances[appName];
}
factoryInstances[appName] = new CredentialsManager(new SingletonEnforcer(), appName);
return factoryInstances[appName];
};
CredentialsManager.Event = {};
CredentialsManager.Event.LOADED = 'CredentialsManager_LOADED_';
CredentialsManager.Event.ERROR = 'CredentialsManager_ERROR_';
CredentialsManager.Exception = {};
CredentialsManager.Exception.SINGLETON = "Singleton class, use factory() instead.";
exports.CredentialsManager = CredentialsManager;