summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru/BooruRequestConfiguration.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-22 13:40:57 +0000
committerFuwn <[email protected]>2026-03-22 14:02:13 +0000
commit92a34a801f423e7fafa9432bc2f48080855a5a53 (patch)
tree757f725d3b890fea93f2d3798ce0e9cff6e6c237 /Sora/Data/Booru/BooruRequestConfiguration.swift
parentbuild: wire xcodegen team id through just (diff)
downloadsora-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.swift66
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
+ )
+ }
+}