UNPKG

oidc-lib

Version:

A library for creating OIDC Service Providers

314 lines (287 loc) 11 kB
"use strict" Object.defineProperty(exports, "__esModule", { value: true }); var indexed_db_module = require('../claimer_sts/dbs/indexed_db'); var moduleName = 'hub_app_provider'; module.exports = { hub_provider: hub_provider, decryptDbRecord: decryptDbRecord, hubExport: hubExport, deviceManager: deviceManager } function hub_provider(){ var pk; const HttpStatusCodes = { NOTFOUND: 404 }; var indexed_db; var METADATACOLLECTIONNAME; var hubConfig; Object.defineProperty(this, "initialize", { value: function(pkInput, contentModuleName, provider){ return new Promise((resolve, reject) => { var hubDbInfo; var hubDbContents = {}; var schemas = []; var hubInfo; pk = pkInput; hubConfig = pk.util.config.hub; indexed_db = new indexed_db_module.indexed_db_provider(); indexed_db.initialize(pkInput, contentModuleName, indexed_db) .then(dbInfo => { if (dbInfo){ hubDbInfo = { contentModuleName: dbInfo.contentModuleName, collections: dbInfo.collections, databaseDefinition: dbInfo.databaseDefinition, databaseName: dbInfo.databaseName, databaseUrl: dbInfo.databaseUrl, schemaVersion: dbInfo.schemaVersion, provider: this, dbInfo: dbInfo }; resolve(hubDbInfo); } }, function(err){ pk.util.log_detail('ERROR initializing database', err); }) }); } }) /* Object.defineProperty(this, "createOrUpdateDocument", { value: function (hubDbInfo, collectionName, objectToWrite) { return new Promise((resolve, reject) => { updateHub(hubDbInfo, collectionName, objectToWrite) .then(function(writeResult){ resolve(objectToWrite); }, function(err){ reject(err); }) }); } }); */ Object.defineProperty(this, "createOrUpdateDocument", { value: function (hubDbInfo, collectionName, objectToWrite, options) { return new Promise((resolve, reject) => { var record; var didMeta; var updateISO; var operation; var hub_payload; var collectionInfo; encryptDbRecord(hubDbInfo, collectionName, objectToWrite, options) .then(result => { if (result){ record = result; collectionInfo = hubDbInfo.collections[collectionName]; var date = new Date(); updateISO = date.toISOString(); var time = Date.parse(updateISO); if (collectionInfo.highWater < time){ collectionInfo.highWater = time; } didMeta = record.didMeta; if (didMeta === undefined){ didMeta = {}; } if (didMeta.created_at === undefined){ didMeta.created_at = updateISO; } record.didMeta = didMeta; return hubDbInfo.dbInfo.provider.createOrUpdateDocument(hubDbInfo.dbInfo, collectionName, record); } }, err => { reject(err); }) .then(result => { if (result){ objectToWrite.didMeta = result.didMeta; resolve(objectToWrite); } }, err => { reject(err); }) }); } }); Object.defineProperty(this, "getDocument", { value: function (hubDbInfo, collectionName, local_id) { return new Promise((resolve, reject) => { indexed_db.getDocument(hubDbInfo.dbInfo, collectionName, local_id) .then( record => { return decryptDbRecord(hubDbInfo, collectionName, record); }, err => { reject(err); }) .then( plaintext => { resolve(plaintext); }, err => { reject(err); }) }); } }); Object.defineProperty(this, "queryCollection", { value: function (hubDbInfo, collectionName, queryDictionaryOrString, indexName) { return new Promise((resolve, reject) => { var encryptedRecords; indexed_db.queryCollection(hubDbInfo.dbInfo, collectionName, queryDictionaryOrString, indexName) .then(function(queryResult){ encryptedRecords = queryResult; var plaintextPromises = []; for (var i=0; i < queryResult.length; i++){ var record = queryResult[i]; plaintextPromises.push(decryptDbRecord(hubDbInfo, collectionName, record)); } return Promise.all(plaintextPromises); }, function(err){ reject(err); }) .then(plaintextRecords => { if (plaintextRecords){ resolve(plaintextRecords); } }, err => { reject(err); }) }); } }); Object.defineProperty(this, "deleteDocument", { value: function(hubDbInfo, collectionName, local_id){ return indexed_db.deleteDocument(hubDbInfo.dbInfo, collectionName, local_id); } }); function updateHub(dbInfo, collectionName, objectToWrite, options){ return new Promise((resolve, reject) => { var payload = { action: 'updateHub', contentModuleName: dbInfo.contentModuleName, collectionName: collectionName, objectToWrite: pk.base64url.encode(JSON.stringify(objectToWrite)), options: options } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } } function decryptDbRecord(dbInfo, collectionName, encryptedRecord){ return new Promise((resolve, reject) => { var payload = { action: 'decryptDbRecord', contentModuleName: dbInfo.contentModuleName, collectionName: collectionName, encryptedRecord: encryptedRecord } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } function encryptDbRecord(dbInfo, collectionName, objectToWrite, options){ return new Promise((resolve, reject) => { var payload = { action: 'encryptDbRecord', contentModuleName: dbInfo.contentModuleName, collectionName: collectionName, objectToWrite: objectToWrite, options: options } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } function hubExport(){ return new Promise((resolve, reject) => { var payload = { action: 'hubExport' } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } function deviceManager(){ return new deviceManagerFactory(); } function deviceManagerFactory(){ Object.defineProperty(this, "addDevice", { value: function(role) { return new Promise((resolve, reject) => { var payload = { action: 'deviceManagerFactory_addDevice', role: role } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } }) Object.defineProperty(this, "executeDeviceAddition", { value: function(rendezvousValue) { return new Promise((resolve, reject) => { var payload = { action: 'deviceManagerFactory_executeDeviceAddition', rendezvousValue: rendezvousValue } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } }) Object.defineProperty(this, "conveyFlockMembershipCipher", { value: function(rendezvousId, flockMembershipCipher) { return new Promise((resolve, reject) => { var payload = { action: 'deviceManagerFactory_conveyFlockMembershipCipher', rendezvousId: rendezvousId, flockMembershipCipher: flockMembershipCipher } pk.util.send_message_to_serviceWorker(payload) .then( result => { window.location.reload(); resolve(result); }, err => { reject(err); }) }) } }) Object.defineProperty(this, "exportFlockMembershipCipher", { value: function() { return new Promise((resolve, reject) => { var payload = { action: 'deviceManagerFactory_exportFlockMembershipCipher', } pk.util.send_message_to_serviceWorker(payload) .then( result => { resolve(result); }, err => { reject(err); }) }) } }) }