aboutsummaryrefslogtreecommitdiff
path: root/extension/content_scripts/notify.js
diff options
context:
space:
mode:
Diffstat (limited to 'extension/content_scripts/notify.js')
-rw-r--r--extension/content_scripts/notify.js51
1 files changed, 26 insertions, 25 deletions
diff --git a/extension/content_scripts/notify.js b/extension/content_scripts/notify.js
index 9118f499a..d36ddb9a5 100644
--- a/extension/content_scripts/notify.js
+++ b/extension/content_scripts/notify.js
@@ -18,6 +18,11 @@
/// <reference path="../lib/decl/chrome/chrome.d.ts" />
"use strict";
console.log("Taler injected");
+function subst(url, H_contract) {
+ url = url.replace("${H_contract}", H_contract);
+ url = url.replace("${$}", "$");
+ return url;
+}
document.addEventListener("taler-probe", function (e) {
var evt = new Event("taler-wallet-present");
document.dispatchEvent(evt);
@@ -55,10 +60,15 @@ document.addEventListener("taler-contract", function (e) {
});
document.addEventListener('taler-execute-payment', function (e) {
console.log("got taler-execute-payment in content page");
+ if (!e.detail.pay_url) {
+ console.log("field 'pay_url' missing in taler-execute-payment event");
+ return;
+ }
+ var payUrl = e.detail.pay_url;
var msg = {
type: "execute-payment",
detail: {
- H_contract: e.detail.H_contract
+ H_contract: e.detail.H_contract,
},
};
chrome.runtime.sendMessage(msg, function (resp) {
@@ -66,38 +76,29 @@ document.addEventListener('taler-execute-payment', function (e) {
console.log("failure!");
return;
}
- console.log("Making request to ", resp.payUrl);
+ var contract = resp.contract;
+ if (!contract) {
+ throw Error("contract missing");
+ }
+ var payReq = Object.assign({}, resp.payReq);
+ if (e.detail.require_contract) {
+ payReq.contract = contract;
+ }
+ console.log("Making request to ", payUrl);
var r = new XMLHttpRequest();
- r.open('post', resp.payUrl);
- r.send(JSON.stringify(resp.payReq));
- var detail = {};
- r.onload = function (e) {
+ r.open('post', payUrl);
+ r.send(JSON.stringify(payReq));
+ r.onload = function () {
switch (r.status) {
case 200:
- detail.success = true;
- var respJson = JSON.parse(r.responseText);
- console.log("respJson:", JSON.stringify(respJson));
- if (!respJson) {
- console.log("Invalid JSON in response from $pay_url");
- detail.success = false;
- break;
- }
- if (!respJson.fulfillment_url) {
- console.log("Missing 'fulfillment_url' in response from $pay_url");
- detail.success = false;
- break;
- }
- detail.fulfillmentUrl = respJson.fulfillment_url;
+ console.log("going to", contract.fulfillment_url);
+ window.location.href = subst(contract.fulfillment_url, e.detail.H_contract);
+ window.location.reload(true);
break;
default:
console.log("Unexpected status code for $pay_url:", r.status);
- detail.success = false;
break;
}
- detail.status = r.status;
- detail.responseText = r.responseText;
- detail.fulfillmentUrl =
- document.dispatchEvent(new CustomEvent("taler-payment-result", { detail: detail }));
};
});
});