diff options
Diffstat (limited to 'extension/background/wallet.js')
-rw-r--r-- | extension/background/wallet.js | 65 |
1 files changed, 39 insertions, 26 deletions
diff --git a/extension/background/wallet.js b/extension/background/wallet.js index 8aec5ecb1..a8e62abdf 100644 --- a/extension/background/wallet.js +++ b/extension/background/wallet.js @@ -48,6 +48,7 @@ function signDeposit(db, offer, cds) { let newAmount = new Amount(cd.coin.currentAmount); newAmount.sub(coinSpend); cd.coin.currentAmount = newAmount.toJson(); + console.log("DepositRequestPS: ", d.toPurpose().hexdump()); let coinSig = eddsaSign(d.toPurpose(), EddsaPrivateKey.fromCrock(cd.coin.coinPriv)) .toCrock(); let s = { @@ -145,31 +146,26 @@ function getPossibleMintCoins(db, paymentAmount, depositFeeLimit, allowedMints) } function executePay(db, offer, payCoinInfo, merchantBaseUrl, chosenMint) { return new Promise((resolve, reject) => { - let reqData = {}; - reqData["H_wire"] = offer.contract.H_wire; - reqData["H_contract"] = offer.H_contract; - reqData["transaction_id"] = offer.contract.transaction_id; - reqData["refund_deadline"] = offer.contract.refund_deadline; - reqData["mint"] = URI(chosenMint).hostname(); - reqData["coins"] = payCoinInfo.map((x) => x.sig); - reqData["timestamp"] = offer.contract.timestamp; - let payUrl = URI(offer.contract.pay_url).absoluteTo(merchantBaseUrl); - console.log("Merchant URL", payUrl.href()); - let req = new XMLHttpRequest(); - req.open('post', payUrl.href()); - req.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - req.send(JSON.stringify(reqData)); - req.addEventListener('readystatechange', (e) => { - if (req.readyState == XMLHttpRequest.DONE) { - if (req.status == 200) { - console.log("Merchant response:", req.responseText); - resolve(); - } - else { - throw Error("bad status " + req.status); - } - } - }); + let payReq = {}; + payReq["H_wire"] = offer.contract.H_wire; + payReq["H_contract"] = offer.H_contract; + payReq["transaction_id"] = offer.contract.transaction_id; + payReq["refund_deadline"] = offer.contract.refund_deadline; + payReq["mint"] = URI(chosenMint).href(); + payReq["coins"] = payCoinInfo.map((x) => x.sig); + payReq["timestamp"] = offer.contract.timestamp; + let payUrl = URI(offer.pay_url).absoluteTo(merchantBaseUrl); + let t = { + contractHash: offer.H_contract, + contract: offer.contract, + payUrl: payUrl.href(), + payReq: payReq + }; + let tx = db.transaction(['transactions'], 'readwrite'); + tx.objectStore('transactions').put(t); + tx.oncomplete = (e) => { + resolve(); + }; }); } function confirmPay(db, detail, sendResponse) { @@ -192,10 +188,25 @@ function confirmPay(db, detail, sendResponse) { return executePay(db, offer, ds, detail.merchantPageUrl, mintUrl); }) .then(() => { - sendResponse({ success: true }); + sendResponse({ + success: true, + }); }); return true; } +function doPayment(db, detail, sendResponse) { + let H_contract = detail.H_contract; + let req = db.transaction(['transactions']).objectStore("transactions").get(H_contract); + console.log("executing contract", H_contract); + req.onsuccess = (e) => { + if (!req.result) { + sendResponse({ success: false, error: "contract not found" }); + return; + } + sendResponse({ success: true, payUrl: req.result.payUrl, payReq: req.result.payReq }); + }; + return true; +} function confirmReserve(db, detail, sendResponse) { let reservePriv = EddsaPrivateKey.create(); let reservePub = reservePriv.getPublicKey(); @@ -592,12 +603,14 @@ function balances(db, detail, sendResponse) { chrome.browserAction.setBadgeText({ text: "" }); openTalerDb().then((db) => { console.log("db loaded"); + updateBadge(db); chrome.runtime.onMessage.addListener(function (req, sender, onresponse) { let dispatch = { "confirm-reserve": confirmReserve, "confirm-pay": confirmPay, "dump-db": dumpDb, "balances": balances, + "execute-payment": doPayment, "reset": reset }; if (req.type in dispatch) { |