session-ios/SessionSnodeKit/Database/LegacyDatabase/SSKLegacy.swift

69 lines
2.4 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
//
// stringlint:disable
import Foundation
public enum SSKLegacy {
// MARK: - Collections and Keys
internal static let swarmCollectionPrefix = "LokiSwarmCollection-"
internal static let lastSnodePoolRefreshDateKey = "lastSnodePoolRefreshDate"
internal static let snodePoolCollection = "LokiSnodePoolCollection"
internal static let onionRequestPathCollection = "LokiOnionRequestPathCollection"
internal static let lastSnodePoolRefreshDateCollection = "LokiLastSnodePoolRefreshDateCollection"
internal static let lastMessageHashCollection = "LokiLastMessageHashCollection"
internal static let receivedMessagesCollection = "LokiReceivedMessagesCollection"
// MARK: - Types
public typealias LegacyOnionRequestAPIPath = [Snode]
@objc(Snode)
public final class Snode: NSObject, NSCoding {
public let address: String
public let port: UInt16
public let publicKeySet: KeySet
// MARK: - Nested Types
public struct KeySet {
public let ed25519Key: String
public let x25519Key: String
}
// MARK: - NSCoding
public init?(coder: NSCoder) {
address = coder.decodeObject(forKey: "address") as! String
port = coder.decodeObject(forKey: "port") as! UInt16
guard
let idKey = coder.decodeObject(forKey: "idKey") as? String,
let encryptionKey = coder.decodeObject(forKey: "encryptionKey") as? String
else { return nil }
publicKeySet = KeySet(ed25519Key: idKey, x25519Key: encryptionKey)
super.init()
}
public func encode(with coder: NSCoder) {
fatalError("encode(with:) should never be called for legacy types")
}
// Note: The 'isEqual' and 'hash' overrides are both needed to ensure the migration
// doesn't try to insert duplicate SNode entries into the new database (which would
// result in unique key constraint violations)
override public func isEqual(_ other: Any?) -> Bool {
guard let other = other as? Snode else { return false }
return address == other.address && port == other.port
}
override public var hash: Int {
return address.hashValue ^ port.hashValue
}
}
}