aboutsummaryrefslogtreecommitdiff
path: root/packages/exchange-backoffice-ui/src/pages/Officer.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/exchange-backoffice-ui/src/pages/Officer.tsx')
-rw-r--r--packages/exchange-backoffice-ui/src/pages/Officer.tsx53
1 files changed, 33 insertions, 20 deletions
diff --git a/packages/exchange-backoffice-ui/src/pages/Officer.tsx b/packages/exchange-backoffice-ui/src/pages/Officer.tsx
index 39e368b37..40ec33018 100644
--- a/packages/exchange-backoffice-ui/src/pages/Officer.tsx
+++ b/packages/exchange-backoffice-ui/src/pages/Officer.tsx
@@ -1,4 +1,11 @@
-import { AbsoluteTime, TranslatedString } from "@gnu-taler/taler-util";
+import {
+ AbsoluteTime,
+ Codec,
+ TranslatedString,
+ buildCodecForObject,
+ codecForAbsoluteTime,
+ codecForString,
+} from "@gnu-taler/taler-util";
import {
notifyError,
notifyInfo,
@@ -10,12 +17,25 @@ import { VNode, h } from "preact";
import { useEffect, useState } from "preact/hooks";
import {
Account,
+ LockedAccount,
UnwrapKeyError,
createNewAccount,
unlockAccount,
} from "../account.js";
import { createNewForm } from "../handlers/forms.js";
-import { Officer, codecForOfficer } from "../Dashboard.js";
+
+export interface Officer {
+ account: LockedAccount;
+ when: AbsoluteTime;
+}
+
+const codecForLockedAccount = codecForString() as Codec<LockedAccount>;
+
+export const codecForOfficer = (): Codec<Officer> =>
+ buildCodecForObject<Officer>()
+ .property("account", codecForLockedAccount) // FIXME
+ .property("when", codecForAbsoluteTime) // FIXME
+ .build("Officer");
export function Officer() {
const password = useMemoryStorage("password");
@@ -29,7 +49,7 @@ export function Officer() {
return;
}
- unlockAccount(officer.value.salt, officer.value.key, password.value)
+ unlockAccount(officer.value.account, password.value)
.then((keys) => setKeys(keys ?? { accountId: "", pub: "" }))
.catch((e) => {
if (e instanceof UnwrapKeyError) {
@@ -38,16 +58,12 @@ export function Officer() {
});
}, [officer.value, password.value]);
- if (
- officer.value === undefined ||
- !officer.value.key ||
- !officer.value.salt
- ) {
+ if (officer.value === undefined || !officer.value.account) {
return (
<CreateAccount
- onNewAccount={(salt, key, pwd) => {
+ onNewAccount={(account, pwd) => {
password.update(pwd);
- officer.update({ salt, when: AbsoluteTime.now(), key });
+ officer.update({ account, when: AbsoluteTime.now() });
}}
/>
);
@@ -56,8 +72,7 @@ export function Officer() {
if (password.value === undefined) {
return (
<UnlockAccount
- salt={officer.value.salt}
- sealedKey={officer.value.key}
+ lockedAccount={officer.value.account}
onAccountUnlocked={(pwd) => {
password.update(pwd);
}}
@@ -114,7 +129,7 @@ export function Officer() {
function CreateAccount({
onNewAccount,
}: {
- onNewAccount: (salt: string, accountId: string, password: string) => void;
+ onNewAccount: (account: LockedAccount, password: string) => void;
}): VNode {
const { i18n } = useTranslationContext();
const Form = createNewForm<{
@@ -158,8 +173,8 @@ function CreateAccount({
};
}}
onSubmit={async (v) => {
- const keys = await createNewAccount(v.password);
- onNewAccount(keys.salt, keys.accountId, v.password);
+ const account = await createNewAccount(v.password);
+ onNewAccount(account, v.password);
}}
>
<div class="mb-4">
@@ -198,12 +213,10 @@ function CreateAccount({
}
function UnlockAccount({
- salt,
- sealedKey,
+ lockedAccount,
onAccountUnlocked,
}: {
- salt: string;
- sealedKey: string;
+ lockedAccount: LockedAccount;
onAccountUnlocked: (password: string) => void;
}): VNode {
const Form = createNewForm<{
@@ -228,7 +241,7 @@ function UnlockAccount({
onSubmit={async (v) => {
try {
// test login
- await unlockAccount(salt, sealedKey, v.password);
+ await unlockAccount(lockedAccount, v.password);
onAccountUnlocked(v.password ?? "");
notifyInfo("Account unlocked" as TranslatedString);