taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 3ddfad19739f0f3ce2d93a507a3f6abff9b7fe7e
parent 0d5c37a49e688503dc2933d379c68541dd432248
Author: Florian Dold <florian.dold@gmail.com>
Date:   Fri, 18 Dec 2015 01:30:22 +0100

Payment "works".

Diffstat:
Mextension/background/emscriptif.js | 25+++++++++++++++++++++++--
Mextension/background/emscriptif.ts | 28++++++++++++++++++++++++++--
Mextension/background/wallet.js | 11++++++++++-
Mextension/background/wallet.ts | 10+++++++++-
Mextension/content_scripts/notify.js | 5+++--
Mextension/pages/confirm-contract.js | 4+++-
Mextension/pages/confirm-contract.tsx | 4+++-
7 files changed, 77 insertions(+), 10 deletions(-)

diff --git a/extension/background/emscriptif.js b/extension/background/emscriptif.js @@ -490,15 +490,36 @@ class WithdrawRequestPS extends SignatureStruct { } class AbsoluteTimeNbo extends PackedArenaObject { static fromTalerString(s) { - throw Error(); + let x = new AbsoluteTimeNbo(); + x.alloc(); + let r = /Date\(([0-9]+)\)/; + let m = r.exec(s); + if (m.length != 2) { + throw Error(); + } + let n = parseInt(m[1]); + console.log("setting", n); + // XXX: This only works up to 54 bit numbers. + set64(x.getNative(), n); + return x; } size() { return 8; } } +// XXX: This only works up to 54 bit numbers. +function set64(p, n) { + for (let i = 0; i < 8; ++i) { + Module.setValue(p + (8 - i), n & 0xFF, "i8"); + n >>>= 8; + } +} class UInt64 extends PackedArenaObject { static fromNumber(n) { - throw Error(); + let x = new UInt64(); + x.alloc(); + set64(x.getNative(), n); + return x; } size() { return 8; diff --git a/extension/background/emscriptif.ts b/extension/background/emscriptif.ts @@ -709,7 +709,18 @@ class WithdrawRequestPS extends SignatureStruct { class AbsoluteTimeNbo extends PackedArenaObject { static fromTalerString(s: string): AbsoluteTimeNbo { - throw Error(); + let x = new AbsoluteTimeNbo(); + x.alloc(); + let r = /Date\(([0-9]+)\)/; + let m = r.exec(s); + if (m.length != 2) { + throw Error(); + } + let n = parseInt(m[1]); + console.log("setting", n); + // XXX: This only works up to 54 bit numbers. + set64(x.getNative(), n); + return x; } size() { @@ -718,9 +729,22 @@ class AbsoluteTimeNbo extends PackedArenaObject { } +// XXX: This only works up to 54 bit numbers. +function set64(p: number, n: number) { + for (let i = 0; i < 8; ++i) { + Module.setValue(p + (8 - i), n & 0xFF, "i8"); + n >>>= 8; + } + +} + + class UInt64 extends PackedArenaObject { static fromNumber(n: number): UInt64 { - throw Error(); + let x = new UInt64(); + x.alloc(); + set64(x.getNative(), n); + return x; } size() { diff --git a/extension/background/wallet.js b/extension/background/wallet.js @@ -148,9 +148,15 @@ function executePay(db, offer, payCoinInfo, merchantBaseUrl, chosenMint) { let req = new XMLHttpRequest(); req.open('post', payUrl.href()); req.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); + req.send(JSON.stringify(reqData)); req.addEventListener('readystatechange', (e) => { if (req.readyState == XMLHttpRequest.DONE) { - resolve(); + if (req.status == 200) { + resolve(); + } + else { + throw Error("bad status " + req.status); + } } }); }); @@ -173,6 +179,9 @@ function confirmPay(db, detail, sendResponse) { let mintUrl = Object.keys(mcs)[0]; let ds = signDeposit(db, offer, mcs[mintUrl]); return executePay(db, offer, ds, detail.merchantPageUrl, mintUrl); + }) + .then(() => { + sendResponse({ success: true }); }); return true; } diff --git a/extension/background/wallet.ts b/extension/background/wallet.ts @@ -231,9 +231,14 @@ function executePay(db, req.open('post', payUrl.href()); req.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); + req.send(JSON.stringify(reqData)); req.addEventListener('readystatechange', (e) => { if (req.readyState == XMLHttpRequest.DONE) { - resolve() + if (req.status == 200) { + resolve(); + } else { + throw Error("bad status " + req.status); + } } }); }); @@ -262,6 +267,9 @@ function confirmPay(db, detail: ConfirmPayRequest, sendResponse) { let mintUrl = Object.keys(mcs)[0]; let ds = signDeposit(db, offer, mcs[mintUrl]); return executePay(db, offer, ds, detail.merchantPageUrl, mintUrl); + }) + .then(() => { + sendResponse({success: true}); }); return true; } diff --git a/extension/content_scripts/notify.js b/extension/content_scripts/notify.js @@ -47,8 +47,9 @@ document.addEventListener("DOMContentLoaded", function(e) { let offer = JSON.parse(e.detail); let uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); let params = { - offer: JSON.stringify(offer) - } + offer: JSON.stringify(offer), + merchantPageUrl: document.location.href + }; document.location.href = uri.query(params).href(); }); }); diff --git a/extension/pages/confirm-contract.js b/extension/pages/confirm-contract.js @@ -23,8 +23,10 @@ document.addEventListener("DOMContentLoaded", (e) => { let html = template(offer.contract); $_("render-contract").innerHTML = html; document.getElementById("confirm-pay").addEventListener("click", (e) => { + console.log("Query:", JSON.stringify(query)); let d = { - offer: JSON.parse(query.offer) + offer: JSON.parse(query.offer), + merchantPageUrl: query.merchantPageUrl }; chrome.runtime.sendMessage({ type: 'confirm-pay', detail: d }, (resp) => { console.log("got response", resp); diff --git a/extension/pages/confirm-contract.tsx b/extension/pages/confirm-contract.tsx @@ -34,8 +34,10 @@ document.addEventListener("DOMContentLoaded", (e) => { $_("render-contract").innerHTML = html; document.getElementById("confirm-pay").addEventListener("click", (e) => { + console.log("Query:", JSON.stringify(query)); let d = { - offer: JSON.parse(query.offer) + offer: JSON.parse(query.offer), + merchantPageUrl: query.merchantPageUrl }; chrome.runtime.sendMessage({type:'confirm-pay', detail: d}, (resp) => { console.log("got response", resp);