import Foundation enum BooruRequestConfiguration { static func resolvedUserAgent( sendUserAgent: Bool, customUserAgent: String ) -> String? { guard sendUserAgent else { return nil } let trimmedCustomUserAgent = customUserAgent.trimmingCharacters( in: .whitespacesAndNewlines ) guard trimmedCustomUserAgent.isEmpty else { return trimmedCustomUserAgent } let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0" let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "1" return "Sora/\(version) (Build \(buildNumber))" } static func baseReferer(for domain: String) -> String { "https://\(domain)/" } static func request( url: URL, referer: String, userAgent: String?, accept: String? = nil ) -> URLRequest { var request = URLRequest(url: url) request.setValue(referer, forHTTPHeaderField: "Referer") if let userAgent { request.setValue(userAgent, forHTTPHeaderField: "User-Agent") } if let accept { request.setValue(accept, forHTTPHeaderField: "Accept") } return request } static func request( url: URL, domain: String, sendUserAgent: Bool, customUserAgent: String, accept: String? = nil ) -> URLRequest { request( url: url, referer: baseReferer(for: domain), userAgent: resolvedUserAgent( sendUserAgent: sendUserAgent, customUserAgent: customUserAgent ), accept: accept ) } }