oidc-lib
Version:
A library for creating OIDC Service Providers
226 lines (195 loc) • 9.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const hardCodedHubInfo = '{"didMode":0,"didLocalOnly":false,"instanceDidForms":{"id":"did:ion:test:EiB5Y1dmdtVDXzwAZ-onv_eekR3ReTKzjhiVwyxHPBmKKA","idLong":"did:ion-test:eyJAY29udGV4dCI6Imh0dHBzOi8vdzNpZC5vcmcvZGlkL3YxIiwicHVibGljS2V5IjpbeyJpZCI6IiNrZXktMCIsInB1YmxpY0tleUp3ayI6eyJrdHkiOiJSU0EiLCJhbGciOiJSUzI1NiIsImtpZCI6IiNrZXktMCIsImUiOiJBUUFCIiwia2V5X29wcyI6WyJzaWduIiwidmVyaWZ5Iiwid3JhcEtleSIsInVud3JhcEtleSIsImVuY3J5cHQiLCJkZWNyeXB0Il0sIm4iOiIwMVRaTzF5TnRaVGd1cXh3YXJoTTdGczZSSTVtU2FwU3RKbG9tbnl1VXJCZm5zT2Q1dHlOUTlpbGhSaFA5bkx6T0RuamdaUnU2eUFPSGZzbGdsRUM4dlI5VHFvRUJURHZDSUo2UElnd2twbFNUUm5BYUhUMllWZkUzY0QtOVhfbm5MYml0S2dHSVd6YU9GekVIX21FbVVNd0tyWWZtRHZud3RJaXI1SnpUZnZsUlRITXhjazNPME4yT2hDNENhdDdNSEE1UVF4WXhqS1ZXVFh4am5WS195NEUwNnlwbWF3M2o3Ukl5S1pfOXhZbjVrdjVZcGs0VzZKTFpQRkhWX2o1RnM1UjE5V0laUXFNR2xNb3IybmoxQklhRFp3TUlmMW9YUExwMG5BaDAzUUxrUUFhVzNZbktxVEh6Z2RwSm81T3VkWlZQVkxIWWE0Nl83WXFBY1FWQ1EifSwidHlwZSI6IlJzYVZlcmlmaWNhdGlvbktleTIwMTgifSx7ImlkIjoiI2tleS0xIiwicHVibGljS2V5SndrIjp7Imt0eSI6IkVDIiwia2lkIjoiI2tleS0xIiwiZGVmYXVsdEVuY3J5cHRpb25BbGdvcml0aG0iOiJub25lIiwieCI6Ijc3djJlRXBMbHlfVEpXMC15Nks3NkliTU9vT3dCNVc4V1dvMUx0c21OTFkiLCJ5IjoicDgyNklFVHZrU0YxbV9pRFBrZlJKb2VGNGNQbWQ1WnplWGJqV2doMlZ3YyIsImNydiI6IlAtMjU2SyIsImtleV9vcHMiOlsic2lnbiIsInZlcmlmeSJdLCJkZWZhdWx0U2lnbkFsZ29yaXRobSI6IkVTMjU2SyJ9LCJ0eXBlIjoiU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOCJ9XSwic2VydmljZSI6W3siaWQiOiJJZGVudGl0eUh1YiIsInR5cGUiOiJJZGVudGl0eUh1YiIsInNlcnZpY2VFbmRwb2ludCI6eyJAY29udGV4dCI6InNjaGVtYS5pZGVudGl0eS5mb3VuZGF0aW9uL2h1YiIsIkB0eXBlIjoiVXNlclNlcnZpY2VFbmRwb2ludCIsImluc3RhbmNlIjpbImRpZDp0ZXN0Omh1Yi5pZCJdfX1dLCJpZCI6ImRpZDppb246dGVzdDpFaUI1WTFkbWR0VkRYendBWi1vbnZfZWVrUjNSZVRLempoaVZ3eXhIUEJtS0tBIn0"},"flockDidForms":{},"personaId":"hub-instance-info","privateKeys":[{"kty":"RSA","kid":"#key-0","alg":"RS256","key_ops":["sign","verify","wrapKey","unwrapKey","encrypt","decrypt"],"e":"AQAB","n":"01TZO1yNtZTguqxwarhM7Fs6RI5mSapStJlomnyuUrBfnsOd5tyNQ9ilhRhP9nLzODnjgZRu6yAOHfslglEC8vR9TqoEBTDvCIJ6PIgwkplSTRnAaHT2YVfE3cD-9X_nnLbitKgGIWzaOFzEH_mEmUMwKrYfmDvnwtIir5JzTfvlRTHMxck3O0N2OhC4Cat7MHA5QQxYxjKVWTXxjnVK_y4E06ypmaw3j7RIyKZ_9xYn5kv5Ypk4W6JLZPFHV_j5Fs5R19WIZQqMGlMor2nj1BIaDZwMIf1oXPLp0nAh03QLkQAaW3YnKqTHzgdpJo5OudZVPVLHYa46_7YqAcQVCQ","d":"fT9HM7hJwDlI6zmxsn4iEN6MbP8cPkJ0m9ZjuVN1mUowkY6L8bv6-R_YEUZ0dbJw1XzxieWnyzAHTdt_wnkyzzz5WvrGQTFcKWXy_hcU-n1l2o4Ni5ruPojfAzITqPoyEZ4ORFVktMCnoEnSbsTZwl-gl1-y3-15EOyrY_Te43L4Bi_Fs-rONN6Dt0mDSRlJOxkt-gSPP2GkVj_FMVIu3nTBWAlI3kbL-cLHIsI-HpElUXIqvSEs-VK_pM_elZ-hLaXzv7s8lGAou3tTxgdbJNswndCOGNosFA2I1TkTnDewbpzQkPgf0pCXjbfb7PaKngGSxyRlUwdTgviOMc1u9Q","p":"7qNHlwl4bMFoieYSk9He-qzo_rXjzkCNtlFH109VAbnlFYyrybybZbVLVxe7Bfe-zcLg0GNOcIMtMuH3qREbZsDngVmQw9pZCwN2ioJhoAFjx9gK4GATA7kyRN5D6IjvxQnYNZa883IR2rOt566kjEb8rkv09Tpoleo9wARGqsc","q":"4rT6MZk4zjjIyZuwFl91pNxHkpPyeu2eC3mBSgsxgCZDf5ntSWauS9QhX5eP1iJHOYkWdwTr3rTSZCVcLwSXhHkQSD8o_3e2jV7jNri9g_wVTv4ph0idEXrYSyPkWa8L_hdWnajsvPyVXTM9s2Vtz_7-KTO-N6h_OgSkpsvQ8a8","dp":"i7vSRK-H827A7tZolGP0xCYRfGw3S2NjV5l6jqnmZc9bQ-YOBV_KQqEIz6OWoKTz9fohuAQePyWghsXoRfg9akqUhJpUeUpWj2tkszArSAzoR3HK1J2NJMYBmG_ppbThaSgdkSuF0qs9pylFMH-D3JwIg2r4scuUyAvUQqZ-Vqs","dq":"pDA-Iz29Dl3BzYGb_hgUs9l1XIsZyj3dgKH3KRECQLV1nSx11fsvsGtp4Dl8SrF4tAq84mYGDb0Xwr_sC4Ff2ulzCV_06VBiPfDCzhbt6nDfXd5lZT0JxGcbzw-niexk2xk7-eMl0Zl884rw3MRQy5r5qA15bgXyXqqONN7X7LE","qi":"WEXwljTldhXypA7sfBb6Yl6OyhgTy8MvI14l-jsKHWZAuBSS4of0spj1pFD74_UuI4Ov6VMYWHtPVk5cwjFjBp-Qz-6hT9vZJtemdq5F46TlFh6RHcAmuki_ytstrCwA15SAB73U3Vcq7i4i4Dc8whyLLFk39pUBBbwGQ6kOMiE"},{"kty":"EC","crv":"P-256K","x":"77v2eEpLly_TJW0-y6K76IbMOoOwB5W8WWo1LtsmNLY","y":"p826IETvkSF1m_iDPkfRJoeF4cPmd5ZzeXbjWgh2Vwc","d":"IjUiFR0G-WA4OMXApyNYmicdsUjXoL6h9Akvxh1ydTI","kid":"#key-1","defaultEncryptionAlgorithm":"none","key_ops":["sign","verify"],"defaultSignAlgorithm":"ES256K"}]}';
var versionSub = 0;
var startup_w_key = '';
var startup_c_key = '';
var cacheName = 'claimer-v6.0.0';
var dataCacheName = 'claimer-data-v3.2.8';
var filesToCache = [
'/wallet/wallet.html', //intereres with startup algorithm
'/wallet/wallet.v0',
'/wallet/service-worker.js',
'/wallet/manifest.json',
'/wallet/operator_profile.json',
'/wallet/images/icons/smiley-192x192.png',
'/wallet/images/icons/blue-512x512.png',
'/wallet/images/icons/blue-setup.png',
'/wallet/images/smiley.svg',
'/wallet/img/bootstrap-solid.png',
'/wallet/js/bootstrap-formhelpers-phone.js',
'/wallet/js/bootstrap-formhelpers.js',
'/wallet/js/bootstrap.min.js',
'/wallet/js/pk.js',
'/wallet/js/jquery-3.2.1.slim.min.js',
'/wallet/js/claimerClientLib.js',
'/wallet/js/walletOP.js',
'/wallet/js/appOP.js',
'/wallet/js/popper.min.js',
'/wallet/js/forge.min.js',
'/wallet/css/bootstrap-formhelpers.css',
'/wallet/css/bootstrap.css',
'/wallet/css/form-validation.css',
'/wallet/css/wallet.css',
'/wallet/css/fontawesome/css/fontawesome.css',
'/wallet/css/fontawesome/css/solid.css',
'/wallet/css/fontawesome/css/regular.css',
'/wallet/css/fontawesome/webfonts/fa-regular-400.woff',
'/wallet/css/fontawesome/webfonts/fa-solid-900.woff',
'/wallet/js/adapter.min.js',
'/wallet/js/vue.min.js',
'/wallet/js/instascan.min.js',
'/wallet/chapi/wallet_worker.html',
'/wallet/chapi/wallet-ui-get.html',
'/wallet/chapi/config.js',
'/wallet/chapi/credential-handler-polyfill.min.js',
'/wallet/chapi/web-credential-handler.min.js'
];
const base64url = require("base64url");
self.addEventListener('install', function(e) {
clients.matchAll().then(clients => {
var foo = clients;
});
console.log('[ServiceWorker] Install initiated.');
e.waitUntil(
caches.open(cacheName)
.then(function(cache) {
console.log('[ServiceWorker] Caching app shell');
return cache.addAll(filesToCache);
})
);
self.skipWaiting();
});
self.addEventListener('activate', function(e) {
console.log('[ServiceWorker] Has been activated');
e.waitUntil(
caches.keys().then(function(keyList) {
return Promise.all(keyList.map(function(key) {
if (key !== cacheName && key !== dataCacheName) {
console.log('[ServiceWorker] Removing old cache', key);
return caches.delete(key);
}
}));
})
);
return self.clients.claim();
});
self.addEventListener('activate', event => {
console.log('[ServiceWorker] Sending install message to main');
var payload = {
action: 'install'
}
send_message_to_all_clients(payload);
});
self.addEventListener('fetch', function(e) {
e.respondWith(
caches.match(e.request).then(function(response) {
if (response){
console.log('[Service Worker] CacheHit', e.request.url);
return response;
}
else{
console.log('[Service Worker] Fetch', e);
try{
var qIndex = 0 // e.request.url.indexOf('?req_cred=');
if (qIndex > 0){
console.log('found req_cred');
var stripped_url = e.request.url.strncpy(0, qIndex);
return fetch(stripped_url);
}
else{
console.log('[Service Worker] Fetch', e.request.url);
return fetch(e.request);
}
}
catch(err){
console.log('[Service Worker] Fetch: ' + e.requestUrl + ' - ' + err);
}
}
// return response || fetch(e.request);
})
);
});
self.addEventListener('message', function(event){
var msg = JSON.parse(base64url.decode(event.data));
var response;
switch (msg.action){
case 'version':
respond(cacheName + ' ' + ++versionSub);
break;
case 'set_w_key':
startup_w_key = msg.data;
respond(startup_w_key);
break;
case 'get_w_key':
respond(startup_w_key);
break;
case 'set_c_key':
startup_c_key = msg.data;
respond(startup_c_key);
break;
case 'get_c_key':
respond(startup_c_key);
break;
}
function respond(response){
var payload = base64url.encode(JSON.stringify(response));
event.ports[0].postMessage(payload);
}
});
function send_message_to_all_clients(msg){
switch (msg.action){
case 'install':
transfer(msg);
break;
case 'masterNotification':
case 'managerNotification':
transfer(notification(msg));
break;
default:
console.log(msg);
}
function transfer(msg){
clients.matchAll()
.then(clients => {
clients.forEach(client => {
send_message_to_client(client, msg);
})
})
}
function notification(msg){
if (msg.dismissible){
msg.dismissible = 'true';
}
var message = msg.message;
if (msg.className === undefined && message === undefined){
msg.message = false;
}
else if (typeof message !== 'string'){
if (message.stack){
msg.message = message.stack.toString();
}
else{
msg.message = JSON.stringify(message);
}
console.log(msg);
}
else{
console.log(msg);
}
return msg;
}
}
function masterNotification(message, className, dismissible){
var payload = {
action: 'masterNotification',
message: message,
className: className,
dismissible: dismissible
}
pk.util.send_message_to_all_clients(payload);
}
function send_message_to_client(client, msg){
var msg_chan = new MessageChannel();
client.postMessage(msg, [msg_chan.port2]);
}