diff --git a/js/app.js b/js/app.js index a6a5d0f8..322db86a 100644 --- a/js/app.js +++ b/js/app.js @@ -3499,6 +3499,13 @@ class Application { return false; } + const sessionActorPubkey = this.normalizeHexPubkey( + nostrClient?.sessionActor?.pubkey, + ); + if (sessionActorPubkey && sessionActorPubkey !== normalizedPubkey) { + return false; + } + return true; } diff --git a/tests/app/is-user-logged-in.test.mjs b/tests/app/is-user-logged-in.test.mjs index 2ad3c09b..82ee98f6 100644 --- a/tests/app/is-user-logged-in.test.mjs +++ b/tests/app/is-user-logged-in.test.mjs @@ -89,3 +89,22 @@ test("isUserLoggedIn guards against mismatched nostrClient state", () => { nostrClient.sessionActor = previousSessionActor; } }); + +test("isUserLoggedIn rejects mismatched session actor pubkeys", () => { + const previousPubkey = nostrClient.pubkey; + const previousSessionActor = nostrClient.sessionActor; + + try { + const pubkey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + nostrClient.pubkey = pubkey; + nostrClient.sessionActor = { + pubkey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + }; + + const app = createTestApp(pubkey); + assert.equal(app.isUserLoggedIn(), false); + } finally { + nostrClient.pubkey = previousPubkey; + nostrClient.sessionActor = previousSessionActor; + } +});