mirror of
https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies.git
synced 2026-07-25 14:24:32 +00:00
8ff960189e
- Update: Added "Copy Password" to Mafile context menu (if available) - Update: "Save Password" now pre-fills the current password in the "Login Again" dialog when encryption is enabled - Fix: Prevented overlapping confirmation cycles in AutoConfirmer - Fix: Added a Snackbar notification when a confirmation cycle is skipped due to a too frequent timer interval - Fix: Fixed a rare bug where the previous proxy was used instead of the current one during session refresh - Fix: Corrected "Session Permanently Expired" message showing on unrelated errors (e.g. network issues) - UI-Fix: Fixed visual glitch where proxy input appeared non-empty when switching to a mafile-specific proxy - Cleanup: Refactored and cleaned up codebase, improved styling and formatting via ReSharper
88 lines
2.5 KiB
C#
88 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using NebulaAuth.Model.Entities;
|
|
using NebulaAuth.Model.Exceptions;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using SteamLib;
|
|
using SteamLib.Utility.MafileSerialization;
|
|
|
|
namespace NebulaAuth.Model;
|
|
|
|
public static class NebulaSerializer
|
|
{
|
|
public static MafileSerializer Serializer { get; }
|
|
|
|
static NebulaSerializer()
|
|
{
|
|
Serializer = new MafileSerializer(new MafileSerializerSettings
|
|
{
|
|
DeserializationOptions =
|
|
{
|
|
AllowDeviceIdGeneration = true,
|
|
AllowSessionIdGeneration = true,
|
|
ThrowIfInvalidSteamId = false
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
public static Mafile Deserialize(string cont)
|
|
{
|
|
var data = Serializer.Deserialize(cont);
|
|
var mobileData = data.Data;
|
|
var info = data.Info;
|
|
if (info.IsExtended == false)
|
|
throw new FormatException("Mafile is not extended data");
|
|
|
|
|
|
var props = info.UnusedProperties ?? new Dictionary<string, JProperty>();
|
|
var proxy = GetPropertyValue<MaProxy>("Proxy", props);
|
|
var group = GetPropertyValue<string>("Group", props);
|
|
var password = GetPropertyValue<string>("Password", props);
|
|
var mafile = Mafile.FromMobileDataExtended((MobileDataExtended) mobileData, proxy, group, password);
|
|
|
|
|
|
if (!info.SteamIdValid)
|
|
throw new MafileNeedReloginException(mafile);
|
|
|
|
return mafile;
|
|
}
|
|
|
|
private static T? GetPropertyValue<T>(string name, Dictionary<string, JProperty> dictionary)
|
|
{
|
|
if (dictionary.TryGetValue(name, out var prop) == false) return default;
|
|
var value = prop.Value;
|
|
try
|
|
{
|
|
return value.ToObject<T>();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Shell.Logger.Warn(ex, "Can't deserialize property {name}", name);
|
|
return default;
|
|
}
|
|
}
|
|
|
|
public static string SerializeMafile(Mafile data)
|
|
{
|
|
var props = new Dictionary<string, object?>
|
|
{
|
|
{nameof(Mafile.Proxy), data.Proxy},
|
|
{nameof(Mafile.Group), data.Group},
|
|
{nameof(Mafile.Password), data.Password}
|
|
};
|
|
return SerializeMafile(data, props);
|
|
}
|
|
|
|
|
|
public static string SerializeMafile(MobileDataExtended data, Dictionary<string, object?>? properties)
|
|
{
|
|
if (Settings.Instance.LegacyMode)
|
|
{
|
|
return MafileSerializer.SerializeLegacy(data, Formatting.Indented, properties);
|
|
}
|
|
|
|
return MafileSerializer.Serialize(data);
|
|
}
|
|
} |