aboutsummaryrefslogtreecommitdiff
path: root/extension/background/wallet.js
diff options
context:
space:
mode:
Diffstat (limited to 'extension/background/wallet.js')
-rw-r--r--extension/background/wallet.js65
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) {