|
|
|
@ -3,7 +3,8 @@ import SignalMetadataKit
|
|
|
|
|
|
|
|
|
|
/// Base class for `LokiFileServerAPI` and `LokiPublicChatAPI`.
|
|
|
|
|
public class LokiDotNetAPI : NSObject {
|
|
|
|
|
|
|
|
|
|
public static var getAuthTokenPromises: [String:Promise<String>] = [:]
|
|
|
|
|
|
|
|
|
|
// MARK: Convenience
|
|
|
|
|
internal static let storage = OWSPrimaryStorage.shared()
|
|
|
|
|
internal static let userKeyPair = OWSIdentityManager.shared().identityKeyPair()!
|
|
|
|
@ -41,6 +42,23 @@ public class LokiDotNetAPI : NSObject {
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal static func getAuthToken(for server: String, in transaction: YapDatabaseReadWriteTransaction? = nil) -> Promise<String> {
|
|
|
|
|
if let promise = getAuthTokenPromises[server] { return promise }
|
|
|
|
|
if let token = getAuthTokenFromDatabase(for: server, in: transaction) {
|
|
|
|
|
return Promise.value(token)
|
|
|
|
|
} else {
|
|
|
|
|
let promise = requestNewAuthToken(for: server).then(on: DispatchQueue.global()) { submitAuthToken($0, for: server) }.map { token -> String in
|
|
|
|
|
setAuthToken(for: server, to: token, in: transaction)
|
|
|
|
|
return token
|
|
|
|
|
}
|
|
|
|
|
promise.done { _ in
|
|
|
|
|
getAuthTokenPromises[server] = nil
|
|
|
|
|
}
|
|
|
|
|
getAuthTokenPromises[server] = promise
|
|
|
|
|
return promise
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static func setAuthToken(for server: String, to newValue: String, in transaction: YapDatabaseReadWriteTransaction? = nil) {
|
|
|
|
|
func setAuthTokenInternal(in transaction: YapDatabaseReadWriteTransaction) {
|
|
|
|
@ -159,18 +177,6 @@ public class LokiDotNetAPI : NSObject {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: Internal API
|
|
|
|
|
internal static func getAuthToken(for server: String, in transaction: YapDatabaseReadWriteTransaction? = nil) -> Promise<String> {
|
|
|
|
|
if let token = getAuthTokenFromDatabase(for: server, in: transaction) {
|
|
|
|
|
return Promise.value(token)
|
|
|
|
|
} else {
|
|
|
|
|
return requestNewAuthToken(for: server).then(on: DispatchQueue.global()) { submitAuthToken($0, for: server) }.map { token -> String in
|
|
|
|
|
setAuthToken(for: server, to: token, in: transaction)
|
|
|
|
|
return token
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: Private API
|
|
|
|
|
private static func requestNewAuthToken(for server: String) -> Promise<String> {
|
|
|
|
|