71 lines
1.9 KiB
Plaintext
71 lines
1.9 KiB
Plaintext
@page "/miniapp"
|
|
@using Microsoft.AspNetCore.Components.Authorization
|
|
@inject IJSRuntime JS
|
|
@inject NavigationManager Navigation
|
|
|
|
<PageTitle>Mini App Dashboard — GM-Relay</PageTitle>
|
|
|
|
<div class="mini-app-page">
|
|
<div class="mini-app-auth-card">
|
|
<div class="mini-app-logo">🎲</div>
|
|
<h1>GM-Relay</h1>
|
|
<p>@statusMessage</p>
|
|
|
|
@if (showFallback)
|
|
{
|
|
<a href="/login" class="btn-gm btn-gm-primary">Войти через Telegram</a>
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
@code {
|
|
private string statusMessage = "Открываем dashboard внутри Telegram...";
|
|
private bool showFallback;
|
|
|
|
[CascadingParameter]
|
|
private Task<AuthenticationState>? AuthStateTask { get; set; }
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
if (AuthStateTask is null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var user = (await AuthStateTask).User;
|
|
if (user.Identity?.IsAuthenticated == true)
|
|
{
|
|
Navigation.NavigateTo("/");
|
|
}
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (!firstRender)
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
var authenticated = await JS.InvokeAsync<bool>(
|
|
"authenticateTelegramMiniApp",
|
|
"/auth/telegram-webapp",
|
|
"/");
|
|
|
|
if (!authenticated)
|
|
{
|
|
statusMessage = "Mini App доступен из Telegram. Для браузера используйте обычный вход.";
|
|
showFallback = true;
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
catch (JSException)
|
|
{
|
|
statusMessage = "Не удалось получить данные Telegram Mini App. Попробуйте открыть dashboard из бота.";
|
|
showFallback = true;
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
}
|