UNPKG

oidc-lib

Version:

A library for creating OIDC Service Providers

226 lines (195 loc) 9.59 kB
"use strict" 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]); }