164 lines
6.5 KiB
Plaintext
164 lines
6.5 KiB
Plaintext
@page "/login"
|
|
|
|
@using Microsoft.AspNetCore.Authorization
|
|
@using OrdersManagement.Models
|
|
@using Syncfusion.Blazor.Inputs
|
|
@using Syncfusion.Blazor.Buttons
|
|
@using Syncfusion.Blazor.Cards
|
|
@inject UserService UserService
|
|
@inject NavigationManager NavigationManager
|
|
|
|
<div class="h-100 d-flex justify-content-center align-items-start">
|
|
<SfCard CssClass="text-center shadow" style="max-width: 500px;">
|
|
<CardHeader>
|
|
<h3 class="text-primary">Logowanie</h3>
|
|
</CardHeader>
|
|
<CardContent>
|
|
@if (!string.IsNullOrEmpty(TempPassword))
|
|
{
|
|
<div class="alert alert-info mb-3">
|
|
Twoje tymczasowe hasło to: <strong>@TempPassword</strong>. Użyj go do pierwszego logowania.
|
|
</div>
|
|
}
|
|
|
|
<EditForm Model="@LoginModel" FormName="LoginForm" OnValidSubmit="@HandleLogin">
|
|
<DataAnnotationsValidator/>
|
|
<ValidationSummary class="text-danger mb-3"/>
|
|
|
|
<div class="form-group mb-3">
|
|
<label for="login" class="d-block text-start">Login</label>
|
|
<SfTextBox ID="login" @bind-Value="LoginModel.Login" Placeholder="Wprowadź login" CssClass="e-outline"/>
|
|
<ValidationMessage For="@(() => LoginModel.Login)" ClassName="text-danger"/>
|
|
</div>
|
|
|
|
<div class="form-group mb-3">
|
|
<label for="password" class="d-block text-start">Hasło</label>
|
|
<SfTextBox ID="password" Type="InputType.Password" @bind-Value="LoginModel.Password"
|
|
Placeholder="Wprowadź hasło" CssClass="e-outline"/>
|
|
<ValidationMessage For="@(() => LoginModel.Password)" ClassName="text-danger"/>
|
|
</div>
|
|
|
|
<div class="form-group mt-3">
|
|
<SfButton CssClass="e-primary" IsPrimary="true" Type="submit">Zaloguj</SfButton>
|
|
</div>
|
|
|
|
@if (!string.IsNullOrEmpty(ErrorMessage))
|
|
{
|
|
<div class="alert alert-danger mt-3">@ErrorMessage</div>
|
|
}
|
|
</EditForm>
|
|
|
|
@if (ShowChangePassword)
|
|
{
|
|
<hr class="my-4"/>
|
|
<h5 class="text-success mb-3">Zmień hasło</h5>
|
|
<EditForm Model="@ChangePasswordModel" FormName="ChangePasswordForm" OnValidSubmit="@HandleChangePassword">
|
|
<DataAnnotationsValidator/>
|
|
<ValidationSummary class="text-danger mb-3"/>
|
|
|
|
<div class="form-group mb-3">
|
|
<label for="newPassword" class="d-block text-start">Nowe hasło</label>
|
|
<SfTextBox ID="newPassword" Type="InputType.Password" @bind-Value="ChangePasswordModel.NewPassword"
|
|
Placeholder="Wprowadź nowe hasło" CssClass="e-outline"/>
|
|
<ValidationMessage For="@(() => ChangePasswordModel.NewPassword)" ClassName="text-danger"/>
|
|
</div>
|
|
|
|
<div class="form-group mb-3">
|
|
<label for="confirmPassword" class="d-block text-start">Potwierdź hasło</label>
|
|
<SfTextBox ID="confirmPassword" Type="InputType.Password" @bind-Value="ChangePasswordModel.ConfirmPassword"
|
|
Placeholder="Potwierdź nowe hasło" CssClass="e-outline"/>
|
|
<ValidationMessage For="@(() => ChangePasswordModel.ConfirmPassword)" ClassName="text-danger"/>
|
|
</div>
|
|
|
|
<div class="form-group mt-3">
|
|
<SfButton CssClass="e-success" IsPrimary="true" Type="submit">Zmień hasło</SfButton>
|
|
</div>
|
|
</EditForm>
|
|
}
|
|
</CardContent>
|
|
<CardFooter>
|
|
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
|
|
</CardFooter>
|
|
</SfCard>
|
|
</div>
|
|
|
|
@code {
|
|
private LoginModel LoginModel { get; set; } = new();
|
|
private ChangePasswordModel ChangePasswordModel { get; set; } = new();
|
|
private bool ShowChangePassword { get; set; }
|
|
private string TempPassword { get; set; }
|
|
private string ErrorMessage { get; set; }
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
TempPassword = NavigationManager.Uri.Split('?').Length > 1 ? Uri.UnescapeDataString(NavigationManager.Uri.Split('=')[1]) : null;
|
|
}
|
|
|
|
private async Task HandleLogin()
|
|
{
|
|
try
|
|
{
|
|
Console.WriteLine($"Próba logowania dla: {LoginModel.Login}");
|
|
var user = await UserService.AuthenticateUserAsync(LoginModel.Login, LoginModel.Password);
|
|
|
|
if (user != null)
|
|
{
|
|
Console.WriteLine($"Użytkownik {user.Login} znaleziony.");
|
|
if (user.IsTemporaryPassword)
|
|
{
|
|
ShowChangePassword = true;
|
|
StateHasChanged();
|
|
}
|
|
else
|
|
{
|
|
NavigationManager.NavigateTo("/ScheduleOrders");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ErrorMessage = "Nieprawidłowy login lub hasło";
|
|
Console.WriteLine(ErrorMessage);
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorMessage = $"Błąd logowania: {ex.Message}";
|
|
Console.WriteLine(ErrorMessage);
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
private async Task HandleChangePassword()
|
|
{
|
|
try
|
|
{
|
|
if (ChangePasswordModel.NewPassword == ChangePasswordModel.ConfirmPassword)
|
|
{
|
|
var user = await UserService.GetUserByUsernameAsync(LoginModel.Login);
|
|
if (user != null)
|
|
{
|
|
user.PasswordHash = BCrypt.Net.BCrypt.HashPassword(ChangePasswordModel.NewPassword);
|
|
user.IsTemporaryPassword = false;
|
|
await UserService.UpdateUserAsync(user);
|
|
ShowChangePassword = false;
|
|
LoginModel = new LoginModel();
|
|
StateHasChanged();
|
|
NavigationManager.NavigateTo("/login");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ErrorMessage = "Hasła nie są zgodne";
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorMessage = $"Błąd zmiany hasła: {ex.Message}";
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
}
|