Added in the new legacy endpoint

This commit is contained in:
Morgan Pretty 2023-06-20 12:31:03 +10:00
parent 09ab977861
commit b3cad3e709
5 changed files with 50 additions and 49 deletions

View File

@ -813,6 +813,7 @@
FDC438CD27BC641200C60D73 /* Set+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDC438CC27BC641200C60D73 /* Set+Utilities.swift */; };
FDC6D6F32860607300B04575 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF0B7542807C4BB004C14C5 /* Environment.swift */; };
FDC6D7602862B3F600B04575 /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDC6D75F2862B3F600B04575 /* Dependencies.swift */; };
FDCD2E032A41294E00964D6A /* LegacyGroupOnlyRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCD2E022A41294E00964D6A /* LegacyGroupOnlyRequest.swift */; };
FDCDB8DE2810F73B00352A0C /* Differentiable+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCDB8DD2810F73B00352A0C /* Differentiable+Utilities.swift */; };
FDCDB8E02811007F00352A0C /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCDB8DF2811007F00352A0C /* HomeViewModel.swift */; };
FDD2506E283711D600198BDA /* DifferenceKit+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD2506D283711D600198BDA /* DifferenceKit+Utilities.swift */; };
@ -1959,6 +1960,7 @@
FDC438CA27BB7DB100C60D73 /* UpdateMessageRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateMessageRequest.swift; sourceTree = "<group>"; };
FDC438CC27BC641200C60D73 /* Set+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Set+Utilities.swift"; sourceTree = "<group>"; };
FDC6D75F2862B3F600B04575 /* Dependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependencies.swift; sourceTree = "<group>"; };
FDCD2E022A41294E00964D6A /* LegacyGroupOnlyRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyGroupOnlyRequest.swift; sourceTree = "<group>"; };
FDCDB8DD2810F73B00352A0C /* Differentiable+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Differentiable+Utilities.swift"; sourceTree = "<group>"; };
FDCDB8DF2811007F00352A0C /* HomeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModel.swift; sourceTree = "<group>"; };
FDD2506D283711D600198BDA /* DifferenceKit+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DifferenceKit+Utilities.swift"; sourceTree = "<group>"; };
@ -4240,6 +4242,7 @@
FDC13D572A17207D007267C7 /* UnsubscribeResponse.swift */,
FD6E4C892A1AEE4700C7C243 /* LegacyUnsubscribeRequest.swift */,
FDC13D532A16FF29007267C7 /* LegacyGroupRequest.swift */,
FDCD2E022A41294E00964D6A /* LegacyGroupOnlyRequest.swift */,
FDC4382E27B383AF00C60D73 /* LegacyPushServerResponse.swift */,
FDC13D592A1721C5007267C7 /* LegacyNotifyRequest.swift */,
FDFBB74C2A1F3C4E00CA7350 /* NotificationMetadata.swift */,
@ -5825,6 +5828,7 @@
FD8ECF8B2935DB4B00C0D1BB /* SharedConfigMessage.swift in Sources */,
FD09798727FD1B7800936362 /* GroupMember.swift in Sources */,
FDB4BBC92839BEF000B7C95D /* ProfileManagerError.swift in Sources */,
FDCD2E032A41294E00964D6A /* LegacyGroupOnlyRequest.swift in Sources */,
FD3E0C84283B5835002A425C /* SessionThreadViewModel.swift in Sources */,
FD09C5EC282B8F18000CE219 /* AttachmentError.swift in Sources */,
FD17D79927F40AB800122BE0 /* _003_YDBToGRDBMigration.swift in Sources */,

View File

@ -0,0 +1,12 @@
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import Foundation
extension PushNotificationAPI {
struct LegacyGroupOnlyRequest: Codable {
let token: String
let pubKey: String
let device: String
let legacyGroupPublicKeys: Set<String>
}
}

View File

@ -115,54 +115,39 @@ public enum PushNotificationAPI {
}
}
)
.flatMap { _ in
guard UserDefaults.standard[.hasUnregisteredForLegacyPushNotifications] != true else {
return Just(())
.setFailureType(to: Error.self)
.eraseToAnyPublisher()
}
return PushNotificationAPI
.send(
request: PushNotificationAPIRequest(
endpoint: .legacyUnregister,
body: LegacyUnsubscribeRequest(
token: hexEncodedToken
)
)
)
.retry(maxRetryCount)
.handleEvents(
receiveCompletion: { result in
switch result {
case .finished:
/// Save that we've already unsubscribed
///
/// **Note:** The server can return an error (`response.code != 0`) but
/// that means the server properly processed the request and the error is likely
/// due to the device not actually being previously subscribed for notifications
/// rather than actually failing to unsubscribe
UserDefaults.standard[.hasUnregisteredForLegacyPushNotifications] = true
case .failure: SNLog("Couldn't unsubscribe for legacy notifications.")
}
}
)
.map { _ in () }
.eraseToAnyPublisher()
}
.eraseToAnyPublisher()
].appending(
.map { _ in () }
.eraseToAnyPublisher(),
// FIXME: Remove this once legacy groups are deprecated
contentsOf: legacyGroupIds
.map { legacyGroupId in
PushNotificationAPI.subscribeToLegacyGroup(
legacyGroupId: legacyGroupId,
currentUserPublicKey: currentUserPublicKey,
using: dependencies
PushNotificationAPI
.send(
request: PushNotificationAPIRequest(
endpoint: .legacyGroupsOnlySubscribe,
body: LegacyGroupOnlyRequest(
token: hexEncodedToken,
pubKey: currentUserPublicKey,
device: "ios",
legacyGroupPublicKeys: legacyGroupIds
)
)
}
)
)
.decoded(as: LegacyPushServerResponse.self, using: dependencies)
.retry(maxRetryCount)
.handleEvents(
receiveOutput: { _, response in
guard response.code != 0 else {
return SNLog("Couldn't subscribe for legacy groups due to error: \(response.message ?? "nil").")
}
},
receiveCompletion: { result in
switch result {
case .finished: break
case .failure: SNLog("Couldn't subscribe for legacy groups.")
}
}
)
.map { _ in () }
.eraseToAnyPublisher()
]
)
.collect()
.map { _ in () }

View File

@ -12,6 +12,7 @@ public extension PushNotificationAPI {
case legacyNotify = "notify"
case legacyRegister = "register"
case legacyUnregister = "unregister"
case legacyGroupsOnlySubscribe = "register_legacy_groups_only"
case legacyGroupSubscribe = "subscribe_closed_group"
case legacyGroupUnsubscribe = "unsubscribe_closed_group"
@ -20,7 +21,7 @@ public extension PushNotificationAPI {
var server: String {
switch self {
case .legacyNotify, .legacyRegister, .legacyUnregister,
.legacyGroupSubscribe, .legacyGroupUnsubscribe:
.legacyGroupsOnlySubscribe, .legacyGroupSubscribe, .legacyGroupUnsubscribe:
return PushNotificationAPI.legacyServer
default: return PushNotificationAPI.server
@ -30,7 +31,7 @@ public extension PushNotificationAPI {
var serverPublicKey: String {
switch self {
case .legacyNotify, .legacyRegister, .legacyUnregister,
.legacyGroupSubscribe, .legacyGroupUnsubscribe:
.legacyGroupsOnlySubscribe, .legacyGroupSubscribe, .legacyGroupUnsubscribe:
return PushNotificationAPI.legacyServerPublicKey
default: return PushNotificationAPI.serverPublicKey

View File

@ -31,7 +31,6 @@ public enum SNUserDefaults {
case hasSeenCallIPExposureWarning
case hasSeenCallMissedTips
case isUsingFullAPNs
case hasUnregisteredForLegacyPushNotifications
case wasUnlinked
case isMainAppActive
case isCallOngoing