mirror of
https://github.com/DrMboga/WotBlitzStatisticsBlazor.git
synced 2026-10-21 10:27:18 +02:00
72 lines
2.9 KiB
C#
72 lines
2.9 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.Extensions.Localization;
|
|
using Radzen;
|
|
using WotBlitzStatisticsPro.Blazor.Messages;
|
|
using WotBlitzStatisticsPro.Blazor.Model;
|
|
using WotBlitzStatisticsPro.Blazor.Pages;
|
|
|
|
namespace WotBlitzStatisticsPro.Blazor.Services
|
|
{
|
|
public class WargamingLoginService:
|
|
INotificationHandler<LoginToWgMessage>,
|
|
INotificationHandler<RedirectToWgLoginMessage>,
|
|
INotificationHandler<RedirectFromWgLoginMessage>
|
|
{
|
|
private readonly IGraphQlBackendService _graphQlBackendService;
|
|
private readonly DialogService _dialogService;
|
|
private readonly IStringLocalizer<App> _localizer;
|
|
private readonly NavigationManager _navigationManager;
|
|
private readonly ILocalStorageService _localStorage;
|
|
private readonly IMediator _mediator;
|
|
|
|
public WargamingLoginService(
|
|
IGraphQlBackendService graphQlBackendService,
|
|
DialogService dialogService,
|
|
IStringLocalizer<App> localizer,
|
|
NavigationManager navigationManager,
|
|
ILocalStorageService localStorage,
|
|
IMediator mediator)
|
|
{
|
|
_graphQlBackendService = graphQlBackendService;
|
|
_dialogService = dialogService;
|
|
_localizer = localizer;
|
|
_navigationManager = navigationManager;
|
|
_localStorage = localStorage;
|
|
_mediator = mediator;
|
|
}
|
|
|
|
public async Task Handle(LoginToWgMessage notification, CancellationToken cancellationToken)
|
|
{
|
|
await _dialogService.OpenAsync<WgLoginDialog>(_localizer.GetString("You're about to login"),
|
|
null,
|
|
new DialogOptions() { Width = "310px", Height = "530px" });
|
|
|
|
}
|
|
|
|
public async Task Handle(RedirectToWgLoginMessage notification, CancellationToken cancellationToken)
|
|
{
|
|
var url = await _graphQlBackendService.GetWgLoginUrl(notification.Realm);
|
|
var baseUri = _navigationManager.BaseUri;
|
|
url = $"{url}&redirect_uri={baseUri}login/{notification.Realm}";
|
|
|
|
_navigationManager.NavigateTo(url);
|
|
}
|
|
|
|
public async Task Handle(RedirectFromWgLoginMessage notification, CancellationToken cancellationToken)
|
|
{
|
|
// Store login info to local storage
|
|
await _localStorage.SetItemAsync(Constants.LoginInfoLocalStorageKey, new LoginInfo {
|
|
Realm = notification.Realm,
|
|
AccessToken = notification.AccessToken,
|
|
AccountId = notification.AccountId,
|
|
ExpiresAt = notification.ExpiresAt,
|
|
NickName = notification.NickName, });
|
|
|
|
// Send OpenPlayerInfoMessage with isLoggedIn = true
|
|
await _mediator.Publish(new OpenPlayerInfoMessage(notification.AccountId, true));
|
|
}
|
|
}
|
|
} |