Files
GmRelayBot/src/GmRelay.Web/Components/Pages/Login.razor
T
Toutsu b16627c2b6 feat(ui): replace emoji logos with new app icon across dashboard
- NavMenu: swap 🐢 emoji for <img src="logo.png">
- Login page: swap 🎲 emoji for <img src="logo.png">
- Mini App page: swap 🎲 emoji for <img src="logo.png">
- Replace favicon.png with the new logo
- Add logo.png to wwwroot
- Update CSS for .nav-brand-icon, .login-logo, .mini-app-logo to use object-fit: contain sizing

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 13:15:53 +03:00

53 lines
1.7 KiB
Plaintext

@page "/login"
@using Microsoft.AspNetCore.Components.Authorization
@inject NavigationManager Navigation
@inject IConfiguration Configuration
@inject IJSRuntime JS
<PageTitle>Вход — GM-Relay</PageTitle>
<div class="login-page">
<div class="login-card">
<img src="logo.png" alt="GM-Relay" class="login-logo" />
<h1 class="login-title">GM-Relay</h1>
<p class="login-subtitle">Войдите через Telegram для управления игровыми сессиями</p>
@if (Navigation.Uri.Contains("error=auth_failed"))
{
<div class="gm-alert gm-alert-danger" style="margin-bottom: 1.5rem; justify-content: center;">
⚠️ Ошибка аутентификации. Пожалуйста, попробуйте снова.
</div>
}
<div id="telegram-login-container"></div>
</div>
</div>
@code {
private string BotUsername => Configuration["Telegram:BotUsername"] ?? "GmRelayBot";
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
if (AuthStateTask is not null)
{
var user = (await AuthStateTask).User;
if (user.Identity?.IsAuthenticated == true)
{
Navigation.NavigateTo("/");
}
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JS.InvokeVoidAsync("loadTelegramWidget", BotUsername, "/auth/telegram-login");
await JS.InvokeVoidAsync("watchTelegramMiniAppLogin", "/auth/status", "/", false);
}
}
}