summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru/BooruManager.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-22 13:30:20 +0000
committerFuwn <[email protected]>2026-03-22 13:30:20 +0000
commit3ed0ad19bfc5cbdf1a7347f6b368946d7a1a2524 (patch)
tree8501f8602cb685c70c7a269d4b1b9e9ce639c43e /Sora/Data/Booru/BooruManager.swift
parentfeat: add configurable booru user agent settings (diff)
downloadsora-testing-3ed0ad19bfc5cbdf1a7347f6b368946d7a1a2524.tar.xz
sora-testing-3ed0ad19bfc5cbdf1a7347f6b368946d7a1a2524.zip
fix: send referer header for booru requests
Diffstat (limited to 'Sora/Data/Booru/BooruManager.swift')
-rw-r--r--Sora/Data/Booru/BooruManager.swift12
1 files changed, 10 insertions, 2 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 68d5079..f5fcf89 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -26,6 +26,7 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
private let pageCache = NSCache<NSString, BooruPageCacheEntry>() // swiftlint:disable:this legacy_objc_type
private let cacheDuration: TimeInterval
private let credentials: BooruProviderCredentials?
+ private let referer: String
private let userAgent: String?
private let showHeldMoebooruPosts: Bool
private var urlCache: [String: URL] = [:]
@@ -61,6 +62,7 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
pageCache.countLimit = 50
pageCache.totalCostLimit = 50 * 1_024 * 1_024
+ self.referer = Self.baseReferer(for: provider.domain)
self.userAgent = Self.resolvedUserAgent(
sendUserAgent: sendUserAgent,
customUserAgent: customUserAgent
@@ -220,6 +222,10 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
return "Sora/\(version) (Build \(buildNumber))"
}
+ private static func baseReferer(for domain: String) -> String {
+ "https://\(domain)/"
+ }
+
func clearCachedPages() {
pageCache.removeAllObjects()
urlCache.removeAll()
@@ -593,8 +599,10 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
}
func requestURL(_ url: URL) async throws -> Data {
- let headers = userAgent.map { value in
- HTTPHeaders([HTTPHeader(name: "User-Agent", value: value)])
+ var headers = HTTPHeaders([HTTPHeader(name: "Referer", value: referer)])
+
+ if let userAgent {
+ headers.add(name: "User-Agent", value: userAgent)
}
return try await AF.request(url, headers: headers)