From 356a2eb01a792e4e5ef1887ef02ad2d7c1613ca3 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 6 Sep 2016 14:39:45 +0200 Subject: refactor shop api event handling --- content_scripts/notify.ts | 110 +++------------------------------------------- 1 file changed, 5 insertions(+), 105 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/notify.ts b/content_scripts/notify.ts index 54d7b6acb..f5c3fb575 100644 --- a/content_scripts/notify.ts +++ b/content_scripts/notify.ts @@ -27,18 +27,14 @@ "use strict"; +import {createReserve, confirmContract, executeContract} from "../lib/shopApi"; + // Make sure we don't pollute the namespace too much. namespace TalerNotify { const PROTOCOL_VERSION = 1; console.log("Taler injected", chrome.runtime.id); - function subst(url: string, H_contract) { - url = url.replace("${H_contract}", H_contract); - url = url.replace("${$}", "$"); - return url; - } - const handlers = []; function init() { @@ -65,8 +61,6 @@ namespace TalerNotify { init(); function registerHandlers() { - const $ = (x) => document.getElementById(x); - function addHandler(type, listener) { document.addEventListener(type, listener); handlers.push({type, listener}); @@ -91,16 +85,7 @@ namespace TalerNotify { }); addHandler("taler-create-reserve", function(e: CustomEvent) { - 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), - bank_url: document.location.href, - wt_types: JSON.stringify(e.detail.wt_types), - }; - let uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html")); - document.location.href = uri.query(params).href(); + createReserve(e.detail.amount, e.detail.callback_url, e.detail.wt_types); }); addHandler("taler-confirm-reserve", function(e: CustomEvent) { @@ -116,53 +101,8 @@ namespace TalerNotify { }); }); - addHandler("taler-confirm-contract", function(e: CustomEvent) { - if (!e.detail.contract_wrapper) { - console.error("contract wrapper missing"); - return; - } - - const offer = e.detail.contract_wrapper; - - if (!offer.contract) { - console.error("contract field missing"); - return; - } - - const 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 { - const uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); - const params = { - offer: JSON.stringify(offer), - merchantPageUrl: document.location.href, - }; - const target = uri.query(params).href(); - if (e.detail.replace_navigation === true) { - document.location.replace(target); - } else { - document.location.href = target; - } - } - }); + confirmContract(e.detail.contract_wrapper, e.detail.replace_navigation); }); addHandler("taler-payment-failed", (e: CustomEvent) => { @@ -178,48 +118,8 @@ namespace TalerNotify { }); }); - // Should be: taler-request-payment, taler-result-payment - addHandler("taler-execute-contract", (e: CustomEvent) => { - console.log("got taler-execute-contract in content page"); - const msg = { - type: "execute-payment", - detail: { - H_contract: e.detail.H_contract, - }, - }; - - chrome.runtime.sendMessage(msg, (resp) => { - console.log("got resp"); - console.dir(resp); - if (!resp.success) { - console.log("got event detial:"); - console.dir(e.detail); - if (e.detail.offering_url) { - console.log("offering url", e.detail.offering_url); - window.location.href = e.detail.offering_url; - } else { - console.error("execute-payment failed"); - } - return; - } - let contract = resp.contract; - if (!contract) { - throw Error("contract missing"); - } - - // We have the details for then payment, the merchant page - // is responsible to give it to the merchant. - - let evt = new CustomEvent("taler-notify-payment", { - detail: { - H_contract: e.detail.H_contract, - contract: resp.contract, - payment: resp.payReq, - } - }); - document.dispatchEvent(evt); - }); + executeContract(e.detail.H_contract, e.detail.offering_url); }); } } \ No newline at end of file -- cgit v1.2.3