aboutsummaryrefslogtreecommitdiff
path: root/extension
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2015-12-08 10:51:04 +0100
committerFlorian Dold <florian.dold@gmail.com>2015-12-08 10:51:52 +0100
commitb2b2cd6dfc95cf20e61926376993e31b267dda69 (patch)
treedeb3e350a1aed830ed36473f7964d0d9f0631df1 /extension
parent415570a720a7a74b2d25699a55d03403e6d6231a (diff)
downloadwallet-core-b2b2cd6dfc95cf20e61926376993e31b267dda69.tar.xz
Add reserve to db.
Diffstat (limited to 'extension')
-rw-r--r--extension/background/wallet.js163
1 files changed, 97 insertions, 66 deletions
diff --git a/extension/background/wallet.js b/extension/background/wallet.js
index 2d3687f98..6c596899f 100644
--- a/extension/background/wallet.js
+++ b/extension/background/wallet.js
@@ -1,75 +1,106 @@
'use strict';
-//chrome.browserAction.setBadgeBackgroundColor({color: "#000"})
-chrome.browserAction.setBadgeText({text: "42"})
-chrome.browserAction.setTitle({title: "Taler: 42 EUR"})
+const DONE = 4;
+const DB_NAME = "taler";
+const DB_VERSION = 1;
-function test_emscripten ()
-{
- var cur_time = TWRALLgetCurrentTime();
- var fancy_time = TWRgetFancyTime(cur_time);
- console.log('current time: '+ fancy_time);
-}
-
-test_emscripten();
-
-DB.open(function () {
- console.log ("DB: ready");
-});
-
-let DONE = 4;
+// Shown in the UI.
+let backendFailed = false;
-chrome.runtime.onMessage.addListener(
- function (req, sender, onresponse) {
- console.log("Message: " + req.type +
- (sender.tab
- ? " from a content script: "+ sender.tab.url
- : " from the extension"));
- switch (req.type)
- {
- case "db-get-wallet":
- DB.wallet_get (onresponse);
+/**
+ * Run a function with the opened taler DB.
+ */
+function withTalerDb(f) {
+ let req = indexedDB.open(DB_NAME, DB_VERSION);
+ req.addEventListener("error", (e) => {
+ // XXX: more details
+ backendFailed = true;
+ });
+ req.addEventListener("success", (e) => {
+ var db = e.target.result;
+ f(db);
+ });
+ req.addEventListener("upgradeneeded", (e) => {
+ console.log ("DB: upgrade needed: oldVersion = "+ event.oldVersion);
+ db = event.target.result;
+ switch (event.oldVersion) {
+ case 0: // DB does not exist yet
+ db.createObjectStore("mints", { keyPath: "mint_pub" });
+ db.createObjectStore("reserves", { keyPath: "reserve_pub"});
+ db.createObjectStore("denoms", { keyPath: "denom_pub" });
+ db.createObjectStore("coins", { keyPath: "coin_pub" });
+ db.createObjectStore("withdrawals", { keyPath: "id", autoIncrement: true });
+ db.createObjectStore("transactions", { keyPath: "id", autoIncrement: true });
break;
+ }
+ });
+}
- case "db-list-transactions":
- DB.transaction_list (onresponse);
- break;
- case "db-list-reserves":
- DB.reserve_list (onresponse);
- break;
- case "confirm-reserve":
- console.log('detail: ' + JSON.stringify(req.detail));
- let keypair = createEddsaKeyPair();
- let form = new FormData();
- form.append(req.detail.field_amount, req.detail.amount_str);
- form.append(req.detail.field_reserve_pub, keypair.pub);
- form.append(req.detail.field_mint, req.detail.mint);
- // XXX: set bank-specified fields.
- let myRequest = new XMLHttpRequest();
- console.log("making request to " + req.detail.post_url);
- myRequest.open('post', req.detail.post_url);
- myRequest.send(form);
- myRequest.addEventListener('readystatechange', (e) => {
- if (myRequest.readyState == DONE) {
- let resp = {};
- resp.status = myRequest.status;
- resp.text = myRequest.responseText;
- switch (myRequest.status) {
- case 200:
- resp.success = true;
- // We can't show the page directly, so
- // we show some generic page from the wallet.
- resp.backlink = chrome.extension.getURL("pages/reserve-success.html");
- break;
- default:
- resp.success = false;
- }
- onresponse(resp);
- }
- });
- // Allow async response
- return true;
- break;
+function confirmReserve(db, detail, sendResponse) {
+ console.log('detail: ' + JSON.stringify(detail));
+ let keypair = createEddsaKeyPair();
+ let form = new FormData();
+ let now = new Date();
+ form.append(detail.field_amount, detail.amount_str);
+ form.append(detail.field_reserve_pub, keypair.pub);
+ form.append(detail.field_mint, detail.mint);
+ // XXX: set bank-specified fields.
+ let myRequest = new XMLHttpRequest();
+ console.log("making request to " + detail.post_url);
+ myRequest.open('post', detail.post_url);
+ myRequest.send(form);
+ myRequest.addEventListener('readystatechange', (e) => {
+ if (myRequest.readyState == DONE) {
+ let resp = {};
+ resp.status = myRequest.status;
+ resp.text = myRequest.responseText;
+ let reserveRecord = {
+ reserve_pub: keypair.pub,
+ reserve_priv: keypair.priv,
+ keypair: keypair,
+ mint_base_url: detail.mint,
+ created: now,
+ last_query: null,
+ current_amount: null,
+ // XXX: set to actual amount
+ initial_amount: null
+ };
+ // XXX: insert into db.
+ switch (myRequest.status) {
+ case 200:
+ resp.success = true;
+ // We can't show the page directly, so
+ // we show some generic page from the wallet.
+ resp.backlink = chrome.extension.getURL("pages/reserve-success.html");
+ let tx = db.transaction(['reserves'], 'readwrite');
+ tx.objectStore('reserves').add(reserveRecord);
+ tx.addEventListener('complete', (e) => {
+ console.log('tx complete');
+ sendResponse(resp);
+ });
+ break;
+ default:
+ resp.success = false;
+ sendResponse(resp);
+ }
}
});
+ // Allow async response
+ return true;
+}
+
+withTalerDb((db) => {
+ console.log("db loaded");
+ chrome.runtime.onMessage.addListener(
+ function (req, sender, onresponse) {
+ // XXX: use assoc. instead of switch?
+ switch (req.type)
+ {
+ case "confirm-reserve":
+ return confirmReserve(db, req.detail, onresponse)
+ break;
+ }
+ });
+});
+