From 18433814e8122c74dcda74348b6d6f601de55f9f Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Tue, 12 Sep 2023 16:11:31 +0800 Subject: [PATCH] salts auto generated --- .../Automation/CommandGenerator.cs | 2 +- .../Automation/SaltConstantGenerator.cs | 61 +++++++++++++++++++ .../IocHttpClientConfiguration.cs | 6 +- .../Web/Bridge/MiHoYoJSInterface.cs | 2 +- .../Web/Bridge/SignInJSInterfaceOversea.cs | 2 +- .../Web/Bridge/SignInJsInterface.cs | 2 +- .../Snap.Hutao/Web/Hoyolab/HoyolabOptions.cs | 26 +++----- 7 files changed, 76 insertions(+), 25 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/SaltConstantGenerator.cs diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/CommandGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/CommandGenerator.cs index 3bc345e8..83b1d206 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/CommandGenerator.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/CommandGenerator.cs @@ -95,4 +95,4 @@ internal sealed class CommandGenerator : IIncrementalGenerator string normalizedClassName = classSymbol.ToDisplayString().Replace('<', '{').Replace('>', '}'); production.AddSource($"{normalizedClassName}.{commandName}.g.cs", code); } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/SaltConstantGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/SaltConstantGenerator.cs new file mode 100644 index 00000000..862d1101 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Automation/SaltConstantGenerator.cs @@ -0,0 +1,61 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.CodeAnalysis; +using System.Net.Http; +using System.Runtime.Serialization; + +namespace Snap.Hutao.SourceGeneration.Automation; + +[Generator(LanguageNames.CSharp)] +internal sealed class SaltConstantGenerator : IIncrementalGenerator +{ + private static readonly HttpClient httpClient = new(); + + public void Initialize(IncrementalGeneratorInitializationContext context) + { + context.RegisterPostInitializationOutput(GenerateSaltContstants); + } + + private static void GenerateSaltContstants(IncrementalGeneratorPostInitializationContext context) + { + string body = httpClient.GetStringAsync("https://internal.snapgenshin.cn/Archive/Salt/Latest").GetAwaiter().GetResult(); + Response saltInfo = JsonParser.FromJson>(body)!; + string code = $$""" + namespace Snap.Hutao.Web.Hoyolab; + + internal sealed class SaltConstants + { + public const string CNVersion = "{{saltInfo.Data.CNVersion}}"; + public const string CNK2 = "{{saltInfo.Data.CNK2}}"; + public const string CNLK2 = "{{saltInfo.Data.CNLK2}}"; + + public const string OSVersion = "{{saltInfo.Data.OSVersion}}"; + public const string OSK2 = "{{saltInfo.Data.OSK2}}"; + public const string OSLK2 = "{{saltInfo.Data.OSLK2}}"; + } + """; + context.AddSource("SaltConstants.g.cs", code); + } + + private sealed class Response + { + [DataMember(Name = "data")] + public T Data { get; set; } = default!; + } + + internal sealed class SaltLatest + { + public string CNVersion { get; set; } = default!; + + public string CNK2 { get; set; } = default!; + + public string CNLK2 { get; set; } = default!; + + public string OSVersion { get; set; } = default!; + + public string OSK2 { get; set; } = default!; + + public string OSLK2 { get; set; } = default!; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs index db80c281..f8291f68 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs @@ -44,7 +44,7 @@ internal static partial class IocHttpClientConfiguration client.Timeout = Timeout.InfiniteTimeSpan; client.DefaultRequestHeaders.UserAgent.ParseAdd(HoyolabOptions.UserAgent); client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); - client.DefaultRequestHeaders.Add("x-rpc-app_version", HoyolabOptions.XrpcVersion); + client.DefaultRequestHeaders.Add("x-rpc-app_version", SaltConstants.CNVersion); client.DefaultRequestHeaders.Add("x-rpc-client_type", "5"); client.DefaultRequestHeaders.Add("x-rpc-device_id", HoyolabOptions.DeviceId); } @@ -60,7 +60,7 @@ internal static partial class IocHttpClientConfiguration client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); client.DefaultRequestHeaders.Add("x-rpc-aigis", string.Empty); client.DefaultRequestHeaders.Add("x-rpc-app_id", "bll8iq97cem8"); - client.DefaultRequestHeaders.Add("x-rpc-app_version", HoyolabOptions.XrpcVersion); + client.DefaultRequestHeaders.Add("x-rpc-app_version", SaltConstants.CNVersion); client.DefaultRequestHeaders.Add("x-rpc-client_type", "2"); client.DefaultRequestHeaders.Add("x-rpc-device_id", HoyolabOptions.DeviceId); client.DefaultRequestHeaders.Add("x-rpc-game_biz", "bbs_cn"); @@ -77,7 +77,7 @@ internal static partial class IocHttpClientConfiguration client.Timeout = Timeout.InfiniteTimeSpan; client.DefaultRequestHeaders.UserAgent.ParseAdd(HoyolabOptions.UserAgentOversea); client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); - client.DefaultRequestHeaders.Add("x-rpc-app_version", HoyolabOptions.XrpcVersionOversea); + client.DefaultRequestHeaders.Add("x-rpc-app_version", SaltConstants.OSVersion); client.DefaultRequestHeaders.Add("x-rpc-client_type", "5"); client.DefaultRequestHeaders.Add("x-rpc-language", "zh-cn"); client.DefaultRequestHeaders.Add("x-rpc-device_id", HoyolabOptions.DeviceId); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs index bc81a941..22dbc19d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs @@ -98,7 +98,7 @@ internal class MiHoYoJSInterface { { "x-rpc-client_type", "5" }, { "x-rpc-device_id", HoyolabOptions.DeviceId }, - { "x-rpc-app_version", HoyolabOptions.XrpcVersion }, + { "x-rpc-app_version", SaltConstants.CNVersion }, }, }; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJSInterfaceOversea.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJSInterfaceOversea.cs index 17e632f0..4321bec2 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJSInterfaceOversea.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJSInterfaceOversea.cs @@ -38,7 +38,7 @@ internal sealed class SignInJSInterfaceOversea : MiHoYoJSInterface { { "x-rpc-client_type", "2" }, { "x-rpc-device_id", HoyolabOptions.DeviceId }, - { "x-rpc-app_version", HoyolabOptions.XrpcVersionOversea }, + { "x-rpc-app_version", SaltConstants.OSVersion }, }, }; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJsInterface.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJsInterface.cs index 829958b2..a7fbf6ff 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJsInterface.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/SignInJsInterface.cs @@ -29,7 +29,7 @@ internal sealed class SignInJsInterface : MiHoYoJSInterface { { "x-rpc-client_type", "2" }, { "x-rpc-device_id", HoyolabOptions.DeviceId }, - { "x-rpc-app_version", HoyolabOptions.XrpcVersion }, + { "x-rpc-app_version", SaltConstants.CNVersion }, }, }; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/HoyolabOptions.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/HoyolabOptions.cs index c509d688..984c105c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/HoyolabOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/HoyolabOptions.cs @@ -16,45 +16,35 @@ internal sealed class HoyolabOptions : IOptions /// /// 米游社请求UA /// - public const string UserAgent = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBS/{XrpcVersion}"; + public const string UserAgent = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBS/{SaltConstants.CNVersion}"; /// /// Hoyolab 请求UA /// - public const string UserAgentOversea = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBSOversea/{XrpcVersionOversea}"; + public const string UserAgentOversea = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBSOversea/{SaltConstants.OSVersion}"; /// /// 米游社移动端请求UA /// - public const string MobileUserAgent = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/{XrpcVersion}"; + public const string MobileUserAgent = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/{SaltConstants.CNVersion}"; /// /// Hoyolab 移动端请求UA /// - public const string MobileUserAgentOversea = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBSOversea/{XrpcVersionOversea}"; - - /// - /// 米游社 Rpc 版本 - /// - public const string XrpcVersion = "2.52.1"; - - /// - /// Hoyolab Rpc 版本 - /// - public const string XrpcVersionOversea = "2.31.0"; + public const string MobileUserAgentOversea = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBSOversea/{SaltConstants.OSVersion}"; private static readonly ImmutableDictionary SaltsInner = new Dictionary() { // Chinese - [SaltType.K2] = "HiwYTTu2ovGcU51ehSXfe22SpNmQumlT", - [SaltType.LK2] = "QCRgj6bHHQvS0Rz03loexYSXpuiO3DZ6", + [SaltType.K2] = SaltConstants.CNK2, + [SaltType.LK2] = SaltConstants.CNLK2, [SaltType.X4] = "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs", [SaltType.X6] = "t0qEgfub6cvueAPgR5m9aQWWVciEer7v", [SaltType.PROD] = "JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS", // Oversea - [SaltType.OSK2] = "599uqkwc0dlqu3h6epzjzfhgyyrd44ae", - [SaltType.OSLK2] = "rk4xg2hakoi26nljpr099fv9fck1ah10", + [SaltType.OSK2] = SaltConstants.OSK2, + [SaltType.OSLK2] = SaltConstants.OSLK2, [SaltType.OSX4] = "h4c1d6ywfq5bsbnbhm1bzq7bxzzv6srt", [SaltType.OSX6] = "okr4obncj8bw5a65hbnn5oo6ixjc3l9w", }.ToImmutableDictionary();