171 lines
4.9 KiB
Swift
171 lines
4.9 KiB
Swift
//
|
|
// Copyright 2024 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
// MARK: - Message Backup
|
|
|
|
extension OWSRequestFactory {
|
|
public static func backupAuthenticationCredentialRequest(
|
|
from fromRedemptionSeconds: UInt64,
|
|
to toRedemptionSeconds: UInt64,
|
|
auth: ChatServiceAuth,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
owsAssertDebug(fromRedemptionSeconds > 0)
|
|
owsAssertDebug(toRedemptionSeconds > 0)
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/auth?redemptionStartSeconds=\(fromRedemptionSeconds)&redemptionEndSeconds=\(toRedemptionSeconds)")!,
|
|
method: "GET",
|
|
parameters: nil,
|
|
logger: logger,
|
|
)
|
|
request.auth = .identified(auth)
|
|
return request
|
|
}
|
|
|
|
public static func backupInfoRequest(
|
|
auth: BackupServiceAuth,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives")!,
|
|
method: "GET",
|
|
parameters: nil,
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func backupRefreshInfoRequest(
|
|
auth: BackupServiceAuth,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives")!,
|
|
method: "PUT",
|
|
parameters: nil,
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func fetchBackupCDNCredentials(
|
|
auth: BackupServiceAuth,
|
|
cdn: Int32,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/auth/read?cdn=\(cdn)")!,
|
|
method: "GET",
|
|
parameters: nil,
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func copyToMediaTier(
|
|
auth: BackupServiceAuth,
|
|
item: BackupArchive.Request.MediaItem,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/media")!,
|
|
method: "PUT",
|
|
parameters: item.asParameters,
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func archiveMedia(
|
|
auth: BackupServiceAuth,
|
|
items: [BackupArchive.Request.MediaItem],
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
let parameters: [String: Any] = ["items": items.map(\.asParameters)]
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/media/batch")!,
|
|
method: "PUT",
|
|
parameters: parameters,
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func listMedia(
|
|
auth: BackupServiceAuth,
|
|
cursor: String?,
|
|
limit: UInt32?,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var urlComponents = URLComponents(string: "v1/archives/media")!
|
|
var queryItems = [URLQueryItem]()
|
|
if let limit {
|
|
queryItems.append(URLQueryItem(name: "limit", value: "\(limit)"))
|
|
}
|
|
if let cursor {
|
|
queryItems.append(URLQueryItem(name: "cursor", value: cursor))
|
|
}
|
|
if !queryItems.isEmpty {
|
|
urlComponents.queryItems = queryItems
|
|
}
|
|
var request = TSRequest(
|
|
url: urlComponents.url!,
|
|
method: "GET",
|
|
parameters: [:],
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func deleteMedia(
|
|
auth: BackupServiceAuth,
|
|
objects: [BackupArchive.Request.DeleteMediaTarget],
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/media/delete")!,
|
|
method: "POST",
|
|
parameters: ["mediaToDelete": NSArray(array: objects.map(\.asParameters))],
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
|
|
public static func redeemReceipt(
|
|
receiptCredentialPresentation: Data,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
return TSRequest(
|
|
url: URL(string: "v1/archives/redeem-receipt")!,
|
|
method: "POST",
|
|
parameters: ["receiptCredentialPresentation": receiptCredentialPresentation.base64EncodedString()],
|
|
logger: logger,
|
|
)
|
|
}
|
|
|
|
public static func fetchSVRBAuthCredential(
|
|
auth: BackupServiceAuth,
|
|
logger: PrefixedLogger,
|
|
) -> TSRequest {
|
|
var request = TSRequest(
|
|
url: URL(string: "v1/archives/auth/svrb")!,
|
|
method: "GET",
|
|
parameters: [:],
|
|
logger: logger,
|
|
)
|
|
request.auth = .backup(auth)
|
|
return request
|
|
}
|
|
}
|