Files

101 lines
3.3 KiB
Plaintext

@page "/change-password"
@attribute [Authorize]
@rendermode InteractiveServer
@inject HttpClient Http
@inject NavigationManager Navigation
@inject IJSRuntime JSRuntime
<PageTitle>Change Password</PageTitle>
<h3>Change Password</h3>
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">Change Your Password</div>
<div class="card-body">
<form>
<div class="mb-3">
<label class="form-label">Current Password</label>
<input type="password" class="form-control" @bind="currentPassword" required />
</div>
<div class="mb-3">
<label class="form-label">New Password</label>
<input type="password" class="form-control" @bind="newPassword" required minlength="6" />
</div>
<div class="mb-3">
<label class="form-label">Confirm New Password</label>
<input type="password" class="form-control" @bind="confirmNewPassword" required />
</div>
<button type="submit" class="btn btn-primary" @onclick="DoChangePassword" disabled="@saving">
@(saving ? "Changing..." : "Change Password")
</button>
<a href="/" class="btn btn-outline-secondary ms-2">Cancel</a>
@if (!string.IsNullOrEmpty(message))
{
<div class="alert mt-3 @(message.Contains("Error") ? "alert-danger" : "alert-success")">@message</div>
}
</form>
</div>
</div>
</div>
</div>
@code {
private string currentPassword = "";
private string newPassword = "";
private string confirmNewPassword = "";
private bool saving;
private string? message;
private async Task DoChangePassword()
{
saving = true;
message = null;
try
{
if (string.IsNullOrWhiteSpace(currentPassword))
{
message = "Current password is required.";
return;
}
if (string.IsNullOrWhiteSpace(newPassword) || newPassword.Length < 6)
{
message = "New password must be at least 6 characters.";
return;
}
if (newPassword != confirmNewPassword)
{
message = "New passwords do not match.";
return;
}
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["newPassword"] = newPassword
});
var response = await Http.PutAsync("/accounts/me/changepassword", content);
if (!response.IsSuccessStatusCode)
{
message = "Error: Failed to change password.";
return;
}
message = "Password changed successfully!";
currentPassword = "";
newPassword = "";
confirmNewPassword = "";
}
catch (Exception ex)
{
message = $"Error: {ex.Message}";
}
finally
{
saving = false;
}
}
}