From 08770a4c167107bd6210f128293dc616abfb1a30 Mon Sep 17 00:00:00 2001 From: Sam Holmes Date: Mon, 19 May 2025 18:02:10 -0700 Subject: [PATCH] Fake duress mode settings while in duress mode --- CHANGELOG.md | 1 + src/core/account/account-api.ts | 11 +++++++++++ test/core/login/login.test.ts | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62387979..900a4ba5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - fixed: Disabling pin-login while in duress mode disables pin-login for the main login. - fixed: `loginWithPassword` bug disabled duress mode when doing an online login. +- fixed: Properly fake duress mode settings while in duress mode. ## 2.27.4 (2025-05-13) diff --git a/src/core/account/account-api.ts b/src/core/account/account-api.ts index 920eec6e..d4718cc1 100644 --- a/src/core/account/account-api.ts +++ b/src/core/account/account-api.ts @@ -108,6 +108,9 @@ export function makeAccountApi(ai: ApiInput, accountId: string): EdgeAccount { } } + // This is used to fake duress mode settings while in duress mode: + let fakeDuressModeSetup = false + const out: EdgeAccount = { on: onMethod, watch: watchMethod, @@ -188,6 +191,9 @@ export function makeAccountApi(ai: ApiInput, accountId: string): EdgeAccount { get canDuressLogin(): boolean { const { activeAppId } = accountState() + if (ai.props.state.clientInfo.duressEnabled) { + return fakeDuressModeSetup + } const duressAppId = activeAppId.endsWith('.duress') ? activeAppId : activeAppId + '.duress' @@ -257,6 +263,11 @@ export function makeAccountApi(ai: ApiInput, accountId: string): EdgeAccount { : activeAppId + '.duress' // Ensure the duress account exists: if (forDuressAccount) { + if (ai.props.state.clientInfo.duressEnabled) { + fakeDuressModeSetup = opts.enableLogin ?? opts.pin != null + ai.props.dispatch({ type: 'UPDATE_NEXT' }) + return '' + } await ensureAccountExists( ai, accountState().stashTree, diff --git a/test/core/login/login.test.ts b/test/core/login/login.test.ts index 3144e30a..f7957131 100644 --- a/test/core/login/login.test.ts +++ b/test/core/login/login.test.ts @@ -752,6 +752,27 @@ describe('duress', function () { expect(topicAccount.appId).equals('.duress') }) + it('fake duress mode settings while in duress mode', async function () { + const world = await makeFakeEdgeWorld([fakeUser], quiet) + const context = await world.makeEdgeContext(contextOptions) + let account = await context.loginWithPIN(fakeUser.username, fakeUser.pin) + await account.changePin({ pin: '0000', forDuressAccount: true }) + await account.logout() + + let duressAccount = await context.loginWithPIN(fakeUser.username, '0000') + expect(duressAccount.canDuressLogin).equals(false) + await duressAccount.changePin({ forDuressAccount: true, enableLogin: true }) + expect(duressAccount.canDuressLogin).equals(true) + await duressAccount.logout() + + duressAccount = await context.loginWithPIN(fakeUser.username, '0000') + expect(duressAccount.canDuressLogin).equals(false) + + // Doesn't impact main account: + account = await context.loginWithPIN(fakeUser.username, fakeUser.pin) + expect(account.canDuressLogin).equals(true) + }) + it('Avoid creating duress account when using loginWithPassword', async function () { const world = await makeFakeEdgeWorld([fakeUser], quiet) const context = await world.makeEdgeContext(contextOptions)