diff options
| author | Fuwn <[email protected]> | 2026-03-22 13:30:20 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-22 13:30:20 +0000 |
| commit | 3ed0ad19bfc5cbdf1a7347f6b368946d7a1a2524 (patch) | |
| tree | 8501f8602cb685c70c7a269d4b1b9e9ce639c43e /Sora/Data/Booru/BooruManager.swift | |
| parent | feat: add configurable booru user agent settings (diff) | |
| download | sora-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.swift | 12 |
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) |