mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-19 15:21:26 +08:00
Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f842217be | |||
| 1d09ed185d | |||
| 81467c0a4f | |||
| 79982d7ee9 | |||
| c97171cebb | |||
| db66950499 | |||
| 8bbfd1dbc3 | |||
| c9ae6f4fdf | |||
| 157319b69e | |||
| 456f9c13f5 | |||
| 055fe2a4d7 | |||
| 15c6f575bc | |||
| 5b5e5b031a | |||
| faa981eb87 | |||
| 648300328c | |||
| 57d1c62770 | |||
| 14b1e19246 | |||
| 5478e1a31e | |||
| a81f1d54f1 | |||
| f9542f87b7 | |||
| a7ce44495a | |||
| d5650f77df | |||
| 0041ea7c23 | |||
| dab382441f | |||
| 28fc2ee466 | |||
| fe056c8e27 | |||
| cbd2575ad5 | |||
| 04c2276c73 | |||
| ea9ee6bda3 | |||
| a0c7d26ee7 | |||
| 9002127836 | |||
| 42457873ee | |||
| 884b2f7244 | |||
| 4bedc0f702 | |||
| 505ef59c23 | |||
| b1c41f9421 | |||
| 07385d0040 | |||
| c9000b1653 | |||
| 09bd0f6b5b | |||
| 6a90230dbb | |||
| ec70128239 | |||
| f2048bc3e5 | |||
| 9000c3bf2a | |||
| 3725f9b62f | |||
| 2c92e3e6f8 |
@@ -29,7 +29,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v2
|
||||
uses: actions/setup-dotnet@v3.0.2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v2
|
||||
uses: actions/setup-dotnet@v3.0.2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
@@ -321,7 +321,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v2
|
||||
uses: actions/setup-dotnet@v3.0.2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v2
|
||||
uses: actions/setup-dotnet@v3.0.2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
# xcode-version: '12.x' # set the latest available Xcode 12
|
||||
|
||||
- name: Setup Android NDK
|
||||
uses: nttld/setup-ndk@v1.0.6
|
||||
uses: nttld/setup-ndk@v1.2.0
|
||||
id: setup-ndk
|
||||
with:
|
||||
ndk-version: r21e
|
||||
|
||||
+63
-61
@@ -5,18 +5,18 @@
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.10" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp3.1'))">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NETCOREAPP31) -->
|
||||
@@ -24,7 +24,7 @@
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.8" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.10" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.27" />
|
||||
@@ -40,12 +40,12 @@
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Entity Framework Plus -->
|
||||
<!-- A FREE & Open Source library to enhance EF6 and EF Core -->
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.14.4" />
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.15.2" />
|
||||
|
||||
<!-- AspNetCore 6 OpenId/OAuth -->
|
||||
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.9" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.9" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.12" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.12" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
@@ -74,11 +74,11 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<!-- Microsoft.* -->
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.3.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
|
||||
<!--<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="1.4.1" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.19041.22" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />-->
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.1" />
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Net.Http.Headers" Version="2.2.255.255" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
@@ -86,11 +86,11 @@
|
||||
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Diagnostics.PerformanceCounter" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Net.Http.WinHttpHandler" Version="6.0.1" />
|
||||
|
||||
|
||||
<!-- AppCenter.* -->
|
||||
<PackageVersion Include="Microsoft.AppCenter" Version="4.5.3" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.3" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.3" />
|
||||
<PackageVersion Include="Microsoft.AppCenter" Version="5.0.1" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="5.0.1" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="5.0.1" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.3" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.3" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.3" />
|
||||
@@ -108,43 +108,43 @@
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2478" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2478" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
|
||||
|
||||
<!-- NUnit & NUnit.Xamarin & Moq -->
|
||||
<PackageVersion Include="NUnit" Version="3.13.3" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.3.1" />
|
||||
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
|
||||
<PackageVersion Include="PCLStorage" Version="1.0.2" />
|
||||
<PackageVersion Include="Moq" Version="4.18.2" />
|
||||
<PackageVersion Include="Moq" Version="4.18.3" />
|
||||
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="5.0.2" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.0.2" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="5.1.1" />
|
||||
<PackageVersion Include="NLog" Version="5.1.0" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.0" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="5.2.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.NLog.Web.AspNetCore" Version="5.0.0" />
|
||||
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.4.1" />
|
||||
<PackageVersion Include="DynamicData" Version="7.9.14" />
|
||||
<PackageVersion Include="ReactiveUI" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.Fody" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.Maui" Version="18.3.1" />
|
||||
<PackageVersion Include="Splat" Version="14.6.1" />
|
||||
<PackageVersion Include="DynamicData" Version="7.12.11" />
|
||||
<PackageVersion Include="ReactiveUI" Version="18.4.1" />
|
||||
<PackageVersion Include="ReactiveUI.Fody" Version="18.4.1" />
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="18.4.1" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.4.1" />
|
||||
<PackageVersion Include="ReactiveUI.Maui" Version="18.4.1" />
|
||||
<!-- SkiaSharp & HarfBuzzSharp -->
|
||||
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/HarfBuzzSharp.props -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2.1-preview.104" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2.1-preview.104" />
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2.3" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2.3" />
|
||||
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/SkiaSharp.props -->
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.1-preview.104" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1-preview.104" />
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.3" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.3" />
|
||||
|
||||
<!-- AutoMapper -->
|
||||
<PackageVersion Include="AutoMapper" Version="11.0.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="8.0.0" />
|
||||
<PackageVersion Include="AutoMapper" Version="12.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="9.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="8.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="5.1.0" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="6.0.2" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
|
||||
|
||||
<!-- QRCode -->
|
||||
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
|
||||
@@ -158,14 +158,14 @@
|
||||
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.38" />-->
|
||||
|
||||
<!-- Compression -->
|
||||
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.1" />
|
||||
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
|
||||
<PackageVersion Include="7-Zip.NativeAssets.Win32" Version="21.7.0-preview.1" />
|
||||
<PackageVersion Include="ZstdNet" Version="1.4.5" />
|
||||
|
||||
<!-- Algorithm -->
|
||||
<PackageVersion Include="Crc32.NET" Version="1.2.0" />
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.2" />
|
||||
|
||||
<!--Command Line Tools-->
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
|
||||
@@ -190,31 +190,31 @@
|
||||
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
|
||||
|
||||
<!-- Excel -->
|
||||
<PackageVersion Include="NPOI" Version="2.5.6" />
|
||||
<PackageVersion Include="NPOI" Version="2.6.0" />
|
||||
|
||||
<!-- Github API -->
|
||||
<PackageVersion Include="Octokit" Version="2.0.1" />
|
||||
<PackageVersion Include="Octokit" Version="4.0.3" />
|
||||
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.3" />
|
||||
|
||||
<!-- MonoMac(NETSTANDARD) -->
|
||||
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
|
||||
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="2.0.0" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.7.0" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.8.0" />
|
||||
|
||||
<!-- Serialize -->
|
||||
<PackageVersion Include="MessagePack" Version="2.4.35" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageVersion Include="MessagePack" Version="2.4.59" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.2" />
|
||||
|
||||
<!-- Html Parser -->
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.45" />
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.46" />
|
||||
|
||||
<!-- Clipboard -->
|
||||
<PackageVersion Include="TextCopy" Version="6.1.0" />
|
||||
<PackageVersion Include="TextCopy" Version="6.2.0" />
|
||||
|
||||
<!-- Nito.* -->
|
||||
<PackageVersion Include="Nito.Comparers" Version="6.2.2" />
|
||||
@@ -229,7 +229,9 @@
|
||||
<PackageVersion Include="Fleck" Version="1.2.0" />
|
||||
|
||||
<!-- DNS -->
|
||||
<PackageVersion Include="DnsClient" Version="1.6.1" />
|
||||
<PackageVersion Include="Ae.DNS.Client" Version="0.0.16" />
|
||||
<!--<PackageVersion Include="Ae.Dns.Protocol" Version="0.0.16" />-->
|
||||
<PackageVersion Include="DnsClient" Version="1.7.0" />
|
||||
<PackageVersion Include="DNS" Version="7.0.0" />
|
||||
|
||||
<!-- Cryptographic Algorithms & Protocols -->
|
||||
@@ -246,12 +248,12 @@
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.18" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.16" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.18" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.18" />
|
||||
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.12.2" />-->
|
||||
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
|
||||
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.4.1" />-->
|
||||
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-beta.350" />
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.4.4" />-->
|
||||
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-beta.603" />
|
||||
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
|
||||
<PackageVersion Include="Avalonia.Native" Version="0.10.18" />
|
||||
<PackageVersion Include="Avalonia.Win32" Version="0.10.18" />
|
||||
@@ -261,12 +263,12 @@
|
||||
<!--Avalonia End-->
|
||||
|
||||
<!-- Xamarin.Android -->
|
||||
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.3" />
|
||||
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.40.5" />
|
||||
<PackageVersion Include="Xamarin.Google.MLKit.BarcodeScanning" Version="116.1.2.5" />
|
||||
<PackageVersion Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
||||
<PackageVersion Include="de.hdodenhof.circleimageview" Version="3.1.0.4" />
|
||||
<PackageVersion Include="Square.OkHttp3" Version="4.9.3" />
|
||||
<PackageVersion Include="Square.OkHttp3" Version="4.9.3.2" />
|
||||
<PackageVersion Include="Square.Picasso" Version="2.71828.0" />
|
||||
<!--<PackageVersion Include="LeakCanaryBinding" Version="1.5.1.1" />-->
|
||||
<!--<PackageVersion Include="TencentOpenApiSDK.Android" Version="3.5.4.11" />-->
|
||||
@@ -306,14 +308,14 @@
|
||||
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
|
||||
|
||||
<!-- UWP -->
|
||||
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.1.4" />
|
||||
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.2.221116.1" />
|
||||
|
||||
<!-- Code Style -->
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.435" />
|
||||
|
||||
<!-- Quartz -->
|
||||
<PackageVersion Include="Quartz.AspNetCore" Version="3.4.0" />
|
||||
<PackageVersion Include="Quartz.AspNetCore" Version="3.5.0" />
|
||||
|
||||
<!-- Yet Another Reverse Proxy -->
|
||||
<PackageVersion Include="Yarp.ReverseProxy" Version="1.1.1" />
|
||||
|
||||
@@ -2670,6 +2670,7 @@ Global
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81} = {8E38AAF2-8C7D-4B0D-AB25-AB37EECB4029}
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{1891DD14-628D-4921-8A1E-279320312E95} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
|
||||
Submodule references/ArchiSteamFarm updated: 1d900cc7b7...a427f628e1
Binary file not shown.
+35
-40
@@ -1,30 +1,25 @@
|
||||
### 公告
|
||||
1. 非简中语言将默认隐藏加速和脚本功能,仅能通过切换语言并重启程序的方式还原被隐藏的功能
|
||||
2. 因经济状况原因,现已停止短信服务节约开销,后续会推出邮箱注册登录,对于仅使用手机号登录的用户请绑定第三方快速登录,否则注销后将无法再次登录,需要等待至邮箱服务推出后支持会暂时在开放短信服务提供换绑邮箱。
|
||||
3. 自动更新目前仅 Windows 端可用,且由于下载渠道限速可能导致无法更新成功,推荐在官网链接的网盘或群文件中下载压缩包解压覆盖更新(应用商店版由商店更新不受此影响)
|
||||
4. 在 Android 上因系统限制,目前的加速功能无法正常使用,所以此功能已放弃继续开发,如仍想使用需要自行导入证书到系统目录,使用 adb 工具或 Magisk 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
|
||||
5. fde 版本需要安装 [ASP.NET Core 运行时 6.0.8 (x64) 与 .NET Core 运行时 6.0.8 (x64)](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0)
|
||||
6. Windows x86 与 x64 版本令牌本机加密互不兼容,使用两者版本时注意令牌加密后的文件不能共用。
|
||||
7. 由于新版本加速功能重构,调整了部分加速项目,这会影响旧版本程序使用加速功能
|
||||
8. 为了能继续维持开发,从此版本开始将会添加程序内广告,赞助用户可以在设置中关闭所有广告
|
||||
这是一个修复目前累积问题的版本,也是最后一个.NET 6 的版本,
|
||||
之后桌面端程序将使用.NET 7 + Avalonia 11.0 重构发布新版本。
|
||||
届时也会放弃继续对 Win7/8.1 系统的支持,所以这也意味着这是最后一个支持 Win7/8.1 的版本。
|
||||
也请各位敬请期待之后的 3.0 版本吧~
|
||||
|
||||
### 版本亮点
|
||||
1. .NET 运行时升级至 6.0.8,使用 fde 版本需要升级运行时
|
||||
2. ASF 升级至 V5.2.8.4
|
||||
1. .NET 运行时升级至 6.0.11,使用 fde 版本需要升级运行时
|
||||
2. ASF 升级至 V5.3.2.4
|
||||
|
||||
### 修复问题
|
||||
1. 修复 2.8.0 ~ 2.8.2 中 AppData/Config.mpo 文件大小为 0 时导致的程序无法正常启动
|
||||
2. 修复 Windows 上版本更新在 2.8.0 ~ 2.8.2 中非 FDE 版本识别为 FDE 版
|
||||
3. 改进 调整代理模式顺序,Hosts 模式置顶
|
||||
4. 修复 划词翻译等一些 JS 脚本
|
||||
5. 改进 macOS 上的证书安装
|
||||
6. 尝试修复 网络加速中能导致内存泄露的问题
|
||||
7. 改进 非简中默认隐藏加速与脚本仅在 Windows 上生效
|
||||
8. 改进 减少 Android 上的启动时间
|
||||
9. 修复 退出程序时可能引发的闪退
|
||||
10. 修复 macOS/Linux 上设置页面打不开的问题
|
||||
11. 修复 网络加速中网页上出现 Because https://... actually points to WattToolkit itself...
|
||||
12. 尝试修复 ASF 控制台中输入时卡死
|
||||
1. 改进 Mac 安装证书的提示,显示执行命令
|
||||
2. 修复 Steam 启动参数在一些场景下无效
|
||||
3. 修复 网络加速 关闭 http 重定向到 https 依然监听80端口错误
|
||||
4. 修复 网络加速 仅启用脚本功能 导致代理网站无法访问的错误
|
||||
5. 修复 网络加速 开启系统代理和 PAC 代理后,非代理网站无法正常访问的错误
|
||||
6. 修改 证书安装路径 为本地计算机 而不在是 当前用户 以支持跨用户访问,这项改动可能导致大家需要重新安装一次证书
|
||||
7. 修复 库存游戏 因 Steam 客户端更新导致的加载游戏数据失败问题
|
||||
8. 修复 捐助列表金额显示错位问题
|
||||
9. 修复 Twitch 聊天连接失败问题
|
||||
10. 修复 discord.gg 无法访问导致无法加入频道分享链接问题
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
@@ -61,7 +56,7 @@
|
||||
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
[]()
|
||||
|
||||
|
||||
##### [不知道该下载哪个文件?](./download-guide.md)
|
||||
@@ -70,28 +65,28 @@
|
||||
### 文件校验
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.8.3.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.3.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.8.5.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.5.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x64_v2.8.3.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.3.exe | SHA256 |
|
||||
| Steam++_win_x64_v2.8.5.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.5.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x86_v2.8.3.7z | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.3.7z | SHA256 |
|
||||
| Steam++_win_x86_v2.8.5.7z | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.5.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x86_v2.8.3.exe | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.3.exe | SHA256 |
|
||||
| Steam++_win_x86_v2.8.5.exe | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.5.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.8.3.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.3.7z | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.5.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.5.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.8.3.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.3.deb | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.5.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.5.deb | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.8.3.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.3.rpm | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.5.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.5.rpm | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.8.3.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.8.3.dmg | SHA256 |
|
||||
| Steam++_macos_x64_v2.8.5.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.8.5.dmg | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_v2.8.3.apk | SHA256 |
|
||||
| Steam++_android_v2.8.5.apk | SHA256 |
|
||||
|
||||
@@ -8,10 +8,16 @@ public static partial class EnumExtensions
|
||||
/// <summary>
|
||||
/// 返回一个布尔值,该值指示给定的整数值或其名称字符串是否存在于指定的枚举中
|
||||
/// </summary>
|
||||
/// <typeparam name="TEnum"></typeparam>
|
||||
/// <param name="value"></param>
|
||||
/// <returns>如果 enumType 中的某个常量的值等于 value,则为 <see langword="true"/>;否则为 <see langword="false"/></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static bool IsDefined(this Enum value) => Enum.IsDefined(value.GetType(), value);
|
||||
public static bool IsDefined<TEnum>(this TEnum value) where TEnum : struct, Enum
|
||||
#if NET5_0_OR_GREATER
|
||||
=> Enum.IsDefined(value);
|
||||
#else
|
||||
=> Enum.IsDefined(typeof(TEnum), value);
|
||||
#endif
|
||||
|
||||
public static TEnum ConvertToEnum<TEnum>(this sbyte value)
|
||||
where TEnum : Enum
|
||||
|
||||
@@ -19,6 +19,9 @@ public abstract class HttpPlatformHelperService : IHttpPlatformHelperService
|
||||
ImageFormat.JPEG,
|
||||
ImageFormat.PNG,
|
||||
ImageFormat.GIF,
|
||||
ImageFormat.WebP,
|
||||
ImageFormat.BMP,
|
||||
ImageFormat.ICO,
|
||||
});
|
||||
|
||||
public virtual ImageFormat[] SupportedImageFormats => mSupportedImageFormats.Value;
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace System.Properties
|
||||
/// <item> macOS:\packaging\build-osx-app.sh <CFBundleVersion> <CFBundleShortVersionString> </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public const string Version = "2.8.4";
|
||||
public const string Version = "2.8.5";
|
||||
|
||||
//public const string InfoVersion = Version + "-beta";
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<!--<TargetFrameworks>MonoAndroid12.0;netstandard2.1;net6.0-android</TargetFrameworks>-->
|
||||
<TargetFrameworks>MonoAndroid12.0;netstandard2.1</TargetFrameworks>
|
||||
<TargetFrameworks>netstandard2.1</TargetFrameworks>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<AssemblyName>System.Common.PinyinLib.TinyPinyin</AssemblyName>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
||||
@@ -17,10 +17,10 @@ internal static class Program
|
||||
{
|
||||
const string ExecutiveName = "Steam++";
|
||||
static BundleArch matchArch;
|
||||
static readonly SemanticVersion runtimeVersion = new(6, 0, 8);
|
||||
static readonly SemanticVersion sdkVersion1 = new(6, 0, 108);
|
||||
static readonly SemanticVersion sdkVersion3 = new(6, 0, 303);
|
||||
static readonly SemanticVersion sdkVersion4 = new(6, 0, 400);
|
||||
static readonly SemanticVersion runtimeVersion = new(6, 0, 11);
|
||||
static readonly SemanticVersion sdkVersion1 = new(6, 0, 111);
|
||||
static readonly SemanticVersion sdkVersion3 = new(6, 0, 306);
|
||||
static readonly SemanticVersion sdkVersion4 = new(6, 0, 403);
|
||||
|
||||
/// <summary>
|
||||
/// 应用程序的主入口点。
|
||||
|
||||
@@ -5,6 +5,6 @@ namespace System.Properties
|
||||
/// <summary>
|
||||
/// 版本号
|
||||
/// </summary>
|
||||
public const string Version = "1.1.0";
|
||||
public const string Version = "1.1.11";
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Binding;
|
||||
using System.Application.Settings;
|
||||
using System.Application.UI.Fragments;
|
||||
using System.Application.UI.Resx;
|
||||
using System.Application.UI.ViewModels;
|
||||
@@ -193,5 +194,11 @@ namespace System.Application.UI.Activities
|
||||
void SetProxySettingsTwoLevelAgent() => binding!.swProxySettingsTwoLevelAgent.Checked = TwoLevelAgentEnable.Value;
|
||||
|
||||
void SetIsVpnMode() => binding!.swIsVpnMode.Checked = ProxyModeValue == ProxyMode.VPN;
|
||||
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
SettingsHost.Save();
|
||||
base.OnDestroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<!--<TargetFrameworks>MonoAndroid12.0;Xamarin.iOS10;net6.0-android;net6.0-windows</TargetFrameworks>-->
|
||||
<TargetFrameworks>MonoAndroid12.0;Xamarin.iOS10;net6.0-windows</TargetFrameworks>
|
||||
<!--<TargetFrameworks>net6.0-windows</TargetFrameworks>-->
|
||||
<RootNamespace>System.Application.AppCenter</RootNamespace>
|
||||
<AssemblyName>System.Application.SteamTools.Client.AppCenter</AssemblyName>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
||||
@@ -266,7 +266,7 @@ public abstract class CommandLineHost : IDisposable
|
||||
steamService.SetCurrentUser(account);
|
||||
}
|
||||
|
||||
steamService.StartSteam();
|
||||
steamService.StartSteamWithParameter();
|
||||
}
|
||||
});
|
||||
rootCommand.AddCommand(steamuser);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Identity
|
||||
Name="4651ED44255E.47979655102CE"
|
||||
Publisher="CN=A90E406B-B2D3-4A23-B061-0FA1D65C4F66"
|
||||
Version="2.8.4.0" />
|
||||
Version="2.8.5.0" />
|
||||
|
||||
<Properties>
|
||||
<DisplayName>Watt Toolkit</DisplayName>
|
||||
|
||||
@@ -32,14 +32,22 @@
|
||||
<DefineConstants>MAC;PUBLISH;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-x64' Or '$(ExtraDefineConstants)' == 'dev-win-x64' ">
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-x64' Or '$(ExtraDefineConstants)' == 'dev-win-x64' Or '$(ExtraDefineConstants)' == 'win-x86' Or '$(ExtraDefineConstants)' == 'dev-win-x86' ">
|
||||
<DefineConstants>PUBLISH;PUBLISH_WIN7;WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-x64' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x64' ">
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-arm64' Or '$(ExtraDefineConstants)' == 'dev-arm64' ">
|
||||
<DefineConstants>PUBLISH;WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-x64' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x64' Or '$(ExtraDefineConstants)' == 'fd-win-x86' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x86' ">
|
||||
<DefineConstants>FRAMEWORK_DEPENDENT;PUBLISH;PUBLISH_WIN7;WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-arm64' Or '$(ExtraDefineConstants)' == 'dev-fd-arm64' ">
|
||||
<DefineConstants>FRAMEWORK_DEPENDENT;PUBLISH;WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" $(RuntimeIdentifier.Contains(`win`)) Or $(ExtraDefineConstants.Contains(`win`)) Or ('$(OS)' == 'Windows_NT' And !$(DefineConstants.Contains(`PUBLISH`))) ">
|
||||
<DefineConstants>WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
<ApplicationIcon>..\ST.Client.Desktop.Avalonia\Application\UI\Assets\Icon.ico</ApplicationIcon>
|
||||
|
||||
+3
-3
@@ -193,15 +193,15 @@
|
||||
Margin="10">
|
||||
<controls:ScrollingTextBlock Text="{Binding Name}" Classes="h6 semibold"/>
|
||||
<!--Foreground="#D22222"-->
|
||||
<!--<controls:ScrollingTextBlock Text="{Binding Amount,Converter={StaticResource StringFormatConverter},ConverterParameter={ReflectionBinding CurrencyCode}}"/>-->
|
||||
<controls:ScrollingTextBlock>
|
||||
<controls:ScrollingTextBlock Text="{Binding Amount,Converter={StaticResource StringFormatConverter},ConverterParameter={ReflectionBinding CurrencyCode}}"/>
|
||||
<!--<controls:ScrollingTextBlock>
|
||||
<controls:ScrollingTextBlock.Text>
|
||||
<MultiBinding Converter="{StaticResource StringFormatConverter}" ConverterParameter="money">
|
||||
<Binding Path="Amount"/>
|
||||
<Binding Path="CurrencyCode"/>
|
||||
</MultiBinding>
|
||||
</controls:ScrollingTextBlock.Text>
|
||||
</controls:ScrollingTextBlock>
|
||||
</controls:ScrollingTextBlock>-->
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
@@ -91,14 +91,14 @@ namespace System.Application.Services.Implementation
|
||||
|
||||
async ValueTask<bool?> IPlatformService.TrustRootCertificate(string filePath)
|
||||
{
|
||||
var script = $"security add-trusted-cert -d -r trustRoot -k /Users/{Environment.UserName}/Library/Keychains/login.keychain-db \\\"{filePath}\\\"";
|
||||
var script = $"security add-trusted-cert -d -r trustRoot -k /Users/{Environment.UserName}/Library/Keychains/login.keychain-db";
|
||||
TextBoxWindowViewModel vm = new()
|
||||
{
|
||||
Title = AppResources.MacTrustRootCertificateTips,
|
||||
InputType = TextBoxWindowViewModel.TextBoxInputType.ReadOnlyText,
|
||||
Description = AppResources.MacTrustRootCertificateTips,
|
||||
InputType = TextBoxWindowViewModel.TextBoxInputType.Password,
|
||||
Description = AppResources.MacSudoPasswordTips + $"\r\n sudo {script} \"{filePath}\"",
|
||||
};
|
||||
var scriptContent = $"osascript -e 'tell app \"Terminal\" to do script \"sudo -S {script}\"'";
|
||||
var scriptContent = $"osascript -e 'tell app \"Terminal\" to do script \"sudo -S {script} \\\"{filePath}\\\"\"'";
|
||||
var msg = UnixHelper.RunShell(scriptContent.ToString());
|
||||
if (await TextBoxWindowViewModel.ShowDialogAsync(vm) == null)
|
||||
return null;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using DnsClient;
|
||||
using DnsClient.Protocol;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
using System.Collections.Generic;
|
||||
@@ -16,16 +17,16 @@ namespace System.Application.Services.Implementation
|
||||
{
|
||||
private static readonly LookupClient lookupClient = new();
|
||||
|
||||
public int AnalysisHostnameTime(string url)
|
||||
public async Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
var client = lookupClient;
|
||||
var result = client.Query(url, QueryType.A);
|
||||
var result = await client.QueryAsync(url, QueryType.A, QueryClass.IN, cancellationToken);
|
||||
if (result.Answers.Count > 0)
|
||||
{
|
||||
var value = result.Answers.ARecords().FirstOrDefault()?.InitialTimeToLive;
|
||||
if (value.HasValue) return value.Value;
|
||||
return value ?? 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -150,6 +151,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static IServiceCollection AddDnsAnalysisService(this IServiceCollection services)
|
||||
{
|
||||
//services.AddSingleton<IDnsAnalysisService, DnsDohAnalysisService>();
|
||||
services.AddSingleton<IDnsAnalysisService, DnsAnalysisServiceImpl>();
|
||||
return services;
|
||||
}
|
||||
|
||||
@@ -495,6 +495,7 @@ namespace System.Application.Services.Implementation
|
||||
|
||||
private uint univeseNumber;
|
||||
private const uint MagicNumber = 123094055U;
|
||||
private const uint MagicNumberV2 = 123094056U;
|
||||
|
||||
/// <summary>
|
||||
/// 从steam本地客户端缓存文件中读取游戏数据
|
||||
@@ -516,7 +517,7 @@ namespace System.Application.Services.Implementation
|
||||
}
|
||||
using BinaryReader binaryReader = new(stream);
|
||||
uint num = binaryReader.ReadUInt32();
|
||||
if (num != MagicNumber)
|
||||
if (num != MagicNumberV2 && num != MagicNumber)
|
||||
{
|
||||
Log.Error(nameof(GetAppInfos), string.Format("\"{0}\" magic code is not supported: 0x{1:X8}", Path.GetFileName(AppInfoPath), num));
|
||||
return apps;
|
||||
|
||||
@@ -56,8 +56,8 @@ sealed partial class TitaniumCertificateManagerImpl : CertificateManagerImpl, IC
|
||||
=> manager.CreateRootCertificate(true);
|
||||
|
||||
protected override void SharedRemoveTrustedRootCertificate()
|
||||
=> manager.RemoveTrustedRootCertificate(false);
|
||||
=> manager.RemoveTrustedRootCertificate(true);
|
||||
|
||||
protected override void SharedTrustRootCertificate()
|
||||
=> manager.TrustRootCertificate(false);
|
||||
=> manager.TrustRootCertificate(true);
|
||||
}
|
||||
|
||||
+5
-8
@@ -64,14 +64,15 @@ sealed class HttpReverseProxyMiddleware
|
||||
return;
|
||||
}
|
||||
|
||||
if (domainConfig == defaultDomainConfig)
|
||||
if (domainConfig == defaultDomainConfig &&
|
||||
!reverseProxyConfig.Service.OnlyEnableProxyScript)
|
||||
{
|
||||
//部分运营商将奇怪的域名解析到127.0.0.1 再此排除这些不支持的代理域名
|
||||
var ip = await IDnsAnalysisService.Instance.AnalysisDomainIpAsync(url, IDnsAnalysisService.DNS_Alis).FirstOrDefaultAsync();
|
||||
var ip = await reverseProxyConfig.DnsAnalysis.AnalysisDomainIpAsync(context.Request.Host.Value, IDnsAnalysisService.DNS_Dnspods).FirstOrDefaultAsync();
|
||||
if (ip == null || IPAddress.IsLoopback(ip))
|
||||
{
|
||||
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
|
||||
await context.Response.WriteAsync($"域名 {context.Request.Host.Host} 可能已经被 DNS 污染,如果域名为本机域名,请解析为非回环 IP。");
|
||||
await context.Response.WriteAsync($"域名 {context.Request.Host.Host} 可能已经被 DNS 污染,如果域名为本机域名,请解析为非回环 IP。", Encoding.UTF8);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -190,11 +191,7 @@ sealed class HttpReverseProxyMiddleware
|
||||
/// <returns></returns>
|
||||
static async Task HandleErrorAsync(HttpContext context, ForwarderError error)
|
||||
{
|
||||
await context.Response.WriteAsJsonAsync(new
|
||||
{
|
||||
error = error.ToString(),
|
||||
message = context.GetForwarderErrorFeature()?.Exception?.Message,
|
||||
});
|
||||
await context.Response.WriteAsync($"{error}:{context.GetForwarderErrorFeature()?.Exception?.Message}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+3
-3
@@ -78,7 +78,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
|
||||
"Could not remove certificate as it is null or empty.");
|
||||
}
|
||||
|
||||
using var x509Store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
|
||||
using var x509Store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -96,7 +96,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Error(TAG, new ApplicationException(
|
||||
"Failed to remove root certificate trust for CurrentUser store location. You may need admin rights.", e), nameof(SharedRemoveTrustedRootCertificate));
|
||||
"Failed to remove root certificate trust for LocalMachine store location. You may need admin rights.", e), nameof(SharedRemoveTrustedRootCertificate));
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -112,7 +112,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
|
||||
"Could not install certificate as it is null or empty.");
|
||||
}
|
||||
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
||||
try
|
||||
{
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
|
||||
+2
-1
@@ -68,7 +68,8 @@ sealed partial class YarpReverseProxyServiceImpl : ReverseProxyServiceImpl, IRev
|
||||
else
|
||||
{
|
||||
options.ListenHttpsReverseProxy();
|
||||
options.ListenHttpReverseProxy();
|
||||
if (EnableHttpProxyToHttps)
|
||||
options.ListenHttpReverseProxy();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ abstract partial class CertificateManagerImpl
|
||||
[SupportedOSPlatform("Linux")]
|
||||
void DeleteRootCertificateLinux()
|
||||
{
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
||||
store.Open(OpenFlags.ReadOnly);
|
||||
var collection = store.Certificates.Find(X509FindType.FindByIssuerName, IReverseProxyService.RootCertificateName, false);
|
||||
foreach (var item in collection)
|
||||
@@ -233,7 +233,7 @@ abstract partial class CertificateManagerImpl
|
||||
[SupportedOSPlatform("macOS")]
|
||||
async void DeleteRootCertificateMacOS()
|
||||
{
|
||||
using var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
|
||||
using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
|
||||
store.Open(OpenFlags.ReadOnly);
|
||||
var collection = store.Certificates.Find(X509FindType.FindByIssuerName, IReverseProxyService.RootCertificateName, false);
|
||||
foreach (var item in collection)
|
||||
@@ -287,7 +287,7 @@ abstract partial class CertificateManagerImpl
|
||||
}
|
||||
else
|
||||
{
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
|
||||
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
||||
store.Open(OpenFlags.ReadOnly);
|
||||
return store.Certificates.Contains(certificate2);
|
||||
}
|
||||
|
||||
@@ -12,13 +12,13 @@ abstract class ReverseProxyServiceImpl
|
||||
|
||||
public ReverseProxyServiceImpl(
|
||||
IPlatformService platformService,
|
||||
IDnsAnalysisService dnsAnalysis)
|
||||
IDnsAnalysisService dnsAnalyses)
|
||||
{
|
||||
this.platformService = platformService;
|
||||
DnsAnalysis = dnsAnalysis;
|
||||
DnsAnalysis = dnsAnalyses;
|
||||
}
|
||||
|
||||
public IDnsAnalysisService DnsAnalysis { get; }
|
||||
public IDnsAnalysisService? DnsAnalysis { get; }
|
||||
|
||||
public abstract ICertificateManager CertificateManager { get; }
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
<!--<PackageReference Include="CommunityToolkit.Mvvm"/>-->
|
||||
<PackageReference Include="ReactiveUI.Fody" />
|
||||
<!--<PackageReference Include="ArchiSteamFarm.Library" />-->
|
||||
<PackageReference Include="Ae.DNS.Client" />
|
||||
<!--<PackageReference Include="Ae.Dns.Protocol" />-->
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
|
||||
<PackageReference Include="JustArchiNET.Madness" />
|
||||
|
||||
@@ -12,9 +12,16 @@ namespace System.Application.Services
|
||||
/// </summary>
|
||||
public interface IDnsAnalysisService
|
||||
{
|
||||
protected const string TAG = "DnsAnalysisService";
|
||||
|
||||
static IDnsAnalysisService Instance => DI.Get<IDnsAnalysisService>();
|
||||
|
||||
#region DNS常量
|
||||
const string DNS_Ali_DohAddres = "https://dns.alidns.com";
|
||||
const string Dnspod_DohAddres = "https://1.12.12.12";
|
||||
const string Google_DohAddres = "https://dns.google";
|
||||
const string Cloudflare_DohAddres = "https://cloudflare-dns.com";
|
||||
|
||||
protected const string PrimaryDNS_IPV6_Ali = "2400:3200::1";
|
||||
|
||||
const string PrimaryDNS_Ali = "223.5.5.5";
|
||||
@@ -66,7 +73,7 @@ namespace System.Application.Services
|
||||
return r.RoundtripTime;
|
||||
}
|
||||
|
||||
int AnalysisHostnameTime(string url);
|
||||
Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
@@ -119,6 +126,19 @@ namespace System.Application.Services
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DOH 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
|
||||
/// <param name="isIPv6"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
IAsyncEnumerable<IPAddress>? DohAnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
async Task<string?> GetHostByIPAddress(IPAddress ip)
|
||||
{
|
||||
var hostEntry = await Dns.GetHostEntryAsync(ip);
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System.Application.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// DNS 解析服务
|
||||
/// </summary>
|
||||
public interface IDnsDohAnalysisService
|
||||
{
|
||||
protected const string TAG = "DnsDohAnalysisService";
|
||||
|
||||
static IDnsDohAnalysisService Instance => DI.Get<IDnsDohAnalysisService>();
|
||||
|
||||
#region DNS常量
|
||||
const string DNS_Ali_DohAddres = "https://dns.alidns.com/dns-query";
|
||||
|
||||
const string Dnspod_DohAddres = "https://1.12.12.12/dns-query";
|
||||
|
||||
const string Google_DohAddres = "https://dns.google/dns-query";
|
||||
|
||||
const string Cloudflare_DohAddres = "https://cloudflare-dns.com/dns-query";
|
||||
#endregion
|
||||
|
||||
protected const string IPV6_TESTDOMAIN = "ipv6.rmbgame.net";
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="isIPv6"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, bool isIPv6, CancellationToken cancellationToken = default)
|
||||
=> AnalysisDomainIpAsync(hostNameOrAddress, default, isIPv6, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, CancellationToken cancellationToken = default)
|
||||
=> AnalysisDomainIpAsync(hostNameOrAddress, default, default, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, CancellationToken cancellationToken = default)
|
||||
=> AnalysisDomainIpAsync(hostNameOrAddress, dnsServers, default, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
|
||||
/// <param name="isIPv6"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, CancellationToken cancellationToken = default);
|
||||
|
||||
Task<bool> GetIsIpv6Support() => Task.FromResult(false);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Application.Models;
|
||||
using System.Application.Settings;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
@@ -55,6 +56,11 @@ namespace System.Application.Services
|
||||
/// <param name="arguments"></param>
|
||||
void StartSteam(string? arguments = null);
|
||||
|
||||
/// <summary>
|
||||
/// 使用配置的参数启动 Steam
|
||||
/// </summary>
|
||||
void StartSteamWithParameter() => StartSteam(SteamSettings.SteamStratParameter.Value);
|
||||
|
||||
/// <summary>
|
||||
/// 安全退出 Steam(如果有修改Steam数据的操作请退出后在执行不然Steam安全退出会还原修改)
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using Ae.Dns.Client;
|
||||
using Ae.Dns.Protocol;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Ae.Dns.Protocol.Records;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System.Application.Services;
|
||||
|
||||
public sealed class DnsDohAnalysisService : GeneralHttpClientFactory, IDnsAnalysisService
|
||||
{
|
||||
public DnsDohAnalysisService(
|
||||
ILoggerFactory loggerFactory,
|
||||
IHttpPlatformHelperService http_helper,
|
||||
IHttpClientFactory clientFactory)
|
||||
: base(loggerFactory.CreateLogger(IDnsAnalysisService.TAG), http_helper, clientFactory)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
var client = CreateClient();
|
||||
client.BaseAddress = new Uri(IDnsAnalysisService.Dnspod_DohAddres);
|
||||
IDnsClient dnsClient = new DnsHttpClient(client);
|
||||
|
||||
var queryType = Ae.Dns.Protocol.Enums.DnsQueryType.A;
|
||||
var query = DnsQueryFactory.CreateQuery(url, queryType);
|
||||
|
||||
var answer = await dnsClient.Query(query, cancellationToken);
|
||||
var value = answer.Answers.FirstOrDefault()?.TimeToLive;
|
||||
return (int)(value ?? 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="isIPv6"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, bool isIPv6, CancellationToken cancellationToken = default)
|
||||
=> DohAnalysisDomainIpAsync(hostNameOrAddress, default, isIPv6, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, CancellationToken cancellationToken = default)
|
||||
=> DohAnalysisDomainIpAsync(hostNameOrAddress, default, default, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, CancellationToken cancellationToken = default)
|
||||
=> DohAnalysisDomainIpAsync(hostNameOrAddress, dnsServers, default, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// DOH 解析域名 IP 地址
|
||||
/// </summary>
|
||||
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
|
||||
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
|
||||
/// <param name="isIPv6"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public async IAsyncEnumerable<IPAddress> DohAnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, [EnumeratorCancellation] CancellationToken cancellationToken = default)
|
||||
{
|
||||
var client = CreateClient();
|
||||
client.BaseAddress = new Uri(string.IsNullOrEmpty(dnsServers) ? IDnsAnalysisService.Dnspod_DohAddres : dnsServers);
|
||||
IDnsClient dnsClient = new DnsHttpClient(client);
|
||||
|
||||
var queryType = isIPv6 ? Ae.Dns.Protocol.Enums.DnsQueryType.AAAA : Ae.Dns.Protocol.Enums.DnsQueryType.A;
|
||||
var query = DnsQueryFactory.CreateQuery(hostNameOrAddress, queryType);
|
||||
|
||||
var answer = await dnsClient.Query(query, cancellationToken);
|
||||
|
||||
foreach (var x in answer.Answers)
|
||||
{
|
||||
if (x.Resource is DnsIpAddressResource ipAddressResource)
|
||||
{
|
||||
yield return ipAddressResource.IPAddress;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Application.Models;
|
||||
using System.Application.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
@@ -66,8 +66,7 @@ namespace System.Application.Services.Implementation
|
||||
url += "&dimensions=600x900";
|
||||
}
|
||||
|
||||
var rsp = await s.SendAsync<SteamGridItemData>
|
||||
(url, () =>
|
||||
var rsp = await s.SendAsync<SteamGridItemData>(url, () =>
|
||||
{
|
||||
var rq = new HttpRequestMessage(HttpMethod.Get, url);
|
||||
rq.Headers.Authorization = new Net.Http.Headers.AuthenticationHeaderValue("Bearer", ApiKey);
|
||||
|
||||
@@ -246,7 +246,7 @@ namespace System.Application.Services
|
||||
public void Initialize()
|
||||
{
|
||||
if (!stmService.IsRunningSteamProcess && SteamSettings.IsAutoRunSteam.Value)
|
||||
stmService.StartSteam(SteamSettings.SteamStratParameter.Value);
|
||||
stmService.StartSteamWithParameter();
|
||||
|
||||
Task.Factory.StartNew(async () =>
|
||||
{
|
||||
@@ -447,7 +447,7 @@ namespace System.Application.Services
|
||||
IsDisposedClient = false;
|
||||
SteamApps.Clear();
|
||||
var apps = await ISteamService.Instance.GetAppInfos();
|
||||
if (apps.Any())
|
||||
if (apps != null)
|
||||
{
|
||||
var temps = swLocalService.OwnsApps(apps);
|
||||
LoadGames(temps);
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace System.Application.UI.ViewModels
|
||||
steamService.SetCurrentUser(string.Empty);
|
||||
}
|
||||
|
||||
steamService.StartSteam(SteamSettings.SteamStratParameter.Value);
|
||||
steamService.StartSteamWithParameter();
|
||||
}
|
||||
|
||||
public async void DeleteUserButton_Click(SteamUser user)
|
||||
|
||||
@@ -47,12 +47,13 @@ namespace System.Application.UI.ViewModels
|
||||
|
||||
public async Task SaveSteamEditedApps()
|
||||
{
|
||||
if (await ISteamService.Instance.SaveAppInfosToSteam())
|
||||
var stmService = ISteamService.Instance;
|
||||
if (await stmService.SaveAppInfosToSteam())
|
||||
{
|
||||
if (await MessageBox.ShowAsync(AppResources.SaveEditedAppInfo_RestartSteamTip, ThisAssembly.AssemblyTrademark, MessageBox.Button.OKCancel) == MessageBox.Result.OK)
|
||||
{
|
||||
await ISteamService.Instance.ShutdownSteamAsync();
|
||||
ISteamService.Instance.StartSteam();
|
||||
await stmService.ShutdownSteamAsync();
|
||||
stmService.StartSteamWithParameter();
|
||||
}
|
||||
Toast.Show(AppResources.SaveEditedAppInfo_SaveToSteamSuccess);
|
||||
}
|
||||
|
||||
@@ -277,7 +277,7 @@ namespace System.Application.UI.ViewModels
|
||||
|
||||
private bool _IsLogining;
|
||||
|
||||
public void LoginSteamImport()
|
||||
public async void LoginSteamImport()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(UserName))
|
||||
{
|
||||
@@ -300,8 +300,7 @@ namespace System.Application.UI.ViewModels
|
||||
|
||||
_Enroll.Language = R.GetCurrentCultureSteamLanguageName();
|
||||
|
||||
bool result = false;
|
||||
Task.Run(() =>
|
||||
try
|
||||
{
|
||||
var isSupportedToastService = ToastService.IsSupported;
|
||||
if (isSupportedToastService)
|
||||
@@ -309,7 +308,7 @@ namespace System.Application.UI.ViewModels
|
||||
ToastService.Current.Set(AppResources.Logining);
|
||||
}
|
||||
LoginSteamLoadingText = AppResources.Logining;
|
||||
result = _SteamAuthenticator.Enroll(_Enroll);
|
||||
var result = await _SteamAuthenticator.Enroll(_Enroll);
|
||||
if (isSupportedToastService)
|
||||
{
|
||||
ToastService.Current.Set();
|
||||
@@ -393,11 +392,13 @@ namespace System.Application.UI.ViewModels
|
||||
|
||||
Toast.Show(AppResources.LocalAuth_SteamUserImportSuccess);
|
||||
}
|
||||
}).ContinueWith(s =>
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(nameof(AddAuthWindowViewModel), s.Exception, nameof(LoginSteamImport));
|
||||
MessageBox.Show(s.Exception, "Error " + nameof(LoginSteamImport));
|
||||
}, TaskContinuationOptions.OnlyOnFaulted).ContinueWith(s =>
|
||||
Log.Error(nameof(AddAuthWindowViewModel), ex, nameof(LoginSteamImport));
|
||||
MessageBox.Show(ex, "Error " + nameof(LoginSteamImport));
|
||||
}
|
||||
finally
|
||||
{
|
||||
_IsLogining = false;
|
||||
if (ToastService.IsSupported)
|
||||
@@ -405,8 +406,18 @@ namespace System.Application.UI.ViewModels
|
||||
ToastService.Current.Set();
|
||||
}
|
||||
LoginSteamLoadingText = null;
|
||||
s.Dispose();
|
||||
});
|
||||
}
|
||||
//Task.Run(() =>
|
||||
//{
|
||||
|
||||
//}).ContinueWith(s =>
|
||||
//{
|
||||
|
||||
//}, TaskContinuationOptions.OnlyOnFaulted).ContinueWith(s =>
|
||||
//{
|
||||
|
||||
//s.Dispose();
|
||||
//});
|
||||
}
|
||||
|
||||
public void ImportWinAuth(string filePath)
|
||||
|
||||
@@ -173,7 +173,7 @@ namespace System.Application.UI.ViewModels
|
||||
var index = item.Index;
|
||||
if (up ? item.Index != 0 : item.Index != _AuthorizedSourceList.Count - 1)
|
||||
{
|
||||
var dest = AuthorizedList[(up ? index - 1 : index + 1)];
|
||||
var dest = AuthorizedList[up ? index - 1 : index + 1];
|
||||
|
||||
item.Index = dest.Index;
|
||||
dest.Index = index;
|
||||
@@ -198,7 +198,7 @@ namespace System.Application.UI.ViewModels
|
||||
if (result.IsOK())
|
||||
{
|
||||
steamService.TryKillSteamProcess();
|
||||
steamService.StartSteam();
|
||||
steamService.StartSteamWithParameter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+26
-30
@@ -241,7 +241,7 @@ namespace System.Application.Models
|
||||
/// <param name="data">Name-data pairs</param>
|
||||
/// <param name="cookies">current cookie container</param>
|
||||
/// <returns>response body</returns>
|
||||
static string Request(string url, string method, NameValueCollection? data = null, CookieContainer? cookies = null, NameValueCollection? headers = null, int timeout = 0)
|
||||
static async Task<string> Request(string url, string method, NameValueCollection? data = null, CookieContainer? cookies = null, NameValueCollection? headers = null, int timeout = 0)
|
||||
{
|
||||
// create form-encoded data for query or body
|
||||
string query = data == null ? string.Empty : string.Join("&", Array.ConvertAll(data.AllKeys, key => string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(data[key]))));
|
||||
@@ -281,31 +281,27 @@ namespace System.Application.Models
|
||||
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
|
||||
request.ContentLength = query.Length;
|
||||
|
||||
StreamWriter requestStream = new StreamWriter(request.GetRequestStream());
|
||||
using StreamWriter requestStream = new StreamWriter(await request.GetRequestStreamAsync());
|
||||
requestStream.Write(query);
|
||||
requestStream.Close();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
|
||||
using HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
|
||||
LogRequest(method, url, cookies, data, response.StatusCode.ToString() + " " + response.StatusDescription);
|
||||
|
||||
// OK?
|
||||
if (response.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
LogRequest(method, url, cookies, data, response.StatusCode.ToString() + " " + response.StatusDescription);
|
||||
|
||||
// OK?
|
||||
if (response.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
throw new WinAuthInvalidRequestException(string.Format("{0}: {1}", (int)response.StatusCode, response.StatusDescription));
|
||||
}
|
||||
|
||||
// load the response
|
||||
using (StreamReader responseStream = new StreamReader(response.GetResponseStream()))
|
||||
{
|
||||
string responseData = responseStream.ReadToEnd();
|
||||
LogRequest(method, url, cookies, data, responseData);
|
||||
return responseData;
|
||||
}
|
||||
throw new WinAuthInvalidRequestException(string.Format("{0}: {1}", (int)response.StatusCode, response.StatusDescription));
|
||||
}
|
||||
|
||||
// load the response
|
||||
using StreamReader responseStream = new StreamReader(response.GetResponseStream());
|
||||
string responseData = responseStream.ReadToEnd();
|
||||
LogRequest(method, url, cookies, data, responseData);
|
||||
return responseData;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -329,7 +325,7 @@ namespace System.Application.Models
|
||||
/// <summary>
|
||||
/// Enroll the authenticator with the server
|
||||
/// </summary>
|
||||
public bool Enroll(EnrollState state)
|
||||
public async Task<bool> Enroll(EnrollState state)
|
||||
{
|
||||
// clear error
|
||||
state.Error = null;
|
||||
@@ -357,7 +353,7 @@ namespace System.Application.Models
|
||||
{ "X-Requested-With", "com.valvesoftware.android.steam.community" },
|
||||
};
|
||||
|
||||
response = Request("https://steamcommunity.com/login?oauth_client_id=DE45CD61&oauth_scope=read_profile%20write_profile%20read_client%20write_client", "GET", null, cookies, headers);
|
||||
response = await Request("https://steamcommunity.com/login?oauth_client_id=DE45CD61&oauth_scope=read_profile%20write_profile%20read_client%20write_client", "GET", null, cookies, headers);
|
||||
}
|
||||
|
||||
// Steam strips any non-ascii chars from username and password
|
||||
@@ -367,7 +363,7 @@ namespace System.Application.Models
|
||||
// get the user's RSA key
|
||||
data.Add("donotache", donotache_value);
|
||||
data.Add("username", state.Username);
|
||||
response = Request(COMMUNITY_BASE + "/login/getrsakey", "POST", data, cookies);
|
||||
response = await Request(COMMUNITY_BASE + "/login/getrsakey", "POST", data, cookies);
|
||||
var rsaresponse = JObject.Parse(response);
|
||||
if (rsaresponse.SelectToken("success")?.Value<bool>() != true)
|
||||
{
|
||||
@@ -406,7 +402,7 @@ namespace System.Application.Models
|
||||
{ "donotache", donotache_value },
|
||||
};
|
||||
const string url_login_dologin = "/login/dologin/";
|
||||
response = Request(COMMUNITY_BASE + url_login_dologin, "POST", data, cookies);
|
||||
response = await Request(COMMUNITY_BASE + url_login_dologin, "POST", data, cookies);
|
||||
var loginresponse = JsonConvert.DeserializeObject<Dictionary<string, object>>(response);
|
||||
if (loginresponse == null)
|
||||
{
|
||||
@@ -452,7 +448,7 @@ namespace System.Application.Models
|
||||
state.RequiresEmailAuth = false;
|
||||
}
|
||||
|
||||
// require email auth
|
||||
// require 2fa auth
|
||||
if (loginresponse.ContainsKey("requires_twofactor") == true && (bool)loginresponse["requires_twofactor"] == true)
|
||||
{
|
||||
state.Requires2FA = true;
|
||||
@@ -489,7 +485,7 @@ namespace System.Application.Models
|
||||
// login to webapi
|
||||
data.Clear();
|
||||
data.Add("access_token", state.OAuthToken);
|
||||
response = Request(WEBAPI_BASE + "/ISteamWebUserPresenceOAuth/Logon/v0001", "POST", data);
|
||||
response = await Request(WEBAPI_BASE + "/ISteamWebUserPresenceOAuth/Logon/v0001", "POST", data);
|
||||
|
||||
var sessionid = cookies.GetCookies(new Uri(COMMUNITY_BASE + "/"))?["sessionid"]?.Value;
|
||||
|
||||
@@ -500,7 +496,7 @@ namespace System.Application.Models
|
||||
data.Add("arg", "null");
|
||||
data.Add("sessionid", sessionid);
|
||||
|
||||
response = Request(COMMUNITY_BASE + "/steamguard/phoneajax", "POST", data, cookies);
|
||||
response = await Request(COMMUNITY_BASE + "/steamguard/phoneajax", "POST", data, cookies);
|
||||
var jsonresponse = JObject.Parse(response);
|
||||
var hasPhone = SelectTokenValueNotNull<bool>(response, jsonresponse, "has_phone");
|
||||
if (hasPhone == false)
|
||||
@@ -523,7 +519,7 @@ namespace System.Application.Models
|
||||
data.Add("device_identifier", deviceId);
|
||||
data.Add("sms_phone_id", "1");
|
||||
const string url_ITwoFactorService_AddAuthenticator_v0001 = "/ITwoFactorService/AddAuthenticator/v0001";
|
||||
response = Request(WEBAPI_BASE + url_ITwoFactorService_AddAuthenticator_v0001, "POST", data);
|
||||
response = await Request(WEBAPI_BASE + url_ITwoFactorService_AddAuthenticator_v0001, "POST", data);
|
||||
var tfaresponse = JObject.Parse(response);
|
||||
if (response.IndexOf("status") == -1 && SelectTokenValueNotNull<int>(response, tfaresponse, "response.status") == 84)
|
||||
{
|
||||
@@ -585,7 +581,7 @@ namespace System.Application.Models
|
||||
{
|
||||
data.Add("authenticator_code", CalculateCode(false));
|
||||
data.Add("authenticator_time", ServerTime.ToString());
|
||||
response = Request(WEBAPI_BASE + "/ITwoFactorService/FinalizeAddAuthenticator/v0001", "POST", data);
|
||||
response = await Request(WEBAPI_BASE + "/ITwoFactorService/FinalizeAddAuthenticator/v0001", "POST", data);
|
||||
var finalizeresponse = JObject.Parse(response);
|
||||
if (response.IndexOf("status") != -1 && SelectTokenValueNotNull<int>(response, finalizeresponse, "response.status") == INVALID_ACTIVATION_CODE)
|
||||
{
|
||||
@@ -632,7 +628,7 @@ namespace System.Application.Models
|
||||
data.Add("access_token", state.OAuthToken);
|
||||
data.Add("steamid", state.SteamId);
|
||||
data.Add("email_type", "2");
|
||||
response = Request(WEBAPI_BASE + "/ITwoFactorService/SendEmail/v0001", "POST", data);
|
||||
response = await Request(WEBAPI_BASE + "/ITwoFactorService/SendEmail/v0001", "POST", data);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -657,7 +653,7 @@ namespace System.Application.Models
|
||||
/// <summary>
|
||||
/// Synchronise this authenticator's time with Steam.
|
||||
/// </summary>
|
||||
public override void Sync()
|
||||
public override async void Sync()
|
||||
{
|
||||
// check if data is protected
|
||||
if (SecretKey == null && EncryptedData != null)
|
||||
@@ -673,7 +669,7 @@ namespace System.Application.Models
|
||||
|
||||
try
|
||||
{
|
||||
var response = Request(SYNC_URL, "POST", null, null, null, SYNC_TIMEOUT);
|
||||
var response = await Request(SYNC_URL, "POST", null, null, null, SYNC_TIMEOUT);
|
||||
var json = JObject.Parse(response);
|
||||
|
||||
// get servertime in ms
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace System.Application.Steps
|
||||
if (rsp.StatusCode == HttpStatusCode.InternalServerError)
|
||||
{
|
||||
var html = await rsp.Content.ReadAsStringAsync();
|
||||
throw new HttpRequestException(html);
|
||||
Console.WriteLine(html);
|
||||
}
|
||||
rsp.EnsureSuccessStatusCode();
|
||||
var apiResponse = await GetResponseAsync<AppIdWithPublicKey>(rsp);
|
||||
@@ -529,7 +529,7 @@ namespace System.Application.Steps
|
||||
}
|
||||
|
||||
const string dev_api_base_url = "https://pan.mossimo.net:9911";
|
||||
const string api_base_url = "https://cycyadmin.steampp.net";
|
||||
const string api_base_url = "https://cycyadmin.steampp.net:11002";
|
||||
const string api_version_create = "/api/version";
|
||||
|
||||
static string GetFullVersion(bool dev)
|
||||
|
||||
Generated
+1
-1
@@ -1,4 +1,4 @@
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
|
||||
Reference in New Issue
Block a user