amplify-swift/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/ClientBehavior/AWSCognitoAuthPlugin+Client...

165 lines
7.6 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Foundation
import Amplify
extension AWSCognitoAuthPlugin: AuthCategoryBehavior {
public func signUp(username: String,
password: String?,
options: AuthSignUpRequest.Options?) async throws -> AuthSignUpResult {
let options = options ?? AuthSignUpRequest.Options()
let request = AuthSignUpRequest(username: username,
password: password,
options: options)
let task = AWSAuthSignUpTask(request, authEnvironment: authEnvironment)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignUpResult
}
public func confirmSignUp(for username: String,
confirmationCode: String,
options: AuthConfirmSignUpRequest.Options?)
async throws-> AuthSignUpResult {
let options = options ?? AuthConfirmSignUpRequest.Options()
let request = AuthConfirmSignUpRequest(username: username,
code: confirmationCode,
options: options)
let task = AWSAuthConfirmSignUpTask(request, authEnvironment: authEnvironment)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignUpResult
}
public func resendSignUpCode(for username: String, options: AuthResendSignUpCodeRequest.Options?) async throws -> AuthCodeDeliveryDetails {
let options = options ?? AuthResendSignUpCodeRequest.Options()
let request = AuthResendSignUpCodeRequest(username: username, options: options)
let task = AWSAuthResendSignUpCodeTask(request, environment: authEnvironment, authConfiguration: authConfiguration)
return try await taskQueue.sync {
return try await task.value
} as! AuthCodeDeliveryDetails
}
#if canImport(AuthenticationServices)
public func signInWithWebUI(presentationAnchor: AuthUIPresentationAnchor,
options: AuthWebUISignInRequest.Options?) async throws -> AuthSignInResult {
let options = options ?? AuthWebUISignInRequest.Options()
let request = AuthWebUISignInRequest(presentationAnchor: presentationAnchor,
options: options)
let task = AWSAuthWebUISignInTask(
request,
authConfiguration: authConfiguration,
authStateMachine: authStateMachine,
eventName: HubPayload.EventName.Auth.webUISignInAPI
)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignInResult
}
public func signInWithWebUI(for authProvider: AuthProvider,
presentationAnchor: AuthUIPresentationAnchor,
options: AuthWebUISignInRequest.Options?) async throws -> AuthSignInResult {
let options = options ?? AuthWebUISignInRequest.Options()
let request = AuthWebUISignInRequest(presentationAnchor: presentationAnchor,
authProvider: authProvider,
options: options)
let task = AWSAuthWebUISignInTask(
request,
authConfiguration: authConfiguration,
authStateMachine: authStateMachine,
eventName: HubPayload.EventName.Auth.socialWebUISignInAPI
)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignInResult
}
#endif
public func confirmSignIn(challengeResponse: String,
options: AuthConfirmSignInRequest.Options? = nil) async throws -> AuthSignInResult {
let options = options ?? AuthConfirmSignInRequest.Options()
let request = AuthConfirmSignInRequest(challengeResponse: challengeResponse,
options: options)
let task = AWSAuthConfirmSignInTask(request, stateMachine: authStateMachine)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignInResult
}
public func signOut(options: AuthSignOutRequest.Options? = nil) async -> AuthSignOutResult {
let options = options ?? AuthSignOutRequest.Options()
let request = AuthSignOutRequest(options: options)
let task = AWSAuthSignOutTask(request, authStateMachine: authStateMachine)
do {
return try await taskQueue.sync {
return await task.value
} as! AuthSignOutResult
} catch {
fatalError("AWSAuthSignOutTask should not throw error: \(error)")
}
}
public func fetchAuthSession(options: AuthFetchSessionRequest.Options?) async throws -> AuthSession {
let options = options ?? AuthFetchSessionRequest.Options()
let request = AuthFetchSessionRequest(options: options)
let task = AWSAuthFetchSessionTask(request, authStateMachine: authStateMachine)
return try await taskQueue.sync {
return try await task.value
} as! AuthSession
}
public func resetPassword(for username: String, options: AuthResetPasswordRequest.Options?) async throws -> AuthResetPasswordResult {
let options = options ?? AuthResetPasswordRequest.Options()
let request = AuthResetPasswordRequest(username: username, options: options)
let task = AWSAuthResetPasswordTask(request, environment: authEnvironment, authConfiguration: authConfiguration)
return try await taskQueue.sync {
return try await task.value
} as! AuthResetPasswordResult
}
public func confirmResetPassword(for username: String,
with newPassword: String,
confirmationCode: String,
options: AuthConfirmResetPasswordRequest.Options?) async throws {
let options = options ?? AuthConfirmResetPasswordRequest.Options()
let request = AuthConfirmResetPasswordRequest(username: username,
newPassword: newPassword,
confirmationCode: confirmationCode,
options: options)
let task = AWSAuthConfirmResetPasswordTask(request, environment: authEnvironment, authConfiguration: authConfiguration)
_ = try await taskQueue.sync {
return try await task.value
}
}
public func signIn(username: String?,
password: String?,
options: AuthSignInRequest.Options?) async throws -> AuthSignInResult {
let options = options ?? AuthSignInRequest.Options()
let request = AuthSignInRequest(username: username,
password: password,
options: options)
let task = AWSAuthSignInTask(request,
authStateMachine: self.authStateMachine,
configuration: authConfiguration)
return try await taskQueue.sync {
return try await task.value
} as! AuthSignInResult
}
public func deleteUser() async throws {
let task = AWSAuthDeleteUserTask(authStateMachine: self.authStateMachine)
_ = try await taskQueue.sync {
return try await task.value
}
}
}