mirror of
https://github.com/DrMboga/WotBlitzStatisticsBlazor.git
synced 2026-10-24 03:40:07 +02:00
feat: implemented login-prolong-logout mechanisms
This commit is contained in:
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user