wip
This commit is contained in:
parent
841387aab7
commit
e39dbb2e49
|
@ -27,14 +27,15 @@ final class ClientMartinOMEMO {
|
|||
OMEMOPreKey.wipe(account: credentials.bareJid)
|
||||
OMEMOSignedPreKey.wipe(account: credentials.bareJid)
|
||||
OMEMOIdentity.wipe(account: credentials.bareJid)
|
||||
UserSettings.omemoDeviceId = 0
|
||||
UserSettings.set(omemoDeviceId: 0, for: credentials.bareJid)
|
||||
}
|
||||
|
||||
let hasKeyPair = keyPair() != nil
|
||||
if wipe || UserSettings.omemoDeviceId == 0 || !hasKeyPair {
|
||||
let deviceId = UserSettings.get(omemoDeviceIdFor: credentials.bareJid)
|
||||
if wipe || deviceId == 0 || !hasKeyPair {
|
||||
let regId: UInt32 = context.generateRegistrationId()
|
||||
let address = SignalAddress(name: credentials.bareJid, deviceId: Int32(regId))
|
||||
UserSettings.omemoDeviceId = regId
|
||||
UserSettings.set(omemoDeviceId: regId, for: credentials.bareJid)
|
||||
|
||||
guard let keyPair = SignalIdentityKeyPair.generateKeyPair(context: context), let publicKey = keyPair.publicKey else {
|
||||
return false
|
||||
|
@ -45,7 +46,6 @@ final class ClientMartinOMEMO {
|
|||
|
||||
return save(address: address, fingerprint: fingerprint, own: true, data: keyPair.serialized())
|
||||
}
|
||||
print("omemoDeviceId \(UserSettings.omemoDeviceId)")
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -160,7 +160,7 @@ extension ClientMartinOMEMO: SignalSessionStoreProtocol {
|
|||
// MARK: - Identity
|
||||
extension ClientMartinOMEMO: SignalIdentityKeyStoreProtocol {
|
||||
func keyPair() -> (any MartinOMEMO.SignalIdentityKeyPairProtocol)? {
|
||||
let deviceId = UserSettings.omemoDeviceId
|
||||
let deviceId = UserSettings.get(omemoDeviceIdFor: credentials.bareJid)
|
||||
guard deviceId != 0 else {
|
||||
return nil
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ extension ClientMartinOMEMO: SignalIdentityKeyStoreProtocol {
|
|||
}
|
||||
|
||||
func localRegistrationId() -> UInt32 {
|
||||
UserSettings.omemoDeviceId
|
||||
UserSettings.get(omemoDeviceIdFor: credentials.bareJid)
|
||||
}
|
||||
|
||||
func save(identity: MartinOMEMO.SignalAddress, key: (any MartinOMEMO.SignalIdentityKeyProtocol)?) -> Bool {
|
||||
|
|
|
@ -121,7 +121,7 @@ extension Client {
|
|||
}
|
||||
|
||||
func disconnect() {
|
||||
_ = connection.disconnect()
|
||||
_ = connection.disconnect(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,14 +69,14 @@ extension Database {
|
|||
}
|
||||
|
||||
try db.create(table: "omemo_identities", options: [.ifNotExists]) { table in
|
||||
table.column("account", .text).notNull()
|
||||
table.column("account", .text).notNull().collate(.nocase)
|
||||
table.column("name", .text).notNull()
|
||||
table.column("deviceId", .integer).notNull()
|
||||
table.column("fingerprint", .text).notNull()
|
||||
table.column("key", .blob).notNull()
|
||||
table.column("own", .integer).notNull()
|
||||
table.column("status", .integer).notNull()
|
||||
table.primaryKey(["account", "name", "fingerprint"], onConflict: .ignore)
|
||||
table.uniqueKey(["account", "name", "fingerprint"], onConflict: .ignore)
|
||||
}
|
||||
|
||||
try db.create(table: "omemo_pre_keys", options: [.ifNotExists]) { table in
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
import Foundation
|
||||
|
||||
// Wrapper
|
||||
@propertyWrapper
|
||||
private struct Storage<T> {
|
||||
private let key: String
|
||||
private let defaultValue: T
|
||||
|
||||
init(key: String, defaultValue: T) {
|
||||
self.key = key
|
||||
self.defaultValue = defaultValue
|
||||
}
|
||||
|
||||
var wrappedValue: T {
|
||||
get {
|
||||
// Read value from UserDefaults
|
||||
UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
|
||||
}
|
||||
set {
|
||||
// Set value to UserDefaults
|
||||
UserDefaults.standard.set(newValue, forKey: key)
|
||||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Storage
|
||||
private let kBase = "conversations.classic.user.defaults"
|
||||
private let kOmemoDevicesIds = "\(kBase).omemoDevicesIds"
|
||||
private let kSecureChatsByDefault = "\(kBase).secureChatsByDefault"
|
||||
|
||||
enum UserSettings {
|
||||
@Storage(key: kOmemoDevicesIds, defaultValue: [:])
|
||||
private static var omemoDevicesIds: [String: UInt32]
|
||||
|
||||
@Storage(key: kSecureChatsByDefault, defaultValue: false)
|
||||
private static var vSecureChatsByDefault: Bool
|
||||
}
|
||||
|
||||
// Public
|
||||
extension UserSettings {
|
||||
static func reset() {
|
||||
omemoDevicesIds = [:]
|
||||
vSecureChatsByDefault = false
|
||||
}
|
||||
|
||||
static func set(omemoDeviceId: UInt32, for account: String) {
|
||||
var dict = UserSettings.omemoDevicesIds
|
||||
dict[account] = omemoDeviceId
|
||||
UserSettings.omemoDevicesIds = dict
|
||||
}
|
||||
|
||||
static func get(omemoDeviceIdFor account: String) -> UInt32 {
|
||||
UserSettings.omemoDevicesIds[account] ?? 0
|
||||
}
|
||||
|
||||
static var secureChatsByDefault: Bool {
|
||||
get { UserSettings.vSecureChatsByDefault }
|
||||
set { UserSettings.vSecureChatsByDefault = newValue }
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
import Foundation
|
||||
|
||||
// Wrapper
|
||||
@propertyWrapper
|
||||
struct Storage<T> {
|
||||
private let key: String
|
||||
private let defaultValue: T
|
||||
|
||||
init(key: String, defaultValue: T) {
|
||||
self.key = key
|
||||
self.defaultValue = defaultValue
|
||||
}
|
||||
|
||||
var wrappedValue: T {
|
||||
get {
|
||||
// Read value from UserDefaults
|
||||
UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
|
||||
}
|
||||
set {
|
||||
// Set value to UserDefaults
|
||||
UserDefaults.standard.set(newValue, forKey: key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Storage
|
||||
private let kOmemoDeviceId = "conversations.classic.user.defaults.omemoDeviceId"
|
||||
private let kSecureChatsByDefault = "conversations.classic.user.defaults.secureChatsByDefault"
|
||||
|
||||
enum UserSettings {
|
||||
@Storage(key: kOmemoDeviceId, defaultValue: 0)
|
||||
static var omemoDeviceId: UInt32
|
||||
|
||||
@Storage(key: kSecureChatsByDefault, defaultValue: false)
|
||||
static var secureChatsByDefault: Bool
|
||||
|
||||
static func reset() {
|
||||
omemoDeviceId = 0
|
||||
secureChatsByDefault = false
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue