1414
1515import Basics
1616import Foundation
17- #if canImport(FoundationNetworking)
18- import FoundationNetworking
19- #endif
2017import RegexBuilder
18+ import HTTPTypes
2119
2220struct BearerTokenResponse : Codable {
2321 /// An opaque Bearer token that clients should supply to
@@ -130,7 +128,7 @@ public struct AuthHandler {
130128 }
131129
132130 /// Get locally-configured credentials, such as netrc or username/password, for a request
133- func localCredentials( for request: URLRequest ) -> String ? {
131+ func localCredentials( for request: HTTPRequest ) -> String ? {
134132 guard let requestURL = request. url else { return nil }
135133
136134 if let netrcEntry = auth? . httpAuthorizationHeader ( for: requestURL) { return netrcEntry }
@@ -149,7 +147,7 @@ public struct AuthHandler {
149147 /// In future it could provide cached responses from previous challenges.
150148 /// - Parameter request: The request to authorize.
151149 /// - Returns: The request, with an appropriate authorization header added, or nil if no credentials are available.
152- public func auth( for request: URLRequest ) -> URLRequest ? { nil }
150+ public func auth( for request: HTTPRequest ) -> HTTPRequest ? { nil }
153151
154152 /// Add authorization to an HTTP rquest in response to a challenge from the server.
155153 /// - Parameters:
@@ -158,13 +156,13 @@ public struct AuthHandler {
158156 /// - client: An HTTP client, used to retrieve tokens if necessary.
159157 /// - Returns: The request, with an appropriate authorization header added, or nil if no credentials are available.
160158 /// - Throws: If an error occurs while retrieving a credential.
161- public func auth( for request: URLRequest , withChallenge challenge: String , usingClient client: HTTPClient )
162- async throws -> URLRequest ?
159+ public func auth( for request: HTTPRequest , withChallenge challenge: String , usingClient client: HTTPClient )
160+ async throws -> HTTPRequest ?
163161 {
164162 if challenge. lowercased ( ) . starts ( with: " basic " ) {
165163 guard let authHeader = localCredentials ( for: request) else { return nil }
166164 var request = request
167- request. addValue ( authHeader , forHTTPHeaderField : " Authorization " )
165+ request. headerFields [ . authorization ] = authHeader
168166 return request
169167
170168 } else if challenge. lowercased ( ) . starts ( with: " bearer " ) {
@@ -176,15 +174,15 @@ public struct AuthHandler {
176174 challenge. dropFirst ( " bearer " . count) . trimmingCharacters ( in: . whitespacesAndNewlines)
177175 )
178176 guard let challengeURL = parsedChallenge. url else { return nil }
179- var req = URLRequest ( url: challengeURL)
180- if let credentials = localCredentials ( for: req ) {
181- req . addValue ( " \( credentials ) " , forHTTPHeaderField : " Authorization " )
177+ var tokenRequest = HTTPRequest ( url: challengeURL)
178+ if let credentials = localCredentials ( for: tokenRequest ) {
179+ tokenRequest . headerFields [ . authorization ] = credentials
182180 }
183181
184- let ( data, _) = try await client. executeRequestThrowing ( req , expectingStatus: 200 )
182+ let ( data, _) = try await client. executeRequestThrowing ( tokenRequest , expectingStatus: . ok )
185183 let tokenResponse = try JSONDecoder ( ) . decode ( BearerTokenResponse . self, from: data)
186184 var request = request
187- request. addValue ( " Bearer \( tokenResponse. token) " , forHTTPHeaderField : " Authorization " )
185+ request. headerFields [ . authorization ] = " Bearer \( tokenResponse. token) "
188186 return request
189187
190188 } else {
0 commit comments