diff options
| author | Fuwn <[email protected]> | 2026-03-22 13:40:57 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-22 14:02:13 +0000 |
| commit | 92a34a801f423e7fafa9432bc2f48080855a5a53 (patch) | |
| tree | 757f725d3b890fea93f2d3798ce0e9cff6e6c237 /Sora/Data/Booru/BooruRequestConfiguration.swift | |
| parent | build: wire xcodegen team id through just (diff) | |
| download | sora-testing-92a34a801f423e7fafa9432bc2f48080855a5a53.tar.xz sora-testing-92a34a801f423e7fafa9432bc2f48080855a5a53.zip | |
fix: send booru headers for image requests
Diffstat (limited to 'Sora/Data/Booru/BooruRequestConfiguration.swift')
| -rw-r--r-- | Sora/Data/Booru/BooruRequestConfiguration.swift | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Sora/Data/Booru/BooruRequestConfiguration.swift b/Sora/Data/Booru/BooruRequestConfiguration.swift new file mode 100644 index 0000000..2b786cf --- /dev/null +++ b/Sora/Data/Booru/BooruRequestConfiguration.swift @@ -0,0 +1,66 @@ +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 + ) + } +} |