Create sessions through the user session manager

Sign-in now creates and stores its session through the
UserSessionManagerProtocol rather than the UserSessionStore, so the
AppCoordinator no longer holds the store.

- The manager forwards clientSessionDelegate and
  userSession(for:sessionDirectories:passphrase:) to its store. As with
  restoring, the new session isn't registered until the AppCoordinator
  adds it.
- AuthenticationService takes the manager, for both sign-in and soft
  logout.
- The store mock's configuration moves to the manager mock.
This commit is contained in:
Mauro Romito
2026-10-08 21:09:09 +02:00
committed by Mauro
parent 60db364436
commit 5792a8ba5c
11 changed files with 91 additions and 30 deletions
@@ -18,7 +18,6 @@ import Version
class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDelegate, NotificationManagerDelegate, SecureWindowManagerDelegate {
private let stateMachine: AppCoordinatorStateMachine
private let navigationRootCoordinator: NavigationRootCoordinator
private let userSessionStore: UserSessionStoreProtocol
private let userSessionManager: UserSessionManagerProtocol
// periphery:ignore - retaining purpose
private let targetConfiguration: Target.ConfigurationResult
@@ -117,11 +116,11 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
let keychainController = KeychainController(service: .sessions,
accessGroup: InfoPlistReader.main.keychainAccessGroupIdentifier)
userSessionStore = UserSessionStore(keychainController: keychainController,
appSettings: appSettings,
analyticsService: analyticsService,
appHooks: appHooks,
networkMonitor: networkMonitor)
let userSessionStore = UserSessionStore(keychainController: keychainController,
appSettings: appSettings,
analyticsService: analyticsService,
appHooks: appHooks,
networkMonitor: networkMonitor)
userSessionManager = UserSessionManager(userSessionStore: userSessionStore, appSettings: appSettings)
let appLockService = AppLockService(keychainController: keychainController, appSettings: appSettings)
@@ -681,7 +680,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
private func startAuthentication() {
let encryptionKeyProvider = EncryptionKeyProvider()
let classicAppManager = ClassicAppManager()
let authenticationService = AuthenticationService(userSessionStore: userSessionStore,
let authenticationService = AuthenticationService(userSessionManager: userSessionManager,
encryptionKeyProvider: encryptionKeyProvider,
classicAppManager: classicAppManager,
appSettings: appSettings,
@@ -736,7 +735,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
userDisplayName: userSession.clientProxy.userProfilePublisher.value.displayName ?? "",
deviceID: userSession.clientProxy.deviceID)
let authenticationService = AuthenticationService(userSessionStore: userSessionStore,
let authenticationService = AuthenticationService(userSessionManager: userSessionManager,
encryptionKeyProvider: EncryptionKeyProvider(),
classicAppManager: ClassicAppManager(),
appSettings: appSettings,