in Sources/Hub/HubApi.swift [769:804]
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
// Check if it's a redirect status code (300-399)
if (300...399).contains(response.statusCode) {
// Get the Location header
if let locationString = response.value(forHTTPHeaderField: "Location"),
let locationUrl = URL(string: locationString)
{
// Check if it's a relative redirect (no host component)
if locationUrl.host == nil {
// For relative redirects, construct the new URL using the original request's base
if let originalUrl = task.originalRequest?.url,
var components = URLComponents(url: originalUrl, resolvingAgainstBaseURL: true)
{
// Update the path component with the relative path
components.path = locationUrl.path
components.query = locationUrl.query
// Create new request with the resolved URL
if let resolvedUrl = components.url {
var newRequest = URLRequest(url: resolvedUrl)
// Copy headers from original request
task.originalRequest?.allHTTPHeaderFields?.forEach { key, value in
newRequest.setValue(value, forHTTPHeaderField: key)
}
newRequest.setValue(resolvedUrl.absoluteString, forHTTPHeaderField: "Location")
completionHandler(newRequest)
return
}
}
}
}
}
// For all other cases (non-redirects or absolute redirects), prevent redirect
completionHandler(nil)
}