oidc-lib
Version:
A library for creating OIDC Service Providers
155 lines (128 loc) • 7.4 kB
JavaScript
function claimer_app_boot(newModuleName, newModule){
var defaultModuleViews = {
'viewCollection': {"\\claimer_sts\\views\\claimer_sts_client_identity_error":"PGgyPk9wZW5JZENvbm5lY3QgY2xpZW50IGNvbm5lY3Rpb24gZXJyb3I8L2gyPg0KPGg0PkVycm9yOiB7e3tlcnJvcn19fTwvaDQ-DQo8aDQ-RXJyb3IgZGV0YWlsOiB7e3tlcnJvcl9kZXNjcmlwdGlvbn19fTwvaDQ-DQo","\\claimer_sts\\views\\claimer_sts_error_response":"PGRpdiBpZD0ic3VibWl0ZGl2IiBzdHlsZT0iZGlzcGxheTpub25lIj4NCjxmb3JtIGlkPSJjbGFpbWVyX3N0c19lcnJvcl9yZXNwb25zZSIgYWN0aW9uPSJ7e3tyZWRpcmVjdF91cml9fX0iIG1ldGhvZD0icG9zdCI-DQogICAgICA8ZmllbGRzZXQ-DQogICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVycm9yIiBuYW1lPSJlcnJvciIgdmFsdWU9Int7e2Vycm9yfX19IiAvPg0KICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlcnJvcl9kZXNjcmlwdGlvbiIgbmFtZT0iZXJyb3JfZGVzY3JpcHRpb24iIHZhbHVlPSJ7e3tlcnJvcl9kZXNjcmlwdGlvbn19fSIgLz4NCiAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3RhdGUiIG5hbWU9InN0YXRlIiB2YWx1ZT0ie3t7c3RhdGV9fX0iIC8-DQogICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0IiAvPg0KICAgICAgPC9maWVsZHNldD4NCjwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpew0KICBkb2N1bWVudC5mb3Jtc1snY2xhaW1lcl9zdHNfZXJyb3JfcmVzcG9uc2UnXS5zdWJtaXQoKTsNCn0NCjwvc2NyaXB0Pg","\\claimer_sts\\views\\claimer_sts_implicit_redirect":"PGRpdiBpZD0ic3VibWl0ZGl2IiBzdHlsZT0iZGlzcGxheTpub25lIj4NCjxmb3JtIGlkPSJjbGFpbWVyX3N0c19hdXRoX3Jlc3BvbnNlIiBhY3Rpb249Int7e3JlZGlyZWN0X3VyaX19fSIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGF5bG9hZCIgbmFtZT0icGF5bG9hZCIgLz4NCiAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icmVkaXJlY3RfdXJpIiBuYW1lPSJyZWRpcmVjdF91cmkiIC8-DQogICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0IiAvPg0KICAgICAgPC9maWVsZHNldD4NCjwvZm9ybT4NCjwvZGl2Pg0KDQo8c2NyaXB0Pg0Kd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7DQogIC8vIEZpcnN0LCBwYXJzZSB0aGUgcXVlcnkgc3RyaW5nDQogIHZhciBwYXJhbXMgPSB7fSwgcG9zdEJvZHkgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSwNCiAgICAgIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZywgbTsNCiAgd2hpbGUgKG0gPSByZWdleC5leGVjKHBvc3RCb2R5KSkgew0KICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pOw0KICB9DQogIHZhciBwYXJhbXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOw0KICB2YXIgcGFyYW1zYjY0ID0gYnRvYShwYXJhbXNTdHJpbmcpOw0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF5bG9hZCcpLnZhbHVlID0gcGFyYW1zYjY0Ow0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVkaXJlY3RfdXJpJykudmFsdWUgPSAne3t7cmVkaXJlY3RfdXJpfX19JzsNCiAgZG9jdW1lbnQuZm9ybXNbJ2NsYWltZXJfc3RzX2F1dGhfcmVzcG9uc2UnXS5zdWJtaXQoKTsNCn0NCjwvc2NyaXB0Pg0K","\\claimer_content\\wallet\\views\\claimer_sts_client_identity_error":"PGgyPkEgd2ViIHNpdGUgaGFzIGNvbm5lY3RlZCB1c2luZyB0aGUgd3JvbmcgY3JlZGVudGlhbHM8L2gyPg0KPGg0PkVycm9yOiB7e3tlcnJvcn19fTwvaDQ-DQo8aDQ-RXJyb3IgZGV0YWlsOiB7e3tlcnJvcl9kZXNjcmlwdGlvbn19fTwvaDQ-DQo","\\claimer_content\\wallet\\views\\error_received":"PGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0ianVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4NCgk8aDM-e3tjb21wb25lbnR9fSBlcnJvciByZWNlaXZlZDwvaDM-DQoJPGJyLz4NCgk8YnIvPg0KCTxoNT5FcnJvcjoge3tlcnJvcn19PC9oNT4NCgk8aDU-RGV0YWlsOiB7e2Vycm9yX2Rlc2NyaXB0aW9ufX08L2g1Pg0KPC9kaXY-DQo"},
'scripts': {}
}
console.log('[Main] Registering Service Worker');
navigator.serviceWorker.register('/wallet/service-worker.js', {scope: '/wallet/'})
.then(reg => {
// reg is a serviceWorkerRegistration object
console.log('[Main] Service Worker Registration Succeeded');
// Handler for messages coming from the service worker
}, err => {
console.log('[Main] Service Worker Registration failed', err);
});
navigator.serviceWorker.addEventListener('message', function(event){
var action = event.data.action;
switch(action){
case 'install':
if (startupInvoked){
console.log('[Main] Ignoring INSTALL message from ServiceWorker because startup begun.');
}
else{
console.log('[Main] Received INSTALL message from Service Worker and invoking startup.')
startup();
}
break;
case 'managerNotification':
case 'masterNotification':
var retVal = masterNotification(event.data);
break;
}
});
function send_message_to_serviceWorker(msg){
var safeMsg = pk.base64url.encode(JSON.stringify(msg));
return new Promise(function(resolve, reject){
if (navigator.serviceWorker.controller === null){
reject('serviceworker-not-ready');
}
else{
// Create a Message Channel
var msg_chan = new MessageChannel();
// Handler for recieving message reply from service worker
msg_chan.port1.onmessage = function(event){
if(event.data.error){
reject(event.data.error);
}else{
resolve(JSON.parse(pk.base64url.decode(event.data)));
}
};
// Send message to service worker along with port for reply
navigator.serviceWorker.controller.postMessage(safeMsg, [msg_chan.port2]);
}
});
}
pk.util.send_message_to_serviceWorker = send_message_to_serviceWorker;
const clientlib = window.claimerClientLib;
var startupInvoked = false;
var frameworkModules = {
token: pk.token,
key_management: pk.key_management,
serialize64: pk.serialize64
}
frameworkModules[newModuleName] = newModule;
var db_modules = {
indexed_db: pk.indexed_db_module.indexed_db_provider,
hub: pk.hub_module.hub_provider
}
pk.dbs = {};
var dbScaffold = {};
for (var contentModuleName in pk.util.config.content_modules){
if (pk.util.config.content_modules[contentModuleName].db !== undefined){
var db_info = pk.util.config.content_modules[contentModuleName].db;
if (db_info['provider'] === undefined){
continue;
}
if (db_modules[db_info.provider] === undefined){
console.error("*** Error: contentModule " + contentModuleName + ' should have "required(' + db_info['provider'] + ')"');
}
else{
dbScaffold[contentModuleName] = new db_modules[db_info.provider]();
}
}
}
if (pk.util.config.sts.httpsServerUrl !== undefined){
var httpsServerUrl = pk.util.url(pk.util.config.sts.httpsServerUrl);
}
startup();
function startup(method, uri){
pk.app.entryPointUrlFunction = newModule.entryPointUrlFunction;
initializeAllDataBases(dbScaffold)
.then(function(){
for (var fmod in frameworkModules){
frameworkModules[fmod].registerEndpoints(pk);
}
if (newModule.views_module){
pk.app.module_views = newModule.module_views;
}
else{
pk.app.module_views = defaultModuleViews;
}
pk.app.invokeEntryPoint();
}, function(err){
console.error('Error initializing databases: ', err);
});
}
//////////////////////// General Framework Functions /////////////////////////////////
function initializeAllDataBases(dbScaffod){
var promises = [];
return new Promise((resolve, reject) => {
for (var cmName in dbScaffold){
var provider = dbScaffold[cmName];
if (provider !== undefined){
var promise = provider.initialize(pk, cmName, provider);
promises.push(promise);
}
}
Promise.all(promises).then(function(data){
for (var i=0; i < data.length; i++){
var dbInfo = data[i];
pk.dbs[dbInfo.contentModuleName] = dbInfo;
}
resolve(true);
}, function(err){
reject("error with initializeDatabase promises: " + err);
});
});
}
}