Page MenuHomePhabricator

[lib] Introduce sessionRecoveryInProgress to ConnectionInfo
ClosedPublic

Authored by ashoat on Feb 5 2024, 12:25 PM.
Tags
None
Referenced Files
F3361358: D10946.id36738.diff
Sun, Nov 24, 4:46 PM
F3361070: D10946.diff
Sun, Nov 24, 3:10 PM
Unknown Object (File)
Tue, Oct 29, 10:48 AM
Unknown Object (File)
Oct 4 2024, 3:59 AM
Unknown Object (File)
Oct 4 2024, 3:59 AM
Unknown Object (File)
Oct 4 2024, 3:58 AM
Unknown Object (File)
Oct 4 2024, 3:58 AM
Unknown Object (File)
Sep 14 2024, 10:36 PM
Subscribers
None

Details

Summary

Linear task: ENG-6586

This diff adds a sessionRecoveryInProgress field to the keyserver ConnectionInfo. We don't need to migrate anything because ConnectionInfo is not persisted.

Test Plan
  1. Test successful session invalidation in single keyserver world
    1. I prevented the Socket from rendering by adding a return null line before the other returns in KeyserverConnectionHandler. This avoided the Socket triggering session recovery.
    2. I started the iOS simulator and logged in using a test user.
    3. I opened the Redux Dev Tools
    4. I deleted the test user's cookie from the MariaDB database: DELETE FROM cookies WHERE user = 6390578 AND platform = 'ios'
    5. I sent a message as the test user
    6. I confirmed that session recovery was triggered in the Redux dev tools (and through some console logs)
    7. I repeated the process above several times to make sure it consistently worked multiple times in a single run
    8. I confirmed that the message was delivered "transparently" (without any visible issues, or evidence of session invalidation)
  2. Test failed session invalidation in single keyserver world
    1. I ran through the above test, but I hacked legacy-recover-keyserver-session.js to use the wrong password so the session recovery would fail
    2. I confirmed that I was logged out, and that an alert appeared explaining that my session was invalidated
  3. Test logging out during session recovery
    1. I triggered an infinite loop of session recoveries by running through the above test, but swallowing the SET_NEW_SESSION
    2. I logged out of the app
    3. I confirmed that the session recovery loop stopped, and that I was logged out successfully

Diff Detail

Repository
rCOMM Comm
Lint
Lint Not Applicable
Unit
Tests Not Applicable