import db from the wallet web extension

This commit is contained in:
Sebastian 2022-01-13 01:33:24 -03:00
parent 4b289cde5d
commit cea0ac02b6
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1
5 changed files with 54 additions and 10 deletions

View File

@ -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")

View File

@ -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,

View File

@ -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(

View File

@ -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>
);

View File

@ -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" });