summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/RelayCacheTracker
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@kvadrat.se>2024-09-09 14:10:57 +0200
committerEmīls <emils@mullvad.net>2024-09-10 22:05:59 +0200
commit747747ea6f0a7f1a96c2495c95d496bdea1fa5bb (patch)
tree46d8c2cefaf242db4edf1b76fb44c7e0f6b4a532 /ios/MullvadVPN/RelayCacheTracker
parentde91617a8bbbdeb69ad46533fa003915bcbe81a6 (diff)
downloadmullvadvpn-747747ea6f0a7f1a96c2495c95d496bdea1fa5bb.tar.xz
mullvadvpn-747747ea6f0a7f1a96c2495c95d496bdea1fa5bb.zip
Store the raw JSON payload from the getRelays API call
Diffstat (limited to 'ios/MullvadVPN/RelayCacheTracker')
-rw-r--r--ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift38
1 files changed, 22 insertions, 16 deletions
diff --git a/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift b/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
index 2d2d0d384e..27f1caa1fa 100644
--- a/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
+++ b/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
@@ -63,7 +63,7 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
cache = relayCache
do {
- cachedRelays = try cache.read()
+ cachedRelays = try cache.read().cachedRelays
try hotfixRelaysThatDoNotHaveDaita()
} catch {
logger.error(
@@ -89,8 +89,8 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
// If the cached relays already have daita information, this fix is not necessary
guard daitaPropertyMissing else { return }
- let preBundledRelays = try cache.readPrebundledRelays()
- let preBundledDaitaRelays = preBundledRelays.relays.wireguard.relays.filter { $0.daita == true }
+ let preBundledRelays = try cache.readPrebundledRelays().relays
+ let preBundledDaitaRelays = preBundledRelays.wireguard.relays.filter { $0.daita == true }
var cachedRelaysWithFixedDaita = cachedRelays.relays.wireguard.relays
// For each daita enabled relay in the prebundled relays
@@ -119,9 +119,19 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
bridge: cachedRelays.relays.bridge
)
- let updatedCachedRelays = CachedRelays(relays: updatedRelays, updatedAt: Date())
+ let updatedRawRelayData = try REST.Coding.makeJSONEncoder().encode(updatedRelays)
+ let updatedCachedRelays = try StoredRelays(
+ etag: cachedRelays.etag,
+ rawData: updatedRawRelayData,
+ updatedAt: cachedRelays.updatedAt
+ )
+
try cache.write(record: updatedCachedRelays)
- self.cachedRelays = updatedCachedRelays
+ self.cachedRelays = CachedRelays(
+ etag: cachedRelays.etag,
+ relays: updatedRelays,
+ updatedAt: cachedRelays.updatedAt
+ )
}
func startPeriodicUpdates() {
@@ -196,7 +206,7 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
}
func refreshCachedRelays() throws {
- let newCachedRelays = try cache.read()
+ let newCachedRelays = try cache.read().cachedRelays
relayCacheLock.lock()
cachedRelays = newCachedRelays
@@ -244,8 +254,8 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
-> Result<RelaysFetchResult, Error> {
result.tryMap { response -> RelaysFetchResult in
switch response {
- case let .newContent(etag, relays):
- try self.storeResponse(etag: etag, relays: relays)
+ case let .newContent(etag, rawData):
+ try self.storeResponse(etag: etag, rawData: rawData)
return .newContent
@@ -262,18 +272,14 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol {
}
}
- private func storeResponse(etag: String?, relays: REST.ServerRelaysResponse) throws {
- let numRelays = relays.wireguard.relays.count
-
- logger.info("Downloaded \(numRelays) relays.")
-
- let newCachedRelays = CachedRelays(
+ private func storeResponse(etag: String?, rawData: Data) throws {
+ let newCachedData = try StoredRelays(
etag: etag,
- relays: relays,
+ rawData: rawData,
updatedAt: Date()
)
- try cache.write(record: newCachedRelays)
+ try cache.write(record: newCachedData)
try refreshCachedRelays()
}