diff options
Diffstat (limited to 'packages/aml-backoffice-ui/src/hooks/useOfficer.ts')
-rw-r--r-- | packages/aml-backoffice-ui/src/hooks/useOfficer.ts | 47 |
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(); }, |