feat: implemented login-prolong-logout mechanisms

This commit is contained in:
Michael Shabanov committed 2021-10-20 19:06:34 +03:00
1 parent 79a87d0d66
commit 241b879689
53 files changed
+1789 -13

No files matched your search

@@ -50,14 +50,35 @@ namespace WotBlitzStatisticsPro.Blazor.Services
return (playerInfo.Data?.AccountInfo, playerInfo.Data?.AccountMedals?.Sections);
}
public Task<string> GetWgLoginUrl(RealmType realmType)
public async Task<string> GetWgLoginUrl(RealmType realmType)
{
throw new System.NotImplementedException("Request for LoginUrl will be implemented soon");
var loginUrl = await _client.WargamingAuthenticationQuery.ExecuteAsync(realmType);
CheckErrors(loginUrl.Errors);
return loginUrl.Data?.LoginUrl;
}
public Task<LoginInfo> ProlongToken(long accountId, string oldToken, RealmType realmType)
public async Task<LoginInfo> ProlongToken(string oldToken, RealmType realmType)
{
throw new System.NotImplementedException();
var prolongMutation = await _client.WargamingOpenIdAuthentication.ExecuteAsync(oldToken, realmType);
CheckErrors(prolongMutation.Errors);
var backendProlongToken = prolongMutation.Data?.ProlongAuthToken;
return new LoginInfo
{
AccountId = backendProlongToken?.AccountId ?? 0,
AccessToken = backendProlongToken?.AccessToken ?? string.Empty,
ExpiresAt = backendProlongToken?.ExpirationTimeStamp ?? 0,
};
}
public async Task<string> Logout(string token, RealmType realmType)
{
var logoutMutation = await _client.WargamingOpenId.ExecuteAsync(token, realmType);
CheckErrors(logoutMutation.Errors);
return logoutMutation.Data?.Logout;
}
public async Task CollectPlayerInfo(long accountId, RealmType realmType, string accessToken)
@@ -27,8 +27,11 @@ namespace WotBlitzStatisticsPro.Blazor.Services
Task<string> GetWgLoginUrl(RealmType realmType);
Task<LoginInfo> ProlongToken(
long accountId,
string oldToken,
RealmType realmType);
Task<string> Logout(
string token,
RealmType realmType);
}
}
@@ -10,5 +10,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services
Task<T> GetItemAsync<T>(string key);
Task<UserSettings> ReadSettings();
ValueTask DeleteItemAsync(string key);
}
}
@@ -55,5 +55,10 @@ namespace WotBlitzStatisticsPro.Blazor.Services
currentSettings.RealmType = notification.RealmType;
await SetItemAsync(UserSettings.UserSettingsLocalStorageKey, currentSettings);
}
public ValueTask DeleteItemAsync(string key)
{
return _jsRuntime.InvokeVoidAsync("localStorage.removeItem", key);
}
}
}
@@ -398,5 +398,15 @@ namespace WotBlitzStatisticsPro.Blazor.Services.Mock
{
return Task.CompletedTask;
}
public Task<LoginInfo> ProlongToken(string oldToken, RealmType realmType)
{
return Task.FromResult(new LoginInfo { AccessToken = oldToken, Realm = realmType, ExpiresAt = 1631182800, NickName = "Fake nick" });
}
public Task<string> Logout(string token, RealmType realmType)
{
return Task.FromResult("Fake logout");
}
}
}
@@ -29,7 +29,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services
{
await CheckExpirationDateAndProlongIfNeeded();
}
_navigationManager.NavigateTo($"/player/{notification.AccountId}");
_navigationManager.NavigateTo($"/player/{notification.AccountId}", forceLoad: true);
}
private async Task CheckExpirationDateAndProlongIfNeeded()
@@ -14,7 +14,8 @@ namespace WotBlitzStatisticsPro.Blazor.Services
INotificationHandler<LoginToWgMessage>,
INotificationHandler<RedirectToWgLoginMessage>,
INotificationHandler<RedirectFromWgLoginMessage>,
INotificationHandler<ProlongWargamingAccessToken>
INotificationHandler<ProlongWargamingAccessToken>,
INotificationHandler<LogOutFromWgMessage>
{
private readonly IGraphQlBackendService _graphQlBackendService;
private readonly DialogService _dialogService;
@@ -73,10 +74,20 @@ namespace WotBlitzStatisticsPro.Blazor.Services
public async Task Handle(ProlongWargamingAccessToken notification, CancellationToken cancellationToken)
{
var loggedInData = await _localStorage.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey);
var newLoginInfo = await _graphQlBackendService.ProlongToken(loggedInData.AccountId, loggedInData.AccessToken, loggedInData.Realm);
var newLoginInfo = await _graphQlBackendService.ProlongToken(loggedInData.AccessToken, loggedInData.Realm);
loggedInData.AccessToken = newLoginInfo.AccessToken;
loggedInData.ExpiresAt = newLoginInfo.ExpiresAt;
await _localStorage.SetItemAsync(Constants.LoginInfoLocalStorageKey, loggedInData);
}
public async Task Handle(LogOutFromWgMessage notification, CancellationToken cancellationToken)
{
var loggedInData = await _localStorage.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey);
var logoutInfo = await _graphQlBackendService.Logout(loggedInData.AccessToken, loggedInData.Realm);
await _localStorage.DeleteItemAsync(Constants.LoginInfoLocalStorageKey);
_navigationManager.NavigateTo("/", forceLoad: true);
}
}
}