From 5eca0234222b01c703cb9a8c4a07e46e4acfdcec Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Sun, 2 Feb 2020 11:47:38 +1100 Subject: [PATCH] Implement RSS feed proxying --- .../src/Loki/API/LokiHttpClient.swift | 2 +- .../src/Loki/API/LokiRSSFeedProxy.swift | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 SignalServiceKit/src/Loki/API/LokiRSSFeedProxy.swift diff --git a/SignalServiceKit/src/Loki/API/LokiHttpClient.swift b/SignalServiceKit/src/Loki/API/LokiHttpClient.swift index 2cb9c7eb1..ad9cae850 100644 --- a/SignalServiceKit/src/Loki/API/LokiHttpClient.swift +++ b/SignalServiceKit/src/Loki/API/LokiHttpClient.swift @@ -1,6 +1,6 @@ import PromiseKit -/// Base class for `LokiSnodeProxy`, `LokiFileServerProxy` and `LokiRSSFeedProxy`. +/// Base class for `LokiSnodeProxy` and `LokiFileServerProxy`. internal class LokiHTTPClient { internal lazy var httpSession: AFHTTPSessionManager = { diff --git a/SignalServiceKit/src/Loki/API/LokiRSSFeedProxy.swift b/SignalServiceKit/src/Loki/API/LokiRSSFeedProxy.swift new file mode 100644 index 000000000..3cf43e27c --- /dev/null +++ b/SignalServiceKit/src/Loki/API/LokiRSSFeedProxy.swift @@ -0,0 +1,26 @@ +import PromiseKit + +internal enum LokiRSSFeedProxy { + + internal enum Error : LocalizedError { + case proxyResponseParsingFailed + + internal var errorDescription: String? { + switch self { + case .proxyResponseParsingFailed: return "Couldn't parse proxy response." + } + } + } + + internal static func fetchContent(for url: String) -> Promise { + let server = LokiStorageAPI.server + let endpoints = [ "messenger-updates/feed" : "loki/v1/rss/messenger", "loki.network/feed" : "loki/v1/rss/loki" ] + let endpoint = endpoints.first { url.lowercased().contains($0.key) }!.value + let url = URL(string: server + "/" + endpoint)! + let request = TSRequest(url: url) + return LokiFileServerProxy(for: server).perform(request).map { response -> String in + guard let json = response as? JSON, let data = json["data"] as? String else { throw Error.proxyResponseParsingFailed } + return data + } + } +}