handle replacing navigation on taler-confirm-contract
This commit is contained in:
parent
660a53a641
commit
7eba6a6c3b
@ -25,13 +25,22 @@
|
||||
var TalerNotify;
|
||||
(function (TalerNotify) {
|
||||
var PROTOCOL_VERSION = 1;
|
||||
console.log("Taler injected");
|
||||
console.log("Taler injected", chrome.runtime.id);
|
||||
// FIXME: only do this for test wallets?
|
||||
// This is no security risk, since the extension ID for published
|
||||
// extension is publicly known.
|
||||
function subst(url, H_contract) {
|
||||
url = url.replace("${H_contract}", H_contract);
|
||||
url = url.replace("${$}", "$");
|
||||
return url;
|
||||
}
|
||||
var $ = function (x) { return document.getElementById(x); };
|
||||
document.addEventListener("DOMContentLoaded", function (e) {
|
||||
if (document.documentElement.getAttribute("data-taler-requested")) {
|
||||
console.log("taler requested in html element");
|
||||
document.documentElement.setAttribute("data-taler-extension-id", chrome.runtime.id);
|
||||
}
|
||||
});
|
||||
document.addEventListener("taler-probe", function (e) {
|
||||
var evt = new CustomEvent("taler-wallet-present", {
|
||||
detail: {
|
||||
@ -45,7 +54,8 @@ var TalerNotify;
|
||||
console.log("taler-create-reserve with " + JSON.stringify(e.detail));
|
||||
var params = {
|
||||
amount: JSON.stringify(e.detail.amount),
|
||||
callback_url: URI(e.detail.callback_url).absoluteTo(document.location.href),
|
||||
callback_url: URI(e.detail.callback_url)
|
||||
.absoluteTo(document.location.href),
|
||||
bank_url: document.location.href,
|
||||
};
|
||||
var uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html"));
|
||||
@ -63,6 +73,7 @@ var TalerNotify;
|
||||
console.log("confirm reserve done");
|
||||
});
|
||||
});
|
||||
// XXX: remove in a bit, just here for compatibility ...
|
||||
document.addEventListener("taler-contract", function (e) {
|
||||
// XXX: the merchant should just give us the parsed data ...
|
||||
var offer = JSON.parse(e.detail);
|
||||
@ -97,6 +108,49 @@ var TalerNotify;
|
||||
}
|
||||
});
|
||||
});
|
||||
document.addEventListener("taler-confirm-contract", function (e) {
|
||||
if (!e.detail.contract_wrapper) {
|
||||
console.error("contract wrapper missing");
|
||||
return;
|
||||
}
|
||||
var offer = e.detail.contract_wrapper;
|
||||
if (!offer.contract) {
|
||||
console.error("contract field missing");
|
||||
return;
|
||||
}
|
||||
var msg = {
|
||||
type: "check-repurchase",
|
||||
detail: {
|
||||
contract: offer.contract
|
||||
},
|
||||
};
|
||||
chrome.runtime.sendMessage(msg, function (resp) {
|
||||
if (resp.error) {
|
||||
console.error("wallet backend error", resp);
|
||||
return;
|
||||
}
|
||||
if (resp.isRepurchase) {
|
||||
console.log("doing repurchase");
|
||||
console.assert(resp.existingFulfillmentUrl);
|
||||
console.assert(resp.existingContractHash);
|
||||
window.location.href = subst(resp.existingFulfillmentUrl, resp.existingContractHash);
|
||||
}
|
||||
else {
|
||||
var uri = URI(chrome.extension.getURL("pages/confirm-contract.html"));
|
||||
var params = {
|
||||
offer: JSON.stringify(offer),
|
||||
merchantPageUrl: document.location.href,
|
||||
};
|
||||
var target = uri.query(params).href();
|
||||
if (e.detail.replace_navigation === true) {
|
||||
document.location.replace(target);
|
||||
}
|
||||
else {
|
||||
document.location.href = target;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
document.addEventListener('taler-execute-payment', function (e) {
|
||||
console.log("got taler-execute-payment in content page");
|
||||
if (!e.detail.pay_url) {
|
||||
|
@ -31,7 +31,11 @@
|
||||
namespace TalerNotify {
|
||||
const PROTOCOL_VERSION = 1;
|
||||
|
||||
console.log("Taler injected");
|
||||
console.log("Taler injected", chrome.runtime.id);
|
||||
|
||||
// FIXME: only do this for test wallets?
|
||||
// This is no security risk, since the extension ID for published
|
||||
// extension is publicly known.
|
||||
|
||||
function subst(url: string, H_contract) {
|
||||
url = url.replace("${H_contract}", H_contract);
|
||||
@ -41,6 +45,14 @@ namespace TalerNotify {
|
||||
|
||||
let $ = (x) => document.getElementById(x);
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function(e) {
|
||||
if (document.documentElement.getAttribute("data-taler-requested")) {
|
||||
console.log("taler requested in html element");
|
||||
document.documentElement.setAttribute("data-taler-extension-id",
|
||||
chrome.runtime.id);
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener("taler-probe", function(e) {
|
||||
let evt = new CustomEvent("taler-wallet-present", {
|
||||
detail: {
|
||||
@ -55,7 +67,8 @@ namespace TalerNotify {
|
||||
console.log("taler-create-reserve with " + JSON.stringify(e.detail));
|
||||
let params = {
|
||||
amount: JSON.stringify(e.detail.amount),
|
||||
callback_url: URI(e.detail.callback_url).absoluteTo(document.location.href),
|
||||
callback_url: URI(e.detail.callback_url)
|
||||
.absoluteTo(document.location.href),
|
||||
bank_url: document.location.href,
|
||||
};
|
||||
let uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html"));
|
||||
@ -76,6 +89,7 @@ namespace TalerNotify {
|
||||
});
|
||||
|
||||
|
||||
// XXX: remove in a bit, just here for compatibility ...
|
||||
document.addEventListener("taler-contract", function(e: CustomEvent) {
|
||||
// XXX: the merchant should just give us the parsed data ...
|
||||
let offer = JSON.parse(e.detail);
|
||||
@ -116,6 +130,55 @@ namespace TalerNotify {
|
||||
});
|
||||
|
||||
|
||||
document.addEventListener("taler-confirm-contract", function(e: CustomEvent) {
|
||||
if (!e.detail.contract_wrapper) {
|
||||
console.error("contract wrapper missing");
|
||||
return;
|
||||
}
|
||||
|
||||
let offer = e.detail.contract_wrapper;
|
||||
|
||||
if (!offer.contract) {
|
||||
console.error("contract field missing");
|
||||
return;
|
||||
}
|
||||
|
||||
let msg = {
|
||||
type: "check-repurchase",
|
||||
detail: {
|
||||
contract: offer.contract
|
||||
},
|
||||
};
|
||||
|
||||
chrome.runtime.sendMessage(msg, (resp) => {
|
||||
if (resp.error) {
|
||||
console.error("wallet backend error", resp);
|
||||
return;
|
||||
}
|
||||
if (resp.isRepurchase) {
|
||||
console.log("doing repurchase");
|
||||
console.assert(resp.existingFulfillmentUrl);
|
||||
console.assert(resp.existingContractHash);
|
||||
window.location.href = subst(resp.existingFulfillmentUrl,
|
||||
resp.existingContractHash);
|
||||
|
||||
} else {
|
||||
let uri = URI(chrome.extension.getURL("pages/confirm-contract.html"));
|
||||
let params = {
|
||||
offer: JSON.stringify(offer),
|
||||
merchantPageUrl: document.location.href,
|
||||
};
|
||||
let target = uri.query(params).href();
|
||||
if (e.detail.replace_navigation === true) {
|
||||
document.location.replace(target);
|
||||
} else {
|
||||
document.location.href = target;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
document.addEventListener('taler-execute-payment', function(e: CustomEvent) {
|
||||
console.log("got taler-execute-payment in content page");
|
||||
if (!e.detail.pay_url) {
|
||||
|
Loading…
Reference in New Issue
Block a user