Skip to content

Commit

Permalink
Merge pull request #1108 from MixinNetwork/feature/header_fields
Browse files Browse the repository at this point in the history
Update header fields
  • Loading branch information
over140 authored Sep 22, 2022
2 parents e08acde + 4da1f93 commit f4fdb61
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,7 @@ extension CacheableAssetFileDescription {
guard let response = response as? HTTPURLResponse else {
return nil
}
// Before iOS 13.0 Swift treat HTTP header fields as case sensitive
// Refactor this after deployment targets updates to iOS 13.0
// https://bugs.swift.org/browse/SR-2429
let headers = response.allHeaderFields as NSDictionary
guard let contentRange = headers["Content-Range"] as? String else {
guard let contentRange = response.value(forHTTPHeaderField: "content-range") else {
return nil
}
guard let maxRange = contentRange.components(separatedBy: "/").last else {
Expand All @@ -98,7 +94,7 @@ extension CacheableAssetFileDescription {
self.contentType = nil
}
self.contentLength = contentLength
if let acceptRanges = headers["Accept-Ranges"] as? String {
if let acceptRanges = response.value(forHTTPHeaderField: "accept-ranges") {
self.isByteRangeAccessSupported = acceptRanges.contains("bytes")
} else {
self.isByteRangeAccessSupported = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ final class LoginMobileNumberViewController: MobileNumberViewController {
if !error.isTransportTimedOut {
var userInfo = [String: Any]()
userInfo["error"] = "\(error)"
if let requestId = weakSelf.request?.response?.allHeaderFields["x-request-id"] {
if let requestId = weakSelf.request?.response?.value(forHTTPHeaderField: "x-request-id") {
userInfo["requestId"] = requestId
}
if let statusCode = weakSelf.request?.response?.statusCode {
Expand Down
28 changes: 4 additions & 24 deletions MixinServices/MixinServices/Services/API/MixinAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ extension MixinAPI {
let host = MixinHost.http

func handleDeauthorization(response: HTTPURLResponse?) {
let xServerTime = TimeInterval(response?.allHeaderFields[caseInsensitive: "x-server-time"] ?? "0") ?? 0
let xServerTime = TimeInterval(response?.value(forHTTPHeaderField: "x-server-time") ?? "0") ?? 0
let serverTimeIntervalSince1970 = xServerTime / TimeInterval(NSEC_PER_SEC)
let serverTime = Date(timeIntervalSince1970: serverTimeIntervalSince1970)
if abs(requestTime.timeIntervalSinceNow) > secondsPerMinute {
Expand Down Expand Up @@ -187,8 +187,8 @@ extension MixinAPI {
.responseData(queue: queue, completionHandler: { (response) in
switch response.result {
case .success(let data):
if let requestId = response.request?.allHTTPHeaderFields?["X-Request-Id"], !requestId.isEmpty {
let responseRequestId = response.response?.allHeaderFields[caseInsensitive: "x-request-id"] ?? ""
if let requestId = response.request?.value(forHTTPHeaderField: "x-request-id"), !requestId.isEmpty {
let responseRequestId = response.response?.value(forHTTPHeaderField: "x-request-id") ?? ""
if requestId != responseRequestId {
Logger.general.error(category: "MixinAPI", message: "Mismatched request id. Request path: \(response.request?.url?.path), id: \(requestId), responded header: \(response.response?.allHeaderFields)")
completion(.failure(.internalServerError))
Expand All @@ -213,7 +213,7 @@ extension MixinAPI {
}
case let .failure(error):
let path = response.request?.url?.path ?? "(null)"
let requestId = response.request?.allHTTPHeaderFields?["X-Request-Id"] ?? "(null)"
let requestId = response.request?.value(forHTTPHeaderField: "x-request-id") ?? "(null)"
Logger.general.error(category: "MixinAPI", message: "Request with path: \(path), id: \(requestId), failed with error: \(error)" )
if shouldToggleServer(for: error) {
MixinHost.toggle(currentHttpHost: host)
Expand Down Expand Up @@ -247,23 +247,3 @@ extension MixinAPI {
}

}

fileprivate extension Dictionary where Key == AnyHashable, Value == Any {

subscript(caseInsensitive key: String) -> String? {
get {
if let k = keys.first(where: { ($0 as? String)?.lowercased() == key }) {
return self[k] as? String
}
return nil
}
set {
if let k = keys.first(where: { ($0 as? String)?.lowercased() == key }) {
self[k] = newValue
} else {
self[key] = newValue
}
}
}

}

0 comments on commit f4fdb61

Please sign in to comment.