amplify-swift/AmplifyPlugins/Auth/AWSCognitoAuthPlugin/Service/AWSMobileClient/AWSMobileClientAdapter.swift

265 lines
11 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Amplify
import AWSPluginsCore
#if COCOAPODS
import AWSMobileClient
#else
import AWSMobileClientXCF
#endif
class AWSMobileClientAdapter: AWSMobileClientBehavior {
let awsMobileClient: AWSMobileClient
init(userPoolConfiguration: AmplifyAWSServiceConfiguration?,
identityPoolConfiguration: AmplifyAWSServiceConfiguration?) {
AWSMobileClient.updateCognitoService(userPoolConfiguration: userPoolConfiguration,
identityPoolConfiguration: identityPoolConfiguration)
self.awsMobileClient = AWSMobileClient.default()
}
func initialize() throws {
var mobileClientError: Error?
awsMobileClient.initialize { _, error in
mobileClientError = error
}
if let error = mobileClientError {
throw AuthError.configuration(
AuthPluginErrorConstants.mobileClientInitializeError.errorDescription,
AuthPluginErrorConstants.mobileClientInitializeError.recoverySuggestion,
error)
}
}
func signUp(username: String,
password: String,
userAttributes: [String: String] = [:],
validationData: [String: String] = [:],
clientMetaData: [String: String] = [:],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
awsMobileClient.signUp(username: username,
password: password,
userAttributes: userAttributes,
validationData: validationData,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func confirmSignUp(username: String,
confirmationCode: String,
clientMetaData: [String: String] = [:],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
awsMobileClient.confirmSignUp(username: username,
confirmationCode: confirmationCode,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func resendSignUpCode(username: String,
clientMetaData: [String: String],
completionHandler: @escaping ((SignUpResult?, Error?) -> Void)) {
awsMobileClient.resendSignUpCode(username: username,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func signIn(username: String,
password: String,
validationData: [String: String]? = nil,
clientMetaData: [String: String] = [:],
completionHandler: @escaping ((SignInResult?, Error?) -> Void)) {
awsMobileClient.signIn(username: username,
password: password,
validationData: validationData,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func federatedSignIn(providerName: String, token: String,
federatedSignInOptions: FederatedSignInOptions,
completionHandler: @escaping ((UserState?, Error?) -> Void)) {
awsMobileClient.federatedSignIn(providerName: providerName,
token: token,
federatedSignInOptions: federatedSignInOptions,
completionHandler: completionHandler)
}
func showSignIn(navigationController: UINavigationController,
signInUIOptions: SignInUIOptions,
hostedUIOptions: HostedUIOptions?,
_ completionHandler: @escaping (UserState?, Error?) -> Void) {
awsMobileClient.showSignIn(navigationController: navigationController,
signInUIOptions: signInUIOptions,
hostedUIOptions: hostedUIOptions,
completionHandler)
}
@available(iOS 13, *)
func showSignIn(uiwindow: UIWindow,
hostedUIOptions: HostedUIOptions,
_ completionHandler: @escaping (UserState?, Error?) -> Void) {
awsMobileClient.showSignIn(presentationAnchor: uiwindow,
hostedUIOptions: hostedUIOptions,
completionHandler)
}
func confirmSignIn(challengeResponse: String,
userAttributes: [String: String] = [:],
clientMetaData: [String: String] = [:],
completionHandler: @escaping ((SignInResult?, Error?) -> Void)) {
awsMobileClient.confirmSignIn(challengeResponse: challengeResponse,
userAttributes: userAttributes,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func signOut(options: SignOutOptions = SignOutOptions(), completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.signOut(options: options, completionHandler: completionHandler)
}
@available(iOS 13, *)
func signOut(uiwindow: UIWindow,
options: SignOutOptions = SignOutOptions(),
completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.signOut(presentationAnchor: uiwindow,
options: options,
completionHandler: completionHandler)
}
func signOutLocally() {
awsMobileClient.signOut()
}
func deleteUser(completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.deleteUser(completionHandler: completionHandler)
}
func getUsername() -> String? {
return awsMobileClient.username
}
func getUserSub() -> String? {
return awsMobileClient.userSub
}
func verifyUserAttribute(attributeName: String,
clientMetaData: [String: String] = [:],
completionHandler: @escaping ((UserCodeDeliveryDetails?, Error?) -> Void)) {
awsMobileClient.verifyUserAttribute(attributeName: attributeName,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func updateUserAttributes(attributeMap: [String: String],
clientMetaData: [String: String] = [:],
completionHandler: @escaping (([UserCodeDeliveryDetails]?, Error?) -> Void)) {
awsMobileClient.updateUserAttributes(attributeMap: attributeMap,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func getUserAttributes(completionHandler: @escaping (([String: String]?, Error?) -> Void)) {
awsMobileClient.getUserAttributes(completionHandler: completionHandler)
}
func confirmUpdateUserAttributes(attributeName: String, code: String,
completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.confirmUpdateUserAttributes(attributeName: attributeName,
code: code,
completionHandler: completionHandler)
}
func changePassword(currentPassword: String,
proposedPassword: String,
completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.changePassword(currentPassword: currentPassword,
proposedPassword: proposedPassword,
completionHandler: completionHandler)
}
func forgotPassword(username: String,
clientMetaData: [String: String],
completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
awsMobileClient.forgotPassword(username: username,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func confirmForgotPassword(username: String,
newPassword: String,
confirmationCode: String,
clientMetaData: [String: String],
completionHandler: @escaping ((ForgotPasswordResult?, Error?) -> Void)) {
awsMobileClient.confirmForgotPassword(username: username,
newPassword: newPassword,
confirmationCode: confirmationCode,
clientMetaData: clientMetaData,
completionHandler: completionHandler)
}
func getIdentityId() -> AWSTask<NSString> {
return awsMobileClient.getIdentityId()
}
func getTokens(_ completionHandler: @escaping (Tokens?, Error?) -> Void) {
return awsMobileClient.getTokens(completionHandler)
}
func getAWSCredentials(_ completionHandler: @escaping (AWSCredentials?, Error?) -> Void) {
return awsMobileClient.getAWSCredentials(completionHandler)
}
func getCurrentUserState() -> UserState {
return awsMobileClient.currentUserState
}
func listDevices(completionHandler: @escaping ((ListDevicesResult?, Error?) -> Void)) {
awsMobileClient.deviceOperations.list(completionHandler: completionHandler)
}
func updateDeviceStatus(remembered: Bool,
completionHandler: @escaping ((UpdateDeviceStatusResult?, Error?) -> Void)) {
awsMobileClient.deviceOperations.updateStatus(remembered: remembered,
completionHandler: completionHandler)
}
func getDevice(_ completionHandler: @escaping ((Device?, Error?) -> Void)) {
awsMobileClient.deviceOperations.get(completionHandler)
}
func forgetDevice(deviceId: String, completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.deviceOperations.forget(deviceId: deviceId,
completionHandler: completionHandler)
}
func forgetCurrentDevice(_ completionHandler: @escaping ((Error?) -> Void)) {
awsMobileClient.deviceOperations.forget(completionHandler)
}
func invalidateCachedTemporaryCredentials() {
awsMobileClient.invalidateCachedTemporaryCredentials()
}
func addUserStateListener(_ object: AnyObject, _ callback: @escaping UserStateChangeCallback) {
awsMobileClient.addUserStateListener(object, callback)
}
func removeUserStateListener(_ object: AnyObject) {
awsMobileClient.removeUserStateListener(object)
}
func releaseSignInWait() {
awsMobileClient.releaseSignInWait()
}
}