Skip to content

Commit

Permalink
[Merge develop to master by circleci] Fixed readme for cocopod and fr…
Browse files Browse the repository at this point in the history
…amework installation (#2375)
  • Loading branch information
AWS committed Mar 23, 2020
2 parents 7e46b05 + 6e7000f commit 655e13b
Show file tree
Hide file tree
Showing 36 changed files with 3,923 additions and 447 deletions.
48 changes: 38 additions & 10 deletions AWSAuthSDK/Sources/AWSMobileClient/AWSMobileClientExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,14 @@ extension AWSMobileClient {
/// - password: password of the user
/// - userAttributes: user attributes which contain attributes like phone_number, email, etc.
/// - validationData: validation data for the user.
/// - clientMetaData: A map of custom key-value pairs that you can provide as input for any
/// custom workflows that this action triggers.
/// - completionHandler: completionHandler which will be called when a sign up result is available.
public func signUp(username: String,
password: String,
userAttributes: [String: String] = [:],
validationData: [String: String] = [:],
clientMetaData: [String:String] = [:],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {

if (self.userPoolClient == nil) { completionHandler(nil, AWSMobileClientError.userPoolNotConfigured(message: "Cognito User Pools is not configured in `awsconfiguration.json`. Please add Cognito User Pools before using this API."))}
Expand All @@ -327,7 +330,8 @@ extension AWSMobileClient {

self.userPoolClient?.signUp(username, password: password,
userAttributes: userAttributesTransformed.count == 0 ? nil : userAttributesTransformed,
validationData: validationDataTransformed.count == 0 ? nil : validationDataTransformed).continueWith { (task) -> Any? in
validationData: validationDataTransformed.count == 0 ? nil : validationDataTransformed,
clientMetaData: clientMetaData).continueWith { (task) -> Any? in
if let error = task.error {
completionHandler(nil, AWSMobileClientError.makeMobileClientError(from: error))
} else if let result = task.result {
Expand Down Expand Up @@ -361,18 +365,32 @@ extension AWSMobileClient {
/// - Parameters:
/// - username: username of the user.
/// - confirmationCode: confirmation code sent to the user.
/// - clientMetaData: A map of custom key-value pairs that you can provide as input for any
/// custom workflows that this action triggers.
/// - completionHandler: completionHandler which will be called when a result is available.
public func confirmSignUp(username: String, confirmationCode: String, completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
public func confirmSignUp(username: String,
confirmationCode: String,
clientMetaData: [String:String] = [:],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
if let uname = self.userpoolOpsHelper.signUpUser?.username, uname == username {
confirmSignUp(user: self.userpoolOpsHelper.signUpUser!, confirmationCode: confirmationCode, completionHandler: completionHandler)
confirmSignUp(user: self.userpoolOpsHelper.signUpUser!,
confirmationCode: confirmationCode,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
} else {
let user = self.userPoolClient?.getUser(username)
confirmSignUp(user: user!, confirmationCode: confirmationCode, completionHandler: completionHandler)
confirmSignUp(user: user!,
confirmationCode: confirmationCode,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
}

internal func confirmSignUp(user: AWSCognitoIdentityUser, confirmationCode: String, completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
user.confirmSignUp(confirmationCode).continueWith { (task) -> Any? in
internal func confirmSignUp(user: AWSCognitoIdentityUser,
confirmationCode: String,
clientMetaData: [String:String] = [:],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
user.confirmSignUp(confirmationCode, clientMetaData: clientMetaData).continueWith { (task) -> Any? in
if let error = task.error {
completionHandler(nil, AWSMobileClientError.makeMobileClientError(from: error))
} else if let _ = task.result {
Expand Down Expand Up @@ -417,10 +435,14 @@ extension AWSMobileClient {
///
/// - Parameters:
/// - username: username of the user who forgot the password.
/// - clientMetaData: A map of custom key-value pairs that you can provide as input for any
/// custom workflows that this action triggers.
/// - completionHandler: completionHandler which will be called when result is available.
public func forgotPassword(username: String, completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
public func forgotPassword(username: String,
clientMetaData: [String:String] = [:],
completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
let user = self.userPoolClient?.getUser(username)
user!.forgotPassword().continueWith { (task) -> Any? in
user!.forgotPassword(clientMetaData).continueWith { (task) -> Any? in
if let error = task.error {
completionHandler(nil, AWSMobileClientError.makeMobileClientError(from: error))
} else if let result = task.result {
Expand All @@ -440,10 +462,16 @@ extension AWSMobileClient {
/// - username: username of the user who forgot the password
/// - newPassword: the new password which the user wants to set
/// - confirmationCode: the confirmation code sent to the user
/// - clientMetaData: A map of custom key-value pairs that you can provide as input for any
/// custom workflows that this action triggers.
/// - completionHandler: completionHandler which will be called when a result is available.
public func confirmForgotPassword(username: String, newPassword: String, confirmationCode: String, completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
public func confirmForgotPassword(username: String,
newPassword: String,
confirmationCode: String,
clientMetaData: [String:String] = [:],
completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
let user = self.userPoolClient?.getUser(username)
user!.confirmForgotPassword(confirmationCode, password: newPassword).continueWith { (task) -> Any? in
user!.confirmForgotPassword(confirmationCode, password: newPassword, clientMetaData: clientMetaData).continueWith { (task) -> Any? in
if let error = task.error {
completionHandler(nil, AWSMobileClientError.makeMobileClientError(from: error))
} else if let _ = task.result {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@ class AWSMobileClientPasswordTests: AWSMobileClientTestBase {
wait(for: [forgotPasswordExpection], timeout: 5)
}

func testForgotPasswordWithValidClientMetaData() {
let username = "testUser" + UUID().uuidString
signUpAndVerifyUser(username: username)
let forgotPasswordExpection = expectation(description: "Expecting code to be sent for forgot password.")
AWSMobileClient.default().forgotPassword(username: username,
clientMetaData: ["customKey":"cutomValue"]) { (forgotPasswordResult, error) in
XCTAssertNotNil(error, "should get error which mentions there is no verified email or phone.")
forgotPasswordExpection.fulfill()
}
wait(for: [forgotPasswordExpection], timeout: 5)
}


func testChangePassword() {
let username = "testUser" + UUID().uuidString
signUpAndVerifyUser(username: username)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,10 @@ class AWSMobileClientTestBase: XCTestCase {
wait(for: [signInConfirmWasSuccessful], timeout: 5)
}

func signUpUser(username: String, customUserAttributes: [String: String]? = nil, signupState: SignUpConfirmationState = .unconfirmed) {
func signUpUser(username: String,
customUserAttributes: [String: String]? = nil,
clientMetaData: [String: String]? = nil,
signupState: SignUpConfirmationState = .unconfirmed) {
var userAttributes = ["email": AWSMobileClientTestBase.sharedEmail!]
if let customUserAttributes = customUserAttributes {
userAttributes.merge(customUserAttributes) { current, _ in current }
Expand All @@ -127,7 +130,8 @@ class AWSMobileClientTestBase: XCTestCase {
AWSMobileClient.default().signUp(
username: username,
password: sharedPassword,
userAttributes: userAttributes) { (signUpResult, error) in
userAttributes: userAttributes,
clientMetaData: clientMetaData ?? [:]) { (signUpResult, error) in
if let error = error {
var errorMessage: String
if let mobileClientError = error as? AWSMobileClientError {
Expand Down Expand Up @@ -208,4 +212,5 @@ class AWSMobileClientTestBase: XCTestCase {
let key = "\(namespace).tokenExpiration"
keychain.removeItem(forKey: key)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ class AWSMobileClientTests: AWSMobileClientTestBase {
adminVerifyUser(username: username)
}

func testSignUpWithValidClientMetaData() {
let username = "testUser" + UUID().uuidString
signUpUser(username: username,
clientMetaData: ["customKey":"cutomValue"])
adminVerifyUser(username: username)
}

func testResendSignUpCode() {
let username = "testUser" + UUID().uuidString
signUpUser(username: username)
Expand Down
18 changes: 17 additions & 1 deletion AWSCognitoIdentityProvider/AWSCognitoIdentityUser.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,15 @@ NS_ASSUME_NONNULL_BEGIN
/**
Confirm a users' sign up with the confirmation code. If forceAliasCreation is set, if another user is aliased to the same email/phone this code was sent to, reassign alias to this user.
*/
-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode forceAliasCreation:(BOOL)forceAliasCreation;
-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
forceAliasCreation:(BOOL)forceAliasCreation;

-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
clientMetaData:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData;

-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
forceAliasCreation:(BOOL)forceAliasCreation
clientMetaData:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData;
/**
Resend the confirmation code sent during sign up
*/
Expand Down Expand Up @@ -116,14 +123,23 @@ NS_ASSUME_NONNULL_BEGIN
/**
Send a code to this user to initiate the forgot password flow
*/
- (AWSTask<AWSCognitoIdentityUserForgotPasswordResponse *> *)forgotPassword:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData;

- (AWSTask<AWSCognitoIdentityUserForgotPasswordResponse *> *)forgotPassword;


/**
Conclude the forgot password flow by providing the forgot password code and new password.
*/
- (AWSTask<AWSCognitoIdentityUserConfirmForgotPasswordResponse *> *)confirmForgotPassword:(NSString *)confirmationCode
password:(NSString *)password
clientMetaData:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData;


- (AWSTask<AWSCognitoIdentityUserConfirmForgotPasswordResponse *> *)confirmForgotPassword:(NSString *)confirmationCode
password:(NSString *)password;


/**
Change this user's password
*/
Expand Down
47 changes: 41 additions & 6 deletions AWSCognitoIdentityProvider/AWSCognitoIdentityUser.m
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,10 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU
return self;
}

-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode {
return [self confirmSignUp:confirmationCode forceAliasCreation:NO];
}

-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode forceAliasCreation:(BOOL)forceAliasCreation {
-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
forceAliasCreation:(BOOL)forceAliasCreation
clientMetaData:(nullable NSDictionary<NSString *,NSString *> *)clientMetaData {
AWSCognitoIdentityProviderConfirmSignUpRequest *request = [AWSCognitoIdentityProviderConfirmSignUpRequest new];
request.clientId = self.pool.userPoolConfiguration.clientId;
request.username = self.username;
Expand All @@ -56,6 +55,7 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU
request.forceAliasCreation = (forceAliasCreation?@(YES):@(NO));
request.analyticsMetadata = [self.pool analyticsMetadata];
request.userContextData = [self.pool userContextData:self.username deviceId: [self asfDeviceId]];
request.clientMetadata = clientMetaData;

return [[self.pool.client confirmSignUp:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityProviderConfirmSignUpResponse *> * _Nonnull task) {
if (task.error) {
Expand All @@ -70,13 +70,32 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU
}];
}

-(AWSTask<AWSCognitoIdentityUserForgotPasswordResponse *> *) forgotPassword {

-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
forceAliasCreation:(BOOL)forceAliasCreation {
return [self confirmSignUp:confirmationCode forceAliasCreation:forceAliasCreation clientMetaData:nil];
}


-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode
clientMetaData:(nullable NSDictionary<NSString *,NSString *> *)clientMetaData {
return [self confirmSignUp:confirmationCode forceAliasCreation:NO clientMetaData:clientMetaData];
}


-(AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse *> *) confirmSignUp:(NSString *) confirmationCode {
return [self confirmSignUp:confirmationCode forceAliasCreation:NO clientMetaData:nil];
}


-(AWSTask<AWSCognitoIdentityUserForgotPasswordResponse *> *) forgotPassword:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData {
AWSCognitoIdentityProviderForgotPasswordRequest *request = [AWSCognitoIdentityProviderForgotPasswordRequest new];
request.clientId = self.pool.userPoolConfiguration.clientId;
request.username = self.username;
request.secretHash = [self.pool calculateSecretHash:self.username];
request.analyticsMetadata = [self.pool analyticsMetadata];
request.userContextData = [self.pool userContextData:self.username deviceId: [self asfDeviceId]];
request.clientMetadata = clientMetaData;

return [[self.pool.client forgotPassword:request] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityProviderForgotPasswordResponse *> * _Nonnull task) {
AWSCognitoIdentityUserForgotPasswordResponse * response = [AWSCognitoIdentityUserForgotPasswordResponse new];
Expand All @@ -86,7 +105,14 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU

}

-(AWSTask<AWSCognitoIdentityUserConfirmForgotPasswordResponse *> *) confirmForgotPassword: (NSString *)confirmationCode password:(NSString *) password {
-(AWSTask<AWSCognitoIdentityUserForgotPasswordResponse *> *) forgotPassword {
return [self forgotPassword:nil];
}


-(AWSTask<AWSCognitoIdentityUserConfirmForgotPasswordResponse *> *) confirmForgotPassword: (NSString *)confirmationCode
password:(NSString *) password
clientMetaData:(nullable NSDictionary<NSString *,NSString *> *)clientMetaData {
AWSCognitoIdentityProviderConfirmForgotPasswordRequest *request = [AWSCognitoIdentityProviderConfirmForgotPasswordRequest new];
request.clientId = self.pool.userPoolConfiguration.clientId;
request.username = self.username;
Expand All @@ -95,6 +121,7 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU
request.confirmationCode = confirmationCode;
request.analyticsMetadata = [self.pool analyticsMetadata];
request.userContextData = [self.pool userContextData:self.username deviceId: [self asfDeviceId]];
request.clientMetadata = clientMetaData;

return [[self.pool.client confirmForgotPassword:request] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityProviderConfirmForgotPasswordResponse *> * _Nonnull task) {
AWSCognitoIdentityUserConfirmForgotPasswordResponse * response = [AWSCognitoIdentityUserConfirmForgotPasswordResponse new];
Expand All @@ -103,6 +130,14 @@ -(instancetype) initWithUsername: (NSString *)username pool:(AWSCognitoIdentityU
}];
}

-(AWSTask<AWSCognitoIdentityUserConfirmForgotPasswordResponse *> *) confirmForgotPassword: (NSString *)confirmationCode
password:(NSString *) password {
return [self confirmForgotPassword:confirmationCode
password:password
clientMetaData:nil];
}


-(AWSTask<AWSCognitoIdentityUserResendConfirmationCodeResponse *> *) resendConfirmationCode {
AWSCognitoIdentityProviderResendConfirmationCodeRequest *request = [AWSCognitoIdentityProviderResendConfirmationCodeRequest new];
request.clientId = self.pool.userPoolConfiguration.clientId;
Expand Down
8 changes: 8 additions & 0 deletions AWSCognitoIdentityProvider/AWSCognitoIdentityUserPool.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,19 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sign up a new user
*/
- (AWSTask<AWSCognitoIdentityUserPoolSignUpResponse *> *)signUp:(NSString *)username
password:(NSString *)password
userAttributes:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)userAttributes
validationData:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)validationData
clientMetaData:(nullable NSDictionary<NSString *, NSString*> *) clientMetaData;


- (AWSTask<AWSCognitoIdentityUserPoolSignUpResponse *> *)signUp:(NSString *)username
password:(NSString *)password
userAttributes:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)userAttributes
validationData:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)validationData;


/**
Return the user who last authenticated. Username may be nil if current user is unknown.
@return The last authenticated user
Expand Down
Loading

0 comments on commit 655e13b

Please sign in to comment.