* Good start

* Misc

* Make ApiAuthenticationMiddleware use new json

* Remove first newtonsoft dependency

* Pull latest ASFB json enhancements

* Start reimplementing newtonsoft!

* One thing at a time

* Keep doing all kind of breaking changes which need to be tested later

* Add back ShouldSerialize() support

* Misc

* Eradicate remaining parts of newtonsoft

* WIP

* Workaround STJ stupidity in regards to derived types

STJ can't serialize derived type properties by default, so we'll use another approach in our serializable file function

* Make CI happy

* Bunch of further fixes

* Fix AddFreeLicense() after rewrite

* Add full support for JsonDisallowNullAttribute

* Optimize our json utilities even further

* Misc

* Add support for fields in disallow null

* Misc optimization

* Fix deserialization of GlobalCache in STD

* Fix non-public [JsonExtensionData]

* Fix IM missing method exception, correct db storage helpers

* Fix saving into generic databases

Thanks STJ

* Make Save() function abstract to force inheritors to implement it properly

* Correct ShouldSerializeAdditionalProperties to be a method

* Misc cleanup

* Code review

* Allow JSON comments in configs, among other

* Allow trailing commas in configs

Users very often add them accidentally, no reason to throw on them

* Fix confirmation ID

Probably needs further fixes, will need to check later

* Correct confirmations deserialization

* Use JsonNumberHandling

* Misc

* Misc

* [JsonDisallowNull] corrections

* Forbid [JsonDisallowNull] on non-nullable structs

* Not really but okay

* Add and use ToJson() helpers

* Misc

* Misc
This commit is contained in:
Łukasz Domeradzki
2024-02-21 03:09:36 +01:00
committed by GitHub
parent 3968130e15
commit 6b0bf0f9c1
114 changed files with 1714 additions and 1212 deletions

View File

@@ -6,7 +6,6 @@
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="all" />
<PackageReference Include="Newtonsoft.Json" IncludeAssets="compile" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>

View File

@@ -27,9 +27,9 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Helpers.Json;
using ArchiSteamFarm.Localization;
using ArchiSteamFarm.Steam;
using Newtonsoft.Json;
using SteamKit2;
using SteamKit2.Internal;
@@ -128,7 +128,7 @@ internal static class Commands {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
Steam.Security.MobileAuthenticator? mobileAuthenticator = JsonConvert.DeserializeObject<Steam.Security.MobileAuthenticator>(json);
Steam.Security.MobileAuthenticator? mobileAuthenticator = json.ToJsonObject<Steam.Security.MobileAuthenticator>();
if (mobileAuthenticator == null) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
@@ -261,7 +261,7 @@ internal static class Commands {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
}
Steam.Security.MobileAuthenticator? mobileAuthenticator = JsonConvert.DeserializeObject<Steam.Security.MobileAuthenticator>(json);
Steam.Security.MobileAuthenticator? mobileAuthenticator = json.ToJsonObject<Steam.Security.MobileAuthenticator>();
if (mobileAuthenticator == null) {
return bot.Commands.FormatBotResponse(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
@@ -360,7 +360,7 @@ internal static class Commands {
MaFileData maFileData = new(response, bot.SteamID, deviceID);
string maFilePendingPath = $"{bot.GetFilePath(Bot.EFileType.MobileAuthenticator)}.PENDING";
string json = JsonConvert.SerializeObject(maFileData, Formatting.Indented);
string json = maFileData.ToJsonText(true);
try {
await File.WriteAllTextAsync(maFilePendingPath, json).ConfigureAwait(false);

View File

@@ -20,48 +20,71 @@
// limitations under the License.
using System;
using Newtonsoft.Json;
using System.Text.Json.Serialization;
using SteamKit2;
using SteamKit2.Internal;
namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator;
internal sealed class MaFileData {
[JsonProperty("account_name", Required = Required.Always)]
internal readonly string AccountName;
[JsonInclude]
[JsonPropertyName("account_name")]
[JsonRequired]
internal string AccountName { get; private init; }
[JsonProperty("device_id", Required = Required.Always)]
internal readonly string DeviceID;
[JsonInclude]
[JsonPropertyName("device_id")]
[JsonRequired]
internal string DeviceID { get; private init; }
[JsonProperty("identity_secret", Required = Required.Always)]
internal readonly string IdentitySecret;
[JsonInclude]
[JsonPropertyName("identity_secret")]
[JsonRequired]
internal string IdentitySecret { get; private init; }
[JsonProperty("revocation_code", Required = Required.Always)]
internal readonly string RevocationCode;
[JsonInclude]
[JsonPropertyName("revocation_code")]
[JsonRequired]
internal string RevocationCode { get; private init; }
[JsonProperty("secret_1", Required = Required.Always)]
internal readonly string Secret1;
[JsonInclude]
[JsonPropertyName("secret_1")]
[JsonRequired]
internal string Secret1 { get; private init; }
[JsonProperty("serial_number", Required = Required.Always)]
internal readonly ulong SerialNumber;
[JsonInclude]
[JsonPropertyName("serial_number")]
[JsonRequired]
internal ulong SerialNumber { get; private init; }
[JsonProperty("server_time", Required = Required.Always)]
internal readonly ulong ServerTime;
[JsonInclude]
[JsonPropertyName("server_time")]
[JsonRequired]
internal ulong ServerTime { get; private init; }
[JsonProperty(Required = Required.Always)]
internal readonly MaFileSessionData Session;
[JsonInclude]
[JsonRequired]
internal MaFileSessionData Session { get; private init; }
[JsonProperty("shared_secret", Required = Required.Always)]
internal readonly string SharedSecret;
[JsonInclude]
[JsonPropertyName("shared_secret")]
[JsonRequired]
internal string SharedSecret { get; private init; }
[JsonProperty("status", Required = Required.Always)]
internal readonly int Status;
[JsonInclude]
[JsonPropertyName("status")]
[JsonRequired]
internal int Status { get; private init; }
[JsonProperty("token_gid", Required = Required.Always)]
internal readonly string TokenGid;
[JsonInclude]
[JsonPropertyName("token_gid")]
[JsonRequired]
internal string TokenGid { get; private init; }
[JsonProperty("uri", Required = Required.Always)]
internal readonly string Uri;
[JsonInclude]
[JsonPropertyName("uri")]
[JsonRequired]
internal string Uri { get; private init; }
internal MaFileData(CTwoFactor_AddAuthenticator_Response data, ulong steamID, string deviceID) {
ArgumentNullException.ThrowIfNull(data);

View File

@@ -20,14 +20,15 @@
// limitations under the License.
using System;
using Newtonsoft.Json;
using System.Text.Json.Serialization;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator;
internal sealed class MaFileSessionData {
[JsonProperty(Required = Required.Always)]
internal readonly ulong SteamID;
[JsonInclude]
[JsonRequired]
internal ulong SteamID { get; private init; }
internal MaFileSessionData(ulong steamID) {
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {

View File

@@ -22,15 +22,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.OfficialPlugins.MobileAuthenticator.Localization;
using ArchiSteamFarm.Plugins;
using ArchiSteamFarm.Plugins.Interfaces;
using ArchiSteamFarm.Steam;
using Newtonsoft.Json;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator;
@@ -38,10 +39,12 @@ namespace ArchiSteamFarm.OfficialPlugins.MobileAuthenticator;
[Export(typeof(IPlugin))]
[SuppressMessage("ReSharper", "MemberCanBeFileLocal")]
internal sealed class MobileAuthenticatorPlugin : OfficialPlugin, IBotCommand2, IBotSteamClient {
[JsonProperty]
[JsonInclude]
[Required]
public override string Name => nameof(MobileAuthenticatorPlugin);
[JsonProperty]
[JsonInclude]
[Required]
public override Version Version => typeof(MobileAuthenticatorPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public async Task<string?> OnBotCommand(Bot bot, EAccess access, string message, string[] args, ulong steamID = 0) {