From 8d44115195bced2dae5b322ee84144ab7afa7648 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Mon, 17 Aug 2020 14:34:47 +1000 Subject: [PATCH] fix invalid auth token handling with onion request --- .../Loki/View Controllers/JoinPublicChatVC.swift | 2 +- SignalServiceKit/src/Loki/API/DotNetAPI.swift | 14 -------------- .../Loki/API/Onion Requests/OnionRequestAPI.swift | 4 ++-- .../src/Loki/API/Open Groups/PublicChatAPI.swift | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift index bcff10242..0099344a0 100644 --- a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift +++ b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift @@ -156,7 +156,7 @@ final class JoinPublicChatVC : BaseVC, UIPageViewControllerDataSource, UIPageVie self?.dismiss(animated: true, completion: nil) // Dismiss the loader var title = "Couldn't Join" var message = "" - if case HTTP.Error.httpRequestFailed(let statusCode, _) = error, statusCode == 401 || statusCode == 403 { + if case OnionRequestAPI.Error.httpRequestFailedAtTargetSnode(statusCode: let statusCode, json: _) = error, statusCode == 401 || statusCode == 403 { title = "Unauthorized" message = "Please ask the open group operator to add you to the group." } diff --git a/SignalServiceKit/src/Loki/API/DotNetAPI.swift b/SignalServiceKit/src/Loki/API/DotNetAPI.swift index 696a35fe7..643338995 100644 --- a/SignalServiceKit/src/Loki/API/DotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/DotNetAPI.swift @@ -187,17 +187,3 @@ public class DotNetAPI : NSObject { } } } - -// MARK: Error Handling -internal extension Promise { - - internal func handlingInvalidAuthTokenIfNeeded(for server: String) -> Promise { - return recover2 { error -> Promise in - if case HTTP.Error.httpRequestFailed(let statusCode, _) = error, statusCode == 401 || statusCode == 403 { - print("[Loki] Auth token for: \(server) expired; dropping it.") - DotNetAPI.removeAuthToken(for: server) - } - throw error - } - } -} diff --git a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift index b96eddd53..ea4883dd9 100644 --- a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift +++ b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift @@ -26,7 +26,7 @@ public enum OnionRequestAPI { } // MARK: Error - internal enum Error : LocalizedError { + public enum Error : LocalizedError { case httpRequestFailedAtTargetSnode(statusCode: UInt, json: JSON) case insufficientSnodes case invalidURL @@ -35,7 +35,7 @@ public enum OnionRequestAPI { case snodePublicKeySetMissing case unsupportedSnodeVersion(String) - internal var errorDescription: String? { + public var errorDescription: String? { switch self { case .httpRequestFailedAtTargetSnode(let statusCode): return "HTTP request failed at target snode with status code: \(statusCode)." case .insufficientSnodes: return "Couldn't find enough snodes to build a path." diff --git a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift index b41ea757c..dd3226e84 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatAPI.swift @@ -523,3 +523,17 @@ public final class PublicChatAPI : DotNetAPI { return moderators[server]?[channel]?.contains(hexEncodedPublicString) ?? false } } + +// MARK: Error Handling +internal extension Promise { + + internal func handlingInvalidAuthTokenIfNeeded(for server: String) -> Promise { + return recover2 { error -> Promise in + if case OnionRequestAPI.Error.httpRequestFailedAtTargetSnode(let statusCode, _) = error, statusCode == 401 || statusCode == 403 { + print("[Loki] Auth token for: \(server) expired; dropping it.") + PublicChatAPI.removeAuthToken(for: server) + } + throw error + } + } +}