87 lines
2.9 KiB
Plaintext
87 lines
2.9 KiB
Plaintext
@page "/Account/Manage/DeletePersonalData"
|
|
|
|
@using System.ComponentModel.DataAnnotations
|
|
@using Microsoft.AspNetCore.Identity
|
|
@using OpenArchival.Blazor.Data
|
|
|
|
@inject UserManager<ApplicationUser> UserManager
|
|
@inject SignInManager<ApplicationUser> SignInManager
|
|
@inject IdentityUserAccessor UserAccessor
|
|
@inject IdentityRedirectManager RedirectManager
|
|
@inject ILogger<DeletePersonalData> Logger
|
|
|
|
<PageTitle>Delete Personal Data</PageTitle>
|
|
|
|
<MudText Typo="Typo.h6" GutterBottom="true">Delete personal data</MudText>
|
|
|
|
<StatusMessage Message="@message" />
|
|
|
|
<MudAlert Severity="Severity.Error" Variant="Variant.Text">
|
|
Deleting this data will permanently remove your account, and this cannot be recovered.
|
|
</MudAlert>
|
|
|
|
<EditForm Model="Input" FormName="delete-user" OnValidSubmit="OnValidSubmitAsync" method="post">
|
|
<DataAnnotationsValidator />
|
|
|
|
<MudGrid>
|
|
@if (requirePassword)
|
|
{
|
|
<MudItem md="12">
|
|
<MudTextField For="@(() => Input.Password)" @bind-Value="Input.Password" InputType="InputType.Password"
|
|
Label="Password" Placeholder="password" HelperText="Please enter your new password."
|
|
UserAttributes="@(new() { { "autocomplete", "current-password" }, { "aria-required", "true" } } )" />
|
|
</MudItem>
|
|
}
|
|
<MudItem md="12">
|
|
<MudStaticButton Variant="Variant.Filled" Color="Color.Primary" FullWidth="true" FormAction="FormAction.Submit">Delete data and close my account</MudStaticButton>
|
|
</MudItem>
|
|
</MudGrid>
|
|
</EditForm>
|
|
|
|
@code {
|
|
private string? message;
|
|
private ApplicationUser user = default!;
|
|
private bool requirePassword;
|
|
|
|
[CascadingParameter]
|
|
private HttpContext HttpContext { get; set; } = default!;
|
|
|
|
[SupplyParameterFromForm]
|
|
private InputModel Input { get; set; } = new();
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
Input ??= new();
|
|
user = await UserAccessor.GetRequiredUserAsync(HttpContext);
|
|
requirePassword = await UserManager.HasPasswordAsync(user);
|
|
}
|
|
|
|
private async Task OnValidSubmitAsync()
|
|
{
|
|
if (requirePassword && !await UserManager.CheckPasswordAsync(user, Input.Password))
|
|
{
|
|
message = "Error: Incorrect password.";
|
|
return;
|
|
}
|
|
|
|
var result = await UserManager.DeleteAsync(user);
|
|
if (!result.Succeeded)
|
|
{
|
|
throw new InvalidOperationException("Unexpected error occurred deleting user.");
|
|
}
|
|
|
|
await SignInManager.SignOutAsync();
|
|
|
|
var userId = await UserManager.GetUserIdAsync(user);
|
|
Logger.LogInformation("User with ID '{UserId}' deleted themselves.", userId);
|
|
|
|
RedirectManager.RedirectToCurrentPage();
|
|
}
|
|
|
|
private sealed class InputModel
|
|
{
|
|
[DataType(DataType.Password)]
|
|
public string Password { get; set; } = "";
|
|
}
|
|
}
|