Add reserve to db.

This commit is contained in:
Florian Dold 2015-12-08 10:51:04 +01:00
parent 415570a720
commit b2b2cd6dfc

View File

@ -1,75 +1,106 @@
'use strict'; 'use strict';
//chrome.browserAction.setBadgeBackgroundColor({color: "#000"}) const DONE = 4;
chrome.browserAction.setBadgeText({text: "42"}) const DB_NAME = "taler";
chrome.browserAction.setTitle({title: "Taler: 42 EUR"}) const DB_VERSION = 1;
function test_emscripten () // Shown in the UI.
{ let backendFailed = false;
var cur_time = TWRALLgetCurrentTime();
var fancy_time = TWRgetFancyTime(cur_time); /**
console.log('current time: '+ fancy_time); * 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;
}
});
} }
test_emscripten();
DB.open(function () { function confirmReserve(db, detail, sendResponse) {
console.log ("DB: ready"); console.log('detail: ' + JSON.stringify(detail));
});
let DONE = 4;
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);
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 keypair = createEddsaKeyPair();
let form = new FormData(); let form = new FormData();
form.append(req.detail.field_amount, req.detail.amount_str); let now = new Date();
form.append(req.detail.field_reserve_pub, keypair.pub); form.append(detail.field_amount, detail.amount_str);
form.append(req.detail.field_mint, req.detail.mint); form.append(detail.field_reserve_pub, keypair.pub);
form.append(detail.field_mint, detail.mint);
// XXX: set bank-specified fields. // XXX: set bank-specified fields.
let myRequest = new XMLHttpRequest(); let myRequest = new XMLHttpRequest();
console.log("making request to " + req.detail.post_url); console.log("making request to " + detail.post_url);
myRequest.open('post', req.detail.post_url); myRequest.open('post', detail.post_url);
myRequest.send(form); myRequest.send(form);
myRequest.addEventListener('readystatechange', (e) => { myRequest.addEventListener('readystatechange', (e) => {
if (myRequest.readyState == DONE) { if (myRequest.readyState == DONE) {
let resp = {}; let resp = {};
resp.status = myRequest.status; resp.status = myRequest.status;
resp.text = myRequest.responseText; 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) { switch (myRequest.status) {
case 200: case 200:
resp.success = true; resp.success = true;
// We can't show the page directly, so // We can't show the page directly, so
// we show some generic page from the wallet. // we show some generic page from the wallet.
resp.backlink = chrome.extension.getURL("pages/reserve-success.html"); 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; break;
default: default:
resp.success = false; resp.success = false;
sendResponse(resp);
} }
onresponse(resp);
} }
}); });
// Allow async response // Allow async response
return true; 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; break;
} }
}); });
});