Skip to content

Commit 5c493fd

Browse files
committed
broader refactor to resolve todos
1 parent 3b2bb04 commit 5c493fd

32 files changed

+61
-82
lines changed

FirebaseAuth/Sources/Swift/Backend/AuthBackend.swift

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,24 @@ final class AuthBackend: AuthBackendProtocol {
6060
}
6161
}
6262

63-
static func urlRequest(from rpcRequest: any AuthRPCRequest,
64-
contentType: String,
65-
requestConfiguration: AuthRequestConfiguration) async -> URLRequest {
63+
static func request(for url: URL,
64+
httpMethod: String,
65+
contentType: String,
66+
requestConfiguration: AuthRequestConfiguration) async -> URLRequest {
6667
// Kick off tasks for the async header values.
6768
async let heartbeatsHeaderValue = requestConfiguration.heartbeatLogger?.asyncHeaderValue()
6869
async let appCheckTokenHeaderValue = requestConfiguration.appCheck?
6970
.getToken(forcingRefresh: true)
7071

71-
var request = URLRequest(url: rpcRequest.requestURL())
72+
var request = URLRequest(url: url)
7273
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
7374
let additionalFrameworkMarker = requestConfiguration
7475
.additionalFrameworkMarker ?? "FirebaseCore-iOS"
7576
let clientVersion = "iOS/FirebaseSDK/\(FirebaseVersion())/\(additionalFrameworkMarker)"
7677
request.setValue(clientVersion, forHTTPHeaderField: "X-Client-Version")
7778
request.setValue(Bundle.main.bundleIdentifier, forHTTPHeaderField: "X-Ios-Bundle-Identifier")
7879
request.setValue(requestConfiguration.appID, forHTTPHeaderField: "X-Firebase-GMPID")
79-
request.httpMethod = rpcRequest.containsPostBody ? "POST" : "GET"
80+
request.httpMethod = httpMethod
8081
let preferredLocalizations = Bundle.main.preferredLocalizations
8182
if preferredLocalizations.count > 0 {
8283
request.setValue(preferredLocalizations.first, forHTTPHeaderField: "Accept-Language")
@@ -163,21 +164,12 @@ final class AuthBackend: AuthBackendProtocol {
163164
/// - Returns: The response.
164165
fileprivate func callInternal<T: AuthRPCRequest>(with request: T) async throws -> T.Response {
165166
var bodyData: Data?
166-
if request.containsPostBody {
167-
var postBody: [String: AnyHashable]
168-
do {
169-
// TODO: Can unencodedHTTPRequestBody ever throw?
170-
// They don't today, but there are a few fatalErrors that might better be implemented as
171-
// thrown errors.. Although perhaps the case of 'containsPostBody' returning false could
172-
// perhaps be modeled differently so that the failing unencodedHTTPRequestBody could only
173-
// be called when a body exists...
174-
postBody = try request.unencodedHTTPRequestBody()
175-
} catch {
176-
throw AuthErrorUtils.RPCRequestEncodingError(underlyingError: error)
177-
}
178-
var JSONWritingOptions: JSONSerialization.WritingOptions = .init(rawValue: 0)
167+
if let postBody = request.unencodedHTTPRequestBody {
179168
#if DEBUG
180-
JSONWritingOptions = JSONSerialization.WritingOptions.prettyPrinted
169+
let JSONWritingOptions = JSONSerialization.WritingOptions.prettyPrinted
170+
)
171+
#else
172+
let JSONWritingOptions = JSONSerialization.WritingOptions(rawValue: 0)
181173
#endif
182174

183175
guard JSONSerialization.isValidJSONObject(postBody) else {

FirebaseAuth/Sources/Swift/Backend/AuthBackendRPCIssuer.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ final class AuthBackendRPCIssuer: AuthBackendRPCIssuerProtocol {
5252
body: Data?,
5353
contentType: String) async -> (Data?, Error?) {
5454
let requestConfiguration = request.requestConfiguration()
55-
let request = await AuthBackend.urlRequest(
56-
from: request,
55+
let request = await AuthBackend.request(
56+
for: request.requestURL(),
57+
httpMethod: body == nil ? "GET" : "POST",
5758
contentType: contentType,
5859
requestConfiguration: requestConfiguration
5960
)

FirebaseAuth/Sources/Swift/Backend/AuthRPCRequest.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@ protocol AuthRPCRequest {
2222
/// Gets the request's full URL.
2323
func requestURL() -> URL
2424

25-
/// Returns whether the request contains a post body or not. Requests without a post body are
26-
/// GET requests. A default implementation returns `true`.
27-
var containsPostBody: Bool { get }
28-
2925
/// Creates unencoded HTTP body representing the request.
30-
/// - Throws: Any error which occurred constructing the request.
3126
/// - Returns: The HTTP body data representing the request before any encoding.
32-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable]
27+
/// - Note: Requests with a post body are POST requests. Requests without a
28+
/// post body are GET requests.
29+
var unencodedHTTPRequestBody: [String: AnyHashable]? { get }
3330

3431
/// The request configuration.
3532
func requestConfiguration() -> AuthRequestConfiguration
@@ -41,7 +38,6 @@ protocol AuthRPCRequest {
4138
// in Obj-C.
4239
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
4340
extension AuthRPCRequest {
44-
var containsPostBody: Bool { return true }
4541
func injectRecaptchaFields(recaptchaResponse: String?, recaptchaVersion: String) {
4642
fatalError("Internal FirebaseAuth Error: unimplemented injectRecaptchaFields")
4743
}

FirebaseAuth/Sources/Swift/Backend/IdentityToolkitRequest.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,6 @@ class IdentityToolkitRequest {
7070
tenantID = requestConfiguration.auth?.tenantID
7171
}
7272

73-
var containsPostBody: Bool { return true }
74-
7573
func queryParams() -> String {
7674
return ""
7775
}

FirebaseAuth/Sources/Swift/Backend/RPC/CreateAuthURIRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class CreateAuthURIRequest: IdentityToolkitRequest, AuthRPCRequest {
7878
super.init(endpoint: kCreateAuthURIEndpoint, requestConfiguration: requestConfiguration)
7979
}
8080

81-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
81+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
8282
var postBody: [String: AnyHashable] = [
8383
kIdentifierKey: identifier,
8484
kContinueURIKey: continueURI,

FirebaseAuth/Sources/Swift/Backend/RPC/DeleteAccountRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class DeleteAccountRequest: IdentityToolkitRequest, AuthRPCRequest {
4141
super.init(endpoint: kDeleteAccountEndpoint, requestConfiguration: requestConfiguration)
4242
}
4343

44-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
44+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
4545
[
4646
kIDTokenKey: accessToken,
4747
kLocalIDKey: localID,

FirebaseAuth/Sources/Swift/Backend/RPC/EmailLinkSignInRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class EmailLinkSignInRequest: IdentityToolkitRequest, AuthRPCRequest {
5151
super.init(endpoint: kEmailLinkSigninEndpoint, requestConfiguration: requestConfiguration)
5252
}
5353

54-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
54+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
5555
var postBody: [String: AnyHashable] = [
5656
kEmailKey: email,
5757
kOOBCodeKey: oobCode,

FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class GetAccountInfoRequest: IdentityToolkitRequest, AuthRPCRequest {
3939
super.init(endpoint: kGetAccountInfoEndpoint, requestConfiguration: requestConfiguration)
4040
}
4141

42-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
42+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
4343
return [kIDTokenKey: accessToken]
4444
}
4545
}

FirebaseAuth/Sources/Swift/Backend/RPC/GetOOBConfirmationCodeRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ class GetOOBConfirmationCodeRequest: IdentityToolkitRequest, AuthRPCRequest {
228228
requestConfiguration: requestConfiguration)
229229
}
230230

231-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
231+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
232232
var body: [String: AnyHashable] = [
233233
kRequestTypeKey: requestType.value,
234234
]

FirebaseAuth/Sources/Swift/Backend/RPC/GetProjectConfigRequest.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ class GetProjectConfigRequest: IdentityToolkitRequest, AuthRPCRequest {
2525
super.init(endpoint: kGetProjectConfigEndPoint, requestConfiguration: requestConfiguration)
2626
}
2727

28-
func unencodedHTTPRequestBody() throws -> [String: AnyHashable] {
29-
// TODO: Probably nicer to throw, but what should we throw?
30-
fatalError()
28+
var unencodedHTTPRequestBody: [String: AnyHashable]? {
29+
nil
3130
}
32-
33-
override var containsPostBody: Bool { return false }
3431
}

0 commit comments

Comments
 (0)