summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru/BooruRequestConfiguration.swift
blob: 2b786cf29c796dcaa2a365a19fbf158e395d6dcc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
    )
  }
}