using Newtonsoft.Json.Linq; using SteamLib.Account; using SteamLib.Authentication; using SteamLib.Core.Enums; namespace SteamLib.Utility.MaFiles; public partial class MafileSerializer //SessionData { private static MobileSessionData? DeserializeMobileSessionData(JObject j, out DeserializedMafileSessionResult result) { result = DeserializedMafileSessionResult.Invalid; var refreshTokenToken = GetToken(j, nameof(MobileSessionData.RefreshToken), "refreshtoken", "refresh_token", "refresh", "OAuthToken"); SteamAuthToken refreshToken; if (refreshTokenToken == null || refreshTokenToken.Type == JTokenType.Null) return null; if (refreshTokenToken.Type == JTokenType.String && SteamTokenHelper.TryParse(refreshTokenToken.Value()!, out var parsed)) { refreshToken = parsed; } else if (refreshTokenToken.Type == JTokenType.Object) { try { refreshToken = refreshTokenToken.ToObject(); } catch { return null; } } else { return null; } var sessionId = GetString(j, "sessionid", "session_id", "session"); var accessTokenToken = GetToken(j, "accesstoken", "access_token", "access"); accessTokenToken ??= GetToken(j, "steamLoginSecure"); if (string.IsNullOrWhiteSpace(sessionId)) return null; SteamAuthToken? accessToken = null; if (accessTokenToken == null || accessTokenToken.Type == JTokenType.Null) { accessToken = null; } if (accessTokenToken is { Type: JTokenType.Object }) { try { accessToken = refreshTokenToken.ToObject(); } catch { // ignored } } else if (accessTokenToken is { Type: JTokenType.String } && SteamTokenHelper.TryParse(accessTokenToken.Value()!, out var token) && token.Type == SteamAccessTokenType.Mobile) { accessToken = token; } var sessionData = new MobileSessionData(sessionId, refreshToken.SteamId, refreshToken, accessToken, new Dictionary()); sessionData.IsValid = SessionDataValidator.Validate(null, sessionData).Succeeded; if(sessionData.IsValid == false) return null; if (refreshToken.IsExpired || refreshToken.Type != SteamAccessTokenType.MobileRefresh) { result = DeserializedMafileSessionResult.Expired; } else { result = DeserializedMafileSessionResult.Valid; } return sessionData; } }