aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui/src/hooks/useOfficer.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/aml-backoffice-ui/src/hooks/useOfficer.ts')
-rw-r--r--packages/aml-backoffice-ui/src/hooks/useOfficer.ts47
1 files changed, 40 insertions, 7 deletions
diff --git a/packages/aml-backoffice-ui/src/hooks/useOfficer.ts b/packages/aml-backoffice-ui/src/hooks/useOfficer.ts
index 0747170e8..64cf79cc9 100644
--- a/packages/aml-backoffice-ui/src/hooks/useOfficer.ts
+++ b/packages/aml-backoffice-ui/src/hooks/useOfficer.ts
@@ -3,10 +3,15 @@ import {
Codec,
LockedAccount,
OfficerAccount,
+ OfficerId,
+ SigningKey,
buildCodecForObject,
codecForAbsoluteTime,
codecForString,
+ codecOptional,
createNewOfficerAccount,
+ decodeCrock,
+ encodeCrock,
unlockOfficerAccount,
} from "@gnu-taler/taler-util";
import {
@@ -14,6 +19,7 @@ import {
useLocalStorage,
useMemoryStorage,
} from "@gnu-taler/web-util/browser";
+import { useMemo } from "preact/hooks";
export interface Officer {
account: LockedAccount;
@@ -22,6 +28,17 @@ export interface Officer {
const codecForLockedAccount = codecForString() as Codec<LockedAccount>;
+type OfficerAccountString = {
+ id: string,
+ strKey: string;
+}
+
+export const codecForOfficerAccount = (): Codec<OfficerAccountString> =>
+ buildCodecForObject<OfficerAccountString>()
+ .property("id", codecForString()) // FIXME
+ .property("strKey", codecForString()) // FIXME
+ .build("OfficerAccount");
+
export const codecForOfficer = (): Codec<Officer> =>
buildCodecForObject<Officer>()
.property("account", codecForLockedAccount) // FIXME
@@ -47,26 +64,41 @@ interface OfficerReady {
}
const OFFICER_KEY = buildStorageKey("officer", codecForOfficer());
+const DEV_ACCOUNT_KEY = buildStorageKey("account-dev", codecForOfficerAccount());
const ACCOUNT_KEY = "account";
export function useOfficer(): OfficerState {
- const accountStorage = useMemoryStorage<OfficerAccount>(ACCOUNT_KEY);
- const officerStorage = useLocalStorage(OFFICER_KEY);
+ // dev account, is save when reloaded.
+ const accountStorage = useLocalStorage(DEV_ACCOUNT_KEY);
+ const account = useMemo(() => {
+ if (!accountStorage.value) return undefined
+ return {
+ id: accountStorage.value.id as OfficerId,
+ signingKey: decodeCrock(accountStorage.value.strKey) as SigningKey
+ }
+ }, [accountStorage.value])
+
+
+ // const accountStorage = useMemoryStorage<OfficerAccount>(ACCOUNT_KEY);
+ // const account = accountStorage.value;
+ const officerStorage = useLocalStorage(OFFICER_KEY);
const officer = officerStorage.value;
- const account = accountStorage.value;
+
if (officer === undefined) {
return {
state: "not-found",
create: async (pwd: string) => {
- const { id, safe, signingKey } = await createNewOfficerAccount(pwd);
+ const { id, safe, signingKey } = await createNewOfficerAccount(pwd);
officerStorage.update({
account: safe,
when: AbsoluteTime.now(),
});
- accountStorage.update({ id, signingKey });
+ // accountStorage.update({ id, signingKey });
+ const strKey = encodeCrock(signingKey)
+ accountStorage.update({id, strKey })
},
};
}
@@ -79,14 +111,15 @@ export function useOfficer(): OfficerState {
},
tryUnlock: async (pwd: string) => {
const ac = await unlockOfficerAccount(officer.account, pwd);
- accountStorage.update(ac);
+ // accountStorage.update(ac);
+ accountStorage.update({id: ac.id, strKey: encodeCrock(ac.signingKey)})
},
};
}
return {
state: "ready",
- account: account,
+ account,
lock: () => {
accountStorage.reset();
},