From 833a2cf41d000b335b4d5b8c8b1cb67fa111d27c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 8 Dec 2015 11:50:51 +0100 Subject: [PATCH] Pretty print wallet database. --- extension/background/wallet.js | 44 ++++++++++++++++++++++++++++++++-- extension/pages/show-db.html | 14 +++++++++++ extension/pages/show-db.js | 27 +++++++++++++++++++++ extension/style/wallet.css | 10 ++++++++ 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 extension/pages/show-db.html create mode 100644 extension/pages/show-db.js diff --git a/extension/background/wallet.js b/extension/background/wallet.js index 6c596899f..18b0a511c 100644 --- a/extension/background/wallet.js +++ b/extension/background/wallet.js @@ -58,7 +58,6 @@ function confirmReserve(db, detail, sendResponse) { let reserveRecord = { reserve_pub: keypair.pub, reserve_priv: keypair.priv, - keypair: keypair, mint_base_url: detail.mint, created: now, last_query: null, @@ -76,8 +75,10 @@ function confirmReserve(db, detail, sendResponse) { let tx = db.transaction(['reserves'], 'readwrite'); tx.objectStore('reserves').add(reserveRecord); tx.addEventListener('complete', (e) => { - console.log('tx complete'); + console.log('tx complete, pk was ' + reserveRecord.reserve_pub); sendResponse(resp); + updateReserveMints(db); + // We have to update the mints now ... }); break; default: @@ -90,6 +91,42 @@ function confirmReserve(db, detail, sendResponse) { return true; } + +/** + * Fetch information for mints that + * are referenced in a reserve and that were not + * updated recently. + */ +function updateReserveMints(db) { + +} + + +function dumpDb(db, detail, sendResponse) { + let dump = {}; + dump.name = db.name; + dump.version = db.version; + dump.stores = {}; + console.log("stores: " + JSON.stringify(db.objectStoreNames)); + let tx = db.transaction(db.objectStoreNames); + tx.addEventListener('complete', (e) => { + sendResponse(dump); + }); + for (let i = 0; i < db.objectStoreNames.length; i++) { + let name = db.objectStoreNames[i]; + let storeDump = {}; + dump.stores[name] = storeDump; + let store = tx.objectStore(name).openCursor().addEventListener('success', (e) => { + let cursor = event.target.result; + if (cursor) { + storeDump[cursor.key] = cursor.value; + cursor.continue(); + } + }); + } + return true; +} + withTalerDb((db) => { console.log("db loaded"); chrome.runtime.onMessage.addListener( @@ -100,6 +137,9 @@ withTalerDb((db) => { case "confirm-reserve": return confirmReserve(db, req.detail, onresponse) break; + case "dump-db": + console.log('dumping db'); + return dumpDb(db, req.detail, onresponse); } }); }); diff --git a/extension/pages/show-db.html b/extension/pages/show-db.html new file mode 100644 index 000000000..ee54d0e08 --- /dev/null +++ b/extension/pages/show-db.html @@ -0,0 +1,14 @@ + + + + + + Taler Wallet: Reserve Created + + + + +

DB Dump

+

+  
+
diff --git a/extension/pages/show-db.js b/extension/pages/show-db.js
new file mode 100644
index 000000000..e2161f151
--- /dev/null
+++ b/extension/pages/show-db.js
@@ -0,0 +1,27 @@
+function replacer(match, pIndent, pKey, pVal, pEnd) {
+  var key = '';
+  var val = '';
+  var str = '';
+  var r = pIndent || '';
+  if (pKey)
+     r = r + key + pKey.replace(/[": ]/g, '') + ': ';
+  if (pVal)
+     r = r + (pVal[0] == '"' ? str : val) + pVal + '';
+  return r + (pEnd || '');
+}
+
+
+function prettyPrint(obj) {
+  var jsonLine = /^( *)("[\w]+": )?("[^"]*"|[\w.+-]*)?([,[{])?$/mg;
+  return JSON.stringify(obj, null, 3)
+     .replace(/&/g, '&').replace(/\\"/g, '"')
+     .replace(//g, '>')
+     .replace(jsonLine, replacer);
+}
+
+
+document.addEventListener("DOMContentLoaded", (e) => {
+  chrome.runtime.sendMessage({type:'dump-db'}, (resp) => {
+    document.getElementById('dump').innerHTML = prettyPrint(resp);
+  });
+});
diff --git a/extension/style/wallet.css b/extension/style/wallet.css
index ba698296a..487cdd407 100644
--- a/extension/style/wallet.css
+++ b/extension/style/wallet.css
@@ -17,3 +17,13 @@ input.url {
 
 .formish {
 }
+
+.json-key {
+   color: brown;
+}
+.json-value {
+   color: navy;
+   }
+.json-string {
+   color: olive;
+}