1.1.3 -> 1.1.4 第19次更新

This commit is contained in:
Space Time 2024-11-27 21:45:08 +08:00
parent 426596f780
commit 460826b1ee
2 changed files with 29 additions and 25 deletions

View File

@ -256,7 +256,7 @@
<value>浏览器</value>
</data>
<data name="_ConfErrorMsg" xml:space="preserve">
<value>配置文件含有语法错误,配置无法识别</value>
<value>配置文件含有语法错误,部分配置无法识别</value>
</data>
<data name="_GameClickOnceMsg" xml:space="preserve">
<value>就知道你会点,但其实什么事情都不会发生的。嘻嘻</value>
@ -280,7 +280,7 @@
<value>不,求你杀了我,我...控制不住了...</value>
</data>
<data name="_HostErrorPrompt" xml:space="preserve">
<value>伪造规则含有语法错误,部分规则无法识别,是否仍然继续?</value>
<value>伪造规则含有语法错误,部分规则无法识别,是否仍然继续?</value>
</data>
<data name="_KillBrowserProcessPrompt" xml:space="preserve">
<value>启动前将关闭所选浏览器的所有进程,是否继续?</value>
@ -295,7 +295,7 @@
<value>本地 80 端口被占用,这可能导致 http 连接无法自动跳转到 https是否继续?</value>
</data>
<data name="_NginxHttpsPortOccupiedPrompt" xml:space="preserve">
<value>本地 443 端口被占用,这可能导致全局伪造无法正常生效,是否继续?</value>
<value>本地 443 端口被占用,这可能导致全局伪造无法正常工作,是否继续?</value>
</data>
<data name="_OverrideUpstreamHostPrompt" xml:space="preserve">
<value>上游规则有更新可用,需要更新吗?否则只为你打开上游规则网页</value>

View File

@ -47,8 +47,6 @@ public partial class MainWin : Window
private static string? MihomoConfs;
private static string? ExtraMihomoConfs;
private static bool IsCealHostError = false;
private static int NginxHttpPort = 80;
private static int NginxHttpsPort = 443;
private static int MihomoMixedPort = 7880;
@ -158,7 +156,7 @@ public partial class MainWin : Window
{
HoldButtonTimer?.Stop();
if ((IsCealHostError && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
if ((CealHostRulesDict.ContainsValue(null!) && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
(MessageBox.Show(MainConst._KillBrowserProcessPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes))
return;
@ -190,7 +188,7 @@ public partial class MainWin : Window
if (!MainPres!.IsNginxRunning)
{
if ((IsCealHostError && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
if ((CealHostRulesDict.ContainsValue(null!) && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
(NginxHttpPort != 80 && MessageBox.Show(MainConst._NginxHttpPortOccupiedPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
(NginxHttpsPort != 443 && MessageBox.Show(MainConst._NginxHttpsPortOccupiedPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
(MessageBox.Show(MainConst._LaunchProxyPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) ||
@ -366,12 +364,21 @@ public partial class MainWin : Window
private void EditConfButton_Click(object sender, RoutedEventArgs e)
{
Button? senderButton = sender as Button;
string confPath;
string confPath = senderButton == EditHostsConfButton ? MainConst.HostsConfPath :
senderButton == EditNginxConfButton ? MainConst.NginxConfPath : MainConst.MihomoConfPath;
if (senderButton == EditHostsConfButton)
{
confPath = MainConst.HostsConfPath;
if (!File.Exists(confPath))
File.Create(confPath).Dispose();
File.SetAttributes(MainConst.HostsConfPath, File.GetAttributes(MainConst.HostsConfPath) & ~FileAttributes.ReadOnly);
}
else
{
confPath = senderButton == EditNginxConfButton ? MainConst.NginxConfPath : MainConst.MihomoConfPath;
if (!File.Exists(confPath))
File.Create(confPath).Dispose();
}
ProcessStartInfo processStartInfo = new(confPath) { UseShellExecute = true };
Process.Start(processStartInfo);
@ -490,10 +497,12 @@ public partial class MainWin : Window
try
{
CealHostRulesDict[cealHostName] = [];
string cealHostRulesFragments = string.Empty;
string cealHostResolverRulesFragments = string.Empty;
using FileStream cealHostStream = new(e.FullPath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
if (cealHostStream.Length == 0)
return;
JsonDocumentOptions cealHostOptions = new() { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip };
JsonElement cealHostArray = JsonDocument.Parse(cealHostStream, cealHostOptions).RootElement;
@ -517,25 +526,19 @@ public partial class MainWin : Window
if (cealHostDomainPairs.Count != 0)
CealHostRulesDict[cealHostName].Add((cealHostDomainPairs, cealHostSni, cealHostIp));
}
IsCealHostError = false;
}
catch
{
CealHostRulesDict.Remove(cealHostName);
IsCealHostError = true;
}
catch { CealHostRulesDict[cealHostName] = null!; }
finally
{
string hostRules = string.Empty;
string hostResolverRules = string.Empty;
int nullSniNum = 0;
foreach (List<(List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp)> cealHostRules in CealHostRulesDict.Values)
foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules)
foreach (KeyValuePair<string, List<(List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp)>> cealHostRulesPair in CealHostRulesDict)
{
foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRulesPair.Value ?? [])
{
string cealHostSniWithoutNull = cealHostSni ?? $"{cealHostName}{CealHostRulesDict[cealHostName].Count + ++nullSniNum}";
string cealHostSniWithoutNull = cealHostSni ?? $"{cealHostRulesPair.Key}{(cealHostRulesPair.Value ?? []).Count + ++nullSniNum}";
bool isValidCealHostDomainExist = false;
foreach ((string cealHostIncludeDomain, string cealHostExcludeDomain) in cealHostDomainPairs)
@ -550,6 +553,7 @@ public partial class MainWin : Window
if (isValidCealHostDomainExist)
hostResolverRules += $"MAP {cealHostSniWithoutNull} {cealHostIp},";
}
}
CealArgs = @$"--host-rules=""{hostRules.TrimEnd(',')}"" --host-resolver-rules=""{hostResolverRules.TrimEnd(',')}"" --test-type --ignore-certificate-errors";
@ -600,7 +604,7 @@ public partial class MainWin : Window
.AddOrUpdate($"http:server[{serverIndex}]:return", "https://$host$request_uri");
foreach (List<(List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp)> cealHostRules in CealHostRulesDict.Values)
foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules)
foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules ?? [])
{
string serverName = "~";