chore: WG login redirection and parameters parsing implemented

This commit is contained in:
Mikhail Shabanov committed 2021-07-07 17:14:38 +02:00
1 parent 83681c6b42
commit 8a5d286560
4 files changed
+95 -4

No files matched your search

@@ -0,0 +1,28 @@
using MediatR;
using WotBlitzStatisticsPro.Blazor.GraphQl;
namespace WotBlitzStatisticsPro.Blazor.Messages
{
public class RedirectFromWgLoginMessage : INotification
{
public RealmType Realm { get; }
public string NickName { get; }
public long AccountId { get; }
public string AccessToken { get; }
public long ExpiresAt { get; }
public RedirectFromWgLoginMessage(
RealmType realm,
string nickName,
long accountId,
string accessToken,
long expiresAt)
{
Realm = realm;
NickName = nickName;
AccountId = accountId;
AccessToken = accessToken;
ExpiresAt = expiresAt;
}
}
}
@@ -0,0 +1,46 @@
@page "/login/{Realm}"
@using WotBlitzStatisticsPro.Blazor.Messages
@using MediatR
@using Microsoft.AspNetCore.WebUtilities
@inject NavigationManager NavigationManager
@inject IMediator Mediator
<h3>Login</h3>
<p>@realmValue | @accountId | @nickName | @accessToken | @expiresAt</p>
@code {
[Parameter]
public string Realm { get; set; } = "Asia";
string nickName;
long accountId;
string accessToken;
long expiresAt;
RealmType realmValue = RealmType.Asia;
protected override async Task OnInitializedAsync()
{
var query = QueryHelpers.ParseQuery(NavigationManager.Uri);
if (query.ContainsKey("status") &&
query.ContainsKey("access_token") &&
query.ContainsKey("nickname") &&
query.ContainsKey("account_id") &&
query.ContainsKey("expires_at"))
{
string status = query["status"].FirstOrDefault();
if (status == "ok")
{
nickName = query["nickname"].FirstOrDefault();
accountId = Convert.ToInt64(query["account_id"].FirstOrDefault());
accessToken = query["access_token"].FirstOrDefault();
expiresAt = Convert.ToInt64(query["expires_at"].FirstOrDefault());
Enum.TryParse(Realm, out realmValue);
await Mediator.Publish(new RedirectFromWgLoginMessage(realmValue, nickName, accountId, accessToken, expiresAt));
}
}
}
}
@@ -2,6 +2,7 @@
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediatR; using MediatR;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Radzen; using Radzen;
using WotBlitzStatisticsPro.Blazor.Messages; using WotBlitzStatisticsPro.Blazor.Messages;
@@ -9,20 +10,26 @@ using WotBlitzStatisticsPro.Blazor.Pages;
namespace WotBlitzStatisticsPro.Blazor.Services namespace WotBlitzStatisticsPro.Blazor.Services
{ {
public class WargamingLoginService: INotificationHandler<LoginToWgMessage>, INotificationHandler<RedirectToWgLoginMessage> public class WargamingLoginService:
INotificationHandler<LoginToWgMessage>,
INotificationHandler<RedirectToWgLoginMessage>,
INotificationHandler<RedirectFromWgLoginMessage>
{ {
private readonly IGraphQlBackendService _graphQlBackendService; private readonly IGraphQlBackendService _graphQlBackendService;
private readonly DialogService _dialogService; private readonly DialogService _dialogService;
private readonly IStringLocalizer<App> _localizer; private readonly IStringLocalizer<App> _localizer;
private readonly NavigationManager _navigationManager;
public WargamingLoginService( public WargamingLoginService(
IGraphQlBackendService graphQlBackendService, IGraphQlBackendService graphQlBackendService,
DialogService dialogService, DialogService dialogService,
IStringLocalizer<App> localizer) IStringLocalizer<App> localizer,
NavigationManager navigationManager)
{ {
_graphQlBackendService = graphQlBackendService; _graphQlBackendService = graphQlBackendService;
_dialogService = dialogService; _dialogService = dialogService;
_localizer = localizer; _localizer = localizer;
_navigationManager = navigationManager;
} }
public async Task Handle(LoginToWgMessage notification, CancellationToken cancellationToken) public async Task Handle(LoginToWgMessage notification, CancellationToken cancellationToken)
@@ -36,8 +43,17 @@ namespace WotBlitzStatisticsPro.Blazor.Services
public async Task Handle(RedirectToWgLoginMessage notification, CancellationToken cancellationToken) public async Task Handle(RedirectToWgLoginMessage notification, CancellationToken cancellationToken)
{ {
var url = await _graphQlBackendService.GetWgLoginUrl(notification.Realm); var url = await _graphQlBackendService.GetWgLoginUrl(notification.Realm);
// ToDo: take a look to redirect message in previous app reincarnation var baseUri = _navigationManager.BaseUri;
url = $"{url}&redirect_uri=https://developers.wargaming.net/reference/all/wot/auth/login/"; url = $"{url}&redirect_uri={baseUri}login/{notification.Realm}";
_navigationManager.NavigateTo(url);
}
public Task Handle(RedirectFromWgLoginMessage notification, CancellationToken cancellationToken)
{
// ToDo: Store login info to local storage
// ToDo: Send OpenPlayerInfoMessage with isLoggedIn = true
return Task.CompletedTask;
} }
} }
} }
@@ -16,6 +16,7 @@
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" /> <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.4" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.4" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.5" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.5" />