You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* * 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 "FIRGetOOBConfirmationCodeRequest.h"
#import "FIRActionCodeSettings.h"
#import "FIRAuthErrorUtils.h" #import "FIRAuth_Internal.h"
/** @var kEndpoint @brief The getOobConfirmationCode endpoint name. */ static NSString *const kGetOobConfirmationCodeEndpoint = @"getOobConfirmationCode";
/** @var kRequestTypeKey @brief The name of the required "requestType" property in the request. */ static NSString *const kRequestTypeKey = @"requestType";
/** @var kEmailKey @brief The name of the "email" property in the request. */ static NSString *const kEmailKey = @"email";
/** @var kIDTokenKey @brief The key for the "idToken" value in the request. This is actually the STS Access Token, despite it's confusing (backwards compatiable) parameter name. */ 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. */ static NSString *const kPasswordResetRequestTypeValue = @"PASSWORD_RESET";
/** @var kEmailLinkSignInTypeValue @brief The value for the "EMAIL_SIGNIN" request type. */ static NSString *const kEmailLinkSignInTypeValue= @"EMAIL_SIGNIN";
/** @var kVerifyEmailRequestTypeValue @brief The value for the "VERIFY_EMAIL" request type. */ static NSString *const kVerifyEmailRequestTypeValue = @"VERIFY_EMAIL";
@interface FIRGetOOBConfirmationCodeRequest ()
/** @fn initWithRequestType:email:APIKey: @brief Designated initializer. @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 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 actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration NS_DESIGNATED_INITIALIZER;
@end
@implementation FIRGetOOBConfirmationCodeRequest
/** @var requestTypeStringValueForRequestType: @brief Returns the string equivilent for an @c FIRGetOOBConfirmationCodeRequestType value. */ + (NSString *)requestTypeStringValueForRequestType: (FIRGetOOBConfirmationCodeRequestType)requestType { switch (requestType) { case FIRGetOOBConfirmationCodeRequestTypePasswordReset: return kPasswordResetRequestTypeValue; case FIRGetOOBConfirmationCodeRequestTypeVerifyEmail: return kVerifyEmailRequestTypeValue; case FIRGetOOBConfirmationCodeRequestTypeEmailLink: return kEmailLinkSignInTypeValue; // No default case so that we get a compiler warning if a new value was added to the enum. } }
+ (FIRGetOOBConfirmationCodeRequest *) passwordResetRequestWithEmail:(NSString *)email actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration { return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypePasswordReset email:email accessToken:nil actionCodeSettings:actionCodeSettings requestConfiguration:requestConfiguration]; }
+ (FIRGetOOBConfirmationCodeRequest *) verifyEmailRequestWithAccessToken:(NSString *)accessToken actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration { return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeVerifyEmail email:nil accessToken:accessToken actionCodeSettings:actionCodeSettings requestConfiguration:requestConfiguration]; }
+ (FIRGetOOBConfirmationCodeRequest *) signInWithEmailLinkRequest:(NSString *)email actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration { return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeEmailLink email:email accessToken:nil actionCodeSettings:actionCodeSettings requestConfiguration:requestConfiguration]; }
- (nullable instancetype)initWithRequestType:(FIRGetOOBConfirmationCodeRequestType)requestType email:(nullable NSString *)email accessToken:(nullable NSString *)accessToken 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; }
- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error { NSMutableDictionary *body = [@{ kRequestTypeKey : [[self class] requestTypeStringValueForRequestType:_requestType] } mutableCopy];
// For password reset requests, we only need an email address in addition to the already required // fields. if (_requestType == FIRGetOOBConfirmationCodeRequestTypePasswordReset) { body[kEmailKey] = _email; }
// For verify email requests, we only need an STS Access Token in addition to the already required // fields. if (_requestType == FIRGetOOBConfirmationCodeRequestTypeVerifyEmail) { body[kIDTokenKey] = _accessToken; }
// For email sign-in link requests, we only need an email address in addition to the already // required fields. if (_requestType == FIRGetOOBConfirmationCodeRequestTypeEmailLink) { body[kEmailKey] = _email; }
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; }
@end
|