aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-01-13 01:33:24 -0300
committerSebastian <sebasjm@gmail.com>2022-01-13 01:34:17 -0300
commitcea0ac02b64c2a575a5788552e813d315e3f3096 (patch)
tree79c398a39610ac07c45c9ab7da30a64177fc6332 /packages
parent4b289cde5d362c863bee84dc3aa8fbe06b747b41 (diff)
import db from the wallet web extension
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-util/src/walletTypes.ts8
-rw-r--r--packages/taler-wallet-core/src/wallet.ts7
-rw-r--r--packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx27
-rw-r--r--packages/taler-wallet-webextension/src/wallet/DepositPage.tsx18
-rw-r--r--packages/taler-wallet-webextension/src/wxApi.ts4
5 files changed, 54 insertions, 10 deletions
diff --git a/packages/taler-util/src/walletTypes.ts b/packages/taler-util/src/walletTypes.ts
index 4158dde9e..4a871e743 100644
--- a/packages/taler-util/src/walletTypes.ts
+++ b/packages/taler-util/src/walletTypes.ts
@@ -1088,3 +1088,11 @@ export const codecForWithdrawFakebankRequest = (): Codec<WithdrawFakebankRequest
.property("bank", codecForString())
.property("exchange", codecForString())
.build("WithdrawFakebankRequest");
+
+export interface ImportDb {
+ dump: any;
+}
+export const codecForImportDbRequest = (): Codec<ImportDb> =>
+ buildCodecForObject<ImportDb>()
+ .property("dump", codecForAny())
+ .build("ImportDbRequest")
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
index 2f94d5e82..3d83ec21d 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -45,6 +45,7 @@ import {
PaytoUri,
codecForGetFeeForDeposit,
codecForListKnownBankAccounts,
+ codecForImportDbRequest,
} from "@gnu-taler/taler-util";
import {
addBackupProvider,
@@ -130,6 +131,7 @@ import {
AuditorTrustRecord,
CoinSourceType,
exportDb,
+ importDb,
ReserveRecordStatus,
WalletStoresV1,
} from "./db.js";
@@ -997,6 +999,11 @@ async function dispatchRequestInternal(
const dbDump = await exportDb(ws.db.idbHandle());
return dbDump;
}
+ case "importDb": {
+ const req = codecForImportDbRequest().decode(payload);
+ await importDb(ws.db.idbHandle(), req.dump);
+ return [];
+ }
}
throw OperationFailedError.fromCode(
TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN,
diff --git a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
index 840398a44..ea87ba01f 100644
--- a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
@@ -18,7 +18,7 @@ import { NotificationType } from "@gnu-taler/taler-util";
import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core";
import { format } from "date-fns";
import { Fragment, h, VNode } from "preact";
-import { useState } from "preact/hooks";
+import { useRef, useState } from "preact/hooks";
import { Diagnostics } from "../components/Diagnostics";
import { NotifyUpdateFadeOut } from "../components/styled";
import { Time } from "../components/Time";
@@ -83,11 +83,34 @@ export function View({
content,
});
}
+ const fileRef = useRef<HTMLInputElement>(null);
+ async function onImportDatabase(str: string): Promise<void> {
+ return wxApi.importDB(JSON.parse(str));
+ }
return (
<div>
<p>Debug tools:</p>
<button onClick={confirmReset}>reset</button>
<br />
+ <button onClick={() => fileRef?.current?.click()}>import database</button>
+ <input
+ ref={fileRef}
+ style={{ display: "none" }}
+ type="file"
+ onChange={async (e) => {
+ const f: FileList | null = e.currentTarget.files;
+ if (!f || f.length != 1) {
+ return Promise.reject();
+ }
+ const buf = await f[0].arrayBuffer();
+ const str = new Uint8Array(buf).reduce(
+ (data, byte) => data + String.fromCharCode(byte),
+ "",
+ );
+ return onImportDatabase(str);
+ }}
+ />
+ <br />
<button onClick={onExportDatabase}>export database</button>
{downloadedDatabase && (
<div>
@@ -152,6 +175,8 @@ export function reload(): void {
}
}
+function runIntegrationTest() {}
+
export async function confirmReset(): Promise<void> {
if (
confirm(
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
index 9e15daa97..abe830e87 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
@@ -110,7 +110,6 @@ export function View({
setAmount(num);
setFee(undefined);
}
- const feeHasBeenCalculated = fee !== undefined;
const currency = balance.currency;
const amountStr: AmountString = `${currency}:${amount}`;
const feeSum =
@@ -151,7 +150,7 @@ export function View({
: !parsedAmount
? "Invalid amount"
: Amounts.cmp(balance, parsedAmount) === -1
- ? `To much, your current balance is ${Amounts.stringifyValue(balance)}`
+ ? `Too much, your current balance is ${Amounts.stringifyValue(balance)}`
: undefined;
const totalToDeposit = parsedAmount
@@ -159,7 +158,7 @@ export function View({
: Amounts.getZero(currency);
const unableToDeposit =
- Amounts.isZero(totalToDeposit) && feeHasBeenCalculated;
+ Amounts.isZero(totalToDeposit) || fee === undefined || error !== undefined;
return (
<Fragment>
@@ -224,12 +223,13 @@ export function View({
</section>
<footer>
<div />
- <ButtonPrimary
- disabled={unableToDeposit}
- onClick={() => onSend(accountURI, amountStr)}
- >
- Deposit {Amounts.stringifyValue(totalToDeposit)} {currency}
- </ButtonPrimary>
+ {unableToDeposit ? (
+ <ButtonPrimary disabled>Deposit</ButtonPrimary>
+ ) : (
+ <ButtonPrimary onClick={() => onSend(accountURI, amountStr)}>
+ Deposit {Amounts.stringifyValue(totalToDeposit)} {currency}
+ </ButtonPrimary>
+ )}
</footer>
</Fragment>
);
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts
index dc96efc75..d02a017a1 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -376,6 +376,10 @@ export function exportDB(): Promise<any> {
return callBackend("exportDb", {});
}
+export function importDB(dump: any): Promise<void> {
+ return callBackend("importDb", { dump })
+}
+
export function onUpdateNotification(messageTypes: Array<NotificationType>, doCallback: () => void): () => void {
// eslint-disable-next-line no-undef
const port = chrome.runtime.connect({ name: "notifications" });