diff --git a/WotBlitzStatisticsPro.Blazor/Messages/RedirectFromWgLoginMessage.cs b/WotBlitzStatisticsPro.Blazor/Messages/RedirectFromWgLoginMessage.cs new file mode 100644 index 0000000..5faffd3 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Messages/RedirectFromWgLoginMessage.cs @@ -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; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/Login.razor b/WotBlitzStatisticsPro.Blazor/Pages/Login.razor new file mode 100644 index 0000000..1f2b37f --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/Login.razor @@ -0,0 +1,46 @@ +@page "/login/{Realm}" +@using WotBlitzStatisticsPro.Blazor.Messages +@using MediatR +@using Microsoft.AspNetCore.WebUtilities +@inject NavigationManager NavigationManager +@inject IMediator Mediator +
@realmValue | @accountId | @nickName | @accessToken | @expiresAt
+ + +@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)); + } + } + } + +} diff --git a/WotBlitzStatisticsPro.Blazor/Services/WargamingLoginService.cs b/WotBlitzStatisticsPro.Blazor/Services/WargamingLoginService.cs index cee10f0..9b70bb1 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/WargamingLoginService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/WargamingLoginService.cs @@ -2,6 +2,7 @@ using System.Threading; using System.Threading.Tasks; using MediatR; +using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Localization; using Radzen; using WotBlitzStatisticsPro.Blazor.Messages; @@ -9,20 +10,26 @@ using WotBlitzStatisticsPro.Blazor.Pages; namespace WotBlitzStatisticsPro.Blazor.Services { - public class WargamingLoginService: INotificationHandler