aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2015-12-18 01:30:22 +0100
committerFlorian Dold <florian.dold@gmail.com>2015-12-18 01:30:22 +0100
commit3ddfad19739f0f3ce2d93a507a3f6abff9b7fe7e (patch)
treebe0eb759d7216d31bff4633ebf7e60d617787836
parent0d5c37a49e688503dc2933d379c68541dd432248 (diff)
downloadwallet-core-3ddfad19739f0f3ce2d93a507a3f6abff9b7fe7e.tar.xz
Payment "works".
-rw-r--r--extension/background/emscriptif.js25
-rw-r--r--extension/background/emscriptif.ts28
-rw-r--r--extension/background/wallet.js11
-rw-r--r--extension/background/wallet.ts10
-rw-r--r--extension/content_scripts/notify.js5
-rw-r--r--extension/pages/confirm-contract.js4
-rw-r--r--extension/pages/confirm-contract.tsx4
7 files changed, 77 insertions, 10 deletions
diff --git a/extension/background/emscriptif.js b/extension/background/emscriptif.js
index 15eef7a3a..3d4868b1e 100644
--- 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
index ce6f351c0..e44747d21 100644
--- 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
index 422e60ca5..a24ee372b 100644
--- 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
index a2ac45dfa..9a9971f8d 100644
--- 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
index e86c0f84f..3777f2e7c 100644
--- 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
index 0f6d83744..60de27e90 100644
--- 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
index c9d41a2c8..040f13ea3 100644
--- 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);