mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Expose the store passphrase as Data instead of a base64 string.
This commit is contained in:
@@ -13,7 +13,7 @@ import MatrixRustSDK
|
||||
class AuthenticationService: AuthenticationServiceProtocol {
|
||||
private var client: ClientProtocol?
|
||||
private var sessionDirectories: SessionDirectories
|
||||
private let passphrase: String
|
||||
private let passphrase: Data
|
||||
|
||||
private let userSessionStore: UserSessionStoreProtocol
|
||||
private let classicAppManager: ClassicAppManagerProtocol?
|
||||
@@ -40,7 +40,7 @@ class AuthenticationService: AuthenticationServiceProtocol {
|
||||
appSettings: AppSettings,
|
||||
appHooks: AppHooks) {
|
||||
sessionDirectories = .init()
|
||||
passphrase = encryptionKeyProvider.generateKey().base64EncodedString()
|
||||
passphrase = encryptionKeyProvider.generateKey()
|
||||
|
||||
self.userSessionStore = userSessionStore
|
||||
self.classicAppManager = classicAppManager
|
||||
|
||||
@@ -16,7 +16,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
#if IS_MAIN_APP
|
||||
func makeAuthenticationClient(serverNameOrBaseURL: String,
|
||||
sessionDirectories: SessionDirectories,
|
||||
passphrase: String,
|
||||
passphrase: Data,
|
||||
clientSessionDelegate: ClientSessionDelegate,
|
||||
appSettings: AppSettings,
|
||||
appHooks: AppHooks) async throws -> ClientProtocol {
|
||||
@@ -28,7 +28,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
threadsEnabled: appSettings.threadsEnabled)
|
||||
.enableAutomaticBackPagination(enableAutomaticBackPagination: true)
|
||||
.sqliteStore(config: .init(dataPath: sessionDirectories.dataPath, cachePath: sessionDirectories.cachePath)
|
||||
.highEntropyPassphrase(passphrase: Data(base64Encoded: passphrase), base64Variant: .padded))
|
||||
.highEntropyPassphrase(passphrase: passphrase, base64Variant: .padded))
|
||||
.serverNameOrHomeserverUrl(serverNameOrUrl: serverNameOrBaseURL)
|
||||
|
||||
return try await build(builder, for: .authentication, appHooks: appHooks)
|
||||
@@ -67,9 +67,9 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
.enableAutomaticBackPagination(enableAutomaticBackPagination: true)
|
||||
.sqliteStore(config: .init(dataPath: credentials.restorationToken.sessionDirectories.dataPath,
|
||||
cachePath: credentials.restorationToken.sessionDirectories.cachePath)
|
||||
.highEntropyPassphrase(passphrase: Data(base64Encoded: credentials.restorationToken.passphrase), base64Variant: .padded))
|
||||
.highEntropyPassphrase(passphrase: credentials.restorationToken.passphrase, base64Variant: .padded))
|
||||
.withSearchIndexStore(path: credentials.restorationToken.sessionDirectories.dataPath,
|
||||
password: credentials.restorationToken.passphrase)
|
||||
password: credentials.restorationToken.passphrase.base64EncodedString())
|
||||
.homeserverUrl(url: homeserverURL)
|
||||
|
||||
return try await build(builder, for: .restoration(credentials.restorationToken.session, .all), appHooks: appHooks)
|
||||
@@ -95,7 +95,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
.systemIsMemoryConstrained()
|
||||
.sqliteStore(config: .init(dataPath: credentials.restorationToken.sessionDirectories.dataPath,
|
||||
cachePath: credentials.restorationToken.sessionDirectories.cachePath)
|
||||
.highEntropyPassphrase(passphrase: Data(base64Encoded: credentials.restorationToken.passphrase), base64Variant: .padded))
|
||||
.highEntropyPassphrase(passphrase: credentials.restorationToken.passphrase, base64Variant: .padded))
|
||||
.homeserverUrl(url: homeserverURL)
|
||||
|
||||
return try await build(builder, for: .restoration(credentials.restorationToken.session, .one(roomId: roomID)), appHooks: appHooks)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import MatrixRustSDK
|
||||
|
||||
// sourcery: AutoMockable
|
||||
@@ -14,7 +15,7 @@ nonisolated protocol ClientFactoryProtocol {
|
||||
#if IS_MAIN_APP
|
||||
func makeAuthenticationClient(serverNameOrBaseURL: String,
|
||||
sessionDirectories: SessionDirectories,
|
||||
passphrase: String,
|
||||
passphrase: Data,
|
||||
clientSessionDelegate: ClientSessionDelegate,
|
||||
appSettings: AppSettings,
|
||||
appHooks: AppHooks) async throws -> ClientProtocol
|
||||
|
||||
@@ -16,7 +16,7 @@ enum RestorationTokenError: Error {
|
||||
nonisolated struct RestorationToken: Equatable {
|
||||
let session: MatrixRustSDK.Session
|
||||
let sessionDirectories: SessionDirectories
|
||||
let passphrase: String
|
||||
let passphrase: Data
|
||||
let pusherNotificationClientIdentifier: String?
|
||||
|
||||
enum CodingKeys: CodingKey {
|
||||
@@ -42,9 +42,14 @@ nonisolated extension RestorationToken: Codable {
|
||||
SessionDirectories(dataDirectory: dataDirectory)
|
||||
}
|
||||
|
||||
let base64Passphrase = try container.decode(String.self, forKey: .passphrase)
|
||||
guard let passphrase = Data(base64Encoded: base64Passphrase) else {
|
||||
throw DecodingError.dataCorruptedError(forKey: .passphrase, in: container, debugDescription: "The passphrase isn't valid base64.")
|
||||
}
|
||||
|
||||
self = try .init(session: session,
|
||||
sessionDirectories: sessionDirectories,
|
||||
passphrase: container.decode(String.self, forKey: .passphrase),
|
||||
passphrase: passphrase,
|
||||
pusherNotificationClientIdentifier: container.decodeIfPresent(String.self, forKey: .pusherNotificationClientIdentifier))
|
||||
}
|
||||
|
||||
@@ -53,7 +58,7 @@ nonisolated extension RestorationToken: Codable {
|
||||
try container.encode(session, forKey: .session)
|
||||
try container.encode(sessionDirectories.dataDirectory, forKey: .sessionDirectory)
|
||||
try container.encode(sessionDirectories.cacheDirectory, forKey: .cacheDirectory)
|
||||
try container.encode(passphrase, forKey: .passphrase)
|
||||
try container.encode(passphrase.base64EncodedString(), forKey: .passphrase)
|
||||
try container.encode(pusherNotificationClientIdentifier, forKey: .pusherNotificationClientIdentifier)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ class UserSessionStore: UserSessionStoreProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func userSession(for client: ClientProtocol, sessionDirectories: SessionDirectories, passphrase: String) async -> Result<UserSessionProtocol, UserSessionStoreError> {
|
||||
func userSession(for client: ClientProtocol, sessionDirectories: SessionDirectories, passphrase: Data) async -> Result<UserSessionProtocol, UserSessionStoreError> {
|
||||
do {
|
||||
let session = try client.session()
|
||||
let userID = try client.userId()
|
||||
|
||||
@@ -34,7 +34,7 @@ protocol UserSessionStoreProtocol {
|
||||
func restoreUserSession() async -> Result<UserSessionProtocol, UserSessionStoreError>
|
||||
|
||||
/// Creates a user session for a new client from the SDK along with the passphrase used for the data stores.
|
||||
func userSession(for client: ClientProtocol, sessionDirectories: SessionDirectories, passphrase: String) async -> Result<UserSessionProtocol, UserSessionStoreError>
|
||||
func userSession(for client: ClientProtocol, sessionDirectories: SessionDirectories, passphrase: Data) async -> Result<UserSessionProtocol, UserSessionStoreError>
|
||||
|
||||
/// Logs out of the specified session.
|
||||
func logout(userSession: UserSessionProtocol)
|
||||
|
||||
Reference in New Issue
Block a user