session-ios/SessionMessagingKit/Open Groups/Types/Request.swift

61 lines
1.9 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import SessionUtilitiesKit
extension OpenGroupAPIV2 {
struct Request {
let method: HTTP.Verb
let server: String
let room: String? // TODO: Remove this?
let endpoint: Endpoint
let queryParameters: [QueryParam: String]
let body: Data?
let headers: [Header: String]
let isAuthRequired: Bool
/// Always `true` under normal circumstances. You might want to disable
/// this when running over Lokinet.
let useOnionRouting: Bool
init(
method: HTTP.Verb = .get,
server: String,
room: String? = nil,
endpoint: Endpoint,
queryParameters: [QueryParam: String] = [:],
body: Data? = nil,
headers: [Header: String] = [:],
isAuthRequired: Bool = true,
useOnionRouting: Bool = true
) {
self.method = method
self.server = server
self.room = room
self.endpoint = endpoint
self.queryParameters = queryParameters
self.body = body
self.headers = headers
self.isAuthRequired = isAuthRequired
self.useOnionRouting = useOnionRouting
}
var url: URL? {
return URL(string: "\(server)\(urlPathAndParamsString)")
}
var urlPathAndParamsString: String {
guard method == .get else { return "/\(endpoint.path)" }
return [
"/\(endpoint.path)",
queryParameters
.map { key, value in "\(key.rawValue)=\(value)" }
.joined(separator: "&")
]
.compactMap { $0 }
.filter { !$0.isEmpty }
.joined(separator: "?")
}
}
}