refactor submitPay
This commit is contained in:
parent
b517163ece
commit
aec2c1301e
@ -745,7 +745,36 @@ export class Wallet {
|
|||||||
fu.addSearch("session_sig", merchantResp.session_sig);
|
fu.addSearch("session_sig", merchantResp.session_sig);
|
||||||
await this.q().put(Stores.purchases, purchase).finish();
|
await this.q().put(Stores.purchases, purchase).finish();
|
||||||
}
|
}
|
||||||
await this.paymentSucceeded(purchase.contractTermsHash, merchantResp.sig);
|
|
||||||
|
const merchantPub = purchase.contractTerms.merchant_pub;
|
||||||
|
const valid: boolean = await (
|
||||||
|
this.cryptoApi.isValidPaymentSignature(merchantResp.sig, contractTermsHash, merchantPub)
|
||||||
|
);
|
||||||
|
if (!valid) {
|
||||||
|
console.error("merchant payment signature invalid");
|
||||||
|
// FIXME: properly display error
|
||||||
|
throw Error("merchant payment signature invalid");
|
||||||
|
}
|
||||||
|
purchase.finished = true;
|
||||||
|
const modifiedCoins: CoinRecord[] = [];
|
||||||
|
for (const pc of purchase.payReq.coins) {
|
||||||
|
const c = await this.q().get<CoinRecord>(Stores.coins, pc.coin_pub);
|
||||||
|
if (!c) {
|
||||||
|
console.error("coin not found");
|
||||||
|
throw Error("coin used in payment not found");
|
||||||
|
}
|
||||||
|
c.status = CoinStatus.Dirty;
|
||||||
|
modifiedCoins.push(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.q()
|
||||||
|
.putAll(Stores.coins, modifiedCoins)
|
||||||
|
.put(Stores.purchases, purchase)
|
||||||
|
.finish();
|
||||||
|
for (const c of purchase.payReq.coins) {
|
||||||
|
this.refresh(c.coin_pub);
|
||||||
|
}
|
||||||
|
|
||||||
const nextUrl = fu.href();
|
const nextUrl = fu.href();
|
||||||
this.cachedNextUrl[purchase.contractTerms.fulfillment_url] = { nextUrl, lastSessionId: sessionId };
|
this.cachedNextUrl[purchase.contractTerms.fulfillment_url] = { nextUrl, lastSessionId: sessionId };
|
||||||
return { nextUrl };
|
return { nextUrl };
|
||||||
@ -2245,45 +2274,6 @@ export class Wallet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async paymentSucceeded(contractTermsHash: string, merchantSig: string): Promise<any> {
|
|
||||||
const doPaymentSucceeded = async() => {
|
|
||||||
const t = await this.q().get<PurchaseRecord>(Stores.purchases,
|
|
||||||
contractTermsHash);
|
|
||||||
if (!t) {
|
|
||||||
console.error("contract not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const merchantPub = t.contractTerms.merchant_pub;
|
|
||||||
const valid = this.cryptoApi.isValidPaymentSignature(merchantSig, contractTermsHash, merchantPub);
|
|
||||||
if (!valid) {
|
|
||||||
console.error("merchant payment signature invalid");
|
|
||||||
// FIXME: properly display error
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
t.finished = true;
|
|
||||||
const modifiedCoins: CoinRecord[] = [];
|
|
||||||
for (const pc of t.payReq.coins) {
|
|
||||||
const c = await this.q().get<CoinRecord>(Stores.coins, pc.coin_pub);
|
|
||||||
if (!c) {
|
|
||||||
console.error("coin not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
c.status = CoinStatus.Dirty;
|
|
||||||
modifiedCoins.push(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.q()
|
|
||||||
.putAll(Stores.coins, modifiedCoins)
|
|
||||||
.put(Stores.purchases, t)
|
|
||||||
.finish();
|
|
||||||
for (const c of t.payReq.coins) {
|
|
||||||
this.refresh(c.coin_pub);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
doPaymentSucceeded();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
async payback(coinPub: string): Promise<void> {
|
async payback(coinPub: string): Promise<void> {
|
||||||
let coin = await this.q().get(Stores.coins, coinPub);
|
let coin = await this.q().get(Stores.coins, coinPub);
|
||||||
if (!coin) {
|
if (!coin) {
|
||||||
|
Loading…
Reference in New Issue
Block a user