aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--AuthSamples/README.md4
-rw-r--r--AuthSamples/Sample/ApplicationDelegate.m17
-rw-r--r--AuthSamples/Sample/AuthCredentialsTemplate.h1
-rw-r--r--AuthSamples/Sample/Images.xcassets/AppIcon.appiconset/Contents.json20
-rw-r--r--AuthSamples/Sample/MainViewController.h7
-rw-r--r--AuthSamples/Sample/MainViewController.m117
-rw-r--r--AuthSamples/Sample/SampleTemplate.entitlements (renamed from AuthSamples/Sample/Sample.entitlements)4
-rw-r--r--AuthSamples/Sample/SettingsViewController.m23
-rw-r--r--AuthSamples/Sample/en-GB.lproj/Localizable.strings2
-rw-r--r--AuthSamples/Sample/es-MX.lproj/Localizable.strings2
-rw-r--r--AuthSamples/Sample/fr-FR.lproj/Localizable.strings2
-rw-r--r--AuthSamples/Sample/ru-RU.lproj/Localizable.strings2
-rw-r--r--AuthSamples/Samples.xcodeproj/project.pbxproj21
-rw-r--r--Example/Auth/Tests/FIRAuthBackendCreateAuthURITests.m5
-rw-r--r--Example/Auth/Tests/FIRAuthBackendRPCImplementationTests.m12
-rw-r--r--Example/Auth/Tests/FIRAuthDispatcherTests.m2
-rw-r--r--Example/Auth/Tests/FIRAuthTests.m2
-rw-r--r--Example/Auth/Tests/FIRCreateAuthURIRequestTests.m4
-rw-r--r--Example/Auth/Tests/FIRCreateAuthURIResponseTests.m19
-rw-r--r--Example/Auth/Tests/FIRDeleteAccountRequestTests.m10
-rw-r--r--Example/Auth/Tests/FIRDeleteAccountResponseTests.m35
-rw-r--r--Example/Auth/Tests/FIRFakeBackendRPCIssuer.m9
-rw-r--r--Example/Auth/Tests/FIRGetAccountInfoRequestTests.m5
-rw-r--r--Example/Auth/Tests/FIRGetAccountInfoResponseTests.m10
-rw-r--r--Example/Auth/Tests/FIRGetOOBConfirmationCodeRequestTests.m104
-rw-r--r--Example/Auth/Tests/FIRGetOOBConfirmationCodeResponseTests.m203
-rw-r--r--Example/Auth/Tests/FIRGitHubAuthProviderTests.m5
-rw-r--r--Example/Auth/Tests/FIRPhoneAuthProviderTests.m5
-rw-r--r--Example/Auth/Tests/FIRResetPasswordRequestTests.m8
-rw-r--r--Example/Auth/Tests/FIRResetPasswordResponseTests.m45
-rw-r--r--Example/Auth/Tests/FIRSendVerificationCodeRequestTests.m4
-rw-r--r--Example/Auth/Tests/FIRSendVerificationCodeResponseTests.m18
-rw-r--r--Example/Auth/Tests/FIRSetAccountInfoRequestTests.m13
-rw-r--r--Example/Auth/Tests/FIRSetAccountInfoResponseTests.m49
-rw-r--r--Example/Auth/Tests/FIRSignUpNewUserRequestTests.m18
-rw-r--r--Example/Auth/Tests/FIRSignUpNewUserResponseTests.m30
-rw-r--r--Example/Auth/Tests/FIRTwitterAuthProviderTests.m6
-rw-r--r--Example/Auth/Tests/FIRVerifyAssertionRequestTests.m16
-rw-r--r--Example/Auth/Tests/FIRVerifyAssertionResponseTests.m28
-rw-r--r--Example/Auth/Tests/FIRVerifyClientRequestTest.m4
-rw-r--r--Example/Auth/Tests/FIRVerifyClientResponseTests.m13
-rw-r--r--Example/Auth/Tests/FIRVerifyCustomTokenRequestTests.m13
-rw-r--r--Example/Auth/Tests/FIRVerifyCustomTokenResponseTests.m22
-rw-r--r--Example/Auth/Tests/FIRVerifyPasswordRequestTest.m11
-rw-r--r--Example/Auth/Tests/FIRVerifyPasswordResponseTests.m62
-rw-r--r--Example/Auth/Tests/FIRVerifyPhoneNumberRequestTests.m11
-rw-r--r--Example/Auth/Tests/FIRVerifyPhoneNumberResponseTests.m18
-rw-r--r--Firebase/Auth/FirebaseAuth.podspec3
-rw-r--r--Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m6
-rw-r--r--Firebase/Auth/Source/FIRActionCodeSettings.m37
-rw-r--r--Firebase/Auth/Source/FIRAuth.m133
-rw-r--r--Firebase/Auth/Source/FIRAuthErrorUtils.h35
-rw-r--r--Firebase/Auth/Source/FIRAuthErrorUtils.m64
-rw-r--r--Firebase/Auth/Source/FIRAuthInternalErrors.h28
-rw-r--r--Firebase/Auth/Source/FIRAuth_Internal.h10
-rw-r--r--Firebase/Auth/Source/FIRSecureTokenService.m19
-rw-r--r--Firebase/Auth/Source/FIRUser.m62
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ar.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/bg.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/bn.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ca.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/cs.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/da.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/de.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/dl.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/el.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/en-GB.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/en.lproj/FirebaseLocale.strings2
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/es-419.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/es.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/fa.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/fi.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/fil.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/fr.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/gu.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/hi.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/hr.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/hu.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/id.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/it.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/iw.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ja.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/kn.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ko.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/lt.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/lv.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ml.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/mr.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ms.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/nl.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/no.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/pl.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/pt-BR.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/pt-PT.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/pt.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ro.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ru.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/sk.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/sl.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/sr.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/sv.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ta.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/th.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/tr.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/uk.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/ur.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/vi.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/zh-CN.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/FirebaseAuth.bundle/zh-TW.lproj/FirebaseLocale.strings1
-rw-r--r--Firebase/Auth/Source/Public/FIRActionCodeSettings.h83
-rw-r--r--Firebase/Auth/Source/Public/FIRAuth.h52
-rw-r--r--Firebase/Auth/Source/Public/FIRAuthErrors.h26
-rw-r--r--Firebase/Auth/Source/Public/FIRUser.h36
-rw-r--r--Firebase/Auth/Source/Public/FirebaseAuth.h1
-rw-r--r--Firebase/Auth/Source/RPCs/FIRAuthBackend.h17
-rw-r--r--Firebase/Auth/Source/RPCs/FIRAuthBackend.m79
-rw-r--r--Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h10
-rw-r--r--Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h47
-rw-r--r--Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m34
-rw-r--r--Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h14
-rw-r--r--Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m4
-rw-r--r--Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h18
-rw-r--r--Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m8
-rw-r--r--Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h16
-rw-r--r--Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m7
-rw-r--r--Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h54
-rw-r--r--Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m95
-rw-r--r--Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h15
-rw-r--r--Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m17
-rw-r--r--Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h18
-rw-r--r--Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m8
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h16
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m28
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h15
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m5
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h14
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m5
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h25
-rw-r--r--Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m18
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h17
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m7
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h13
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m4
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h15
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m5
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h14
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m5
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h19
-rw-r--r--Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m12
-rw-r--r--FirebaseCommunity.podspec1
151 files changed, 1990 insertions, 399 deletions
diff --git a/.gitignore b/.gitignore
index cd52375..696f1e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+AuthSamples/Sample/Sample.entitlements
AuthSamples/Sample/GoogleService-Info_multi.plist
AuthSamples/Sample/AuthCredentials.h
AuthSamples/Sample/GoogleService-Info.plist
diff --git a/AuthSamples/README.md b/AuthSamples/README.md
index 66c21e1..fb0e660 100644
--- a/AuthSamples/README.md
+++ b/AuthSamples/README.md
@@ -30,6 +30,10 @@ This feature is for advanced testing.
Please follow the instructions in [Sample/ApplicationTemplate.plist](Sample/ApplicationTemplate.plist) to generate the right Application.plist file
+### Sample.entitlements file
+
+In order to test the "Reset Password In App" feature you will need to create a dynamic link for your Firebase project in the Dynamic Links section of the Firebase Console. Once the link is created, please copy the contents of [Sample/SampleTemplate.entitlements](Sample/SampleTemplate.entitlements) into a file named `Sample/Sample.entitlements` and replace `$KAPP_LINKS_DOMAIN` with your own relevant appLinks domain. Your appLinks domains are domains that your app will handle as universal links, in this particular case you can obtain this domain from the aforementioned Dynamic Links section of the Firebase Console.
+
#### Getting your own Credential files
Please follow the instructions in [Sample/AuthCredentialsTemplate.h](Sample/AuthCredentialsTemplate.h) to generate the AuthCredentials.h file.
diff --git a/AuthSamples/Sample/ApplicationDelegate.m b/AuthSamples/Sample/ApplicationDelegate.m
index 594327f..3b49862 100644
--- a/AuthSamples/Sample/ApplicationDelegate.m
+++ b/AuthSamples/Sample/ApplicationDelegate.m
@@ -28,7 +28,10 @@
*/
static __weak id<OpenURLDelegate> gOpenURLDelegate;
-@implementation ApplicationDelegate
+@implementation ApplicationDelegate {
+ // The main view controller of the sample app.
+ MainViewController *_sampleAppMainViewController;
+}
+ (void)setOpenURLDelegate:(nullable id<OpenURLDelegate>)openURLDelegate {
gOpenURLDelegate = openURLDelegate;
@@ -44,9 +47,10 @@ static __weak id<OpenURLDelegate> gOpenURLDelegate;
// Load and present the UI:
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- window.rootViewController =
+ _sampleAppMainViewController =
[[MainViewController alloc] initWithNibName:NSStringFromClass([MainViewController class])
bundle:nil];
+ window.rootViewController = _sampleAppMainViewController;
self.window = window;
[self.window makeKeyAndVisible];
@@ -72,4 +76,13 @@ static __weak id<OpenURLDelegate> gOpenURLDelegate;
return NO;
}
+- (BOOL)application:(UIApplication *)application
+continueUserActivity:(NSUserActivity *)userActivity
+ restorationHandler:(void (^)(NSArray *))restorationHandler {
+ if (userActivity.webpageURL) {
+ return [_sampleAppMainViewController handleIncomingLinkWithURL:userActivity.webpageURL];
+ }
+ return NO;
+}
+
@end
diff --git a/AuthSamples/Sample/AuthCredentialsTemplate.h b/AuthSamples/Sample/AuthCredentialsTemplate.h
index 0c9708a..d0278b1 100644
--- a/AuthSamples/Sample/AuthCredentialsTemplate.h
+++ b/AuthSamples/Sample/AuthCredentialsTemplate.h
@@ -30,3 +30,4 @@ to obtain such an id.
*/
#define KFACEBOOK_APP_ID $KFACEBOOK_APP_ID
+#define KCONTINUE_URL $KCONTINUE_URL
diff --git a/AuthSamples/Sample/Images.xcassets/AppIcon.appiconset/Contents.json b/AuthSamples/Sample/Images.xcassets/AppIcon.appiconset/Contents.json
index 4f6afa6..328f185 100644
--- a/AuthSamples/Sample/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/AuthSamples/Sample/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -1,6 +1,16 @@
{
"images" : [
{
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
"size" : "29x29",
"idiom" : "iphone",
"filename" : "logo_avatar_square_grey_color_1x_ios_21in29dp-1.png",
@@ -55,6 +65,16 @@
"scale" : "3x"
},
{
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
"size" : "29x29",
"idiom" : "ipad",
"filename" : "logo_avatar_square_grey_color_1x_ios_21in29dp.png",
diff --git a/AuthSamples/Sample/MainViewController.h b/AuthSamples/Sample/MainViewController.h
index d2390b1..a4d3583 100644
--- a/AuthSamples/Sample/MainViewController.h
+++ b/AuthSamples/Sample/MainViewController.h
@@ -82,4 +82,11 @@ extern NSString *const kCreateUserAccessibilityID;
*/
- (IBAction)memoryClear;
+/** @fn handleIncomingLinkWithURL:
+ @brief Handles an incoming link to trigger the appropriate OOBCode if possible.
+ @param URL The webURL of the incoming universal link.
+ @return Boolean value indicating whether the incoming link could be handled or not.
+ */
+- (BOOL)handleIncomingLinkWithURL:(NSURL *)URL;
+
@end
diff --git a/AuthSamples/Sample/MainViewController.m b/AuthSamples/Sample/MainViewController.m
index 6171da2..8ee1b39 100644
--- a/AuthSamples/Sample/MainViewController.m
+++ b/AuthSamples/Sample/MainViewController.m
@@ -18,6 +18,7 @@
#import <objc/runtime.h>
+#import "AuthCredentials.h"
#import "FIRAdditionalUserInfo.h"
#import "FirebaseCommunity/FIRApp.h"
#import "FirebaseCommunity/FIRAppInternal.h"
@@ -55,10 +56,11 @@ static NSString *const kTokenRefreshedAlertTitle = @"Token";
*/
static NSString *const kTokenRefreshErrorAlertTitle = @"Get Token Error";
-/** @var kSettingsButtonText
- @brief The text of the "Settings" button.
+/** @var kSettingsButtonTextDesription
+ @brief The description for the text of the "Settings" button.
*/
-static NSString *const kSettingsButtonText = @"[Sample App Settings]";
+static NSString *const kSettingsButtonTextDesription =
+ @"The button text to open sample app settings";
/** @var kUserInfoButtonText
@brief The text of the "Show User Info" button.
@@ -265,6 +267,11 @@ static NSString *const kRequestPasswordReset = @"Send Password Reset Email";
*/
static NSString *const kResetPassword = @"Reset Password";
+/** @var kResetPasswordInApp
+ @brief The text of the "Password Reset" button.
+ */
+static NSString *const kResetPasswordInApp = @"Reset Password In app";
+
/** @var kCheckActionCode
@brief The text of the "Check action code" button.
*/
@@ -465,6 +472,11 @@ static NSString *const kSafariFacebookSignOutMessagePrompt = @"This automated te
static NSString *const kUnlinkAccountMessagePrompt = @"Sign into gmail with an email address "
"that has not been linked to this sample application before. Delete account if necessary.";
+/** @var kPasswordResetAction
+ @brief The value for password reset mode in the action code URL.
+ */
+static NSString *const kPasswordResetAction = @"PASSWORD_RESET";
+
// Declared extern in .h file.
NSString *const kCreateUserAccessibilityID = @"CreateUserAccessibilityID";
@@ -584,7 +596,8 @@ typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable e
}],
]],
[StaticContentTableViewSection sectionWithTitle:kSectionTitleSettings cells:@[
- [StaticContentTableViewCell cellWithTitle:kSettingsButtonText
+ [StaticContentTableViewCell cellWithTitle:NSLocalizedString(@"SETTINGSKEY",
+ kSettingsButtonTextDesription)
action:^{ [weakSelf presentSettings]; }]
]],
[StaticContentTableViewSection sectionWithTitle:kPhoneAuthSectionTitle cells:@[
@@ -636,6 +649,8 @@ typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable e
action:^{ [weakSelf requestVerifyEmail]; }],
[StaticContentTableViewCell cellWithTitle:kRequestPasswordReset
action:^{ [weakSelf requestPasswordReset]; }],
+ [StaticContentTableViewCell cellWithTitle:kResetPasswordInApp
+ action:^{ [weakSelf requestPasswordResetInApp]; }],
[StaticContentTableViewCell cellWithTitle:kResetPassword
action:^{ [weakSelf resetPassword]; }],
[StaticContentTableViewCell cellWithTitle:kCheckActionCode
@@ -747,6 +762,68 @@ typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable e
[self updateUserInfo];
}
+/** @fn parseURL
+ @brief Parses an incoming URL into all available query items.
+ @param urlString The url to be parsed.
+ @return A dictionary of available query items in the target URL.
+ */
+static NSDictionary<NSString *, NSString *> *parseURL(NSString *urlString) {
+ NSString *linkURL = [NSURLComponents componentsWithString:urlString].query;
+ NSArray<NSString *> *URLComponents = [linkURL componentsSeparatedByString:@"&"];
+ NSMutableDictionary<NSString *, NSString *> *queryItems =
+ [[NSMutableDictionary alloc] initWithCapacity:URLComponents.count];
+ for (NSString *component in URLComponents) {
+ NSRange equalRange = [component rangeOfString:@"="];
+ if (equalRange.location != NSNotFound) {
+ NSString *queryItemKey =
+ [[component substringToIndex:equalRange.location] stringByRemovingPercentEncoding];
+ NSString *queryItemValue =
+ [[component substringFromIndex:equalRange.location + 1] stringByRemovingPercentEncoding];
+ if (queryItemKey && queryItemValue) {
+ queryItems[queryItemKey] = queryItemValue;
+ }
+ }
+ }
+ return queryItems;
+}
+
+#pragma mark public methods
+
+- (BOOL)handleIncomingLinkWithURL:(NSURL *)URL {
+ // Parse the query portion of the incoming URL.
+ NSDictionary<NSString *, NSString *> *queryItems =
+ parseURL([NSURLComponents componentsWithString:URL.absoluteString].query);
+
+ // Check that all necessary query items are available.
+ if (!queryItems[@"oobCode"] ||
+ !queryItems[@"mode"]) {
+ return NO;
+ }
+ // Handle Password Reset action.
+ if ([queryItems[@"mode"] isEqualToString:kPasswordResetAction]) {
+ [self showTextInputPromptWithMessage:@"New Password:"
+ completionBlock:^(BOOL userPressedOK, NSString *_Nullable newPassword) {
+ if (!userPressedOK || !newPassword.length) {
+ return;
+ }
+ [[FIRAuth auth] confirmPasswordResetWithCode:queryItems[@"oobCode"]
+ newPassword:newPassword
+ completion:^(NSError *_Nullable error) {
+ [self hideSpinner:^{
+ if (error) {
+ [self logFailure:@"Password reset failed" error:error];
+ [self showMessagePrompt:error.localizedDescription];
+ return;
+ }
+ [self logSuccess:@"Password reset succeeded."];
+ [self showMessagePrompt:@"Password reset succeeded."];
+ }];
+ }];
+ }];
+ }
+ return YES;
+}
+
#pragma mark - Actions
/** @fn signInWithProvider:provider:
@@ -1953,6 +2030,38 @@ typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable e
}];
}
+/** @fn requestPasswordResetInApp
+ @brief Requests a "password reset" email be sent and handled in the app.
+ */
+- (void)requestPasswordResetInApp {
+ [self showTextInputPromptWithMessage:@"Email:"
+ completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) {
+ if (!userPressedOK || !userInput.length) {
+ return;
+ }
+ [self showSpinner:^{
+ FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
+ [actionCodeSettings setIOSBundleID:[NSBundle mainBundle].bundleIdentifier];
+ actionCodeSettings.URL = [NSURL URLWithString:KCONTINUE_URL];
+ actionCodeSettings.handleCodeInApp = YES;
+
+ [[FIRAuth auth] sendPasswordResetWithEmail:userInput
+ actionCodeSettings:actionCodeSettings
+ completion:^(NSError *_Nullable error) {
+ [self hideSpinner:^{
+ if (error) {
+ [self logFailure:@"request password reset failed" error:error];
+ [self showMessagePrompt:error.localizedDescription];
+ return;
+ }
+ [self logSuccess:@"request password reset succeeded."];
+ [self showMessagePrompt:@"Sent"];
+ }];
+ }];
+ }];
+ }];
+}
+
/** @fn resetPassword
@brief Performs a password reset operation.
*/
diff --git a/AuthSamples/Sample/Sample.entitlements b/AuthSamples/Sample/SampleTemplate.entitlements
index 9199dae..87371f3 100644
--- a/AuthSamples/Sample/Sample.entitlements
+++ b/AuthSamples/Sample/SampleTemplate.entitlements
@@ -6,5 +6,9 @@
<string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
<key>aps-environment</key>
<string>development</string>
+ <key>com.apple.developer.associated-domains</key>
+ <array>
+ <string>applinks:$KAPP_LINKS_DOMAIN</string>
+ </array>
</dict>
</plist>
diff --git a/AuthSamples/Sample/SettingsViewController.m b/AuthSamples/Sample/SettingsViewController.m
index 61af637..23fa2c7 100644
--- a/AuthSamples/Sample/SettingsViewController.m
+++ b/AuthSamples/Sample/SettingsViewController.m
@@ -210,6 +210,15 @@ static NSString *hexString(NSData *data) {
action:^{
[weakSelf clearAppCredential];
}],
+ [StaticContentTableViewCell cellWithTitle:@"Auth Language"
+ value:[FIRAuth auth].languageCode ?: @"[none]"
+ action:^{
+ [weakSelf showLanguageInput];
+ }],
+ [StaticContentTableViewCell cellWithTitle:@"Use App language" action:^{
+ [[FIRAuth auth] useAppLanguage];
+ [weakSelf loadTableView];
+ }],
]],
]];
}
@@ -333,4 +342,18 @@ static NSString *hexString(NSData *data) {
}];
}
+/** @fn showLanguageInput
+ @brief Show language code input field.
+ */
+- (void)showLanguageInput {
+ [self showTextInputPromptWithMessage:@"Enter Language Code For Auth:"
+ completionBlock:^(BOOL userPressedOK, NSString *_Nullable languageCode) {
+ if (!userPressedOK) {
+ return;
+ }
+ [FIRAuth auth].languageCode = languageCode.length ? languageCode : nil;
+ [self loadTableView];
+ }];
+}
+
@end
diff --git a/AuthSamples/Sample/en-GB.lproj/Localizable.strings b/AuthSamples/Sample/en-GB.lproj/Localizable.strings
new file mode 100644
index 0000000..bbbc3ae
--- /dev/null
+++ b/AuthSamples/Sample/en-GB.lproj/Localizable.strings
@@ -0,0 +1,2 @@
+/* Text label for button which opens sample app settings */
+"SETTINGSKEY" = "Settings";
diff --git a/AuthSamples/Sample/es-MX.lproj/Localizable.strings b/AuthSamples/Sample/es-MX.lproj/Localizable.strings
new file mode 100644
index 0000000..3a487ce
--- /dev/null
+++ b/AuthSamples/Sample/es-MX.lproj/Localizable.strings
@@ -0,0 +1,2 @@
+/* Text label for button which opens sample app settings */
+"SETTINGSKEY" = "Ajustes";
diff --git a/AuthSamples/Sample/fr-FR.lproj/Localizable.strings b/AuthSamples/Sample/fr-FR.lproj/Localizable.strings
new file mode 100644
index 0000000..a500427
--- /dev/null
+++ b/AuthSamples/Sample/fr-FR.lproj/Localizable.strings
@@ -0,0 +1,2 @@
+/* Text label for button which opens sample app settings */
+"SETTINGSKEY" = "Préférence";
diff --git a/AuthSamples/Sample/ru-RU.lproj/Localizable.strings b/AuthSamples/Sample/ru-RU.lproj/Localizable.strings
new file mode 100644
index 0000000..7b8fc66
--- /dev/null
+++ b/AuthSamples/Sample/ru-RU.lproj/Localizable.strings
@@ -0,0 +1,2 @@
+/* Text label for button which opens sample app settings */
+"SETTINGSKEY" = "настройки";
diff --git a/AuthSamples/Samples.xcodeproj/project.pbxproj b/AuthSamples/Samples.xcodeproj/project.pbxproj
index 4f57a16..3b1c2d8 100644
--- a/AuthSamples/Samples.xcodeproj/project.pbxproj
+++ b/AuthSamples/Samples.xcodeproj/project.pbxproj
@@ -26,6 +26,7 @@
52C975C71EE10B1304EBBEB2 /* Pods_SwiftSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8C39EF1F42A0C750FF5186 /* Pods_SwiftSample.framework */; };
569C3F4E18627674CABE02AE /* Pods_EarlGreyTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEE2E563FADF8C3382956B4F /* Pods_EarlGreyTests.framework */; };
67AFFB52FF0FC4668D92F2E4 /* Pods_Sample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5FE06BD9AA795DFBA9EFAAD /* Pods_Sample.framework */; };
+ 7EDFD35B1F0EA29200B29DC5 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7EDFD35D1F0EA29200B29DC5 /* Localizable.strings */; };
A7609DCAD8A247411F27EA14 /* Pods_TestApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDD2401395E91D0923BC5CD8 /* Pods_TestApp.framework */; };
AB62D09AF8C1196E07F37D3B /* Pods_SwiftSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F689EE8E0E6F83D82429F0 /* Pods_SwiftSample.framework */; };
BD555A1DCF4E889DC3338248 /* Pods_FirebaseAuthUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FFAD3F37BC4D7CEF0CAD579 /* Pods_FirebaseAuthUnitTests.framework */; };
@@ -178,6 +179,10 @@
4FFAD3F37BC4D7CEF0CAD579 /* Pods_FirebaseAuthUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseAuthUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
57150555A6B03949ECB58AD9 /* Pods-TestApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TestApp.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TestApp/Pods-TestApp.debug.xcconfig"; sourceTree = "<group>"; };
6EC09307D636721EAAB89BB2 /* Pods_ApiTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ApiTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7E0BC64A1F199D86008BE4E0 /* fr-FR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-FR"; path = "fr-FR.lproj/Localizable.strings"; sourceTree = "<group>"; };
+ 7E0BC64E1F19A77C008BE4E0 /* ru-RU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ru-RU"; path = "ru-RU.lproj/Localizable.strings"; sourceTree = "<group>"; };
+ 7EDFD35C1F0EA29200B29DC5 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Localizable.strings"; sourceTree = "<group>"; };
+ 7EDFD3771F0EA2A900B29DC5 /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/Localizable.strings"; sourceTree = "<group>"; };
81ED9C5F2E61472DE3FA17CC /* Pods-ApiTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ApiTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ApiTests/Pods-ApiTests.release.xcconfig"; sourceTree = "<group>"; };
920E926BD468CBC593349A36 /* Pods-FirebaseAuthUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseAuthUnitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseAuthUnitTests/Pods-FirebaseAuthUnitTests.debug.xcconfig"; sourceTree = "<group>"; };
94E3B3EB70D34E55CFF2E45D /* Pods-EarlGreyTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EarlGreyTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-EarlGreyTests/Pods-EarlGreyTests.release.xcconfig"; sourceTree = "<group>"; };
@@ -411,6 +416,7 @@
DECE04851E9FEA7500164CA4 /* Sample */ = {
isa = PBXGroup;
children = (
+ 7EDFD35D1F0EA29200B29DC5 /* Localizable.strings */,
D930B7611EDF9AAD001265FD /* Sample.entitlements */,
DECEA5661EBBDFB400273585 /* AuthCredentials.h */,
DECE049B1E9FEAE600164CA4 /* Application.plist */,
@@ -821,6 +827,9 @@
vi,
zh_CN,
zh_TW,
+ "es-419",
+ "fr-FR",
+ "ru-RU",
);
mainGroup = DECE045D1E9FEA1000164CA4;
productRefGroup = DECE04671E9FEA1000164CA4 /* Products */;
@@ -848,6 +857,7 @@
D99C31A11ED7A0ED00607534 /* GoogleService-Info_multi.plist in Resources */,
DECE04ED1E9FEAE600164CA4 /* MainViewController.xib in Resources */,
DECE04F61E9FEAE600164CA4 /* UserInfoViewController.xib in Resources */,
+ 7EDFD35B1F0EA29200B29DC5 /* Localizable.strings in Resources */,
DECE04F01E9FEAE600164CA4 /* SettingsViewController.xib in Resources */,
DECE04E91E9FEAE600164CA4 /* GoogleService-Info.plist in Resources */,
);
@@ -1323,6 +1333,17 @@
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
+ 7EDFD35D1F0EA29200B29DC5 /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 7EDFD35C1F0EA29200B29DC5 /* en-GB */,
+ 7EDFD3771F0EA2A900B29DC5 /* es-MX */,
+ 7E0BC64A1F199D86008BE4E0 /* fr-FR */,
+ 7E0BC64E1F19A77C008BE4E0 /* ru-RU */,
+ );
+ name = Localizable.strings;
+ sourceTree = "<group>";
+ };
DEE13AC01EA1764B00D1BABA /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
diff --git a/Example/Auth/Tests/FIRAuthBackendCreateAuthURITests.m b/Example/Auth/Tests/FIRAuthBackendCreateAuthURITests.m
index 5d40343..12f2b38 100644
--- a/Example/Auth/Tests/FIRAuthBackendCreateAuthURITests.m
+++ b/Example/Auth/Tests/FIRAuthBackendCreateAuthURITests.m
@@ -68,11 +68,12 @@ static NSString *const kTestProviderID2 = @"facebook.com";
- (void)testRequestAndResponseEncoding {
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
-
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc] initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:requestConfiguration];
__block FIRCreateAuthURIResponse *createAuthURIResponse;
__block NSError *createAuthURIError;
diff --git a/Example/Auth/Tests/FIRAuthBackendRPCImplementationTests.m b/Example/Auth/Tests/FIRAuthBackendRPCImplementationTests.m
index 5930e13..b50e866 100644
--- a/Example/Auth/Tests/FIRAuthBackendRPCImplementationTests.m
+++ b/Example/Auth/Tests/FIRAuthBackendRPCImplementationTests.m
@@ -19,6 +19,7 @@
#import "FIRAuthErrorUtils.h"
#import "FIRAuthInternalErrors.h"
#import "FIRAuthBackend.h"
+#import "FIRAuthRequestConfiguration.h"
#import "FIRAuthRPCRequest.h"
#import "FIRAuthRPCResponse.h"
#import "FIRFakeBackendRPCIssuer.h"
@@ -29,6 +30,11 @@
*/
static NSString *const kFakeRequestURL = @"https://www.google.com/";
+/** @var kFakeAPIkey
+ @brief Used as a fake APIKey for a fake RPC request. We don't test this here.
+ */
+static NSString *const kFakeAPIkey = @"FAKE_API_KEY";
+
/** @var kFakeErrorDomain
@brief A value to use for fake @c NSErrors.
*/
@@ -230,6 +236,12 @@ static NSString *const kTestValue = @"TestValue";
return [NSURL URLWithString:kFakeRequestURL];
}
+- (FIRAuthRequestConfiguration *)requestConfiguration {
+ FIRAuthRequestConfiguration *fakeConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kFakeAPIkey];
+ return fakeConfiguration;
+}
+
- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
if (error) {
*error = _requestEncodingError;
diff --git a/Example/Auth/Tests/FIRAuthDispatcherTests.m b/Example/Auth/Tests/FIRAuthDispatcherTests.m
index 9b0abc4..fc8cab1 100644
--- a/Example/Auth/Tests/FIRAuthDispatcherTests.m
+++ b/Example/Auth/Tests/FIRAuthDispatcherTests.m
@@ -98,7 +98,7 @@ id<OS_dispatch_queue> testWorkQueue;
XCTFail();
}];
[self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil];
- dispatcher.dispatchAfterImplementation = nil;;
+ dispatcher.dispatchAfterImplementation = nil;
}
diff --git a/Example/Auth/Tests/FIRAuthTests.m b/Example/Auth/Tests/FIRAuthTests.m
index 299c0d9..8513063 100644
--- a/Example/Auth/Tests/FIRAuthTests.m
+++ b/Example/Auth/Tests/FIRAuthTests.m
@@ -269,7 +269,7 @@ static const NSTimeInterval kWaitInterval = .5;
*/
- (void)testAppAPIkey {
FIRAuth *auth = [FIRAuth auth];
- XCTAssertEqualObjects(auth.APIKey, kAPIKey);
+ XCTAssertEqualObjects(auth.requestConfiguration.APIKey, kAPIKey);
}
/** @fn testAppAssociation
diff --git a/Example/Auth/Tests/FIRCreateAuthURIRequestTests.m b/Example/Auth/Tests/FIRCreateAuthURIRequestTests.m
index 409c232..523c61a 100644
--- a/Example/Auth/Tests/FIRCreateAuthURIRequestTests.m
+++ b/Example/Auth/Tests/FIRCreateAuthURIRequestTests.m
@@ -83,10 +83,12 @@ static NSString *const kExpectedAPIURL =
@brief Tests the encoding of an create auth URI request.
*/
- (void)testEmailVerificationRequest {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc]initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend createAuthURI:request
callback:^(FIRCreateAuthURIResponse *_Nullable response,
diff --git a/Example/Auth/Tests/FIRCreateAuthURIResponseTests.m b/Example/Auth/Tests/FIRCreateAuthURIResponseTests.m
index 11cab9d..06242a0 100644
--- a/Example/Auth/Tests/FIRCreateAuthURIResponseTests.m
+++ b/Example/Auth/Tests/FIRCreateAuthURIResponseTests.m
@@ -69,10 +69,15 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
@end
@implementation FIRCreateAuthURIResponseTests{
/** @var _RPCIssuer
- @brief This backend RPC issuer is used to fake network responses for each test in the suite.
+ @brief This backend RPC issuer is used to fake network responses for each test in the suite.
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -80,9 +85,11 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -95,7 +102,7 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc]initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRCreateAuthURIResponse *RPCResponse;
@@ -112,7 +119,7 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
XCTAssert(callbackInvoked);
XCTAssertNotNil(RPCError);
- XCTAssertEqual(RPCError.code, FIRAuthErrorCodeInternalError);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeMissingContinueURI);
XCTAssertNil(RPCResponse);
}
@@ -123,7 +130,7 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc]initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRCreateAuthURIResponse *RPCResponse;
@@ -151,7 +158,7 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc]initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRCreateAuthURIResponse *RPCResponse;
@@ -179,7 +186,7 @@ static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL:";
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc]initWithIdentifier:kTestIdentifier
continueURI:kTestContinueURI
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRCreateAuthURIResponse *RPCResponse;
diff --git a/Example/Auth/Tests/FIRDeleteAccountRequestTests.m b/Example/Auth/Tests/FIRDeleteAccountRequestTests.m
index 05f1d47..ebc4ac4 100644
--- a/Example/Auth/Tests/FIRDeleteAccountRequestTests.m
+++ b/Example/Auth/Tests/FIRDeleteAccountRequestTests.m
@@ -78,10 +78,12 @@ static NSString *const kExpectedAPIURL =
@brief Tests the delete account request.
*/
- (void)testDeleteAccountRequest {
-
- FIRDeleteAccountRequest *request = [[FIRDeleteAccountRequest alloc] initWithAPIKey:kTestAPIKey
- localID:kLocalID
- accessToken:kAccessToken];
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
+ FIRDeleteAccountRequest *request =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:kLocalID
+ accessToken:kAccessToken
+ requestConfiguration:requestConfiguration];
__block BOOL callbackInvoked;
__block NSError *RPCError;
[FIRAuthBackend deleteAccount:request
diff --git a/Example/Auth/Tests/FIRDeleteAccountResponseTests.m b/Example/Auth/Tests/FIRDeleteAccountResponseTests.m
index f75735e..998bff8 100644
--- a/Example/Auth/Tests/FIRDeleteAccountResponseTests.m
+++ b/Example/Auth/Tests/FIRDeleteAccountResponseTests.m
@@ -65,6 +65,11 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -72,9 +77,11 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -84,9 +91,10 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
@brief This test simulates the occurrence of a @c userDisabled error.
*/
- (void)testUserDisabledError {
- FIRDeleteAccountRequest *request = [[FIRDeleteAccountRequest alloc] initWithAPIKey:kTestAPIKey
- localID:kLocalID
- accessToken:kAccessToken];
+ FIRDeleteAccountRequest *request =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:kLocalID
+ accessToken:kAccessToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block NSError *RPCError;
@@ -107,9 +115,10 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
@brief This test simulates the occurrence of a @c invalidUserToken error.
*/
- (void)testinvalidUserTokenError {
- FIRDeleteAccountRequest *request = [[FIRDeleteAccountRequest alloc] initWithAPIKey:kTestAPIKey
- localID:kLocalID
- accessToken:kAccessToken];
+ FIRDeleteAccountRequest *request =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:kLocalID
+ accessToken:kAccessToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block NSError *RPCError;
@@ -130,9 +139,10 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
@brief This test simulates the occurrence of a @c credentialTooOld error.
*/
- (void)testrequiredRecentLoginError {
- FIRDeleteAccountRequest *request = [[FIRDeleteAccountRequest alloc] initWithAPIKey:kTestAPIKey
- localID:kLocalID
- accessToken:kAccessToken];
+ FIRDeleteAccountRequest *request =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:kLocalID
+ accessToken:kAccessToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block NSError *RPCError;
[FIRAuthBackend deleteAccount:request
@@ -152,9 +162,10 @@ static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGI
@brief This test simulates a completed succesful deleteAccount operation.
*/
- (void)testSuccessfulDeleteAccountResponse {
- FIRDeleteAccountRequest *request = [[FIRDeleteAccountRequest alloc] initWithAPIKey:kTestAPIKey
- localID:kLocalID
- accessToken:kAccessToken];
+ FIRDeleteAccountRequest *request =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:kLocalID
+ accessToken:kAccessToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block NSError *RPCError;
[FIRAuthBackend deleteAccount:request
diff --git a/Example/Auth/Tests/FIRFakeBackendRPCIssuer.m b/Example/Auth/Tests/FIRFakeBackendRPCIssuer.m
index 93589e7..bdc7706 100644
--- a/Example/Auth/Tests/FIRFakeBackendRPCIssuer.m
+++ b/Example/Auth/Tests/FIRFakeBackendRPCIssuer.m
@@ -28,10 +28,11 @@ static NSString *const kFakeErrorDomain = @"fake domain";
FIRAuthBackendRPCIssuerCompletionHandler _handler;
}
-- (void)asyncPostToURL:(NSURL *)URL
- body:(NSData *)body
- contentType:(NSString *)contentType
- completionHandler:(FIRAuthBackendRPCIssuerCompletionHandler)handler {
+- (void)asyncPostToURLWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ URL:(NSURL *)URL
+ body:(NSData *)body
+ contentType:(NSString *)contentType
+ completionHandler:(FIRAuthBackendRPCIssuerCompletionHandler)handler {
_requestURL = [URL copy];
_requestData = body;
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:body options:0 error:nil];
diff --git a/Example/Auth/Tests/FIRGetAccountInfoRequestTests.m b/Example/Auth/Tests/FIRGetAccountInfoRequestTests.m
index 6f713b0..4e4a91d 100644
--- a/Example/Auth/Tests/FIRGetAccountInfoRequestTests.m
+++ b/Example/Auth/Tests/FIRGetAccountInfoRequestTests.m
@@ -71,8 +71,11 @@ static NSString *const kExpectedAPIURL =
@brief Tests the set account info request.
*/
- (void)testGetAccountInfoRequest {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRGetAccountInfoRequest *request =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey accessToken:kTestAccessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:kTestAccessToken
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend getAccountInfo:request callback:^(FIRGetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
diff --git a/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m b/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m
index b6c261e..d9433bb 100644
--- a/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m
+++ b/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m
@@ -150,8 +150,11 @@ static NSString *const kEmailVerifiedKey = @"emailVerified";
flow.
*/
- (void)testGetAccountInfoUnexpectedResponseError {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRGetAccountInfoRequest *request =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey accessToken:kTestAccessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:kTestAccessToken
+ requestConfiguration:requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetAccountInfoResponse *RPCResponse;
@@ -184,8 +187,11 @@ static NSString *const kEmailVerifiedKey = @"emailVerified";
@brief This test simulates a successful @c GetAccountInfo flow.
*/
- (void)testSuccessfulGetAccountInfoResponse {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRGetAccountInfoRequest *request =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey accessToken:kTestAccessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:kTestAccessToken
+ requestConfiguration:requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetAccountInfoResponse *RPCResponse;
diff --git a/Example/Auth/Tests/FIRGetOOBConfirmationCodeRequestTests.m b/Example/Auth/Tests/FIRGetOOBConfirmationCodeRequestTests.m
index d5a22aa..965af8a 100644
--- a/Example/Auth/Tests/FIRGetOOBConfirmationCodeRequestTests.m
+++ b/Example/Auth/Tests/FIRGetOOBConfirmationCodeRequestTests.m
@@ -16,6 +16,7 @@
#import <XCTest/XCTest.h>
+#import "FIRActionCodeSettings.h"
#import "FIRAuthErrors.h"
#import "FIRAuthBackend.h"
#import "FIRGetOOBConfirmationCodeRequest.h"
@@ -68,17 +69,74 @@ static NSString *const kAccessTokenKey = @"idToken";
*/
static NSString *const kTestAccessToken = @"ACCESS_TOKEN";
+/** @var kIosBundleID
+ @brief Fake iOS bundle ID for testing.
+ */
+static NSString *const kIosBundleID = @"testBundleID";
+
+/** @var kAndroidPackageName
+ @brief Fake android package name for testing.
+ */
+static NSString *const kAndroidPackageName = @"adroidpackagename";
+
+/** @var kContinueURL
+ @brief Fake string value of continue url.
+ */
+static NSString *const kContinueURL = @"continueURL";
+
+/** @var kAndroidMinimumVersion
+ @brief Fake android minimum version for testing.
+ */
+static NSString *const kAndroidMinimumVersion = @"3.0";
+
+/** @var kContinueURLKey
+ @brief The key for the "continue URL" value in the request.
+ */
+static NSString *const kContinueURLKey = @"continueUrl";
+
+/** @var kIosBundeIDKey
+ @brief The key for the "iOS Bundle Identifier" value in the request.
+ */
+static NSString *const kIosBundleIDKey = @"iOSBundleId";
+
+/** @var kAndroidPackageNameKey
+ @brief The key for the "Android Package Name" value in the request.
+ */
+static NSString *const kAndroidPackageNameKey = @"androidPackageName";
+
+/** @var kAndroidInstallAppKey
+ @brief The key for the request parameter indicating whether the android app should be installed
+ or not.
+ */
+static NSString *const kAndroidInstallAppKey = @"androidInstallApp";
+
+/** @var kAndroidMinimumVersionKey
+ @brief The key for the "minimum Android version supported" value in the request.
+ */
+static NSString *const kAndroidMinimumVersionKey = @"androidMinimumVersion";
+
+/** @var kCanHandleCodeInAppKey
+ @brief The key for the request parameter indicating whether the action code can be handled in
+ the app or not.
+ */
+static NSString *const kCanHandleCodeInAppKey = @"canHandleCodeInApp";
+
/** @class FIRGetOOBConfirmationCodeRequestTests
@brief Tests for @c FIRGetOOBConfirmationCodeRequest.
*/
@interface FIRGetOOBConfirmationCodeRequestTests : XCTestCase
@end
@implementation FIRGetOOBConfirmationCodeRequestTests {
- /** @var _RPCIssuer
+ /** @var _RPCIssuer
@brief This backend RPC issuer is used to fake network responses for each test in the suite.
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -86,9 +144,11 @@ static NSString *const kTestAccessToken = @"ACCESS_TOKEN";
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -100,7 +160,8 @@ static NSString *const kTestAccessToken = @"ACCESS_TOKEN";
- (void)testPasswordResetRequest {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -118,15 +179,26 @@ static NSString *const kTestAccessToken = @"ACCESS_TOKEN";
XCTAssert([_RPCIssuer.decodedRequest isKindOfClass:[NSDictionary class]]);
XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kEmailKey], kTestEmail);
XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kRequestTypeKey], kPasswordResetRequestTypeValue);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kContinueURLKey], kContinueURL);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kIosBundleIDKey], kIosBundleID);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidPackageNameKey], kAndroidPackageName);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidMinimumVersionKey],
+ kAndroidMinimumVersion);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidInstallAppKey],
+ [NSNumber numberWithBool:YES]);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kCanHandleCodeInAppKey],
+ [NSNumber numberWithBool:YES]);
}
/** @fn testEmailVerificationRequest
@brief Tests the encoding of an email verification request.
*/
- (void)testEmailVerificationRequest {
+ FIRActionCodeSettings *testSettings = [self fakeActionCodeSettings];
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest verifyEmailRequestWithAccessToken:kTestAccessToken
- APIKey:kTestAPIKey];
+ actionCodeSettings:testSettings
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -144,6 +216,32 @@ static NSString *const kTestAccessToken = @"ACCESS_TOKEN";
XCTAssert([_RPCIssuer.decodedRequest isKindOfClass:[NSDictionary class]]);
XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAccessTokenKey], kTestAccessToken);
XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kRequestTypeKey], kVerifyEmailRequestTypeValue);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kContinueURLKey], kContinueURL);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kIosBundleIDKey], kIosBundleID);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidPackageNameKey], kAndroidPackageName);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidMinimumVersionKey],
+ kAndroidMinimumVersion);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kAndroidInstallAppKey],
+ [NSNumber numberWithBool:YES]);
+ XCTAssertEqualObjects(_RPCIssuer.decodedRequest[kCanHandleCodeInAppKey],
+ [NSNumber numberWithBool:YES]);
+}
+
+#pragma mark - Helpers
+
+/** @fn fakeActionCodeSettings
+ @brief Constructs and returns a fake instance of @c FIRActionCodeSettings for testing.
+ @return An instance of @c FIRActionCodeSettings for testing.
+ */
+- (FIRActionCodeSettings *)fakeActionCodeSettings {
+ FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc]init];
+ [actionCodeSettings setIOSBundleID:kIosBundleID];
+ [actionCodeSettings setAndroidPackageName:kAndroidPackageName
+ installIfNotAvailable:YES
+ minimumVersion:kAndroidMinimumVersion];
+ actionCodeSettings.handleCodeInApp = YES;
+ actionCodeSettings.URL = [NSURL URLWithString:kContinueURL];
+ return actionCodeSettings;
}
@end
diff --git a/Example/Auth/Tests/FIRGetOOBConfirmationCodeResponseTests.m b/Example/Auth/Tests/FIRGetOOBConfirmationCodeResponseTests.m
index 98c9d8e..71ab41c 100644
--- a/Example/Auth/Tests/FIRGetOOBConfirmationCodeResponseTests.m
+++ b/Example/Auth/Tests/FIRGetOOBConfirmationCodeResponseTests.m
@@ -16,6 +16,7 @@
#import <XCTest/XCTest.h>
+#import "FIRActionCodeSettings.h"
#import "FIRAuthErrors.h"
#import "FIRAuthBackend.h"
#import "FIRGetOOBConfirmationCodeRequest.h"
@@ -69,6 +70,23 @@ static NSString *const kInvalidMessagePayloadErrorMessage = @"INVALID_MESSAGE_PA
*/
static NSString *const kInvalidSenderErrorMessage = @"INVALID_SENDER";
+/** @var kMissingIosBundleIDErrorMessage
+ @brief This is the error message the server will respond with if iOS bundle ID is missing but
+ the iOS App store ID is provided.
+ */
+static NSString *const kMissingIosBundleIDErrorMessage = @"MISSING_IOS_BUNDLE_ID";
+
+/** @var kMissingAndroidPackageNameErrorMessage
+ @brief This is the error message the server will respond with if Android Package Name is missing
+ but the flag indicating the app should be installed is set to true.
+ */
+static NSString *const kMissingAndroidPackageNameErrorMessage = @"MISSING_ANDROID_PACKAGE_NAME";
+
+/** @var kUnauthorizedDomainErrorMessage
+ @brief This is the error message the server will respond with if the domain of the continue URL
+ specified is not whitelisted in the firebase console.
+ */
+static NSString *const kUnauthorizedDomainErrorMessage = @"ERROR_UNAUTHORIZED_DOMAIN";
/** @var kInvalidRecipientEmailErrorMessage
@brief This is the prefix for the error message the server responds with if the recipient email
@@ -76,6 +94,23 @@ static NSString *const kInvalidSenderErrorMessage = @"INVALID_SENDER";
*/
static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_EMAIL";
+/** @var kInvalidContinueURIErrorMessage
+ @brief This is the error returned by the backend if the continue URL provided in the request
+ is invalid.
+ */
+static NSString *const kInvalidContinueURIErrorMessage = @"INVALID_CONTINUE_URI";
+
+/** @var kMissingContinueURIErrorMessage
+ @brief This is the error message the server will respond with if there was no continue URI
+ present in a request that required one.
+ */
+static NSString *const kMissingContinueURIErrorMessage = @"MISSING_CONTINUE_URI";
+
+/** @var kIosBundleID
+ @brief Fake iOS bundle ID for testing.
+ */
+static NSString *const kIosBundleID = @"testBundleID";
+
/** @class FIRGetOOBConfirmationCodeResponseTests
@brief Tests for @c FIRGetOOBConfirmationCodeResponse.
*/
@@ -87,6 +122,11 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -94,9 +134,11 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -109,7 +151,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testSuccessfulPasswordResetResponse {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -139,7 +182,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testSuccessfulPasswordResetResponseWithoutOOBCode {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -167,7 +211,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testEmailNotFoundError {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -195,7 +240,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testInvalidEmailError {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -222,7 +268,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testInvalidMessagePayloadError {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -246,7 +293,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testInvalidSenderError {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -264,13 +312,139 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
XCTAssertEqual(RPCError.code, FIRAuthErrorCodeInvalidSender);
}
+/** @fn testMissingIosBundleIDError
+ @brief Tests for @c FIRAuthErrorCodeMissingIosBundleID.
+ */
+- (void)testMissingIosBundleIDError {
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
+
+ __block BOOL callbackInvoked;
+ __block FIRGetOOBConfirmationCodeResponse *RPCResponse;
+ __block NSError *RPCError;
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callbackInvoked = YES;
+ RPCResponse = response;
+ RPCError = error;
+ }];
+ [_RPCIssuer respondWithServerErrorMessage:kMissingIosBundleIDErrorMessage];
+ XCTAssert(callbackInvoked);
+ XCTAssertNil(RPCResponse);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeMissingIosBundleID);
+}
+
+/** @fn testMissingAndroidPackageNameError
+ @brief Tests for @c FIRAuthErrorCodeMissingAndroidPackageName.
+ */
+- (void)testMissingAndroidPackageNameError {
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
+
+ __block BOOL callbackInvoked;
+ __block FIRGetOOBConfirmationCodeResponse *RPCResponse;
+ __block NSError *RPCError;
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callbackInvoked = YES;
+ RPCResponse = response;
+ RPCError = error;
+ }];
+ [_RPCIssuer respondWithServerErrorMessage:kMissingAndroidPackageNameErrorMessage];
+ XCTAssert(callbackInvoked);
+ XCTAssertNil(RPCResponse);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeMissingAndroidPackageName);
+}
+
+/** @fn testUnauthorizedDomainError
+ @brief Tests for @c FIRAuthErrorCodeUnauthorizedDomain.
+ */
+- (void)testUnauthorizedDomainError {
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
+
+ __block BOOL callbackInvoked;
+ __block FIRGetOOBConfirmationCodeResponse *RPCResponse;
+ __block NSError *RPCError;
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callbackInvoked = YES;
+ RPCResponse = response;
+ RPCError = error;
+ }];
+ [_RPCIssuer respondWithServerErrorMessage:kUnauthorizedDomainErrorMessage];
+ XCTAssert(callbackInvoked);
+ XCTAssertNil(RPCResponse);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeUnauthorizedDomain);
+}
+
+/** @fn testInvalidContinueURIError
+ @brief Tests for @c FIRAuthErrorCodeInvalidContinueAuthURI.
+ */
+- (void)testInvalidContinueURIError {
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
+
+ __block BOOL callbackInvoked;
+ __block FIRGetOOBConfirmationCodeResponse *RPCResponse;
+ __block NSError *RPCError;
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callbackInvoked = YES;
+ RPCResponse = response;
+ RPCError = error;
+ }];
+ [_RPCIssuer respondWithServerErrorMessage:kInvalidContinueURIErrorMessage];
+ XCTAssert(callbackInvoked);
+ XCTAssertNil(RPCResponse);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeInvalidContinueURI);
+}
+
+/** @fn testMissingContinueURIError
+ @brief Tests for @c FIRAuthErrorCodeMissingContinueURI.
+ */
+- (void)testMissingContinueURIError {
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
+
+ __block BOOL callbackInvoked;
+ __block FIRGetOOBConfirmationCodeResponse *RPCResponse;
+ __block NSError *RPCError;
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callbackInvoked = YES;
+ RPCResponse = response;
+ RPCError = error;
+ }];
+ [_RPCIssuer respondWithServerErrorMessage:kMissingContinueURIErrorMessage];
+ XCTAssert(callbackInvoked);
+ XCTAssertNil(RPCResponse);
+ XCTAssertEqual(RPCError.code, FIRAuthErrorCodeMissingContinueURI);
+}
+
/** @fn testInvalidRecipientEmailError
@brief Tests for @c FIRAuthErrorCodeInvalidRecipientEmail.
*/
- (void)testInvalidRecipientEmailError {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
@@ -295,7 +469,8 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
- (void)testSuccessfulEmailVerificationResponse {
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:kTestEmail
- APIKey:kTestAPIKey];
+ actionCodeSettings:[self fakeActionCodeSettings]
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRGetOOBConfirmationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -317,4 +492,16 @@ static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_
XCTAssertEqualObjects(RPCResponse.OOBCode, kTestOOBCode);
}
+#pragma mark - Helpers
+
+/** @fn fakeActionCodeSettings
+ @brief Constructs and returns a fake instance of @c FIRActionCodeSettings for testing.
+ @return An instance of @c FIRActionCodeSettings for testing.
+ */
+- (FIRActionCodeSettings *)fakeActionCodeSettings {
+ FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
+ [actionCodeSettings setIOSBundleID:kIosBundleID];
+ return actionCodeSettings;
+}
+
@end
diff --git a/Example/Auth/Tests/FIRGitHubAuthProviderTests.m b/Example/Auth/Tests/FIRGitHubAuthProviderTests.m
index 7d02d74..6ac3792 100644
--- a/Example/Auth/Tests/FIRGitHubAuthProviderTests.m
+++ b/Example/Auth/Tests/FIRGitHubAuthProviderTests.m
@@ -42,9 +42,12 @@ static NSString *const kAPIKey = @"APIKey";
the appropriate fields in a verify assertion request.
*/
- (void)testCredentialWithToken {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kAPIKey];
FIRAuthCredential *credential = [FIRGitHubAuthProvider credentialWithToken:kGitHubToken];
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kAPIKey providerID:FIRGitHubAuthProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:FIRGitHubAuthProviderID
+ requestConfiguration:requestConfiguration];
[credential prepareVerifyAssertionRequest:request];
XCTAssertEqualObjects(request.providerAccessToken, kGitHubToken);
}
diff --git a/Example/Auth/Tests/FIRPhoneAuthProviderTests.m b/Example/Auth/Tests/FIRPhoneAuthProviderTests.m
index 71bdd5d..05f3774 100644
--- a/Example/Auth/Tests/FIRPhoneAuthProviderTests.m
+++ b/Example/Auth/Tests/FIRPhoneAuthProviderTests.m
@@ -86,11 +86,6 @@ static NSString *const kTestVerificationCode = @"verificationCode";
*/
static const NSTimeInterval kTestTimeout = 5;
-/** @var kAPIKey
- @brief The fake API key.
- */
-static NSString *const kAPIKey = @"FAKE_API_KEY";
-
/** @var kExpectationTimeout
@brief The maximum time waiting for expectations to fulfill.
*/
diff --git a/Example/Auth/Tests/FIRResetPasswordRequestTests.m b/Example/Auth/Tests/FIRResetPasswordRequestTests.m
index d0ccc5d..50cd2fb 100644
--- a/Example/Auth/Tests/FIRResetPasswordRequestTests.m
+++ b/Example/Auth/Tests/FIRResetPasswordRequestTests.m
@@ -84,10 +84,12 @@ static NSString *const kExpectedAPIURL =
@brief Tests the reset password reqeust.
*/
- (void)testResetPasswordRequest {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend resetPassword:request callback:^(FIRResetPasswordResponse *_Nullable response,
NSError *_Nullable error) {
diff --git a/Example/Auth/Tests/FIRResetPasswordResponseTests.m b/Example/Auth/Tests/FIRResetPasswordResponseTests.m
index 51f1155..a6a7cbb 100644
--- a/Example/Auth/Tests/FIRResetPasswordResponseTests.m
+++ b/Example/Auth/Tests/FIRResetPasswordResponseTests.m
@@ -92,11 +92,16 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
@end
@implementation FIRResetPasswordResponseTests {
- /** @var _RPCIssuer
+ /** @var _RPCIssuer
@brief This backend RPC issuer is used to fake network responses for each test in the suite.
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -104,9 +109,11 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -117,9 +124,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testUserDisabledError {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -140,9 +147,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testOperationNotAllowedError {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -163,9 +170,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testOOBExpiredError {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -186,9 +193,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testOOBInvalidError {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -209,9 +216,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testWeakPasswordError {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -232,9 +239,9 @@ static NSString *const kExpectedResetPasswordRequestType = @"PASSWORD_RESET";
*/
- (void)testSuccessfulResetPassword {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:kTestAPIKey
- oobCode:kTestOOBCode
- newPassword:kTestNewPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:kTestOOBCode
+ newPassword:kTestNewPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRResetPasswordResponse *RPCResponse;
__block NSError *RPCError;
diff --git a/Example/Auth/Tests/FIRSendVerificationCodeRequestTests.m b/Example/Auth/Tests/FIRSendVerificationCodeRequestTests.m
index 5582d32..0f0b420 100644
--- a/Example/Auth/Tests/FIRSendVerificationCodeRequestTests.m
+++ b/Example/Auth/Tests/FIRSendVerificationCodeRequestTests.m
@@ -94,12 +94,14 @@ static NSString *const kExpectedAPIURL =
@brief Tests the sendVerificationCode request.
*/
- (void)testSendVerificationCodeRequest {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
FIRAuthAppCredential *credential =
[[FIRAuthAppCredential alloc]initWithReceipt:kTestReceipt secret:kTestSecret];
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:kTestPhoneNumber
appCredential:credential
- APIKey:kTestAPIKey];
+ requestConfiguration:requestConfiguration];
XCTAssertEqualObjects(request.phoneNumber, kTestPhoneNumber);
XCTAssertEqualObjects(request.appCredential.receipt, kTestReceipt);
XCTAssertEqualObjects(request.appCredential.secret, kTestSecret);
diff --git a/Example/Auth/Tests/FIRSendVerificationCodeResponseTests.m b/Example/Auth/Tests/FIRSendVerificationCodeResponseTests.m
index 5a1244b..6f917ce 100644
--- a/Example/Auth/Tests/FIRSendVerificationCodeResponseTests.m
+++ b/Example/Auth/Tests/FIRSendVerificationCodeResponseTests.m
@@ -84,20 +84,28 @@ static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
@end
@implementation FIRSendVerificationCodeResponseTests {
- /** @var _RPCIssuer
+ /** @var _RPCIssuer
@brief This backend RPC issuer is used to fake network responses for each test in the suite.
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
+ [super setUp];
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -112,7 +120,7 @@ static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:kTestInvalidPhoneNumber
appCredential:credential
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSendVerificationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -140,7 +148,7 @@ static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:kTestPhoneNumber
appCredential:credential
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSendVerificationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -169,7 +177,7 @@ static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:kTestPhoneNumber
appCredential:credential
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSendVerificationCodeResponse *RPCResponse;
__block NSError *RPCError;
@@ -197,7 +205,7 @@ static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:kTestPhoneNumber
appCredential:credential
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSendVerificationCodeResponse *RPCResponse;
__block NSError *RPCError;
diff --git a/Example/Auth/Tests/FIRSetAccountInfoRequestTests.m b/Example/Auth/Tests/FIRSetAccountInfoRequestTests.m
index 54d8ff0..4301fa1 100644
--- a/Example/Auth/Tests/FIRSetAccountInfoRequestTests.m
+++ b/Example/Auth/Tests/FIRSetAccountInfoRequestTests.m
@@ -190,6 +190,11 @@ static NSString *const kExpectedAPIURL =
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -197,10 +202,12 @@ static NSString *const kExpectedAPIURL =
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -209,7 +216,8 @@ static NSString *const kExpectedAPIURL =
@brief Tests the set account info request.
*/
- (void)testSetAccountInfoRequest {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
request.returnSecureToken = NO;
[FIRAuthBackend setAccountInfo:request
callback:^(FIRSetAccountInfoResponse *_Nullable response,
@@ -240,7 +248,8 @@ static NSString *const kExpectedAPIURL =
@brief Tests the set account info request with optional fields.
*/
- (void)testSetAccountInfoRequestOptionalFields {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
request.accessToken = kTestAccessToken;
request.displayName = kTestDisplayName;
request.localID = kTestLocalID;
diff --git a/Example/Auth/Tests/FIRSetAccountInfoResponseTests.m b/Example/Auth/Tests/FIRSetAccountInfoResponseTests.m
index 1107bee..2506e1a 100644
--- a/Example/Auth/Tests/FIRSetAccountInfoResponseTests.m
+++ b/Example/Auth/Tests/FIRSetAccountInfoResponseTests.m
@@ -172,6 +172,11 @@ static const double kAllowedTimeDifference = 0.1;
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -179,10 +184,12 @@ static const double kAllowedTimeDifference = 0.1;
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -192,7 +199,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeEmailExists error.
*/
- (void)testEmailExistsError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -216,7 +224,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeOperationNotAllowed error.
*/
- (void)testEmailSignUpNotAllowedError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -240,7 +249,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeOperationNotAllowed error.
*/
- (void)testPasswordLoginDisabledError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -263,7 +273,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c testUserDisabledError with @c FIRAuthErrorCodeUserDisabled error.
*/
- (void)testUserDisabledError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -287,7 +298,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeCredentialTooOld error.
*/
- (void)testInvalidUserTokenError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -311,7 +323,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeRequiresRecentLogin error.
*/
- (void)testrequiresRecentLogin {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -334,7 +347,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c FIRAuthErrorCodeWeakPassword error.
*/
- (void)testWeakPasswordError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -359,7 +373,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c FIRAuthErrorCodeInvalidEmail error code.
*/
- (void)testInvalidEmailError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -382,7 +397,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c FIRAuthErrorCodeInvalidActionCode error code.
*/
- (void)testInvalidActionCodeError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -405,7 +421,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c FIRAuthErrorCodeExpiredActionCode error code.
*/
- (void)testExpiredActionCodeError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -428,7 +445,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief Tests for @c FIRAuthErrorCodeInvalidMessagePayload.
*/
- (void)testInvalidMessagePayloadError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -450,7 +468,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief Tests for @c FIRAuthErrorCodeInvalidSender.
*/
- (void)testInvalidSenderError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -472,7 +491,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief Tests for @c FIRAuthErrorCodeInvalidRecipientEmail.
*/
- (void)testInvalidRecipientEmailError {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
@@ -494,7 +514,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates a successful @c SetAccountInfo flow.
*/
- (void)testSuccessfulSetAccountInfoResponse {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSetAccountInfoResponse *RPCResponse;
diff --git a/Example/Auth/Tests/FIRSignUpNewUserRequestTests.m b/Example/Auth/Tests/FIRSignUpNewUserRequestTests.m
index 622ec7c..3e0cbdf 100644
--- a/Example/Auth/Tests/FIRSignUpNewUserRequestTests.m
+++ b/Example/Auth/Tests/FIRSignUpNewUserRequestTests.m
@@ -79,6 +79,11 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -86,9 +91,11 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -98,7 +105,8 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
@brief Tests the encoding of a sign up new user request when user is signed in anonymously.
*/
- (void)testSignUpNewUserRequestAnonymous {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
request.returnSecureToken = NO;
[FIRAuthBackend signUpNewUser:request
callback:^(FIRSignUpNewUserResponse *_Nullable response,
@@ -119,10 +127,10 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
*/
- (void)testSignUpNewUserRequestNotAnonymous {
FIRSignUpNewUserRequest *request =
- [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey
- email:kTestEmail
- password:kTestPassword
- displayName:kTestDisplayName];
+ [[FIRSignUpNewUserRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ displayName:kTestDisplayName
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend signUpNewUser:request
callback:^(FIRSignUpNewUserResponse *_Nullable response,
NSError *_Nullable error) {
diff --git a/Example/Auth/Tests/FIRSignUpNewUserResponseTests.m b/Example/Auth/Tests/FIRSignUpNewUserResponseTests.m
index ee0c785..cfe4a15 100644
--- a/Example/Auth/Tests/FIRSignUpNewUserResponseTests.m
+++ b/Example/Auth/Tests/FIRSignUpNewUserResponseTests.m
@@ -117,22 +117,29 @@ static const double kAllowedTimeDifference = 0.1;
@interface FIRSignUpNewUserResponseTests : XCTestCase
@end
-@implementation FIRSignUpNewUserResponseTests
+@implementation FIRSignUpNewUserResponseTests {
/** @var _RPCIssuer
@brief This backend RPC issuer is used to fake network responses for each test in the suite.
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
+}
- (void)setUp {
[super setUp];
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -142,10 +149,10 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testSuccessfulSignUp {
FIRSignUpNewUserRequest *request =
- [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey
- email:kTestEmail
+ [[FIRSignUpNewUserRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- displayName:kTestDisplayName];
+ displayName:kTestDisplayName
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
@@ -178,7 +185,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeEmailAlreadyInUse error.
*/
- (void)testSignUpNewUserEmailAlreadyInUseError {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
@@ -201,7 +209,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeOperationNotAllowed error.
*/
- (void)testSignUpNewUserOperationNotAllowedError {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
@@ -224,7 +233,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorCodeOperationNotAllowed error.
*/
- (void)testSignUpNewUserPasswordLoginDisabledError {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
@@ -247,7 +257,8 @@ static const double kAllowedTimeDifference = 0.1;
FIRAuthErrorInvalidEmail error as a result.
*/
- (void)testInvalidEmailError {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
@@ -269,7 +280,8 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates @c FIRAuthErrorCodeWeakPassword error.
*/
- (void)testSignUpNewUserWeakPasswordError {
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:kTestAPIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRSignUpNewUserResponse *RPCResponse;
diff --git a/Example/Auth/Tests/FIRTwitterAuthProviderTests.m b/Example/Auth/Tests/FIRTwitterAuthProviderTests.m
index 5b9c0fc..d7b7c71 100644
--- a/Example/Auth/Tests/FIRTwitterAuthProviderTests.m
+++ b/Example/Auth/Tests/FIRTwitterAuthProviderTests.m
@@ -49,9 +49,11 @@ static NSString *const kAPIKey = @"APIKey";
- (void)testCredentialWithToken {
FIRAuthCredential *credential =
[FIRTwitterAuthProvider credentialWithToken:kTwitterToken secret:kTwitterSecret];
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kAPIKey];
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kAPIKey
- providerID:FIRTwitterAuthProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:FIRTwitterAuthProviderID
+ requestConfiguration:requestConfiguration];
[credential prepareVerifyAssertionRequest:request];
XCTAssertEqualObjects(request.providerAccessToken, kTwitterToken);
XCTAssertEqualObjects(request.providerOAuthTokenSecret, kTwitterSecret);
diff --git a/Example/Auth/Tests/FIRVerifyAssertionRequestTests.m b/Example/Auth/Tests/FIRVerifyAssertionRequestTests.m
index becc420..2bb9b88 100644
--- a/Example/Auth/Tests/FIRVerifyAssertionRequestTests.m
+++ b/Example/Auth/Tests/FIRVerifyAssertionRequestTests.m
@@ -131,6 +131,11 @@ static NSString *const kAutoCreateKey = @"autoCreate";
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -138,10 +143,12 @@ static NSString *const kAutoCreateKey = @"autoCreate";
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -153,7 +160,8 @@ static NSString *const kAutoCreateKey = @"autoCreate";
*/
- (void)testVerifyAssertionRequestMissingTokens {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
FIRVerifyAssertionResponseCallback callback =
^(FIRVerifyAssertionResponse *_Nullable response, NSError *_Nullable error) {};
@@ -172,7 +180,8 @@ static NSString *const kAutoCreateKey = @"autoCreate";
*/
- (void)testVerifyAssertionRequestProviderAccessToken {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerAccessToken = kTestProviderAccessToken;
request.returnSecureToken = NO;
[FIRAuthBackend verifyAssertion:request
@@ -199,7 +208,8 @@ static NSString *const kAutoCreateKey = @"autoCreate";
*/
- (void)testVerifyAssertionRequestOptionalFields {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
request.providerAccessToken = kTestProviderAccessToken;
request.accessToken = kTestAccessToken;
diff --git a/Example/Auth/Tests/FIRVerifyAssertionResponseTests.m b/Example/Auth/Tests/FIRVerifyAssertionResponseTests.m
index 34edf39..923a9e5 100644
--- a/Example/Auth/Tests/FIRVerifyAssertionResponseTests.m
+++ b/Example/Auth/Tests/FIRVerifyAssertionResponseTests.m
@@ -159,6 +159,11 @@ static const double kAllowedTimeDifference = 0.1;
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
/** @fn profile
@@ -183,10 +188,12 @@ static const double kAllowedTimeDifference = 0.1;
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -197,7 +204,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testInvalidIDPResponseError {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -224,7 +232,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testUserDisabledError {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -250,7 +259,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testCredentialAlreadyInUseError {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -276,7 +286,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testOperationNotAllowedError {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -302,7 +313,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testPasswordLoginDisabledError {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -328,7 +340,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testSuccessfulVerifyAssertionResponse {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
@@ -374,7 +387,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testSuccessfulVerifyAssertionResponseWithTextData {
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:kTestAPIKey providerID:kTestProviderID];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:kTestProviderID
+ requestConfiguration:_requestConfiguration];
request.providerIDToken = kTestProviderIDToken;
__block BOOL callbackInvoked;
diff --git a/Example/Auth/Tests/FIRVerifyClientRequestTest.m b/Example/Auth/Tests/FIRVerifyClientRequestTest.m
index dcb00f6..31d4ca8 100644
--- a/Example/Auth/Tests/FIRVerifyClientRequestTest.m
+++ b/Example/Auth/Tests/FIRVerifyClientRequestTest.m
@@ -78,10 +78,12 @@ static NSString *const kExpectedAPIURL =
@brief Tests the verify client request.
*/
- (void)testVerifyClientRequest {
+ FIRAuthRequestConfiguration *requestConfiguration =
+ [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kFakeAPIKey];
FIRVerifyClientRequest *request =
[[FIRVerifyClientRequest alloc] initWithAppToken:kFakeAppToken
isSandbox:YES
- APIKey:kFakeAPIKey];
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend verifyClient:request callback:^(FIRVerifyClientResponse *_Nullable response,
NSError *_Nullable error) {
}];
diff --git a/Example/Auth/Tests/FIRVerifyClientResponseTests.m b/Example/Auth/Tests/FIRVerifyClientResponseTests.m
index 8077ace..b34ab27 100644
--- a/Example/Auth/Tests/FIRVerifyClientResponseTests.m
+++ b/Example/Auth/Tests/FIRVerifyClientResponseTests.m
@@ -89,12 +89,19 @@ static NSString *const kInvalidAppCredentialErrorMessage = @"INVALID_APP_CREDENT
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
+ [super setUp];
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kFakeAPIKey];
}
/** @fn testMissingAppCredentialError
@@ -104,7 +111,7 @@ static NSString *const kInvalidAppCredentialErrorMessage = @"INVALID_APP_CREDENT
FIRVerifyClientRequest *request =
[[FIRVerifyClientRequest alloc] initWithAppToken:kFakeAppToken
isSandbox:YES
- APIKey:kFakeAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyClientResponse *RPCResponse;
__block NSError *RPCError;
@@ -128,7 +135,7 @@ static NSString *const kInvalidAppCredentialErrorMessage = @"INVALID_APP_CREDENT
FIRVerifyClientRequest *request =
[[FIRVerifyClientRequest alloc] initWithAppToken:kFakeAppToken
isSandbox:YES
- APIKey:kFakeAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyClientResponse *RPCResponse;
__block NSError *RPCError;
@@ -152,7 +159,7 @@ static NSString *const kInvalidAppCredentialErrorMessage = @"INVALID_APP_CREDENT
FIRVerifyClientRequest *request =
[[FIRVerifyClientRequest alloc] initWithAppToken:kFakeAppToken
isSandbox:YES
- APIKey:kFakeAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyClientResponse *RPCResponse;
__block NSError *RPCError;
diff --git a/Example/Auth/Tests/FIRVerifyCustomTokenRequestTests.m b/Example/Auth/Tests/FIRVerifyCustomTokenRequestTests.m
index 9f65f73..66ac3b2 100644
--- a/Example/Auth/Tests/FIRVerifyCustomTokenRequestTests.m
+++ b/Example/Auth/Tests/FIRVerifyCustomTokenRequestTests.m
@@ -57,6 +57,11 @@ static NSString *const kExpectedAPIURL =
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -64,10 +69,12 @@ static NSString *const kExpectedAPIURL =
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -77,7 +84,8 @@ static NSString *const kExpectedAPIURL =
*/
- (void)testVerifyCustomTokenRequest {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
request.returnSecureToken = NO;
[FIRAuthBackend verifyCustomToken:request
callback:^(FIRVerifyCustomTokenResponse *_Nullable response,
@@ -95,7 +103,8 @@ static NSString *const kExpectedAPIURL =
*/
- (void)testVerifyCustomTokenRequestOptionalFields {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend verifyCustomToken:request
callback:^(FIRVerifyCustomTokenResponse *_Nullable response,
NSError *_Nullable error) {
diff --git a/Example/Auth/Tests/FIRVerifyCustomTokenResponseTests.m b/Example/Auth/Tests/FIRVerifyCustomTokenResponseTests.m
index dd175fd..b1d9d97 100644
--- a/Example/Auth/Tests/FIRVerifyCustomTokenResponseTests.m
+++ b/Example/Auth/Tests/FIRVerifyCustomTokenResponseTests.m
@@ -115,6 +115,11 @@ static const double kAllowedTimeDifference = 0.1;
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -122,10 +127,12 @@ static const double kAllowedTimeDifference = 0.1;
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -136,7 +143,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testInvalidCustomTokenError {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyCustomTokenResponse *RPCResponse;
@@ -162,7 +170,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testInvalidCustomTokenServerError {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyCustomTokenResponse *RPCResponse;
@@ -192,7 +201,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testEmptyServerDetailMessage {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyCustomTokenResponse *RPCResponse;
@@ -220,7 +230,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testInvalidCredentialMismatchError {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyCustomTokenResponse *RPCResponse;
@@ -245,7 +256,8 @@ static const double kAllowedTimeDifference = 0.1;
*/
- (void)testSuccessfulVerifyCustomTokenResponse {
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken APIKey:kTestAPIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:kTestToken
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyCustomTokenResponse *RPCResponse;
diff --git a/Example/Auth/Tests/FIRVerifyPasswordRequestTest.m b/Example/Auth/Tests/FIRVerifyPasswordRequestTest.m
index f07afdc..54ba7b0 100644
--- a/Example/Auth/Tests/FIRVerifyPasswordRequestTest.m
+++ b/Example/Auth/Tests/FIRVerifyPasswordRequestTest.m
@@ -99,6 +99,11 @@ static NSString *const kExpectedAPIURL =
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -106,10 +111,12 @@ static NSString *const kExpectedAPIURL =
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -120,7 +127,7 @@ static NSString *const kExpectedAPIURL =
- (void)testVerifyPasswordRequest {
FIRVerifyPasswordRequest * request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
request.returnSecureToken = NO;
[FIRAuthBackend verifyPassword:request
callback:^(FIRVerifyPasswordResponse *_Nullable response,
@@ -142,7 +149,7 @@ static NSString *const kExpectedAPIURL =
- (void)testVerifyPasswordRequestOptionalFields {
FIRVerifyPasswordRequest * request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
request.pendingIDToken = kTestPendingToken;
request.captchaChallenge = kTestCaptchaChallenge;
request.captchaResponse = kTestCaptchaResponse;
diff --git a/Example/Auth/Tests/FIRVerifyPasswordResponseTests.m b/Example/Auth/Tests/FIRVerifyPasswordResponseTests.m
index b8fc81b..b980847 100644
--- a/Example/Auth/Tests/FIRVerifyPasswordResponseTests.m
+++ b/Example/Auth/Tests/FIRVerifyPasswordResponseTests.m
@@ -176,21 +176,29 @@ static const double kAllowedTimeDifference = 0.1;
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
+ [super setUp];
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
/** @fn testUserDisabledError
@brief Tests that @c FIRAuthErrorCodeUserDisabled error is received if the email is disabled.
*/
- (void)testUserDisabledError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -211,9 +219,10 @@ static const double kAllowedTimeDifference = 0.1;
@brief Tests that @c FIRAuthErrorCodeEmailNotFound error is received if the email is not found.
*/
- (void)testEmailNotFoundError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -235,9 +244,10 @@ static const double kAllowedTimeDifference = 0.1;
invalid.
*/
- (void)testInvalidPasswordError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -259,9 +269,10 @@ static const double kAllowedTimeDifference = 0.1;
incorrect format.
*/
- (void)testInvalidEmailError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -283,9 +294,10 @@ static const double kAllowedTimeDifference = 0.1;
attempts were made.
*/
- (void)testTooManySignInAttemptsError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -306,9 +318,10 @@ static const double kAllowedTimeDifference = 0.1;
@brief Tests that @c FIRAuthErrorCodeInvalidApiKey error is received from the server.
*/
- (void)testKeyInvalid {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -336,9 +349,10 @@ static const double kAllowedTimeDifference = 0.1;
@brief This test simulates a @c FIRAuthErrorCodeOperationNotAllowed error.
*/
- (void)testOperationNotAllowedError {
- FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
- password:kTestPassword
- APIKey:kTestAPIKey];
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
+ password:kTestPassword
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -363,7 +377,7 @@ static const double kAllowedTimeDifference = 0.1;
- (void)testPasswordLoginDisabledError {
FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -388,7 +402,7 @@ static const double kAllowedTimeDifference = 0.1;
- (void)testAppNotAuthorized {
FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
@@ -418,7 +432,7 @@ static const double kAllowedTimeDifference = 0.1;
- (void)testSuccessfulVerifyPasswordResponse {
FIRVerifyPasswordRequest *request = [[FIRVerifyPasswordRequest alloc] initWithEmail:kTestEmail
password:kTestPassword
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPasswordResponse *RPCResponse;
__block NSError *RPCError;
diff --git a/Example/Auth/Tests/FIRVerifyPhoneNumberRequestTests.m b/Example/Auth/Tests/FIRVerifyPhoneNumberRequestTests.m
index f51d102..9719d4f 100644
--- a/Example/Auth/Tests/FIRVerifyPhoneNumberRequestTests.m
+++ b/Example/Auth/Tests/FIRVerifyPhoneNumberRequestTests.m
@@ -94,6 +94,11 @@ static NSString *const kExpectedAPIURL =
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
@@ -101,10 +106,12 @@ static NSString *const kExpectedAPIURL =
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
_RPCIssuer = nil;
+ _requestConfiguration = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
}
@@ -116,7 +123,7 @@ static NSString *const kExpectedAPIURL =
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:kVerificationID
verificationCode:kVerificationCode
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
request.accessToken = kTestAccessToken;
[FIRAuthBackend verifyPhoneNumber:request
callback:^(FIRVerifyPhoneNumberResponse *_Nullable response,
@@ -137,7 +144,7 @@ static NSString *const kExpectedAPIURL =
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithTemporaryProof:kTemporaryProof
phoneNumber:kPhoneNumber
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
request.accessToken = kTestAccessToken;
[FIRAuthBackend verifyPhoneNumber:request
callback:^(FIRVerifyPhoneNumberResponse *_Nullable response,
diff --git a/Example/Auth/Tests/FIRVerifyPhoneNumberResponseTests.m b/Example/Auth/Tests/FIRVerifyPhoneNumberResponseTests.m
index e3fa1f8..92110f2 100644
--- a/Example/Auth/Tests/FIRVerifyPhoneNumberResponseTests.m
+++ b/Example/Auth/Tests/FIRVerifyPhoneNumberResponseTests.m
@@ -104,15 +104,23 @@ static const double kAllowedTimeDifference = 0.1;
In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it.
*/
FIRFakeBackendRPCIssuer *_RPCIssuer;
+
+ /** @var _requestConfiguration
+ @brief This is the request configuration used for testing.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
}
- (void)setUp {
+ [super setUp];
FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init];
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer];
_RPCIssuer = RPCIssuer;
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:kTestAPIKey];
}
- (void)tearDown {
+ _requestConfiguration = nil;
_RPCIssuer = nil;
[FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil];
[super tearDown];
@@ -125,7 +133,7 @@ static const double kAllowedTimeDifference = 0.1;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:kVerificationID
verificationCode:kVerificationCode
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPhoneNumberResponse *RPCResponse;
__block NSError *RPCError;
@@ -153,7 +161,7 @@ static const double kAllowedTimeDifference = 0.1;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:kVerificationID
verificationCode:kVerificationCode
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPhoneNumberResponse *RPCResponse;
__block NSError *RPCError;
@@ -180,7 +188,7 @@ static const double kAllowedTimeDifference = 0.1;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:kVerificationID
verificationCode:kVerificationCode
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPhoneNumberResponse *RPCResponse;
__block NSError *RPCError;
@@ -207,7 +215,7 @@ static const double kAllowedTimeDifference = 0.1;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:kVerificationID
verificationCode:kVerificationCode
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPhoneNumberResponse *RPCResponse;
__block NSError *RPCError;
@@ -244,7 +252,7 @@ static const double kAllowedTimeDifference = 0.1;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithTemporaryProof:kFakeTemporaryProof
phoneNumber:kFakePhoneNumber
- APIKey:kTestAPIKey];
+ requestConfiguration:_requestConfiguration];
__block BOOL callbackInvoked;
__block FIRVerifyPhoneNumberResponse *RPCResponse;
__block NSError *RPCError;
diff --git a/Firebase/Auth/FirebaseAuth.podspec b/Firebase/Auth/FirebaseAuth.podspec
index 3d7eb2f..4d522aa 100644
--- a/Firebase/Auth/FirebaseAuth.podspec
+++ b/Firebase/Auth/FirebaseAuth.podspec
@@ -36,6 +36,9 @@ Simplify your iOS development, grow your user base, and monetize more effectivel
s.preserve_paths =
'README.md',
'CHANGELOG.md'
+ s.resource_bundle = {
+ 'FirebaseAuth' => 'Source/FirebaseAuth.bundle/**/*.strings'
+ }
s.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' =>
'$(inherited) ' + 'FIRAuth_VERSION=' + s.version.to_s +
' FIRAuth_MINOR_VERSION=' + s.version.to_s.split(".")[0] + "." + s.version.to_s.split(".")[1]
diff --git a/Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m b/Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m
index f950b72..7a5cc0f 100644
--- a/Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m
+++ b/Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m
@@ -131,8 +131,8 @@ typedef void (^FIRVerifyClientCallback)(FIRAuthAppCredential *_Nullable appCrede
}
FIRSendVerificationCodeRequest *request =
[[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:phoneNumber
- appCredential:appCredential
- APIKey:_auth.APIKey];
+ appCredential:appCredential
+ requestConfiguration:_auth.requestConfiguration];
[FIRAuthBackend sendVerificationCode:request
callback:^(FIRSendVerificationCodeResponse *_Nullable response,
NSError *_Nullable error) {
@@ -185,7 +185,7 @@ typedef void (^FIRVerifyClientCallback)(FIRAuthAppCredential *_Nullable appCrede
FIRVerifyClientRequest *request =
[[FIRVerifyClientRequest alloc] initWithAppToken:tokenString
isSandbox:token.type == FIRAuthAPNSTokenTypeSandbox
- APIKey:_auth.APIKey];
+ requestConfiguration:_auth.requestConfiguration];
[FIRAuthBackend verifyClient:request callback:^(FIRVerifyClientResponse *_Nullable response,
NSError *_Nullable error) {
if (error) {
diff --git a/Firebase/Auth/Source/FIRActionCodeSettings.m b/Firebase/Auth/Source/FIRActionCodeSettings.m
new file mode 100644
index 0000000..13aa318
--- /dev/null
+++ b/Firebase/Auth/Source/FIRActionCodeSettings.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ #import "FIRActionCodeSettings.h"
+
+ NS_ASSUME_NONNULL_BEGIN
+
+ @implementation FIRActionCodeSettings
+
+- (void)setIOSBundleID:(NSString *)iOSBundleID {
+ _iOSBundleID = [iOSBundleID copy];
+ }
+
+- (void)setAndroidPackageName:(NSString *)androidPackageName
+ installIfNotAvailable:(BOOL)installIfNotAvailable
+ minimumVersion:(nullable NSString *)minimumVersion {
+ _androidPackageName = [androidPackageName copy];
+ _androidInstallIfNotAvailable = installIfNotAvailable;
+ _androidMinimumVersion = [minimumVersion copy];
+ }
+
+ @end
+
+ NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/FIRAuth.m b/Firebase/Auth/Source/FIRAuth.m
index 5e2e9a2..f1e1071 100644
--- a/Firebase/Auth/Source/FIRAuth.m
+++ b/Firebase/Auth/Source/FIRAuth.m
@@ -34,6 +34,7 @@
#import "FIRUser_Internal.h"
#import "FirebaseAuth.h"
#import "FIRAuthBackend.h"
+#import "FIRAuthRequestConfiguration.h"
#import "FIRCreateAuthURIRequest.h"
#import "FIRCreateAuthURIResponse.h"
#import "FIRGetOOBConfirmationCodeRequest.h"
@@ -97,10 +98,18 @@ NSTimeInterval kTokenRefreshHeadStart = 5 * 60;
static NSString *const kUserKey = @"%@_firebase_user";
/** @var kMissingEmailInvalidParameterExceptionReason
- @brief The key of missing email key @c invalidParameterException.
+ @brief The reason for @c invalidParameterException when the email used to initiate password
+ reset is nil.
*/
-static NSString *const kEmailInvalidParameterReason = @"The email used to initiate password reset "
- "cannot be nil";
+static NSString *const kMissingEmailInvalidParameterExceptionReason =
+ @"The email used to initiate password reset cannot be nil.";
+
+/** @var kMissingLocaleBundleInvalidParameterExceptionReason
+ @brief The reason for @c invalidParameterException when the locale bundle is missing.
+ */
+static NSString *const kMissingLocaleBundleInvalidParameterExceptionReason =
+ @"The bundle used to obtain the current device language is missing. Please ensure that"
+ " %@.bundle is included as part of Firebase Auth.";
static NSString *const kPasswordResetRequestType = @"PASSWORD_RESET";
@@ -112,6 +121,21 @@ static NSString *const kVerifyEmailRequestType = @"VERIFY_EMAIL";
*/
static NSString *const kMissingPasswordReason = @"Missing Password";
+/** @var kFirebaseAuthBundleFileName
+ @brief The name of the Firebase Auth bundle file.
+ */
+static NSString *const kFirebaseAuthBundleFileName = @"FirebaseAuth";
+
+/** @var kFirebaseLocalizedStringKey
+ @brief The key for the Firebase locale langauge code.
+ */
+static NSString *const kFirebaseLocaleStringKey = @"FIREBASE_LOCALE_STRING";
+
+/** @var kFirebaseLocaleTabe
+ @brief The table from which we obtain the Firebase language code.
+ */
+static NSString *const kFirebaseLocaleTabe = @"FirebaseLocale";
+
/** @var gKeychainServiceNameForAppName
@brief A map from Firebase app name to keychain service names.
@remarks This map is needed for looking up the keychain service name after the FIRApp instance
@@ -384,7 +408,7 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
self = [super init];
if (self) {
_listenerHandles = [NSMutableArray array];
- _APIKey = [APIKey copy];
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey];
_firebaseAppName = [appName copy];
#if TARGET_OS_IOS
UIApplication *application = [UIApplication sharedApplication];
@@ -469,7 +493,7 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
FIRCreateAuthURIRequest *request =
[[FIRCreateAuthURIRequest alloc] initWithIdentifier:email
continueURI:@"http://www.google.com/"
- APIKey:_APIKey];
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend createAuthURI:request callback:^(FIRCreateAuthURIResponse *_Nullable response,
NSError *_Nullable error) {
if (completion) {
@@ -504,7 +528,9 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
password:(NSString *)password
callback:(FIRAuthResultCallback)callback {
FIRVerifyPasswordRequest *request =
- [[FIRVerifyPasswordRequest alloc] initWithEmail:email password:password APIKey:_APIKey];
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:email
+ password:password
+ requestConfiguration:_requestConfiguration];
if (![request.password length]) {
callback(nil, [FIRAuthErrorUtils wrongPasswordErrorWithMessage:nil]);
@@ -589,9 +615,9 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
return;
}
#endif
-
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:_APIKey providerID:credential.provider];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:credential.provider
+ requestConfiguration:_requestConfiguration];
request.autoCreate = !isReauthentication;
[credential prepareVerifyAssertionRequest:request];
[FIRAuthBackend verifyAssertion:request
@@ -651,7 +677,8 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
decoratedCallback(_currentUser, nil);
return;
}
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:_APIKey];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc]initWithRequestConfiguration:_requestConfiguration];
[FIRAuthBackend signUpNewUser:request
callback:^(FIRSignUpNewUserResponse *_Nullable response,
NSError *_Nullable error) {
@@ -674,7 +701,8 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
FIRAuthResultCallback decoratedCallback =
[self signInFlowAuthResultCallbackByDecoratingCallback:completion];
FIRVerifyCustomTokenRequest *request =
- [[FIRVerifyCustomTokenRequest alloc] initWithToken:token APIKey:_APIKey];
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:token
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend verifyCustomToken:request
callback:^(FIRVerifyCustomTokenResponse *_Nullable response,
NSError *_Nullable error) {
@@ -697,10 +725,11 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
dispatch_async(FIRAuthGlobalWorkQueue(), ^{
FIRAuthResultCallback decoratedCallback =
[self signInFlowAuthResultCallbackByDecoratingCallback:completion];
- FIRSignUpNewUserRequest *request = [[FIRSignUpNewUserRequest alloc] initWithAPIKey:_APIKey
- email:email
- password:password
- displayName:nil];
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithEmail:email
+ password:password
+ displayName:nil
+ requestConfiguration:_requestConfiguration];
if (![request.password length]) {
decoratedCallback(nil, [FIRAuthErrorUtils
weakPasswordErrorWithServerResponseReason:kMissingPasswordReason]);
@@ -731,9 +760,9 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
completion:(FIRConfirmPasswordResetCallback)completion {
dispatch_async(FIRAuthGlobalWorkQueue(), ^{
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:_APIKey
- oobCode:code
- newPassword:newPassword];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:code
+ newPassword:newPassword
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend resetPassword:request callback:^(FIRResetPasswordResponse *_Nullable response,
NSError *_Nullable error) {
if (completion) {
@@ -752,9 +781,9 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
- (void)checkActionCode:(NSString *)code completion:(FIRCheckActionCodeCallBack)completion {
dispatch_async(FIRAuthGlobalWorkQueue(), ^ {
FIRResetPasswordRequest *request =
- [[FIRResetPasswordRequest alloc] initWithAPIKey:_APIKey
- oobCode:code
- newPassword:nil];
+ [[FIRResetPasswordRequest alloc] initWithOobCode:code
+ newPassword:nil
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend resetPassword:request callback:^(FIRResetPasswordResponse *_Nullable response,
NSError *_Nullable error) {
if (completion) {
@@ -794,7 +823,8 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
- (void)applyActionCode:(NSString *)code completion:(FIRApplyActionCodeCallback)completion {
dispatch_async(FIRAuthGlobalWorkQueue(), ^ {
- FIRSetAccountInfoRequest *request = [[FIRSetAccountInfoRequest alloc]initWithAPIKey:_APIKey];
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:_requestConfiguration];
request.OOBCode = code;
[FIRAuthBackend setAccountInfo:request callback:^(FIRSetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
@@ -809,12 +839,40 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
- (void)sendPasswordResetWithEmail:(NSString *)email
completion:(nullable FIRSendPasswordResetCallback)completion {
+ [self sendPasswordResetWithNullableActionCodeSettings:nil email:email completion:completion];
+}
+
+- (void)sendPasswordResetWithEmail:(NSString *)email
+ actionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendPasswordResetCallback)completion {
+ [self sendPasswordResetWithNullableActionCodeSettings:actionCodeSettings
+ email:email
+ completion:completion];
+}
+
+/** @fn sendPasswordResetWithNullableActionCodeSettings:actionCodeSetting:email:completion:
+ @brief Initiates a password reset for the given email address and @FIRActionCodeSettings object.
+
+ @param actionCodeSettings Optionally, An @c FIRActionCodeSettings object containing settings
+ related to the handling action codes.
+ @param email The email address of the user.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+ */
+- (void)sendPasswordResetWithNullableActionCodeSettings:(nullable FIRActionCodeSettings *)
+ actionCodeSettings
+ email:(NSString *)email
+ completion:(nullable FIRSendPasswordResetCallback)
+ completion {
dispatch_async(FIRAuthGlobalWorkQueue(), ^{
if (!email) {
- [FIRAuthExceptionUtils raiseInvalidParameterExceptionWithReason:kEmailInvalidParameterReason];
+ [FIRAuthExceptionUtils raiseInvalidParameterExceptionWithReason:
+ kMissingEmailInvalidParameterExceptionReason];
}
FIRGetOOBConfirmationCodeRequest *request =
- [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:email APIKey:_APIKey];
+ [FIRGetOOBConfirmationCodeRequest passwordResetRequestWithEmail:email
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:_requestConfiguration];
[FIRAuthBackend getOOBConfirmationCode:request
callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
NSError *_Nullable error) {
@@ -895,6 +953,25 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
}
}
+- (void)useAppLanguage {
+ NSString *path =
+ [[NSBundle bundleForClass:[self class]] pathForResource:kFirebaseAuthBundleFileName
+ ofType:@"bundle"];
+ NSBundle *bundle;
+ bundle = [NSBundle bundleWithPath:path];
+ if (!bundle) {
+ NSString *reason = [NSString stringWithFormat:kMissingLocaleBundleInvalidParameterExceptionReason,
+ kFirebaseAuthBundleFileName];
+ [FIRAuthExceptionUtils raiseInvalidParameterExceptionWithReason:reason];
+ }
+ _requestConfiguration.languageCode =
+ [bundle localizedStringForKey:kFirebaseLocaleStringKey value:nil table:@"FirebaseLocale"];
+}
+
+- (NSString *)languageCode {
+ return _requestConfiguration.languageCode;
+}
+
#if TARGET_OS_IOS
- (NSData *)APNSToken {
__block NSData *result = nil;
@@ -925,6 +1002,10 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
#pragma mark - Internal Methods
+- (void)setLanguageCode:(NSString *)languageCode {
+ _requestConfiguration.languageCode = [languageCode copy];
+}
+
#if TARGET_OS_IOS
/** @fn signInWithPhoneCredential:callback:
@brief Signs in using a phone credential.
@@ -938,7 +1019,7 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc] initWithTemporaryProof:credential.temporaryProof
phoneNumber:credential.phoneNumber
- APIKey:_APIKey];
+ requestConfiguration:_requestConfiguration];
[self phoneNumberSignInWithRequest:request callback:callback];
return;
}
@@ -954,7 +1035,7 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
FIRVerifyPhoneNumberRequest *request =
[[FIRVerifyPhoneNumberRequest alloc]initWithVerificationID:credential.verificationID
verificationCode:credential.verificationCode
- APIKey:_APIKey];
+ requestConfiguration:_requestConfiguration];
[self phoneNumberSignInWithRequest:request callback:callback];
}
@@ -1138,7 +1219,7 @@ static NSMutableDictionary *gKeychainServiceNameForAppName;
refreshToken:(NSString *)refreshToken
anonymous:(BOOL)anonymous
callback:(FIRAuthResultCallback)callback {
- [FIRUser retrieveUserWithAPIKey:_APIKey
+ [FIRUser retrieveUserWithAPIKey:_requestConfiguration.APIKey
accessToken:accessToken
accessTokenExpirationDate:accessTokenExpirationDate
refreshToken:refreshToken
diff --git a/Firebase/Auth/Source/FIRAuthErrorUtils.h b/Firebase/Auth/Source/FIRAuthErrorUtils.h
index e8eb1f5..1dde98f 100644
--- a/Firebase/Auth/Source/FIRAuthErrorUtils.h
+++ b/Firebase/Auth/Source/FIRAuthErrorUtils.h
@@ -313,6 +313,41 @@ NS_ASSUME_NONNULL_BEGIN
*/
+ (NSError *)invalidRecipientEmailErrorWithMessage:(nullable NSString *)message;
+/** @fn missingIosBundleIDErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingIosBundleID code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingIosBundleIDErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingAndroidPackageNameErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingAndroidPackageName code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingAndroidPackageNameErrorWithMessage:(nullable NSString *)message;
+
+/** @fn unauthorizedDomainErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUnauthorizedDomain code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)unauthorizedDomainErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidContinueURIErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidContinueURI code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidContinueURIErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingContinueURIErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingContinueURI code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingContinueURIErrorWithMessage:(nullable NSString *)message;
+
/** @fn missingEmail
@brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingEmail code.
@return The NSError instance associated with the given FIRAuthError.
diff --git a/Firebase/Auth/Source/FIRAuthErrorUtils.m b/Firebase/Auth/Source/FIRAuthErrorUtils.m
index 671eac6..b320cf9 100644
--- a/Firebase/Auth/Source/FIRAuthErrorUtils.m
+++ b/Firebase/Auth/Source/FIRAuthErrorUtils.m
@@ -217,6 +217,30 @@ static NSString *const kFIRAuthErrorMessageInvalidSender = @"The email template
static NSString *const kFIRAuthErrorMessageInvalidRecipientEmail = @"The action code is invalid. "
"This can happen if the code is malformed, expired, or has already been used.";
+/** @var kFIRAuthErrorMessageMissingIosBundleID
+ @brief Message for @c FIRAuthErrorCodeMissingIosbundleID error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingIosBundleID =
+ @"An iOS Bundle ID must be provided if an App Store ID is provided.";
+
+/** @var kFIRAuthErrorMessageMissingAndroidPackageName
+ @brief Message for @c FIRAuthErrorCodeMissingAndroidPackageName error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingAndroidPackageName =
+ @"An Android Package Name must be provided if the Android App is required to be installed.";
+
+/** @var kFIRAuthErrorMessageUnauthorizedDomain
+ @brief Message for @c FIRAuthErrorCodeUnauthorizedDomain error code.
+ */
+static NSString *const kFIRAuthErrorMessageUnauthorizedDomain = @"The domain of the continue URL "
+ "is not whitelisted. Please whitelist the domain in the Firebase console.";
+
+/** @var kFIRAuthErrorMessageInvalidContinueURI
+ @brief Message for @c FIRAuthErrorCodeInvalidContinueURI error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidContinueURI =
+ @"The continue URL provided in the request is invalid.";
+
/** @var kFIRAuthErrorMessageMissingEmail
@brief Message for @c FIRAuthErrorCodeMissingEmail error code.
*/
@@ -386,6 +410,16 @@ static NSString *FIRAuthErrorDescription(FIRAuthErrorCode code) {
return kFIRAuthErrorMessageInvalidMessagePayload;
case FIRAuthErrorCodeInvalidRecipientEmail:
return kFIRAuthErrorMessageInvalidRecipientEmail;
+ case FIRAuthErrorCodeMissingIosBundleID:
+ return kFIRAuthErrorMessageMissingIosBundleID;
+ case FIRAuthErrorCodeMissingAndroidPackageName:
+ return kFIRAuthErrorMessageMissingAndroidPackageName;
+ case FIRAuthErrorCodeUnauthorizedDomain:
+ return kFIRAuthErrorMessageUnauthorizedDomain;
+ case FIRAuthErrorCodeInvalidContinueURI:
+ return kFIRAuthErrorMessageInvalidContinueURI;
+ case FIRAuthErrorCodeMissingContinueURI:
+ return kFIRAuthErrorMessageMissingContinueURI;
case FIRAuthErrorCodeMissingEmail:
return kFIRAuthErrorMessageMissingEmail;
case FIRAuthErrorCodeMissingPhoneNumber:
@@ -481,6 +515,16 @@ static NSString *const FIRAuthErrorCodeString(FIRAuthErrorCode code) {
return @"ERROR_INVALID_SENDER";
case FIRAuthErrorCodeInvalidRecipientEmail:
return @"ERROR_INVALID_RECIPIENT_EMAIL";
+ case FIRAuthErrorCodeMissingIosBundleID:
+ return @"ERROR_MISSING_IOS_BUNDLE_ID";
+ case FIRAuthErrorCodeMissingAndroidPackageName:
+ return @"ERROR_MISSING_ANDROID_PKG_NAME";
+ case FIRAuthErrorCodeUnauthorizedDomain:
+ return @"ERROR_UNAUTHORIZED_DOMAIN";
+ case FIRAuthErrorCodeInvalidContinueURI:
+ return @"ERROR_INVALID_CONTINUE_URI";
+ case FIRAuthErrorCodeMissingContinueURI:
+ return @"ERROR_MISSING_CONTINUE_URI";
case FIRAuthErrorCodeMissingEmail:
return @"MISSING_EMAIL";
case FIRAuthErrorCodeMissingPhoneNumber:
@@ -740,6 +784,26 @@ static NSString *const FIRAuthErrorCodeString(FIRAuthErrorCode code) {
return [self errorWithCode:FIRAuthInternalErrorCodeInvalidRecipientEmail message:message];
}
++ (NSError *)missingIosBundleIDErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthinternalErrorCodeMissingIosBundleID message:message];
+}
+
++ (NSError *)missingAndroidPackageNameErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingAndroidPackageName message:message];
+}
+
++ (NSError *)unauthorizedDomainErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnauthorizedDomain message:message];
+}
+
++ (NSError *)invalidContinueURIErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidContinueURI message:message];
+}
+
++ (NSError *)missingContinueURIErrorWithMessage:(nullable NSString *)message {
+ return[self errorWithCode:FIRAuthInternalErrorCodeMissingContinueURI message:message];
+}
+
+ (NSError *)missingEmail {
return [self errorWithCode:FIRAuthInternalErrorCodeMissingEmail];
}
diff --git a/Firebase/Auth/Source/FIRAuthInternalErrors.h b/Firebase/Auth/Source/FIRAuthInternalErrors.h
index c0fc912..5f4a5c7 100644
--- a/Firebase/Auth/Source/FIRAuthInternalErrors.h
+++ b/Firebase/Auth/Source/FIRAuthInternalErrors.h
@@ -238,6 +238,34 @@ typedef NS_ENUM(NSInteger, FIRAuthInternalErrorCode) {
FIRAuthInternalErrorCodeInvalidRecipientEmail =
FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeInvalidRecipientEmail,
+ /** Indicates that the iOS bundle ID is missing when a iOS App Store ID is provided.
+ */
+ FIRAuthinternalErrorCodeMissingIosBundleID =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMissingIosBundleID,
+
+ /** Indicates that the android package name is missing when the @c androidInstallApp flag is set
+ to true.
+ */
+ FIRAuthInternalErrorCodeMissingAndroidPackageName =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMissingAndroidPackageName,
+
+ /** Indicates that the domain specified in the continue URL is not whitelisted in the Firebase
+ console.
+ */
+ FIRAuthInternalErrorCodeUnauthorizedDomain =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeUnauthorizedDomain,
+
+ /** Indicates that the domain specified in the continue URI is not valid.
+ */
+ FIRAuthInternalErrorCodeInvalidContinueURI =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeInvalidContinueURI,
+
+ /** Indicates that a continue URI was not provided in a request to the backend which requires
+ one.
+ */
+ FIRAuthInternalErrorCodeMissingContinueURI =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMissingContinueURI,
+
/** Indicates that an email address was expected but one was not provided.
*/
FIRAuthInternalErrorCodeMissingEmail =
diff --git a/Firebase/Auth/Source/FIRAuth_Internal.h b/Firebase/Auth/Source/FIRAuth_Internal.h
index 5d1d13f..245ce57 100644
--- a/Firebase/Auth/Source/FIRAuth_Internal.h
+++ b/Firebase/Auth/Source/FIRAuth_Internal.h
@@ -18,6 +18,8 @@
#import "FIRAuth.h"
+@class FIRAuthRequestConfiguration;
+
#if TARGET_OS_IOS
@class FIRAuthAPNSTokenManager;
@class FIRAuthAppCredentialManager;
@@ -44,11 +46,11 @@ extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey;
@interface FIRAuth ()
-/** @property APIKey
- @brief The Google API key.
- @remarks Needed for calls to identity toolkit and secure token service.
+/** @property requestConfiguration
+ @brief The configuration object comprising of paramters needed to make a request to Firebase
+ Auth's backend.
*/
-@property(nonatomic, copy, readonly) NSString *APIKey;
+@property(nonatomic, copy, readonly) FIRAuthRequestConfiguration *requestConfiguration;
#if TARGET_OS_IOS
/** @property tokenManager
diff --git a/Firebase/Auth/Source/FIRSecureTokenService.m b/Firebase/Auth/Source/FIRSecureTokenService.m
index 0e5af42..4aa2a50 100644
--- a/Firebase/Auth/Source/FIRSecureTokenService.m
+++ b/Firebase/Auth/Source/FIRSecureTokenService.m
@@ -20,9 +20,12 @@
#import "FIRAuthKeychain.h"
#import "FIRAuthSerialTaskQueue.h"
#import "FIRAuthBackend.h"
+#import "FIRAuthRequestConfiguration.h"
#import "FIRSecureTokenRequest.h"
#import "FIRSecureTokenResponse.h"
+@class FIRAuthRequestConfiguration;
+
/** @var kAPIKeyCodingKey
@brief The key used to encode the APIKey for NSSecureCoding.
*/
@@ -57,10 +60,10 @@ static const NSTimeInterval kFiveMinutes = 5 * 60;
@end
@implementation FIRSecureTokenService {
- /** @var _APIKey
- @brief A Google API key for making Secure Token Service requests.
+ /** @var _requestConfiguration
+ @brief Contains configuration relevant to the request.
*/
- NSString *_APIKey;
+ FIRAuthRequestConfiguration *_requestConfiguration;
/** @var _taskQueue
@brief Used to serialize all requests for access tokens.
@@ -86,7 +89,7 @@ static const NSTimeInterval kFiveMinutes = 5 * 60;
- (nullable instancetype)initWithAPIKey:(NSString *)APIKey {
self = [super init];
if (self) {
- _APIKey = [APIKey copy];
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey];
_taskQueue = [[FIRAuthSerialTaskQueue alloc] init];
}
return self;
@@ -160,7 +163,7 @@ static const NSTimeInterval kFiveMinutes = 5 * 60;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
- [aCoder encodeObject:_APIKey forKey:kAPIKeyCodingKey];
+ [aCoder encodeObject:_requestConfiguration.APIKey forKey:kAPIKeyCodingKey];
// Authorization code is not encoded because it is not long-lived.
[aCoder encodeObject:_refreshToken forKey:kRefreshTokenKey];
[aCoder encodeObject:_accessToken forKey:kAccessTokenKey];
@@ -184,9 +187,11 @@ static const NSTimeInterval kFiveMinutes = 5 * 60;
- (void)requestAccessToken:(FIRFetchAccessTokenCallback)callback {
FIRSecureTokenRequest *request;
if (_refreshToken.length) {
- request = [FIRSecureTokenRequest refreshRequestWithRefreshToken:_refreshToken APIKey:_APIKey];
+ request = [FIRSecureTokenRequest refreshRequestWithRefreshToken:_refreshToken
+ requestConfiguration:_requestConfiguration];
} else {
- request = [FIRSecureTokenRequest authCodeRequestWithCode:_authorizationCode APIKey:_APIKey];
+ request = [FIRSecureTokenRequest authCodeRequestWithCode:_authorizationCode
+ requestConfiguration:_requestConfiguration];
}
[FIRAuthBackend secureToken:request
callback:^(FIRSecureTokenResponse *_Nullable response,
diff --git a/Firebase/Auth/Source/FIRUser.m b/Firebase/Auth/Source/FIRUser.m
index 82c8bb8..f19c9a1 100644
--- a/Firebase/Auth/Source/FIRUser.m
+++ b/Firebase/Auth/Source/FIRUser.m
@@ -31,6 +31,7 @@
#import "FIRSecureTokenService.h"
#import "FIRUserInfoImpl.h"
#import "FIRAuthBackend.h"
+#import "FIRAuthRequestConfiguration.h"
#import "FIRDeleteAccountRequest.h"
#import "FIRDeleteAccountResponse.h"
#import "FIRGetAccountInfoRequest.h"
@@ -215,7 +216,7 @@ static void callInMainThreadWithAuthDataResultAndError(
*/
NSDictionary<NSString *, FIRUserInfoImpl *> *_providerData;
- /** @var _APIKey
+ /** @var _APIKey
@brief The application's API Key.
*/
NSString *_APIKey;
@@ -262,7 +263,8 @@ static void callInMainThreadWithAuthDataResultAndError(
return;
}
FIRGetAccountInfoRequest *getAccountInfoRequest =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:APIKey accessToken:accessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:[FIRAuth auth].requestConfiguration];
[FIRAuthBackend getAccountInfo:getAccountInfoRequest
callback:^(FIRGetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
@@ -387,7 +389,8 @@ static void callInMainThreadWithAuthDataResultAndError(
return;
}
FIRGetAccountInfoRequest *getAccountInfoRequest =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:_APIKey accessToken:accessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:_auth.requestConfiguration];
[FIRAuthBackend getAccountInfo:getAccountInfoRequest
callback:^(FIRGetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
@@ -452,9 +455,11 @@ static void callInMainThreadWithAuthDataResultAndError(
callback(error);
return;
}
+ FIRAuthRequestConfiguration *configuration =
+ _auth.requestConfiguration;
// Mutate setAccountInfoRequest in block:
FIRSetAccountInfoRequest *setAccountInfoRequest =
- [[FIRSetAccountInfoRequest alloc] initWithAPIKey:_APIKey];
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:configuration];
setAccountInfoRequest.accessToken = accessToken;
changeBlock(user, setAccountInfoRequest);
// Execute request:
@@ -571,8 +576,10 @@ static void callInMainThreadWithAuthDataResultAndError(
callback(error);
return;
}
+ FIRAuthRequestConfiguration *requestConfiguration = _auth.requestConfiguration;
FIRGetAccountInfoRequest *getAccountInfoRequest =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:_APIKey accessToken:accessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend getAccountInfo:getAccountInfoRequest
callback:^(FIRGetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
@@ -638,7 +645,7 @@ static void callInMainThreadWithAuthDataResultAndError(
FIRVerifyPhoneNumberRequest *request = [[FIRVerifyPhoneNumberRequest alloc]
initWithVerificationID:phoneAuthCredential.verificationID
verificationCode:phoneAuthCredential.verificationCode
- APIKey:_APIKey];
+ requestConfiguration:_auth.requestConfiguration];
request.accessToken = accessToken;
[FIRAuthBackend verifyPhoneNumber:request
callback:^(FIRVerifyPhoneNumberResponse *_Nullable response,
@@ -882,8 +889,10 @@ static void callInMainThreadWithAuthDataResultAndError(
completeWithError(nil, error);
return;
}
+ FIRAuthRequestConfiguration *requestConfiguration = _auth.requestConfiguration;
FIRVerifyAssertionRequest *request =
- [[FIRVerifyAssertionRequest alloc] initWithAPIKey:_APIKey providerID:credential.provider];
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:credential.provider
+ requestConfiguration:requestConfiguration];
[credential prepareVerifyAssertionRequest:request];
request.accessToken = accessToken;
[FIRAuthBackend verifyAssertion:request
@@ -909,7 +918,8 @@ static void callInMainThreadWithAuthDataResultAndError(
return;
}
FIRGetAccountInfoRequest *getAccountInfoRequest =
- [[FIRGetAccountInfoRequest alloc] initWithAPIKey:_APIKey accessToken:accessToken];
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
[FIRAuthBackend getAccountInfo:getAccountInfoRequest
callback:^(FIRGetAccountInfoResponse *_Nullable response,
NSError *_Nullable error) {
@@ -945,8 +955,9 @@ static void callInMainThreadWithAuthDataResultAndError(
completeAndCallbackWithError(error);
return;
}
+ FIRAuthRequestConfiguration *requestConfiguration = _auth.requestConfiguration;
FIRSetAccountInfoRequest *setAccountInfoRequest =
- [[FIRSetAccountInfoRequest alloc] initWithAPIKey:_APIKey];
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:requestConfiguration];
setAccountInfoRequest.accessToken = accessToken;
BOOL isEmailPasswordProvider = [provider isEqualToString:FIREmailAuthProviderID];
if (isEmailPasswordProvider) {
@@ -1008,6 +1019,27 @@ static void callInMainThreadWithAuthDataResultAndError(
}
- (void)sendEmailVerificationWithCompletion:(nullable FIRSendEmailVerificationCallback)completion {
+ [self sendEmailVerificationWithNullableActionCodeSettings:nil completion:completion];
+}
+
+- (void)sendEmailVerificationWithActionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendEmailVerificationCallback)
+ completion {
+ [self sendEmailVerificationWithNullableActionCodeSettings:actionCodeSettings
+ completion:completion];
+}
+
+/** @fn sendEmailVerificationWithNullableActionCodeSettings:completion:
+ @brief Initiates email verification for the user.
+
+ @param actionCodeSettings Optionally, a @c FIRActionCodeSettings object containing settings
+ related to the handling action codes.
+ */
+- (void)sendEmailVerificationWithNullableActionCodeSettings:(nullable FIRActionCodeSettings *)
+ actionCodeSettings
+ completion:
+ (nullable FIRSendEmailVerificationCallback)
+ completion {
dispatch_async(FIRAuthGlobalWorkQueue(), ^{
[self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
NSError *_Nullable error) {
@@ -1015,9 +1047,11 @@ static void callInMainThreadWithAuthDataResultAndError(
callInMainThreadWithError(completion, error);
return;
}
+ FIRAuthRequestConfiguration *configuration = _auth.requestConfiguration;
FIRGetOOBConfirmationCodeRequest *request =
[FIRGetOOBConfirmationCodeRequest verifyEmailRequestWithAccessToken:accessToken
- APIKey:_APIKey];
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:configuration];
[FIRAuthBackend getOOBConfirmationCode:request
callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable
response,
@@ -1037,15 +1071,15 @@ static void callInMainThreadWithAuthDataResultAndError(
return;
}
FIRDeleteAccountRequest *deleteUserRequest =
- [[FIRDeleteAccountRequest alloc] initWithAPIKey:_APIKey
- localID:_userID
- accessToken:accessToken];
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:_userID
+ accessToken:accessToken
+ requestConfiguration:_auth.requestConfiguration];
[FIRAuthBackend deleteAccount:deleteUserRequest callback:^(NSError *_Nullable error) {
if (error) {
callInMainThreadWithError(completion, error);
return;
}
- if (![[FIRAuth auth] signOutByForceWithUserID:_userID error:&error]) {
+ if (![_auth signOutByForceWithUserID:_userID error:&error]) {
callInMainThreadWithError(completion, error);
return;
}
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ar.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ar.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..3921782
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ar.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ar";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/bg.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/bg.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..b9b69b8
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/bg.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "bg";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/bn.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/bn.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..7bb381d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/bn.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "bn";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ca.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ca.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..0b4710c
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ca.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ca";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/cs.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/cs.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..132370c
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/cs.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "cs";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/da.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/da.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..442d3e9
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/da.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "da";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/de.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/de.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..d5d1860
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/de.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "de";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/dl.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/dl.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..c31ac37
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/dl.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "dl";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/el.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/el.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..83a7902
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/el.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "el";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/en-GB.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/en-GB.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..d613388
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/en-GB.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "en-GB";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/en.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/en.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..f5e9d16
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/en.lproj/FirebaseLocale.strings
@@ -0,0 +1,2 @@
+"FIREBASE_LOCALE_STRING" = "en";
+
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/es-419.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/es-419.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..5c145e9
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/es-419.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "es-419";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/es.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/es.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..86b8321
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/es.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "es";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/fa.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/fa.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..9ef882f
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/fa.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "fa";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/fi.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/fi.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..2865804
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/fi.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "fi";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/fil.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/fil.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..0d129d4
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/fil.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "fil";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/fr.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/fr.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..8c9a083
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/fr.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "fr";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/gu.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/gu.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..37785db
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/gu.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "gu";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/hi.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/hi.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..0df898e
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/hi.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "hi";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/hr.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/hr.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..dedc776
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/hr.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "hr";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/hu.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/hu.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..7cd8314
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/hu.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "hu";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/id.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/id.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..1114a7c
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/id.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "id";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/it.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/it.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..f10172c
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/it.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "it";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/iw.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/iw.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..e321c03
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/iw.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "iw";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ja.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ja.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..a9e41d6
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ja.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ja";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/kn.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/kn.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..ef998cb
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/kn.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "kn";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ko.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ko.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..e28f0b7
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ko.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ko";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/lt.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/lt.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..874ebef
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/lt.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "lt";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/lv.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/lv.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..e5cb109
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/lv.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "lv";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ml.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ml.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..3630531
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ml.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ml";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/mr.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/mr.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..8f563d7
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/mr.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "mr";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ms.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ms.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..883486f
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ms.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ms";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/nl.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/nl.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..cea8c6e
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/nl.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "nl";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/no.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/no.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..2f28296
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/no.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "no";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/pl.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/pl.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..42c5ced
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/pl.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "pl";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/pt-BR.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/pt-BR.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..c79c6ef
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/pt-BR.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "pt-BR";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/pt-PT.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/pt-PT.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..e9317d6
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/pt-PT.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "pt-PT";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/pt.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/pt.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..a2585d3
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/pt.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "pt";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ro.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ro.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..0e79c52
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ro.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ro";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ru.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ru.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..76cb5f4
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ru.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ru";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/sk.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/sk.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..c94c719
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/sk.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "sk";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/sl.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/sl.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..64a3a2c
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/sl.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "sl";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/sr.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/sr.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..49bff6d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/sr.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "sr";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/sv.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/sv.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..e0eb3d5
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/sv.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "sv";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ta.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ta.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..0f16c0d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ta.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ta";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/th.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/th.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..bf5323d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/th.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "th";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/tr.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/tr.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..558eba3
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/tr.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "tr";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/uk.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/uk.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..5950a21
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/uk.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "uk";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/ur.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/ur.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..5e22334
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/ur.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "ur";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/vi.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/vi.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..6af2e0d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/vi.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "vi";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/zh-CN.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/zh-CN.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..06c8d2d
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/zh-CN.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "zh-CN";
diff --git a/Firebase/Auth/Source/FirebaseAuth.bundle/zh-TW.lproj/FirebaseLocale.strings b/Firebase/Auth/Source/FirebaseAuth.bundle/zh-TW.lproj/FirebaseLocale.strings
new file mode 100644
index 0000000..9e660ad
--- /dev/null
+++ b/Firebase/Auth/Source/FirebaseAuth.bundle/zh-TW.lproj/FirebaseLocale.strings
@@ -0,0 +1 @@
+"FIREBASE_LOCALE_STRING" = "zh-TW";
diff --git a/Firebase/Auth/Source/Public/FIRActionCodeSettings.h b/Firebase/Auth/Source/Public/FIRActionCodeSettings.h
new file mode 100644
index 0000000..fef0175
--- /dev/null
+++ b/Firebase/Auth/Source/Public/FIRActionCodeSettings.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ #import <Foundation/Foundation.h>
+
+ NS_ASSUME_NONNULL_BEGIN
+
+ /** @class FIRActionCodeSettings
+ @brief Used to set and retrieve settings related to the handling action codes.
+ */
+ @interface FIRActionCodeSettings : NSObject
+
+ /** @property URL
+ @brief This URL represents the state/Continue URL in the form of a universal link.
+ @remarks This URL can should be contructed as a universal link that would either directly open
+ the app where the action code would be handled or continue to the app after the action code
+ handled by Firebase.
+ */
+ @property(nonatomic, copy, nullable) NSURL *URL;
+
+ /** @property handleCodeInApp
+ @brief Indicates whether or not the action code link will open the app directly or after being
+ redirected from a Firebase owned web widget.
+ */
+ @property(assign, nonatomic) BOOL handleCodeInApp;
+
+ /** @property iOSBundleID
+ @brief The iOS bundle ID, if available.
+ */
+ @property(copy, nonatomic, readonly, nullable) NSString *iOSBundleID;
+
+ /** @property androidPackageName
+ @brief The Android package name, if available.
+ */
+ @property(nonatomic, copy, readonly, nullable) NSString *androidPackageName;
+
+ /** @property androidMinimumVersion
+ @brief The minimum Android version supported, if available.
+ */
+ @property(nonatomic, copy, readonly, nullable) NSString *androidMinimumVersion;
+
+ /** @property androidInstallIfNotAvailable
+ @brief Indicates whether the Android app should be installed or not on a device where it is not
+ available.
+ */
+ @property(nonatomic, assign, readonly) BOOL androidInstallIfNotAvailable;
+
+ /** @fn setIOSBundleID
+ @brief Sets the iOS bundle Id.
+ @param iOSBundleID The iOS bundle ID.
+ */
+ - (void)setIOSBundleID:(NSString *)iOSBundleID;
+
+ /** @fn setAndroidPackageName:installIfNotAvailable:minimumVersion:
+ @brief Sets the Android package name, the flag to indicate whether or not to install the app and
+ the minimum Android version supported.
+ @param androidPackageName The Android package name.
+ @param installIfNotAvailable Indicates whether or not the app should be installed if not
+ available.
+ @param minimumVersion The minimum version of Android supported.
+ @remarks If installIfNotAvailable is set to YES and the link is opened on an android device, it
+ will try to install the app if not already available. Otherwise the web URL is used.
+ */
+ - (void)setAndroidPackageName:(NSString *)androidPackageName
+ installIfNotAvailable:(BOOL)installIfNotAvailable
+ minimumVersion:(nullable NSString *)minimumVersion;
+
+ @end
+
+ NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/Public/FIRAuth.h b/Firebase/Auth/Source/Public/FIRAuth.h
index 356c8dd..e120eb2 100644
--- a/Firebase/Auth/Source/Public/FIRAuth.h
+++ b/Firebase/Auth/Source/Public/FIRAuth.h
@@ -23,6 +23,7 @@
#import "FIRAuthAPNSTokenType.h"
#endif
+@class FIRActionCodeSettings;
@class FIRApp;
@class FIRAuth;
@class FIRAuthCredential;
@@ -252,6 +253,14 @@ FIR_SWIFT_NAME(Auth)
*/
@property(nonatomic, strong, readonly, nullable) FIRUser *currentUser;
+/** @proprty languageCode
+ @brief The current user language code. This property can be set to the app's current language by
+ calling @c useAppLanguage.
+
+ @remarks The string used to set this property must be a language code that follows BCP 47.
+ */
+@property (nonatomic, copy, nullable) NSString *languageCode;
+
#if TARGET_OS_IOS
/** @property APNSToken
@brief The APNs token used for phone number authentication. The type of the token (production
@@ -531,6 +540,44 @@ FIR_SWIFT_NAME(Auth)
- (void)sendPasswordResetWithEmail:(NSString *)email
completion:(nullable FIRSendPasswordResetCallback)completion;
+/** @fn sendPasswordResetWithEmail:actionCodeSetting:completion:
+ @brief Initiates a password reset for the given email address and @FIRActionCodeSettings object.
+
+ @param email The email address of the user.
+ @param actionCodeSettings An @c FIRActionCodeSettings object containing settings related to the
+ handling action codes.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+ <ul>
+ <li>@c FIRAuthErrorCodeInvalidRecipientEmail - Indicates an invalid recipient email was
+ sent in the request.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidSender - Indicates an invalid sender email is set in
+ the console for this action.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidMessagePayload - Indicates an invalid email template for
+ sending update email.
+ </li>
+ <li>@c FIRAuthErrorCodeMissingIosBundleID - Indicates that the iOS bundle ID is missing when
+ a iOS App Store ID is provided.
+ </li>
+ <li>@c FIRAuthErrorCodeMissingAndroidPackageName - Indicates that the android package name
+ is missing when the @c androidInstallApp flag is set to true.
+ </li>
+ <li>@c FIRAuthErrorCodeUnauthorizedDomain - Indicates that the domain specified in the
+ continue URL is not whitelisted in the Firebase console.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidContinueURI - Indicates that the domain specified in the
+ continue URI is not valid.
+ </li>
+ </ul>
+ */
+ - (void)sendPasswordResetWithEmail:(NSString *)email
+ actionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendPasswordResetCallback)completion;
+
/** @fn signOut:
@brief Signs out the current user.
@@ -606,6 +653,11 @@ FIR_SWIFT_NAME(Auth)
*/
- (void)removeIDTokenDidChangeListener:(FIRIDTokenDidChangeListenerHandle)listenerHandle;
+/** @fn useAppLanguage
+ @brief Sets @c languageCode to the app's current language.
+ */
+- (void)useAppLanguage;
+
#if TARGET_OS_IOS
/** @fn setAPNSToken:type:
@brief Sets the APNs token along with its type.
diff --git a/Firebase/Auth/Source/Public/FIRAuthErrors.h b/Firebase/Auth/Source/Public/FIRAuthErrors.h
index 0b161f7..2859161 100644
--- a/Firebase/Auth/Source/Public/FIRAuthErrors.h
+++ b/Firebase/Auth/Source/Public/FIRAuthErrors.h
@@ -188,8 +188,30 @@ typedef NS_ENUM(NSInteger, FIRAuthErrorCode) {
*/
FIRAuthErrorCodeMissingEmail = 17034,
- // The enum values between 17034 and 17041 are reserved and should NOT be used for new error
- // codes.
+ // The enum values 17035 is reserved and should NOT be used for new error codes.
+
+ /** Indicates that the iOS bundle ID is missing when a iOS App Store ID is provided.
+ */
+ FIRAuthErrorCodeMissingIosBundleID = 17036,
+
+ /** Indicates that the android package name is missing when the @c androidInstallApp flag is set
+ to true.
+ */
+ FIRAuthErrorCodeMissingAndroidPackageName = 17037,
+
+ /** Indicates that the domain specified in the continue URL is not whitelisted in the Firebase
+ console.
+ */
+ FIRAuthErrorCodeUnauthorizedDomain = 17038,
+
+ /** Indicates that the domain specified in the continue URI is not valid.
+ */
+ FIRAuthErrorCodeInvalidContinueURI = 17039,
+
+ /** Indicates that a continue URI was not provided in a request to the backend which requires
+ one.
+ */
+ FIRAuthErrorCodeMissingContinueURI = 17040,
/** Indicates that a phone number was not provided in a call to
@c verifyPhoneNumber:completion:.
diff --git a/Firebase/Auth/Source/Public/FIRUser.h b/Firebase/Auth/Source/Public/FIRUser.h
index 9e3ac77..8d0e8f6 100644
--- a/Firebase/Auth/Source/Public/FIRUser.h
+++ b/Firebase/Auth/Source/Public/FIRUser.h
@@ -401,6 +401,42 @@ FIR_SWIFT_NAME(User)
*/
- (void)sendEmailVerificationWithCompletion:(nullable FIRSendEmailVerificationCallback)completion;
+/** @fn sendEmailVerificationWithActionCodeSettings:completion:
+ @brief Initiates email verification for the user.
+
+ @param actionCodeSettings An @c FIRActionCodeSettings object containing settings related to the
+ handling action codes.
+
+ @remarks Possible error codes:
+ <ul>
+ <li>@c FIRAuthErrorCodeInvalidRecipientEmail - Indicates an invalid recipient email was
+ sent in the request.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidSender - Indicates an invalid sender email is set in
+ the console for this action.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidMessagePayload - Indicates an invalid email template for
+ sending update email.
+ </li>
+ <li>@c FIRAuthErrorCodeUserNotFound - Indicates the user account was not found.</li>
+ <li>@c FIRAuthErrorCodeMissingIosBundleID - Indicates that the iOS bundle ID is missing when
+ a iOS App Store ID is provided.
+ </li>
+ <li>@c FIRAuthErrorCodeMissingAndroidPackageName - Indicates that the android package name
+ is missing when the @c androidInstallApp flag is set to true.
+ </li>
+ <li>@c FIRAuthErrorCodeUnauthorizedDomain - Indicates that the domain specified in the
+ continue URL is not whitelisted in the Firebase console.
+ </li>
+ <li>@c FIRAuthErrorCodeInvalidContinueURI - Indicates that the domain specified in the
+ continue URI is not valid.
+ </li>
+ </ul>
+ */
+- (void)sendEmailVerificationWithActionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendEmailVerificationCallback)
+ completion;
+
/** @fn deleteWithCompletion:
@brief Deletes the user account (also signs out the user, if this was the current user).
diff --git a/Firebase/Auth/Source/Public/FirebaseAuth.h b/Firebase/Auth/Source/Public/FirebaseAuth.h
index ef4aca6..126645e 100644
--- a/Firebase/Auth/Source/Public/FirebaseAuth.h
+++ b/Firebase/Auth/Source/Public/FirebaseAuth.h
@@ -22,6 +22,7 @@
#import "FIRGoogleAuthProvider.h"
#import "FIROAuthProvider.h"
#import "FIRTwitterAuthProvider.h"
+#import "FIRActionCodeSettings.h"
#import "FIRAdditionalUserInfo.h"
#import "FIRAuth.h"
#import "FIRAuthCredential.h"
diff --git a/Firebase/Auth/Source/RPCs/FIRAuthBackend.h b/Firebase/Auth/Source/RPCs/FIRAuthBackend.h
index 521cf16..b560644 100644
--- a/Firebase/Auth/Source/RPCs/FIRAuthBackend.h
+++ b/Firebase/Auth/Source/RPCs/FIRAuthBackend.h
@@ -16,6 +16,7 @@
#import <Foundation/Foundation.h>
+@class FIRAuthRequestConfiguration;
@class FIRCreateAuthURIRequest;
@class FIRCreateAuthURIResponse;
@class FIRGetAccountInfoRequest;
@@ -348,18 +349,20 @@ typedef void (^FIRVerifyClientResponseCallback)
*/
@protocol FIRAuthBackendRPCIssuer <NSObject>
-/** @fn asyncPostToURL:body:contentType:completionHandler:
- @brief Asynchronously sends a POST request.
- @param URL URL of the request.
+/** @fn asyncPostToURLWithRequestConfiguration:URL:body:contentType:completionHandler:
+ @brief Asynchronously seXnds a POST request.
+ @param requestConfiguration The request to be made.
+ @param URL The request URL.
@param body Request body.
@param contentType Content type of the body.
@param handler provided that handles POST response. Invoked asynchronously on the auth global
work queue in the future.
*/
-- (void)asyncPostToURL:(NSURL *)URL
- body:(NSData *)body
- contentType:(NSString *)contentType
- completionHandler:(FIRAuthBackendRPCIssuerCompletionHandler)handler;
+- (void)asyncPostToURLWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ URL:(NSURL *)URL
+ body:(NSData *)body
+ contentType:(NSString *)contentType
+ completionHandler:(FIRAuthBackendRPCIssuerCompletionHandler)handler;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRAuthBackend.m b/Firebase/Auth/Source/RPCs/FIRAuthBackend.m
index b2b5a34..7e31993 100644
--- a/Firebase/Auth/Source/RPCs/FIRAuthBackend.m
+++ b/Firebase/Auth/Source/RPCs/FIRAuthBackend.m
@@ -69,6 +69,11 @@ static NSString *const kClientVersionHeader = @"X-Client-Version";
*/
static NSString *const kIosBundleIdentifierHeader = @"X-Ios-Bundle-Identifier";
+/** @var kFirebaseLocalHeader
+ @brief HTTP header name for the firebase locale.
+ */
+static NSString *const kFirebaseLocalHeader = @"X-Firebase-Locale";
+
/** @var kJSONContentType
@brief The value of the HTTP content-type header for JSON payloads.
*/
@@ -246,6 +251,36 @@ static NSString *const kInvalidMessagePayloadErrorMessage = @"INVALID_MESSAGE_PA
*/
static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_EMAIL";
+/** @var kMissingIosBundleIDErrorMessage
+ @brief This is the error message the server will respond with if iOS bundle ID is missing but
+ the iOS App store ID is provided.
+ */
+static NSString *const kMissingIosBundleIDErrorMessage = @"MISSING_IOS_BUNDLE_ID";
+
+/** @var kMissingAndroidPackageNameErrorMessage
+ @brief This is the error message the server will respond with if Android Package Name is missing
+ but the flag indicating the app should be installed is set to true.
+ */
+static NSString *const kMissingAndroidPackageNameErrorMessage = @"MISSING_ANDROID_PACKAGE_NAME";
+
+/** @var kUnauthorizedDomainErrorMessage
+ @brief This is the error message the server will respond with if the domain of the continue URL
+ specified is not whitelisted in the firebase console.
+ */
+static NSString *const kUnauthorizedDomainErrorMessage = @"ERROR_UNAUTHORIZED_DOMAIN";
+
+/** @var kInvalidContinueURIErrorMessage
+ @brief This is the error message the server will respond with if the continue URL provided in
+ the request is invalid.
+ */
+static NSString *const kInvalidContinueURIErrorMessage = @"INVALID_CONTINUE_URI";
+
+/** @var kMissingContinueURIErrorMessage
+ @brief This is the error message the server will respond with if there was no continue URI
+ present in a request that required one.
+ */
+static NSString *const kMissingContinueURIErrorMessage = @"MISSING_CONTINUE_URI";
+
/** @var kInvalidPhoneNumberErrorMessage
@brief This is the error message the server will respond with if an incorrectly formatted phone
number is provided.
@@ -427,10 +462,12 @@ static id<FIRAuthBackendImplementation> gBackendImplementation;
return self;
}
-- (void)asyncPostToURL:(NSURL *)URL
- body:(NSData *)body
- contentType:(NSString *)contentType
- completionHandler:(void (^)(NSData *_Nullable, NSError *_Nullable))handler {
+- (void)asyncPostToURLWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ URL:(NSURL *)URL
+ body:(NSData *)body
+ contentType:(NSString *)contentType
+ completionHandler:(void (^)(NSData *_Nullable,
+ NSError *_Nullable))handler {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSString *clientVersion =
@@ -444,7 +481,10 @@ static id<FIRAuthBackendImplementation> gBackendImplementation;
NSString *acceptLanguage = preferredLocalizations.firstObject;
[request setValue:acceptLanguage forHTTPHeaderField:@"Accept-Language"];
}
-
+ NSString *languageCode = requestConfiguration.languageCode;
+ if (languageCode.length) {
+ [request setValue:languageCode forHTTPHeaderField:kFirebaseLocalHeader];
+ }
GTMSessionFetcher* fetcher = [_fetcherService fetcherWithRequest:request];
fetcher.bodyData = body;
[fetcher beginFetchWithCompletionHandler:handler];
@@ -684,10 +724,11 @@ static id<FIRAuthBackendImplementation> gBackendImplementation;
return;
}
- [_RPCIssuer asyncPostToURL:[request requestURL]
- body:bodyData
- contentType:kJSONContentType
- completionHandler:^(NSData *data, NSError *error) {
+ [_RPCIssuer asyncPostToURLWithRequestConfiguration:[request requestConfiguration]
+ URL:[request requestURL]
+ body:bodyData
+ contentType:kJSONContentType
+ completionHandler:^(NSData *data, NSError *error) {
// If there is an error with no body data at all, then this must be a network error.
if (error && !data) {
callback([FIRAuthErrorUtils networkErrorWithUnderlyingError:error]);
@@ -901,6 +942,26 @@ static id<FIRAuthBackendImplementation> gBackendImplementation;
return [FIRAuthErrorUtils invalidRecipientEmailErrorWithMessage:serverDetailErrorMessage];
}
+ if ([shortErrorMessage isEqualToString:kMissingIosBundleIDErrorMessage]) {
+ return [FIRAuthErrorUtils missingIosBundleIDErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingAndroidPackageNameErrorMessage]) {
+ return [FIRAuthErrorUtils missingAndroidPackageNameErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUnauthorizedDomainErrorMessage]) {
+ return [FIRAuthErrorUtils unauthorizedDomainErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidContinueURIErrorMessage]) {
+ return [FIRAuthErrorUtils invalidContinueURIErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingContinueURIErrorMessage]) {
+ return [FIRAuthErrorUtils missingContinueURIErrorWithMessage:serverDetailErrorMessage];
+ }
+
if ([shortErrorMessage isEqualToString:kInvalidPhoneNumberErrorMessage]) {
return [FIRAuthErrorUtils invalidPhoneNumberErrorWithMessage:serverDetailErrorMessage];
}
diff --git a/Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h b/Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h
index ddad3cb..cde0bd8 100644
--- a/Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h
@@ -16,6 +16,8 @@
#import <Foundation/Foundation.h>
+@class FIRAuthRequestConfiguration;
+
NS_ASSUME_NONNULL_BEGIN
/** @protocol FIRAuthRPCRequest
@@ -35,6 +37,14 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error;
+@optional
+
+/** @fn requestConfiguration
+ @brief Obtains the request configurations if available.
+ @return Returns the request configurations.
+ */
+- (FIRAuthRequestConfiguration *)requestConfiguration;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h b/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h
new file mode 100644
index 0000000..1aec6f6
--- /dev/null
+++ b/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRAuthRPCRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthRequestConfiguration
+ @brief Defines configurations to be added to a request to Firebase Auth's backend.
+ */
+@interface FIRAuthRequestConfiguration : NSObject
+
+/** @property APIKey
+ @brief The Firebase Auth API key used in the request.
+ */
+@property(nonatomic, copy, readonly) NSString *APIKey;
+
+/** @property LanguageCode
+ @brief The language code used in the request.
+ */
+@property(nonatomic, copy, nullable) NSString *languageCode;
+
+- (nullable instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithRequestClass:APIKey:authLanguage:
+ @brief Designated initializer.
+ @param APIKey The API key to be used in the request.
+ */
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m b/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m
new file mode 100644
index 0000000..a4ee5dd
--- /dev/null
+++ b/Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FIRAuthRequestConfiguration.h"
+#import "FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthRequestConfiguration
+
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey {
+ self = [super init];
+ if (self) {
+ _APIKey = [APIKey copy];
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h b/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h
index bb28826..a4fb6f5 100644
--- a/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h
@@ -65,21 +65,23 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, copy, nullable) NSString *appID;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithIdentifier:continueURI:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration.
+ @brief Please use initWithIdentifier:continueURI:requestConfiguration: instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithIdentifier:continueURI:APIKey:
+/** @fn initWithIdentifier:continueURI:requestConfiguration:
@brief Designated initializer.
@param identifier The email or federated ID of the user.
@param continueURI The URI to which the IDP redirects the user after the federated login flow.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithIdentifier:(NSString *)identifier
continueURI:(NSString *)continueURI
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m b/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m
index 6d2b9e9..dae46fb 100644
--- a/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m
@@ -60,8 +60,8 @@ static NSString *const kAppIDKey = @"appId";
- (nullable instancetype)initWithIdentifier:(NSString *)identifier
continueURI:(NSString *)continueURI
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kCreateAuthURIEndpoint APIKey:APIKey];
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kCreateAuthURIEndpoint requestConfiguration:requestConfiguration];
if (self) {
_identifier = [identifier copy];
_continueURI = [continueURI copy];
diff --git a/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h b/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h
index 1751e54..89a7d26 100644
--- a/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h
@@ -27,21 +27,23 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface FIRDeleteAccountRequest : FIRIdentityToolkitRequest<FIRAuthRPCRequest>
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithAPIKey:
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration.
+ @brief Please use initWitLocalID:accessToken:requestConfiguration instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAPIKey:
+/** @fn initWitLocalID:accessToken:requestConfiguration.
@brief Designated initializer.
- @param APIKey The client's API Key.
@param localID The local ID.
@param accessToken The access token.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- localID:(NSString *)localID
- accessToken:(NSString *)accessToken NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWitLocalID:(NSString *)localID
+ accessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m b/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m
index 9105ba0..2222210 100644
--- a/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m
@@ -44,10 +44,10 @@ static NSString *const kLocalIDKey = @"localId";
NSString *_localID;
}
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- localID:(nonnull NSString *)localID
- accessToken:(nonnull NSString *)accessToken {
- self = [super initWithEndpoint:kDeleteAccountEndpoint APIKey:APIKey];
+- (nullable instancetype)initWitLocalID:(NSString *)localID
+ accessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kDeleteAccountEndpoint requestConfiguration:requestConfiguration];
if (self) {
_localID = [localID copy];
_accessToken = [accessToken copy];
diff --git a/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h b/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h
index b45b933..a5a8a20 100644
--- a/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h
@@ -32,19 +32,21 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, copy) NSString *accessToken;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithAPIKey:IDToken:
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration
+ @brief Please use initWithAccessToken:requestConfiguration: instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAPIKey:accessToken:
+/** @fn initWithAccessToken:requestConfiguration
@brief Designated initializer.
- @param APIKey The client's API Key.
@param accessToken The Access Token of the authenticated user.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- accessToken:(NSString *)accessToken NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m b/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m
index 5c73086..fde79fb 100644
--- a/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m
@@ -29,9 +29,10 @@ static NSString *const kIDTokenKey = @"idToken";
@implementation FIRGetAccountInfoRequest
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- accessToken:(NSString *)accessToken {
- self = [super initWithEndpoint:kGetAccountInfoEndpoint APIKey:APIKey];
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kGetAccountInfoEndpoint
+ requestConfiguration:requestConfiguration];
if (self) {
_accessToken = [accessToken copy];
}
diff --git a/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h b/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h
index 08ab495..34714e5 100644
--- a/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h
@@ -19,6 +19,8 @@
#import "FIRAuthRPCRequest.h"
#import "FIRIdentityToolkitRequest.h"
+@class FIRActionCodeSettings;
+
NS_ASSUME_NONNULL_BEGIN
/** @enum FIRGetOOBConfirmationCodeRequestType
@@ -58,29 +60,69 @@ typedef NS_ENUM(NSInteger, FIRGetOOBConfirmationCodeRequestType) {
*/
@property(nonatomic, copy, nullable, readonly) NSString *accessToken;
+/** @property continueURL
+ @brief This URL represents the state/Continue URL in the form of a universal link.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *continueURL;
+
+/** @property iOSBundleID
+ @brief The iOS bundle Identifier, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *iOSBundleID;
+
+/** @property androidPackageName
+ @brief The Android package name, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *androidPackageName;
+
+/** @property androidMinimumVersion
+ @brief The minimum Android version supported, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *androidMinimumVersion;
+
+/** @property androidInstallIfNotAvailable
+ @brief Indicates whether or not the Android app should be installed if not already available.
+ */
+@property(nonatomic, assign, readonly) BOOL androidInstallApp;
+
+/** @property handleCodeInApp
+ @brief Indicates whether or not the action code link will open the app directly or after being
+ redirected from a Firebase owned web widget.
+ */
+@property(assign, nonatomic) BOOL handleCodeInApp;
+
/** @fn passwordResetRequestWithEmail:APIKey:
@brief Creates a password reset request.
@param email The user's email address.
- @param APIKey The client's API Key.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the password reset request.
+ @param requestConfiguration An object containing configurations to be added to the request.
@return A password reset request.
*/
-+ (nullable FIRGetOOBConfirmationCodeRequest *)passwordResetRequestWithEmail:(NSString *)email
- APIKey:(NSString *)APIKey;
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ passwordResetRequestWithEmail:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
/** @fn verifyEmailRequestWithAccessToken:APIKey:
@brief Creates a password reset request.
@param accessToken The user's STS Access Token.
- @param APIKey The client's API Key.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the email verification request.
+ @param requestConfiguration An object containing configurations to be added to the request.
@return A password reset request.
*/
+ (nullable FIRGetOOBConfirmationCodeRequest *)
- verifyEmailRequestWithAccessToken:(NSString *)accessToken APIKey:(NSString *)APIKey;
+ verifyEmailRequestWithAccessToken:(NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
/** @fn init
@brief Please use a factory method.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m b/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m
index cf0dda5..653eddd 100644
--- a/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m
@@ -16,13 +16,15 @@
#import "FIRGetOOBConfirmationCodeRequest.h"
+#import "FIRActionCodeSettings.h"
+
#import "FIRAuthErrorUtils.h"
#import "FIRAuth_Internal.h"
/** @var kEndpoint
@brief The getOobConfirmationCode endpoint name.
*/
-static NSString *const kEndpoint = @"getOobConfirmationCode";
+static NSString *const kGetOobConfirmationCodeEndpoint = @"getOobConfirmationCode";
/** @var kRequestTypeKey
@brief The name of the required "requestType" property in the request.
@@ -40,6 +42,38 @@ static NSString *const kEmailKey = @"email";
*/
static NSString *const kIDTokenKey = @"idToken";
+/** @var kContinueURLKey
+ @brief The key for the "continue URL" value in the request.
+ */
+static NSString *const kContinueURLKey = @"continueUrl";
+
+/** @var kIosBundeIDKey
+ @brief The key for the "iOS Bundle Identifier" value in the request.
+ */
+static NSString *const kIosBundleIDKey = @"iOSBundleId";
+
+/** @var kAndroidPackageNameKey
+ @brief The key for the "Android Package Name" value in the request.
+ */
+static NSString *const kAndroidPackageNameKey = @"androidPackageName";
+
+/** @var kAndroidInstallAppKey
+ @brief The key for the request parameter indicating whether the android app should be installed
+ or not.
+ */
+static NSString *const kAndroidInstallAppKey = @"androidInstallApp";
+
+/** @var kAndroidMinimumVersionKey
+ @brief The key for the "minimum Android version supported" value in the request.
+ */
+static NSString *const kAndroidMinimumVersionKey = @"androidMinimumVersion";
+
+/** @var kCanHandleCodeInAppKey
+ @brief The key for the request parameter indicating whether the action code can be handled in
+ the app or not.
+ */
+static NSString *const kCanHandleCodeInAppKey = @"canHandleCodeInApp";
+
/** @var kPasswordResetRequestTypeValue
@brief The value for the "PASSWORD_RESET" request type.
*/
@@ -57,12 +91,15 @@ static NSString *const kVerifyEmailRequestTypeValue = @"VERIFY_EMAIL";
@param requestType The types of OOB Confirmation Code to request.
@param email The email of the user.
@param accessToken The STS Access Token of the currently signed in user.
- @param APIKey The client's API Key.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the OOB code request.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithRequestType:(FIRGetOOBConfirmationCodeRequestType)requestType
email:(nullable NSString *)email
accessToken:(nullable NSString *)accessToken
- APIKey:(nullable NSString *)APIKey
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
NS_DESIGNATED_INITIALIZER;
@end
@@ -83,31 +120,45 @@ static NSString *const kVerifyEmailRequestTypeValue = @"VERIFY_EMAIL";
}
}
-+ (FIRGetOOBConfirmationCodeRequest *)passwordResetRequestWithEmail:(NSString *)email
- APIKey:(NSString *)APIKey {
++ (FIRGetOOBConfirmationCodeRequest *)
+ passwordResetRequestWithEmail:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypePasswordReset
email:email
accessToken:nil
- APIKey:APIKey];
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
}
+ (FIRGetOOBConfirmationCodeRequest *)
- verifyEmailRequestWithAccessToken:(NSString *)accessToken APIKey:(NSString *)APIKey {
+ verifyEmailRequestWithAccessToken:(NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeVerifyEmail
email:nil
accessToken:accessToken
- APIKey:APIKey];
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
}
- (nullable instancetype)initWithRequestType:(FIRGetOOBConfirmationCodeRequestType)requestType
email:(nullable NSString *)email
accessToken:(nullable NSString *)accessToken
- APIKey:(nullable NSString *)APIKey {
- self = [super initWithEndpoint:kEndpoint APIKey:APIKey];
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kGetOobConfirmationCodeEndpoint
+ requestConfiguration:requestConfiguration];
if (self) {
_requestType = requestType;
_email = email;
_accessToken = accessToken;
+ _continueURL = actionCodeSettings.URL.absoluteString;
+ _iOSBundleID = actionCodeSettings.iOSBundleID;
+ _androidPackageName = actionCodeSettings.androidPackageName;
+ _androidMinimumVersion = actionCodeSettings.androidMinimumVersion;
+ _androidInstallApp = actionCodeSettings.androidInstallIfNotAvailable;
+ _handleCodeInApp = actionCodeSettings.handleCodeInApp;
}
return self;
}
@@ -129,6 +180,30 @@ static NSString *const kVerifyEmailRequestTypeValue = @"VERIFY_EMAIL";
body[kIDTokenKey] = _accessToken;
}
+ if (_continueURL) {
+ body[kContinueURLKey] = _continueURL;
+ }
+
+ if (_iOSBundleID) {
+ body[kIosBundleIDKey] = _iOSBundleID;
+ }
+
+ if (_androidPackageName) {
+ body[kAndroidPackageNameKey] = _androidPackageName;
+ }
+
+ if (_androidMinimumVersion) {
+ body[kAndroidMinimumVersionKey] = _androidMinimumVersion;
+ }
+
+ if (_androidInstallApp) {
+ body[kAndroidInstallAppKey] = @YES;
+ }
+
+ if (_handleCodeInApp) {
+ body[kCanHandleCodeInAppKey] = @YES;
+ }
+
return body;
}
diff --git a/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h b/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h
index 873788d..b5ca726 100644
--- a/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h
@@ -16,6 +16,10 @@
#import <Foundation/Foundation.h>
+#import "FIRAuthRequestConfiguration.h"
+
+@class FIRAuthRequestConfiguration;
+
NS_ASSUME_NONNULL_BEGIN
/** @class FIRIdentityToolkitRequest
@@ -41,17 +45,22 @@ NS_ASSUME_NONNULL_BEGIN
/** @fn initWithEndpoint:APIKey:
@brief Designated initializer.
@param endpoint The endpoint name.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey
- NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
/** @fn requestURL
@brief Gets the request's full URL.
*/
- (NSURL *)requestURL;
+/** @fn requestConfiguration
+ @brief Gets the request's configuration.
+ */
+- (FIRAuthRequestConfiguration *)requestConfiguration;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m b/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m
index fb51a82..c897066 100644
--- a/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m
@@ -16,6 +16,8 @@
#import "FIRIdentityToolkitRequest.h"
+NS_ASSUME_NONNULL_BEGIN
+
/** @var kAPIURLFormat
@brief URL format for server API calls.
*/
@@ -26,14 +28,17 @@ static NSString *const kAPIURLFormat = @"https://%@/identitytoolkit/v3/relyingpa
*/
static NSString *gAPIHost = @"www.googleapis.com";
-@implementation FIRIdentityToolkitRequest
+@implementation FIRIdentityToolkitRequest {
+ FIRAuthRequestConfiguration *_requestConfiguration;
+}
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey {
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
self = [super init];
if (self) {
_endpoint = [endpoint copy];
- _APIKey = [APIKey copy];
+ _APIKey = [requestConfiguration.APIKey copy];
+ _requestConfiguration = requestConfiguration;
}
return self;
}
@@ -44,6 +49,10 @@ static NSString *gAPIHost = @"www.googleapis.com";
return URL;
}
+- (FIRAuthRequestConfiguration *)requestConfiguration {
+ return _requestConfiguration;
+}
+
#pragma mark - Internal API for development
+ (NSString *)host {
@@ -54,4 +63,6 @@ static NSString *gAPIHost = @"www.googleapis.com";
gAPIHost = host;
}
+NS_ASSUME_NONNULL_END
+
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h b/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h
index 66b03ad..701e305 100644
--- a/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h
@@ -33,21 +33,23 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, copy, readonly) NSString *updatedPassword;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithOOBCode:oobCode: instead.
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithOobCode:newPassword:requestConfiguration: instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAPIKey:oobCode:currentPassword:
+/** @fn initWithOobCode:newPassword:requestConfiguration:
@brief Designated initializer.
- @param APIKey The client's API Key.
@param oobCode The OOB Code.
@param newPassword The new password.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- oobCode:(NSString *)oobCode
- newPassword:(nullable NSString *)newPassword NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithOobCode:(NSString *)oobCode
+ newPassword:(nullable NSString *)newPassword
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m b/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m
index 603aa00..27d6d8c 100644
--- a/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m
@@ -33,10 +33,10 @@ static NSString *const kCurrentPasswordKey = @"newPassword";
@implementation FIRResetPasswordRequest
-- (instancetype)initWithAPIKey:(NSString *)APIKey
- oobCode:(NSString *)oobCode
- newPassword:(NSString *)newPassword {
- self = [super initWithEndpoint:kResetPasswordEndpoint APIKey:APIKey];
+- (instancetype)initWithOobCode:(NSString *)oobCode
+ newPassword:(NSString *)newPassword
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kResetPasswordEndpoint requestConfiguration:requestConfiguration];
if (self) {
_oobCode = oobCode;
_updatedPassword = newPassword;
diff --git a/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h
index 44c16b1..14722fa 100644
--- a/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h
@@ -71,19 +71,22 @@ typedef NS_ENUM(NSUInteger, FIRSecureTokenRequestGrantType) {
/** @fn authCodeRequestWithCode:
@brief Creates an authorization code request with the given code (legacy Gitkit "ID Token").
@param code The authorization code (legacy Gitkit "ID Token").
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
@return An authorization request.
*/
-+ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code APIKey:(NSString *)APIKey;
++ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code
+ requestConfiguration:(FIRAuthRequestConfiguration *)
+ requestConfiguration;
/** @fn refreshRequestWithCode:
@brief Creates a refresh request with the given refresh token.
@param refreshToken The refresh token.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
@return A refresh request.
*/
+ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
- APIKey:(NSString *)APIKey;
+ requestConfiguration:(FIRAuthRequestConfiguration *)
+ requestConfiguration;
/** @fn init
@brief Please use initWithGrantType:scope:refreshToken:code:
@@ -96,13 +99,14 @@ typedef NS_ENUM(NSUInteger, FIRSecureTokenRequestGrantType) {
@param scope The scopes requested.
@param refreshToken The client's refresh token (for refresh requests.)
@param code The client's authorization code (Gitkit ID Token) (for authorization code requests.)
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithGrantType:(FIRSecureTokenRequestGrantType)grantType
scope:(nullable NSString *)scope
refreshToken:(nullable NSString *)refreshToken
code:(nullable NSString *)code
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
index 1983542..9c39e1e 100644
--- a/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m
@@ -15,6 +15,7 @@
*/
#import "FIRSecureTokenRequest.h"
+#import "FIRAuthRequestConfiguration.h"
/** @var kFIRSecureTokenServiceGetTokenURLFormat
@brief The format of the secure token service URLs. Requires string format substitution with
@@ -57,23 +58,31 @@ static NSString *const kCodeKey = @"code";
*/
static NSString *gAPIHost = @"securetoken.googleapis.com";
-@implementation FIRSecureTokenRequest
+@implementation FIRSecureTokenRequest {
+ /** @var _requestConfiguration
+ @brief Contains configuration relevant to the request.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
+}
-+ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code APIKey:(NSString *)APIKey {
++ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code
+ requestConfiguration:(FIRAuthRequestConfiguration *)
+ requestConfiguration {
return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeAuthorizationCode
scope:nil
refreshToken:nil
code:code
- APIKey:APIKey];
+ requestConfiguration:requestConfiguration];
}
+ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
- APIKey:(NSString *)APIKey {
+ requestConfiguration:(FIRAuthRequestConfiguration *)
+ requestConfiguration {
return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeRefreshToken
scope:nil
refreshToken:refreshToken
code:nil
- APIKey:APIKey];
+ requestConfiguration:requestConfiguration];
}
/** @fn grantTypeStringWithGrantType:
@@ -93,18 +102,23 @@ static NSString *gAPIHost = @"securetoken.googleapis.com";
scope:(nullable NSString *)scope
refreshToken:(nullable NSString *)refreshToken
code:(nullable NSString *)code
- APIKey:(NSString *)APIKey {
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
self = [super init];
if (self) {
_grantType = grantType;
_scope = [scope copy];
_refreshToken = [refreshToken copy];
_code = [code copy];
- _APIKey = [APIKey copy];
+ _APIKey = [requestConfiguration.APIKey copy];
+ _requestConfiguration = requestConfiguration;
}
return self;
}
+- (FIRAuthRequestConfiguration *)requestConfiguration {
+ return _requestConfiguration;
+}
+
- (NSURL *)requestURL {
NSString *URLString =
[NSString stringWithFormat:kFIRSecureTokenServiceGetTokenURLFormat, gAPIHost, _APIKey];
diff --git a/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h b/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h
index 596fb8c..9a5c41c 100644
--- a/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h
@@ -35,21 +35,24 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, strong, readonly) FIRAuthAppCredential *appCredential;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithPhoneNumber:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithPhoneNumber:appCredentials:requestConfiguration: instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithPhoneNumber:APIKey:
+/** @fn initWithPhoneNumber:appCredentials:requestConfiguration:
@brief Designated initializer.
@param phoneNumber The phone number to which the verification code is to be sent.
@param appCredential The credential that proves the identity of the app.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
appCredential:(FIRAuthAppCredential *)appCredential
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m b/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m
index d97c90a..2f33e02 100644
--- a/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m
@@ -45,8 +45,9 @@ static NSString *const kSecretKey = @"iosSecret";
- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
appCredential:(FIRAuthAppCredential *)appCredential
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kSendVerificationCodeEndPoint APIKey:APIKey];
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSendVerificationCodeEndPoint
+ requestConfiguration:requestConfiguration];
if (self) {
_phoneNumber = [phoneNumber copy];
_appCredential = appCredential;
diff --git a/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h b/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h
index 4816474..0e0e18f 100644
--- a/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h
@@ -132,17 +132,19 @@ extern NSString *const FIRSetAccountInfoUserAttributePassword;
*/
@property(nonatomic, assign) BOOL returnSecureToken;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithAPIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithAPIKey:email:password:displayName:requestConfiguration instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAPIKey:
+/** @fn initWithRequestConfiguration:
@brief Designated initializer.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m b/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m
index 5b202a4..f455d47 100644
--- a/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m
@@ -113,8 +113,9 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
@implementation FIRSetAccountInfoRequest
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kSetAccountInfoEndpoint APIKey:APIKey];
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSetAccountInfoEndpoint requestConfiguration:requestConfiguration];
if (self) {
_returnSecureToken = YES;
}
diff --git a/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h b/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h
index 46b47d5..06d2cfe 100644
--- a/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h
@@ -44,23 +44,28 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, assign) BOOL returnSecureToken;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithEmail:password:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithAPIKey:email:password:displayName:requestConfiguration instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
-/** @fn initWithAPIKey:
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithEndpoint:requestConfiguration:
@brief initializer for anonymous sign-in.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey;
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration;
-/** @fn initWithAPIKey:email:password:
+/** @fn initWithAPIKey:email:password:displayName:requestConfiguration
@brief Designated initializer.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- email:(nullable NSString *)email
- password:(nullable NSString *)password
- displayName:(nullable NSString *)displayName NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithEmail:(nullable NSString *)email
+ password:(nullable NSString *)password
+ displayName:(nullable NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m b/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m
index af60b11..52a0215 100644
--- a/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m
@@ -43,11 +43,11 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
@implementation FIRSignUpNewUserRequest
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- email:(NSString *)email
- password:(NSString *)password
- displayName:(NSString *)displayName {
- self = [super initWithEndpoint:kSignupNewUserEndpoint APIKey:APIKey];
+- (nullable instancetype)initWithEmail:(nullable NSString *)email
+ password:(nullable NSString *)password
+ displayName:(nullable NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSignupNewUserEndpoint requestConfiguration:requestConfiguration];
if (self) {
_email = [email copy];
_password = [password copy];
@@ -57,8 +57,12 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
return self;
}
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey{
- self = [self initWithAPIKey:APIKey email:nil password:nil displayName:nil];
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [self initWithEmail:nil
+ password:nil
+ displayName:nil
+ requestConfiguration:requestConfiguration];
return self;
}
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h b/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h
index 3202b47..3136b80 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h
@@ -81,19 +81,22 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, assign) BOOL autoCreate;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithAPIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithProviderID:requestConfifuration instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAPIKey:
+/** @fn initWithProviderID:requestConfifuration
@brief Designated initializer.
- @param APIKey The client's API Key.
@param providerID The auth provider's ID.
+ @param requestConfiguration An object containing configurations to be added to the request.
+
*/
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- providerID:(NSString *)providerID NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m b/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m
index b31ae42..2251c42 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m
@@ -82,9 +82,10 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
@implementation FIRVerifyAssertionRequest
-- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
- providerID:(nonnull NSString *)providerID{
- self = [super initWithEndpoint:kVerifyAssertionEndpoint APIKey:APIKey];
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyAssertionEndpoint
+ requestConfiguration:requestConfiguration];
if (self) {
_providerID = providerID;
_returnSecureToken = YES;
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h b/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h
index b5da6b8..b6732a4 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h
@@ -32,21 +32,24 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, assign, readonly) BOOL isSandbox;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithAppToken:isSandbox: instead.
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithToken:requestConfiguration: instead.
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithAppToken:isSandbox:
+/** @fn initWithAppToken:isSandbox:requestConfiguration:
@brief Designated initializer.
@param appToken The APNS device token.
@param isSandbox The flag indicating whether or not the app token provided is for Sandbox or
Production.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithAppToken:(NSString *)appToken
isSandbox:(BOOL)isSandbox
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m b/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m
index 7b4b469..4a102e6 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m
@@ -38,8 +38,8 @@ static NSString *const kIsSandboxKey = @"isSandbox";
- (nullable instancetype)initWithAppToken:(NSString *)appToken
isSandbox:(BOOL)isSandbox
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kVerifyClientEndpoint APIKey:APIKey];
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyClientEndpoint requestConfiguration:requestConfiguration];
if (self) {
_appToken = appToken;
_isSandbox = isSandbox;
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h
index 20f3f4d..84bad05 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h
@@ -37,19 +37,20 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, assign) BOOL returnSecureToken;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithToken:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithToken:requestConfiguration: instead.
*/
-- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration NS_UNAVAILABLE;
-/** @fn initWithToken:APIKey:
+/** @fn initWithToken:requestConfiguration:
@brief Designated initializer.
@param token The self-signed token from the client's BYOAuth server.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithToken:(NSString *)token
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m
index 63d72d1..79e60f4 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m
@@ -34,8 +34,9 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
@implementation FIRVerifyCustomTokenRequest
- (nullable instancetype)initWithToken:(NSString *)token
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kVerifyCustomTokenEndpoint APIKey:APIKey];
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyCustomTokenEndpoint
+ requestConfiguration:requestConfiguration];
if (self) {
_token = [token copy];
_returnSecureToken = YES;
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h b/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h
index ba54bce..39eb388 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h
@@ -58,21 +58,23 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, assign) BOOL returnSecureToken;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithEmail:password:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithEmail:password:requestConfiguration:
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
-/** @fn initWithEmail:password:APIKey:
+/** @fn initWithEmail:password:requestConfiguration:
@brief Designated initializer.
@param email The email of the user.
@param password The password inputed by the user.
- @param APIKey The client's API Key.
+ @param requestConfiguration The configu
*/
- (nullable instancetype)initWithEmail:(NSString *)email
password:(NSString *)password
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m b/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m
index 7a9da8b..515a425 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m
@@ -55,8 +55,9 @@ static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
- (nullable instancetype)initWithEmail:(NSString *)email
password:(NSString *)password
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kVerifyPasswordEndpoint APIKey:APIKey];
+ requestConfiguration:(nonnull FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPasswordEndpoint
+ requestConfiguration:requestConfiguration];
if (self) {
_email = [email copy];
_password = [password copy];
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h b/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h
index 06039b9..b091d62 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h
@@ -47,31 +47,34 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, readonly, nonnull) NSString *phoneNumber;
-/** @fn initWithEndpoint:APIKey:
- @brief Please use initWithPhoneNumber:APIKey:
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithVerificationID:verificationCode:requestConfiguration
*/
- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
- APIKey:(NSString *)APIKey NS_UNAVAILABLE;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
/** @fn initWithTemporaryProof:phoneNumberAPIKey
@brief Designated initializer.
@param temporaryProof The temporary proof sent by the backed.
@param phoneNumber The phone number associated with the credential to be signed in.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithTemporaryProof:(NSString *)temporaryProof
phoneNumber:(NSString *)phoneNumber
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
-/** @fn initWithVerificationID:verificationCode:APIKey
+/** @fn initWithVerificationID:verificationCode:requestConfiguration
@brief Designated initializer.
@param verificationID The verification ID obtained from the response of @c sendVerificationCode.
@param verificationCode The verification code provided by the user.
- @param APIKey The client's API Key.
+ @param requestConfiguration An object containing configurations to be added to the request.
*/
- (nullable instancetype)initWithVerificationID:(NSString *)verificationID
verificationCode:(NSString *)verificationCode
- APIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
@end
diff --git a/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m b/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m
index b3d1054..b859693 100644
--- a/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m
+++ b/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m
@@ -52,8 +52,10 @@ static NSString *const kPhoneNumberKey = @"phoneNumber";
- (nullable instancetype)initWithTemporaryProof:(NSString *)temporaryProof
phoneNumber:(NSString *)phoneNumber
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint APIKey:APIKey];
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
+ requestConfiguration:requestConfiguration];
if (self) {
_temporaryProof = [temporaryProof copy];
_phoneNumber = [phoneNumber copy];
@@ -63,8 +65,10 @@ static NSString *const kPhoneNumberKey = @"phoneNumber";
- (nullable instancetype)initWithVerificationID:(NSString *)verificationID
verificationCode:(NSString *)verificationCode
- APIKey:(NSString *)APIKey {
- self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint APIKey:APIKey];
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
+ requestConfiguration:requestConfiguration];
if (self) {
_verificationID = verificationID;
_verificationCode = verificationCode;
diff --git a/FirebaseCommunity.podspec b/FirebaseCommunity.podspec
index 7e33948..4472ac2 100644
--- a/FirebaseCommunity.podspec
+++ b/FirebaseCommunity.podspec
@@ -52,6 +52,7 @@ Firebase Development CocoaPod including experimental and community supported fea
sp.xcconfig = { 'OTHER_CFLAGS' => '-DFIRAuth_VERSION=' + s.version.to_s +
' -DFIRAuth_MINOR_VERSION=' + s.version.to_s.split(".")[0] + "." + s.version.to_s.split(".")[1]
}
+ sp.resources = [ 'Firebase/Auth/Source/FirebaseAuth.bundle' ]
sp.framework = 'Security'
sp.dependency 'FirebaseCommunity/Core'
sp.dependency 'GTMSessionFetcher/Core', '~> 1.1'