Prevent read on unlogged server

This commit is contained in:
Djorkaeff Alexandre 2024-01-22 18:17:55 -03:00
parent adb32a3d3d
commit e638759afb
3 changed files with 27 additions and 24 deletions

View File

@ -14,25 +14,25 @@ extension MMKV {
return mmkv
}
func userToken(for userId: String) -> String {
func userToken(for userId: String) -> String? {
guard let userToken = string(forKey: "reactnativemeteor_usertoken-\(userId)") else {
fatalError("userToken is nil for userId \(userId)")
return nil
}
return userToken
}
func userId(for server: String) -> String {
func userId(for server: String) -> String? {
guard let userId = string(forKey: "reactnativemeteor_usertoken-\(server)") else {
fatalError("userId is nil for server \(server)")
return nil
}
return userId
}
func privateKey(for server: String) -> String {
func privateKey(for server: String) -> String? {
guard let privateKey = string(forKey: "\(server)-RC_E2E_PRIVATE_KEY") else {
fatalError("privateKey is nil for server \(server)")
return nil
}
return privateKey

View File

@ -1,23 +1,24 @@
import Foundation
struct Credentials {
let userId: String
let userToken: String
let userId: String
let userToken: String
}
final class Storage {
static let shared = Storage()
private let mmkv = MMKV.build()
func getCredentials(server: String) -> Credentials {
let userId = mmkv.userId(for: server)
let userToken = mmkv.userToken(for: userId)
return .init(userId: userId, userToken: userToken)
}
func getPrivateKey(server: String) -> String {
mmkv.privateKey(for: server)
}
static let shared = Storage()
private let mmkv = MMKV.build()
func getCredentials(server: String) -> Credentials? {
guard let userId = mmkv.userId(for: server), let userToken = mmkv.userToken(for: userId) else {
return nil
}
return .init(userId: userId, userToken: userToken)
}
func getPrivateKey(server: String) -> String? {
mmkv.privateKey(for: server)
}
}

View File

@ -41,8 +41,10 @@ final class WatchConnection: NSObject {
let serversQuery = database.query(raw: "select * from servers") as [DBServer]
let servers = serversQuery.compactMap { item -> WatchMessage.Server? in
let userId = mmkv.userId(for: item.identifier)
let userToken = mmkv.userToken(for: userId)
guard let userId = mmkv.userId(for: item.identifier), let userToken = mmkv.userToken(for: userId) else {
return nil
}
let clientSSL = mmkv.clientSSL(for: item.url)
let usersQuery = database.query(raw: "select * from users where token == ? limit 1", [userToken]) as [DBUser]