if checkmasterpub is specified, throw if master pub is not equal to the expected value
This commit is contained in:
parent
1e173e279f
commit
87fc6ebf48
@ -75,7 +75,13 @@ import {
|
||||
GetReadWriteAccess,
|
||||
} from "../util/query.js";
|
||||
import { WALLET_EXCHANGE_PROTOCOL_VERSION } from "../versions.js";
|
||||
import { OperationAttemptResult, OperationAttemptResultType, runTaskWithErrorReporting, TaskIdentifiers, unwrapOperationHandlerResultOrThrow } from "./common.js";
|
||||
import {
|
||||
OperationAttemptResult,
|
||||
OperationAttemptResultType,
|
||||
runTaskWithErrorReporting,
|
||||
TaskIdentifiers,
|
||||
unwrapOperationHandlerResultOrThrow,
|
||||
} from "./common.js";
|
||||
|
||||
const logger = new Logger("exchanges.ts");
|
||||
|
||||
@ -544,6 +550,7 @@ export async function updateExchangeFromUrl(
|
||||
ws: InternalWalletState,
|
||||
baseUrl: string,
|
||||
options: {
|
||||
checkMasterPub?: string;
|
||||
forceNow?: boolean;
|
||||
cancellationToken?: CancellationToken;
|
||||
} = {},
|
||||
@ -570,6 +577,7 @@ export async function updateExchangeFromUrlHandler(
|
||||
ws: InternalWalletState,
|
||||
exchangeBaseUrl: string,
|
||||
options: {
|
||||
checkMasterPub?: string;
|
||||
forceNow?: boolean;
|
||||
cancellationToken?: CancellationToken;
|
||||
} = {},
|
||||
@ -605,6 +613,13 @@ export async function updateExchangeFromUrlHandler(
|
||||
)
|
||||
) {
|
||||
logger.info("using existing exchange info");
|
||||
|
||||
if (options.checkMasterPub) {
|
||||
if (exchangeDetails.masterPublicKey !== options.checkMasterPub) {
|
||||
throw Error(`master public key mismatch`);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
type: OperationAttemptResultType.Finished,
|
||||
result: { exchange, exchangeDetails },
|
||||
@ -621,6 +636,12 @@ export async function updateExchangeFromUrlHandler(
|
||||
timeout,
|
||||
);
|
||||
|
||||
if (options.checkMasterPub) {
|
||||
if (keysInfo.masterPublicKey !== options.checkMasterPub) {
|
||||
throw Error(`master public key mismatch`);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("updating exchange /wire info");
|
||||
const wireInfoDownload = await downloadExchangeWireInfo(
|
||||
exchangeBaseUrl,
|
||||
|
@ -243,7 +243,12 @@ import {
|
||||
testPay,
|
||||
withdrawTestBalance,
|
||||
} from "./operations/testing.js";
|
||||
import { acceptTip, computeTipTransactionStatus, prepareTip, processTip } from "./operations/tip.js";
|
||||
import {
|
||||
acceptTip,
|
||||
computeTipTransactionStatus,
|
||||
prepareTip,
|
||||
processTip,
|
||||
} from "./operations/tip.js";
|
||||
import {
|
||||
abortTransaction,
|
||||
deleteTransaction,
|
||||
@ -281,7 +286,10 @@ import {
|
||||
GetReadOnlyAccess,
|
||||
GetReadWriteAccess,
|
||||
} from "./util/query.js";
|
||||
import { OperationAttemptResult, TaskIdentifiers } from "./operations/common.js";
|
||||
import {
|
||||
OperationAttemptResult,
|
||||
TaskIdentifiers,
|
||||
} from "./operations/common.js";
|
||||
import { TimerAPI, TimerGroup } from "./util/timer.js";
|
||||
import {
|
||||
WALLET_BANK_INTEGRATION_PROTOCOL_VERSION,
|
||||
@ -1068,6 +1076,7 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
|
||||
case WalletApiOperation.AddExchange: {
|
||||
const req = codecForAddExchangeRequest().decode(payload);
|
||||
await updateExchangeFromUrl(ws, req.exchangeBaseUrl, {
|
||||
checkMasterPub: req.masterPub,
|
||||
forceNow: req.forceUpdate,
|
||||
});
|
||||
return {};
|
||||
@ -1783,36 +1792,42 @@ class InternalWalletStateImpl implements InternalWalletState {
|
||||
return computePayMerchantTransactionState(rec);
|
||||
}
|
||||
case TransactionType.Refund: {
|
||||
const rec = await tx.refundGroups.get(
|
||||
parsedTxId.refundGroupId,
|
||||
);
|
||||
const rec = await tx.refundGroups.get(parsedTxId.refundGroupId);
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
return computeRefundTransactionState(rec);
|
||||
}
|
||||
case TransactionType.PeerPullCredit:
|
||||
const rec = await tx.peerPullPaymentInitiations.get(parsedTxId.pursePub);
|
||||
const rec = await tx.peerPullPaymentInitiations.get(
|
||||
parsedTxId.pursePub,
|
||||
);
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
return computePeerPullCreditTransactionState(rec);
|
||||
case TransactionType.PeerPullDebit: {
|
||||
const rec = await tx.peerPullPaymentIncoming.get(parsedTxId.peerPullPaymentIncomingId);
|
||||
const rec = await tx.peerPullPaymentIncoming.get(
|
||||
parsedTxId.peerPullPaymentIncomingId,
|
||||
);
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
return computePeerPullDebitTransactionState(rec);
|
||||
}
|
||||
case TransactionType.PeerPushCredit: {
|
||||
const rec = await tx.peerPushPaymentIncoming.get(parsedTxId.peerPushPaymentIncomingId);
|
||||
const rec = await tx.peerPushPaymentIncoming.get(
|
||||
parsedTxId.peerPushPaymentIncomingId,
|
||||
);
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
return computePeerPushCreditTransactionState(rec);
|
||||
}
|
||||
case TransactionType.PeerPushDebit: {
|
||||
const rec = await tx.peerPushPaymentInitiations.get(parsedTxId.pursePub);
|
||||
const rec = await tx.peerPushPaymentInitiations.get(
|
||||
parsedTxId.pursePub,
|
||||
);
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
@ -1823,7 +1838,7 @@ class InternalWalletStateImpl implements InternalWalletState {
|
||||
if (!rec) {
|
||||
return undefined;
|
||||
}
|
||||
return computeRefreshTransactionState(rec)
|
||||
return computeRefreshTransactionState(rec);
|
||||
}
|
||||
case TransactionType.Tip: {
|
||||
const rec = await tx.tips.get(parsedTxId.walletTipId);
|
||||
|
Loading…
Reference in New Issue
Block a user