aboutsummaryrefslogtreecommitdiff
path: root/content_scripts/notify.js
diff options
context:
space:
mode:
authortg(x) <*@tg-x.net>2016-03-02 16:53:14 +0100
committertg(x) <*@tg-x.net>2016-03-02 16:53:14 +0100
commit51d6f9fd94d05741e733b01be915afeb5572f355 (patch)
tree024ef8cab1db8543574c6be33edf9dc2da0ef6ac /content_scripts/notify.js
parentcd331e1855fd4c7033e43622ec0a963fefe37bdb (diff)
parent13a8f36cad4d5d2ffec788ff6b4d5b61ed4ddff9 (diff)
Merge branch 'master' of taler.net:/var/git/wallet-webex
Diffstat (limited to 'content_scripts/notify.js')
-rw-r--r--content_scripts/notify.js90
1 files changed, 80 insertions, 10 deletions
diff --git a/content_scripts/notify.js b/content_scripts/notify.js
index d81732f10..2df089719 100644
--- a/content_scripts/notify.js
+++ b/content_scripts/notify.js
@@ -13,24 +13,50 @@
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
-/// <reference path="../lib/decl/chrome/chrome.d.ts" />
-"use strict";
/**
* Script that is injected into (all!) pages to allow them
* to interact with the GNU Taler wallet via DOM Events.
+ *
+ * @author Florian Dold
*/
+/// <reference path="../lib/decl/chrome/chrome.d.ts" />
+"use strict";
// Make sure we don't pollute the namespace too much.
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 handlers = [];
+ var port = chrome.runtime.connect();
+ port.onDisconnect.addListener(function () {
+ console.log("chrome runtime disconnected");
+ for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {
+ var handler = handlers_1[_i];
+ document.removeEventListener(handler.type, handler.listener);
+ }
+ });
var $ = function (x) { return document.getElementById(x); };
- document.addEventListener("taler-probe", function (e) {
+ function addHandler(type, listener) {
+ document.addEventListener(type, listener);
+ handlers.push({ type: type, listener: listener });
+ }
+ addHandler("taler-query-id", function (e) {
+ var evt = new CustomEvent("taler-id", {
+ detail: {
+ id: chrome.runtime.id
+ }
+ });
+ document.dispatchEvent(evt);
+ });
+ addHandler("taler-probe", function (e) {
var evt = new CustomEvent("taler-wallet-present", {
detail: {
walletProtocolVersion: PROTOCOL_VERSION
@@ -39,18 +65,18 @@ var TalerNotify;
document.dispatchEvent(evt);
console.log("handshake done");
});
- document.addEventListener("taler-create-reserve", function (e) {
+ addHandler("taler-create-reserve", function (e) {
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,
- suggested_mint: e.detail.suggested_mint,
};
var uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html"));
document.location.href = uri.query(params).href();
});
- document.addEventListener("taler-confirm-reserve", function (e) {
+ addHandler("taler-confirm-reserve", function (e) {
console.log("taler-confirm-reserve with " + JSON.stringify(e.detail));
var msg = {
type: "confirm-reserve",
@@ -62,7 +88,8 @@ var TalerNotify;
console.log("confirm reserve done");
});
});
- document.addEventListener("taler-contract", function (e) {
+ // XXX: remove in a bit, just here for compatibility ...
+ addHandler("taler-contract", function (e) {
// XXX: the merchant should just give us the parsed data ...
var offer = JSON.parse(e.detail);
if (!offer.contract) {
@@ -96,7 +123,50 @@ var TalerNotify;
}
});
});
- document.addEventListener('taler-execute-payment', function (e) {
+ addHandler("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;
+ }
+ }
+ });
+ });
+ addHandler('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");