KoogleApp/src/Koogle.Web/Components/Pages/Account/Login.razor

146 lines
4.6 KiB
Plaintext

@page "/account/login"
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.WebUtilities
@inject NavigationManager NavigationManager
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@inject IHttpContextAccessor HttpContextAccessor
@inject IConfiguration Configuration
<form method="post" action="/auth/login">
<!-- Hidden Fields -->
<input type="hidden" name="ReturnUrl" value="@_returnUrl" />
<input type="hidden" name="__RequestVerificationToken" value="@_antiToken" />
<MudPaper Class="pa-6" Elevation="4" MaxWidth="400px">
@if (!string.IsNullOrWhiteSpace(_inviteToken))
{
<MudAlert Severity="Severity.Info" Class="mb-3">
Bitte melde dich an, um die Club-Einladung anzunehmen.
</MudAlert>
}
@if (_registered)
{
<MudAlert Severity="Severity.Success" Class="mb-3">Registrierung erfolgreich! Bitte anmelden.</MudAlert>
}
@if (!string.IsNullOrWhiteSpace(_error))
{
<MudAlert Severity="Severity.Error" Class="mb-3">@_error</MudAlert>
}
@if (_demoEnabled)
{
<MudAlert Severity="Severity.Info" Class="mb-3" Icon="@Icons.Material.Filled.Info">
<strong>Demo-Zugang:</strong> @_demoEmail / @_demoPassword / @_demoClub
</MudAlert>
}
<MudText Typo="Typo.h5" Class="mb-4">
Anmeldung
</MudText>
<MudTextField T="string"
Name="Email"
Label="E-Mail"
Variant="Variant.Outlined"
Required="true"
InputType="InputType.Email"
AutoComplete="username"
Class="mb-3" />
<MudTextField T="string"
Name="Password"
Label="Passwort"
Variant="Variant.Outlined"
Required="true"
InputType="InputType.Password"
AutoComplete="current-password"
Class="mb-3" />
<MudTextField T="string"
Name="ClubName"
Label="Club Login-Name"
Variant="Variant.Outlined"
Required="true"
Placeholder="Clubname"
Style="text-transform: lowercase;"
Class="mb-3" />
<MudCheckBox T="bool"
Name="RememberMe"
Label="Angemeldet bleiben"
Value="true"
Class="mb-4" />
<MudButton
ButtonType="ButtonType.Submit"
Variant="Variant.Filled"
Color="Color.Primary"
FullWidth="true"
Class="mb-3">
Anmelden
</MudButton>
<MudStack Row="true" Justify="Justify.SpaceBetween" Class="mt-2">
<MudLink Href="/account/register" Typo="Typo.body2">
Noch kein Konto? Registrieren
</MudLink>
<MudLink Href="/account/forgot-password" Typo="Typo.body2">
Passwort vergessen?
</MudLink>
</MudStack>
</MudPaper>
</form>
@code {
private string _returnUrl = "/dashboard";
private string? _error;
private string _antiToken = "";
private bool _registered;
private string? _inviteToken;
private bool _demoEnabled;
private string _demoEmail = "";
private string _demoPassword = "";
private string _demoClub = "";
protected override void OnInitialized()
{
var uri = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
var query = QueryHelpers.ParseQuery(uri.Query);
if (query.TryGetValue("returnUrl", out var ru)) _returnUrl = ru!;
if (query.TryGetValue("error", out var err))
{
_error = "Login fehlgeschlagen";
}
if (query.TryGetValue("registered", out _))
{
_registered = true;
}
if (query.TryGetValue("invite", out var invite))
{
_inviteToken = invite.ToString();
// After login, redirect to join by invite
_returnUrl = $"/club/join/{_inviteToken}";
}
// Antiforgery Token generieren (klassischer MVC Token)
var http = HttpContextAccessor.HttpContext!;
var tokens = Antiforgery.GetAndStoreTokens(http);
_antiToken = tokens.RequestToken!;
// Demo credentials from configuration
_demoEnabled = Configuration.GetValue<bool>("Bootstrap:Demo:Enabled");
if (_demoEnabled)
{
_demoEmail = Configuration["Bootstrap:Demo:Email"] ?? "demo@koogle.de";
_demoPassword = Configuration["Bootstrap:Demo:Password"] ?? "demo123";
_demoClub = Configuration["Bootstrap:Demo:LoginName"] ?? "demo";
}
}
}