amplify-swift/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/Actions/DeleteUser/DeleteUser.swift

81 lines
3.0 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Amplify
import Foundation
import AWSCognitoIdentityProvider
struct DeleteUser: Action {
var identifier: String = "DeleteUser"
let accessToken: String
func execute(withDispatcher dispatcher: EventDispatcher, environment: Environment) async {
logVerbose("\(#fileID) Starting execution", environment: environment)
guard let environment = environment as? UserPoolEnvironment else {
let message = AuthPluginErrorConstants.configurationError
let error = AuthenticationError.configuration(message: message)
let event = SignOutEvent(id: UUID().uuidString, eventType: .signedOutFailure(error))
await dispatcher.send(event)
logVerbose("\(#fileID) Sending event \(event.type)", environment: environment)
return
}
let client: CognitoUserPoolBehavior
do {
client = try environment.cognitoUserPoolFactory()
} catch {
let authError = AuthenticationError.configuration(message: "Failed to get CognitoUserPool client: \(error)")
let event = SignOutEvent(id: UUID().uuidString, eventType: .signedOutFailure(authError))
await dispatcher.send(event)
logVerbose("\(#fileID) Sending event \(event.type)", environment: environment)
return
}
logVerbose("\(#fileID) Starting delete user api", environment: environment)
let input = DeleteUserInput(accessToken: accessToken)
Task {
let event: DeleteUserEvent
do {
_ = try await client.deleteUser(input: input)
event = DeleteUserEvent(eventType: .signOutDeletedUser)
logVerbose("\(#fileID) Delete User succeeded", environment: environment)
} catch let error as DeleteUserOutputError {
event = DeleteUserEvent(eventType: .throwError(error.authError))
logVerbose("\(#fileID) Delete User failed \(error)", environment: environment)
} catch let error {
let authError = AuthError.service(
"Delete user failed with service error",
AmplifyErrorMessages.reportBugToAWS(),
error)
event = DeleteUserEvent(eventType: .throwError(authError))
logVerbose("\(#fileID) Delete user failed \(error)", environment: environment)
}
logVerbose("\(#fileID) Sending event \(event.type)", environment: environment)
await dispatcher.send(event)
}
}
}
extension DeleteUser: CustomDebugDictionaryConvertible {
var debugDictionary: [String: Any] {
[
"identifier": identifier,
"accessToken": accessToken.masked()
]
}
}
extension DeleteUser: CustomDebugStringConvertible {
var debugDescription: String {
debugDictionary.debugDescription
}
}