diff options
Diffstat (limited to 'extension/pages')
-rw-r--r-- | extension/pages/confirm-contract.html | 30 | ||||
-rw-r--r-- | extension/pages/confirm-contract.tsx | 82 | ||||
-rw-r--r-- | extension/pages/confirm-create-reserve.html | 34 | ||||
-rw-r--r-- | extension/pages/confirm-create-reserve.tsx | 305 | ||||
-rw-r--r-- | extension/pages/debug.html | 12 | ||||
-rw-r--r-- | extension/pages/show-db.html | 14 | ||||
-rw-r--r-- | extension/pages/show-db.ts | 44 |
7 files changed, 0 insertions, 521 deletions
diff --git a/extension/pages/confirm-contract.html b/extension/pages/confirm-contract.html deleted file mode 100644 index 2eac4a8e8..000000000 --- a/extension/pages/confirm-contract.html +++ /dev/null @@ -1,30 +0,0 @@ -<!doctype html> - -<html> - <head> - <title>Taler Wallet: Confirm Reserve Creation</title> - <script src="../lib/vendor/URI.js"></script> - <script src="../lib/vendor/mithril.js"></script> - <script src="../lib/vendor/lodash.core.min.js"></script> - <script src="../lib/vendor/system-csp-production.src.js"></script> - <script src="../lib/vendor/jed.js"></script> - <script src="../lib/i18n.js"></script> - <script src="../lib/i18n-strings.js"></script> - <script src="../lib/module-trampoline.js"></script> - <link rel="stylesheet" type="text/css" href="../style/wallet.css"> - - <body> - <header> - <div id="logo"></div> - <h1>Payment Confirmation</h1> - </header> - - <aside class="sidebar" id="left"> - </aside> - - <section id="main"> - <article id="contract" class="fade"></article> - </section> - - </body> -</html> diff --git a/extension/pages/confirm-contract.tsx b/extension/pages/confirm-contract.tsx deleted file mode 100644 index ff6ffba64..000000000 --- a/extension/pages/confirm-contract.tsx +++ /dev/null @@ -1,82 +0,0 @@ -/* - This file is part of TALER - (C) 2015 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - 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/handlebars/handlebars.d.ts" /> -"use strict"; - -import {substituteFulfillmentUrl} from "../lib/wallet/helpers"; - -declare var m: any; - -function prettyAmount(amount) { - let v = amount.value + amount.fraction / 1e6; - return `${v.toFixed(2)} ${amount.currency}`; -} - - -export function main() { - let url = URI(document.location.href); - let query: any = URI.parseQuery(url.query()); - let offer = JSON.parse(query.offer); - console.dir(offer); - let contract = offer.contract; - let error = null; - - var Contract = { - view(ctrl) { - return [ - m("p", - i18n.parts`${m("strong", contract.merchant.name)} - wants to enter a contract over ${m("strong", - prettyAmount(contract.amount))} - with you.`), - m("p", - i18n`You are about to purchase:`), - m('ul', - _.map(contract.products, - (p: any) => m("li", - `${p.description}: ${prettyAmount(p.price)}`))), - m("button.confirm-pay", {onclick: doPayment}, i18n`Confirm Payment`), - m("p", error ? error : []), - ]; - } - }; - - m.mount(document.getElementById("contract"), Contract); - - function doPayment() { - let d = {offer}; - chrome.runtime.sendMessage({type: 'confirm-pay', detail: d}, (resp) => { - if (resp.error) { - console.log("confirm-pay error", JSON.stringify(resp)); - switch (resp.error) { - case "coins-insufficient": - error = "You do not have enough coins of the requested currency."; - break; - default: - error = `Error: ${resp.error}`; - break; - } - m.redraw(); - return; - } - let c = d.offer.contract; - console.log("contract", c); - document.location.href = substituteFulfillmentUrl(c.fulfillment_url, - offer); - }); - } -}
\ No newline at end of file diff --git a/extension/pages/confirm-create-reserve.html b/extension/pages/confirm-create-reserve.html deleted file mode 100644 index e14d10221..000000000 --- a/extension/pages/confirm-create-reserve.html +++ /dev/null @@ -1,34 +0,0 @@ -<!doctype html> - -<html> -<head> - <title>Taler Wallet: Select Taler Provider</title> - <script src="../lib/vendor/URI.js"></script> - <script src="../lib/vendor/mithril.js"></script> - <script src="../lib/vendor/system-csp-production.src.js"></script> - <script src="../lib/vendor/jed.js"></script> - <script src="../lib/i18n.js"></script> - <script src="../lib/i18n-strings.js"></script> - <script src="../lib/module-trampoline.js"></script> - <link rel="stylesheet" type="text/css" href="../style/wallet.css"> -</head> - -<body> - -<header> - <div id="logo"></div> - <h1>Select Taler Provider</h1> -</header> - -<aside class="sidebar" id="left"> -</aside> - -<section id="main"> - - <article> - <div class="fade" id="mint-selection"></div> - </article> - -</section> -</body> -</html> diff --git a/extension/pages/confirm-create-reserve.tsx b/extension/pages/confirm-create-reserve.tsx deleted file mode 100644 index 224a3e895..000000000 --- a/extension/pages/confirm-create-reserve.tsx +++ /dev/null @@ -1,305 +0,0 @@ -/* - This file is part of TALER - (C) 2015-2016 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - 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/mithril.d.ts" /> - -import {amountToPretty, canonicalizeBaseUrl} from "../lib/wallet/helpers"; -import {AmountJson, CreateReserveResponse} from "../lib/wallet/types"; -import m from "mithril"; -import {IMintInfo} from "../lib/wallet/types"; -import {ReserveCreationInfo, Amounts} from "../lib/wallet/types"; -import MithrilComponent = _mithril.MithrilComponent; -import {Denomination} from "../lib/wallet/types"; -import {getReserveCreationInfo} from "../lib/wallet/wxApi"; - -"use strict"; - -/** - * Execute something after a delay, with the possibility - * to reset the delay. - */ -class DelayTimer { - ms: number; - f; - timerId: number = null; - - constructor(ms: number, f) { - this.f = f; - this.ms = ms; - } - - bump() { - this.stop(); - const handler = () => { - this.f(); - }; - this.timerId = window.setTimeout(handler, this.ms); - } - - stop() { - if (this.timerId !== null) { - window.clearTimeout(this.timerId); - } - } -} - - -class Controller { - url = m.prop<string>(); - statusString = null; - isValidMint = false; - reserveCreationInfo: ReserveCreationInfo = null; - private timer: DelayTimer; - private request: XMLHttpRequest; - amount: AmountJson; - callbackUrl: string; - detailCollapsed = m.prop<boolean>(true); - - constructor(initialMintUrl: string, amount: AmountJson, callbackUrl: string) { - console.log("creating main controller"); - this.amount = amount; - this.callbackUrl = callbackUrl; - this.timer = new DelayTimer(800, () => this.update()); - this.url(initialMintUrl); - this.update(); - } - - private update() { - this.timer.stop(); - const doUpdate = () => { - if (!this.url()) { - this.statusString = i18n`Please enter a URL`; - return; - } - this.statusString = null; - let parsedUrl = URI(this.url()); - if (parsedUrl.is("relative")) { - this.statusString = i18n`The URL you've entered is not valid (must be absolute)`; - return; - } - - m.redraw(true); - - console.log("doing get mint info"); - - getReserveCreationInfo(this.url(), this.amount) - .then((r: ReserveCreationInfo) => { - console.log("get mint info resolved"); - this.isValidMint = true; - this.reserveCreationInfo = r; - console.dir(r); - this.statusString = "The mint base URL is valid!"; - m.endComputation(); - }) - .catch((e) => { - console.log("get mint info rejected"); - if (e.hasOwnProperty("httpStatus")) { - this.statusString = `request failed with status ${this.request.status}`; - } else { - this.statusString = `unknown request error`; - } - m.endComputation(); - }); - }; - - doUpdate(); - - - console.log("got update"); - } - - reset() { - this.isValidMint = false; - this.statusString = null; - this.reserveCreationInfo = null; - if (this.request) { - this.request.abort(); - this.request = null; - } - } - - confirmReserve(mint: string, amount: AmountJson, callback_url: string) { - const d = {mint, amount}; - const cb = (rawResp) => { - if (!rawResp) { - throw Error("empty response"); - } - if (!rawResp.error) { - const resp = CreateReserveResponse.checked(rawResp); - let q = { - mint: resp.mint, - reserve_pub: resp.reservePub, - amount_value: amount.value, - amount_fraction: amount.fraction, - amount_currency: amount.currency, - }; - let url = URI(callback_url).addQuery(q); - if (!url.is("absolute")) { - throw Error("callback url is not absolute"); - } - console.log("going to", url.href()); - document.location.href = url.href(); - } else { - this.reset(); - this.statusString = ( - `Oops, something went wrong.` + - `The wallet responded with error status (${rawResp.error}).`); - } - }; - chrome.runtime.sendMessage({type: 'create-reserve', detail: d}, cb); - } - - onUrlChanged(url: string) { - this.reset(); - this.url(url); - this.timer.bump(); - } -} - - -function view(ctrl: Controller) { - let controls = []; - let mx = (x, ...args) => controls.push(m(x, ...args)); - - mx("p", - i18n`The bank wants to create a reserve over ${amountToPretty( - ctrl.amount)}.`); - mx("input", - { - className: "url", - type: "text", - spellcheck: false, - value: ctrl.url(), - oninput: m.withAttr("value", ctrl.onUrlChanged.bind(ctrl)), - }); - - mx("button", { - onclick: () => ctrl.confirmReserve(ctrl.url(), - ctrl.amount, - ctrl.callbackUrl), - disabled: !ctrl.isValidMint - }, - "Confirm exchange selection"); - - if (ctrl.statusString) { - mx("p", ctrl.statusString); - } else { - mx("p", "Checking URL, please wait ..."); - } - - if (ctrl.reserveCreationInfo) { - let totalCost = Amounts.add(ctrl.reserveCreationInfo.overhead, - ctrl.reserveCreationInfo.withdrawFee).amount; - mx("p", `Withdraw cost: ${amountToPretty(totalCost)}`); - if (ctrl.detailCollapsed()) { - mx("button.linky", { - onclick: () => { - ctrl.detailCollapsed(false); - } - }, "show more details"); - } else { - mx("button.linky", { - onclick: () => { - ctrl.detailCollapsed(true); - } - }, "hide details"); - mx("div", {}, renderReserveCreationDetails(ctrl.reserveCreationInfo)) - } - } - - return m("div", controls); -} - - -function renderReserveCreationDetails(rci: ReserveCreationInfo) { - let denoms = rci.selectedDenoms; - - function row(denom: Denomination) { - return m("tr", [ - m("td", denom.pub_hash.substr(0, 5) + "..."), - m("td", amountToPretty(denom.value)), - m("td", amountToPretty(denom.fee_withdraw)), - m("td", amountToPretty(denom.fee_refresh)), - m("td", amountToPretty(denom.fee_deposit)), - ]); - } - - let withdrawFeeStr = amountToPretty(rci.withdrawFee); - let overheadStr = amountToPretty(rci.overhead); - return [ - m("p", `Fee for withdrawal: ${withdrawFeeStr}`), - m("p", `Overhead: ${overheadStr}`), - m("table", [ - m("tr", [ - m("th", "Key Hash"), - m("th", "Value"), - m("th", "Withdraw Fee"), - m("th", "Refresh Fee"), - m("th", "Deposit Fee"), - ]), - denoms.map(row) - ]) - ]; -} - - -interface MintProbeResult { - keyInfo?: any; -} - -function probeMint(mintBaseUrl: string): Promise<MintProbeResult> { - throw Error("not implemented"); -} - - -function getSuggestedMint(currency: string): Promise<string> { - // TODO: make this request go to the wallet backend - // Right now, this is a stub. - const defaultMint = { - "KUDOS": "http://exchange.demo.taler.net", - "PUDOS": "http://exchange.test.taler.net", - }; - - let mint = defaultMint[currency]; - - if (!mint) { - mint = "" - } - - return Promise.resolve(mint); -} - - -export function main() { - const url = URI(document.location.href); - const query: any = URI.parseQuery(url.query()); - const amount = AmountJson.checked(JSON.parse(query.amount)); - const callback_url = query.callback_url; - const bank_url = query.bank_url; - - getSuggestedMint(amount.currency) - .then((suggestedMintUrl) => { - const controller = () => new Controller(suggestedMintUrl, amount, callback_url); - var MintSelection = {controller, view}; - m.mount(document.getElementById("mint-selection"), MintSelection); - }) - .catch((e) => { - // TODO: provide more context information, maybe factor it out into a - // TODO:generic error reporting function or component. - document.body.innerText = `Fatal error: "${e.message}".`; - console.error(`got backend error "${e.message}"`); - }); -} diff --git a/extension/pages/debug.html b/extension/pages/debug.html deleted file mode 100644 index 24682dd24..000000000 --- a/extension/pages/debug.html +++ /dev/null @@ -1,12 +0,0 @@ -<!doctype html> -<html> - <head> - <title>Taler Wallet Debugging</title> - </head> - <body> - <h1>Debug Pages</h1> - <a href="show-db.html">Show DB</a> <br> - <a href="../popup/balance-overview.html">Show balance</a> - - </body> -</html> diff --git a/extension/pages/show-db.html b/extension/pages/show-db.html deleted file mode 100644 index ee54d0e08..000000000 --- a/extension/pages/show-db.html +++ /dev/null @@ -1,14 +0,0 @@ - -<!doctype html> - -<html> - <head> - <title>Taler Wallet: Reserve Created</title> - <link rel="stylesheet" type="text/css" href="../style/wallet.css"> - <script src="show-db.js"></script> - </head> - <body> - <h1>DB Dump</h1> - <pre id="dump"></pre> - </body> -</html> diff --git a/extension/pages/show-db.ts b/extension/pages/show-db.ts deleted file mode 100644 index 1c414dde7..000000000 --- a/extension/pages/show-db.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of TALER - (C) 2015 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - 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/> - */ - - -function replacer(match, pIndent, pKey, pVal, pEnd) { - var key = '<span class=json-key>'; - var val = '<span class=json-value>'; - var str = '<span class=json-string>'; - var r = pIndent || ''; - if (pKey) - r = r + key + pKey.replace(/[": ]/g, '') + '</span>: '; - if (pVal) - r = r + (pVal[0] == '"' ? str : val) + pVal + '</span>'; - return r + (pEnd || ''); -} - - -function prettyPrint(obj) { - var jsonLine = /^( *)("[\w]+": )?("[^"]*"|[\w.+-]*)?([,[{])?$/mg; - return JSON.stringify(obj, null, 3) - .replace(/&/g, '&').replace(/\\"/g, '"') - .replace(/</g, '<').replace(/>/g, '>') - .replace(jsonLine, replacer); -} - - -document.addEventListener("DOMContentLoaded", (e) => { - chrome.runtime.sendMessage({type:'dump-db'}, (resp) => { - document.getElementById('dump').innerHTML = prettyPrint(resp); - }); -}); |