summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-03-15 00:24:39 -0300
committerSebastian <sebasjm@gmail.com>2022-03-15 00:24:39 -0300
commit984cbb7ab79b50eab38bb6a05ab56ccc278ac835 (patch)
treef1d06a6d337e3241707acce14cc6f691de37bb16 /packages/taler-wallet-core/src/operations
parenta5f357f07857d4740931e57eb65b750ab9e66b02 (diff)
downloadwallet-core-984cbb7ab79b50eab38bb6a05ab56ccc278ac835.tar.gz
wallet-core-984cbb7ab79b50eab38bb6a05ab56ccc278ac835.tar.bz2
wallet-core-984cbb7ab79b50eab38bb6a05ab56ccc278ac835.zip
save tos etag after forced refresh
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/exchanges.ts54
1 files changed, 23 insertions, 31 deletions
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts
index 2006b792f..536d4e3bf 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -363,13 +363,20 @@ async function provideExchangeRecord(
ws: InternalWalletState,
baseUrl: string,
now: Timestamp,
-): Promise<ExchangeRecord> {
+): Promise<{
+ exchange: ExchangeRecord;
+ exchangeDetails: ExchangeDetailsRecord | undefined;
+}> {
+
return await ws.db
- .mktx((x) => ({ exchanges: x.exchanges }))
+ .mktx((x) => ({
+ exchanges: x.exchanges,
+ exchangeDetails: x.exchangeDetails,
+ }))
.runReadWrite(async (tx) => {
- let r = await tx.exchanges.get(baseUrl);
- if (!r) {
- r = {
+ let exchange = await tx.exchanges.get(baseUrl);
+ if (!exchange) {
+ const r = {
permanent: true,
baseUrl: baseUrl,
retryInfo: initRetryInfo(),
@@ -379,8 +386,10 @@ async function provideExchangeRecord(
nextRefreshCheck: now,
};
await tx.exchanges.put(r);
+ exchange = r;
}
- return r;
+ const exchangeDetails = await getExchangeDetails(tx, baseUrl);
+ return { exchange, exchangeDetails };
});
}
@@ -519,33 +528,15 @@ async function updateExchangeFromUrlImpl(
exchange: ExchangeRecord;
exchangeDetails: ExchangeDetailsRecord;
}> {
- logger.trace(`updating exchange info for ${baseUrl}`);
+ logger.info(`updating exchange info for ${baseUrl}, forced: ${forceNow}`);
const now = getTimestampNow();
baseUrl = canonicalizeBaseUrl(baseUrl);
- const r = await provideExchangeRecord(ws, baseUrl, now);
-
- if (!forceNow && r && !isTimestampExpired(r.nextUpdate)) {
- const res = await ws.db
- .mktx((x) => ({
- exchanges: x.exchanges,
- exchangeDetails: x.exchangeDetails,
- }))
- .runReadOnly(async (tx) => {
- const exchange = await tx.exchanges.get(baseUrl);
- if (!exchange) {
- return;
- }
- const exchangeDetails = await getExchangeDetails(tx, baseUrl);
- if (!exchangeDetails) {
- return;
- }
- return { exchange, exchangeDetails };
- });
- if (res) {
- logger.info("using existing exchange info");
- return res;
- }
+ const { exchange, exchangeDetails } = await provideExchangeRecord(ws, baseUrl, now);
+
+ if (!forceNow && exchangeDetails !== undefined && !isTimestampExpired(exchange.nextUpdate)) {
+ logger.info("using existing exchange info");
+ return { exchange, exchangeDetails };
}
logger.info("updating exchange /keys info");
@@ -584,6 +575,7 @@ async function updateExchangeFromUrlImpl(
timeout,
acceptedFormat,
);
+ const tosHasBeenAccepted = exchangeDetails?.termsOfServiceAcceptedEtag === tosDownload.tosEtag
let recoupGroupId: string | undefined;
@@ -619,7 +611,7 @@ async function updateExchangeFromUrlImpl(
exchangeBaseUrl: r.baseUrl,
wireInfo,
termsOfServiceText: tosDownload.tosText,
- termsOfServiceAcceptedEtag: undefined,
+ termsOfServiceAcceptedEtag: tosHasBeenAccepted ? tosDownload.tosEtag : undefined,
termsOfServiceContentType: tosDownload.tosContentType,
termsOfServiceLastEtag: tosDownload.tosEtag,
termsOfServiceAcceptedTimestamp: getTimestampNow(),