diff --git a/ArchiSteamFarm/Steam/Bot.cs b/ArchiSteamFarm/Steam/Bot.cs index e46675853..6da0011a8 100644 --- a/ArchiSteamFarm/Steam/Bot.cs +++ b/ArchiSteamFarm/Steam/Bot.cs @@ -1560,24 +1560,35 @@ public sealed class Bot : IAsyncDisposable, IDisposable { return false; } - CAuthentication_AccessToken_GenerateForApp_Response? response = await ArchiHandler.GenerateAccessTokens(RefreshToken!).ConfigureAwait(false); + AccessTokenGenerateResult response; - if (string.IsNullOrEmpty(response?.access_token)) { + try { + response = await SteamClient.Authentication.GenerateAccessTokenForAppAsync(SteamID, RefreshToken!, true).ConfigureAwait(false); + } catch (Exception e) { // The request has failed, in almost all cases this means our refresh token is no longer valid, relog needed - BotDatabase.RefreshToken = RefreshToken = null; + ArchiLogger.LogGenericWarningException(e); - ArchiLogger.LogGenericWarning(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(ArchiHandler.GenerateAccessTokens))); + BotDatabase.RefreshToken = RefreshToken = null; await Connect(true).ConfigureAwait(false); return false; } - // TODO: Handle update of refresh token with next SK2 release - // ReSharper disable once RedundantSuppressNullableWarningExpression - required for .NET Framework - UpdateTokens(response!.access_token, RefreshToken!); + if (string.IsNullOrEmpty(response.AccessToken)) { + // The request has failed, in almost all cases this means our refresh token is no longer valid, relog needed + BotDatabase.RefreshToken = RefreshToken = null; - if (await ArchiWebHandler.Init(SteamID, SteamClient.Universe, response.access_token!, SteamParentalActive ? BotConfig.SteamParentalCode : null).ConfigureAwait(false)) { + ArchiLogger.LogGenericWarning(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, nameof(SteamClient.Authentication.GenerateAccessTokenForAppAsync))); + + await Connect(true).ConfigureAwait(false); + + return false; + } + + UpdateTokens(response.AccessToken, !string.IsNullOrEmpty(response.RefreshToken) ? response.RefreshToken : RefreshToken!); + + if (await ArchiWebHandler.Init(SteamID, SteamClient.Universe, response.AccessToken, SteamParentalActive ? BotConfig.SteamParentalCode : null).ConfigureAwait(false)) { InitRefreshTokensTimer(AccessTokenValidUntil ?? now.AddHours(18)); return true; diff --git a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs index dc2f554aa..d4d66b0a3 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs @@ -39,7 +39,6 @@ public sealed class ArchiHandler : ClientMsgHandler { internal const byte MaxGamesPlayedConcurrently = 32; // This is limit introduced by Steam Network private readonly ArchiLogger ArchiLogger; - private readonly SteamUnifiedMessages.UnifiedService UnifiedAuthenticationService; private readonly SteamUnifiedMessages.UnifiedService UnifiedChatRoomService; private readonly SteamUnifiedMessages.UnifiedService UnifiedClanChatRoomsService; private readonly SteamUnifiedMessages.UnifiedService UnifiedCredentialsService; @@ -54,7 +53,6 @@ public sealed class ArchiHandler : ClientMsgHandler { ArgumentNullException.ThrowIfNull(steamUnifiedMessages); ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger)); - UnifiedAuthenticationService = steamUnifiedMessages.CreateService(); UnifiedChatRoomService = steamUnifiedMessages.CreateService(); UnifiedClanChatRoomsService = steamUnifiedMessages.CreateService(); UnifiedCredentialsService = steamUnifiedMessages.CreateService(); @@ -355,37 +353,6 @@ public sealed class ArchiHandler : ClientMsgHandler { Client.Send(request); } - internal async Task GenerateAccessTokens(string refreshToken) { - if (string.IsNullOrEmpty(refreshToken)) { - throw new ArgumentNullException(nameof(refreshToken)); - } - - if (Client == null) { - throw new InvalidOperationException(nameof(Client)); - } - - if (!Client.IsConnected || (Client.SteamID == null)) { - return null; - } - - CAuthentication_AccessToken_GenerateForApp_Request request = new() { - refresh_token = refreshToken, - steamid = Client.SteamID - }; - - SteamUnifiedMessages.ServiceMethodResponse response; - - try { - response = await UnifiedAuthenticationService.SendMessage(x => x.GenerateAccessTokenForApp(request)).ToLongRunningTask().ConfigureAwait(false); - } catch (Exception e) { - ArchiLogger.LogGenericWarningException(e); - - return null; - } - - return response.Result == EResult.OK ? response.GetDeserializedResponse() : null; - } - internal async Task GetClanChatGroupID(ulong steamID) { if ((steamID == 0) || !new SteamID(steamID).IsClanAccount) { throw new ArgumentOutOfRangeException(nameof(steamID));