fix: url test rule

This commit is contained in:
arm64v8a
2022-12-06 10:57:25 +09:00
parent a94234e699
commit 8d348e02c5
3 changed files with 66 additions and 75 deletions

View File

@@ -72,8 +72,6 @@ namespace NekoRay {
return chainTagOut; return chainTagOut;
} }
// V2Ray
void ApplyCustomOutboundJsonSettings(const QJsonObject &custom, QJsonObject &outbound) { void ApplyCustomOutboundJsonSettings(const QJsonObject &custom, QJsonObject &outbound) {
// 合并 // 合并
if (custom.isEmpty()) return; if (custom.isEmpty()) return;
@@ -95,6 +93,38 @@ namespace NekoRay {
} }
} }
#define DOMAIN_USER_RULE \
for (const auto &line: SplitLines(dataStore->routing->proxy_domain)) { \
if (line.startsWith("#")) continue; \
if (dataStore->dns_routing) status->domainListDNSRemote += line; \
status->domainListRemote += line; \
} \
for (const auto &line: SplitLines(dataStore->routing->direct_domain)) { \
if (line.startsWith("#")) continue; \
if (dataStore->dns_routing) status->domainListDNSDirect += line; \
status->domainListDirect += line; \
} \
for (const auto &line: SplitLines(dataStore->routing->block_domain)) { \
if (line.startsWith("#")) continue; \
status->domainListBlock += line; \
}
#define IP_USER_RULE \
for (const auto &line: SplitLines(dataStore->routing->block_ip)) { \
if (line.startsWith("#")) continue; \
status->ipListBlock += line; \
} \
for (const auto &line: SplitLines(dataStore->routing->proxy_ip)) { \
if (line.startsWith("#")) continue; \
status->ipListRemote += line; \
} \
for (const auto &line: SplitLines(dataStore->routing->direct_ip)) { \
if (line.startsWith("#")) continue; \
status->ipListDirect += line; \
}
// V2Ray
QSharedPointer<BuildConfigResult> BuildConfigV2Ray(const QSharedPointer<ProxyEntity> &ent, bool forTest, bool forExport) { QSharedPointer<BuildConfigResult> BuildConfigV2Ray(const QSharedPointer<ProxyEntity> &ent, bool forTest, bool forExport) {
auto result = QSharedPointer<BuildConfigResult>(new BuildConfigResult); auto result = QSharedPointer<BuildConfigResult>(new BuildConfigResult);
auto status = QSharedPointer<BuildConfigStatus>(new BuildConfigStatus); auto status = QSharedPointer<BuildConfigStatus>(new BuildConfigStatus);
@@ -215,20 +245,10 @@ namespace NekoRay {
result->coreConfig.insert("inbounds", status->inbounds); result->coreConfig.insert("inbounds", status->inbounds);
result->coreConfig.insert("outbounds", status->outbounds); result->coreConfig.insert("outbounds", status->outbounds);
// dns domain user rule // user rule
for (const auto &line: SplitLines(dataStore->routing->proxy_domain)) { if (!forTest) {
if (line.startsWith("#")) continue; DOMAIN_USER_RULE
if (dataStore->dns_routing) status->domainListDNSRemote += line; IP_USER_RULE
status->domainListRemote += line;
}
for (const auto &line: SplitLines(dataStore->routing->direct_domain)) {
if (line.startsWith("#")) continue;
if (dataStore->dns_routing) status->domainListDNSDirect += line;
status->domainListDirect += line;
}
for (const auto &line: SplitLines(dataStore->routing->block_domain)) {
if (line.startsWith("#")) continue;
status->domainListBlock += line;
} }
// final add DNS // final add DNS
@@ -281,17 +301,10 @@ namespace NekoRay {
routing["domainStrategy"] = dataStore->domain_strategy; routing["domainStrategy"] = dataStore->domain_strategy;
routing["domainMatcher"] = dataStore->domain_matcher == DomainMatcher::MPH ? "mph" : "linear"; routing["domainMatcher"] = dataStore->domain_matcher == DomainMatcher::MPH ? "mph" : "linear";
// ip user rule // final add block route
QJsonObject routingRule_tmp; QJsonObject routingRule_tmp;
routingRule_tmp["type"] = "field"; routingRule_tmp["type"] = "field";
// block
routingRule_tmp["outboundTag"] = "block"; routingRule_tmp["outboundTag"] = "block";
for (const auto &line: SplitLines(dataStore->routing->block_ip)) {
if (line.startsWith("#")) continue;
status->ipListBlock += line;
}
// final add block route
if (!status->ipListBlock.isEmpty()) { if (!status->ipListBlock.isEmpty()) {
auto tmp = routingRule_tmp; auto tmp = routingRule_tmp;
tmp["ip"] = status->ipListBlock; tmp["ip"] = status->ipListBlock;
@@ -303,13 +316,8 @@ namespace NekoRay {
status->routingRules += tmp; status->routingRules += tmp;
} }
// proxy
routingRule_tmp["outboundTag"] = tagProxy;
for (const auto &line: SplitLines(dataStore->routing->proxy_ip)) {
if (line.startsWith("#")) continue;
status->ipListRemote += line;
}
// final add proxy route // final add proxy route
routingRule_tmp["outboundTag"] = "proxy";
if (!status->ipListRemote.isEmpty()) { if (!status->ipListRemote.isEmpty()) {
auto tmp = routingRule_tmp; auto tmp = routingRule_tmp;
tmp["ip"] = status->ipListRemote; tmp["ip"] = status->ipListRemote;
@@ -321,13 +329,8 @@ namespace NekoRay {
status->routingRules += tmp; status->routingRules += tmp;
} }
// bypass
routingRule_tmp["outboundTag"] = "bypass";
for (const auto &line: SplitLines(dataStore->routing->direct_ip)) {
if (line.startsWith("#")) continue;
status->ipListDirect += line;
}
// final add bypass route // final add bypass route
routingRule_tmp["outboundTag"] = "bypass";
if (!status->ipListDirect.isEmpty()) { if (!status->ipListDirect.isEmpty()) {
auto tmp = routingRule_tmp; auto tmp = routingRule_tmp;
tmp["ip"] = status->ipListDirect; tmp["ip"] = status->ipListDirect;
@@ -655,10 +658,12 @@ namespace NekoRay {
{"type", "block"}, {"type", "block"},
{"tag", "block"}, {"tag", "block"},
}; };
if (!forTest) {
status->outbounds += QJsonObject{ status->outbounds += QJsonObject{
{"type", "dns"}, {"type", "dns"},
{"tag", "dns-out"}, {"tag", "dns-out"},
}; };
}
// custom inbound // custom inbound
QJSONARRAY_ADD(status->inbounds, QString2QJsonObject(dataStore->custom_inbound)["inbounds"].toArray()) QJSONARRAY_ADD(status->inbounds, QString2QJsonObject(dataStore->custom_inbound)["inbounds"].toArray())
@@ -666,23 +671,13 @@ namespace NekoRay {
result->coreConfig.insert("inbounds", status->inbounds); result->coreConfig.insert("inbounds", status->inbounds);
result->coreConfig.insert("outbounds", status->outbounds); result->coreConfig.insert("outbounds", status->outbounds);
// dns domain user rule // user rule
for (const auto &line: SplitLines(dataStore->routing->proxy_domain)) { if (!forTest) {
if (line.startsWith("#")) continue; DOMAIN_USER_RULE
status->domainListDNSRemote += line; IP_USER_RULE
status->domainListRemote += line;
}
for (const auto &line: SplitLines(dataStore->routing->direct_domain)) {
if (line.startsWith("#")) continue;
status->domainListDNSDirect += line;
status->domainListDirect += line;
}
for (const auto &line: SplitLines(dataStore->routing->block_domain)) {
if (line.startsWith("#")) continue;
status->domainListBlock += line;
} }
// // sing-box common rule object
auto make_rule = [&](const QJsonArray &arr, bool isIP = false) { auto make_rule = [&](const QJsonArray &arr, bool isIP = false) {
QJsonObject rule; QJsonObject rule;
QJsonArray ips; QJsonArray ips;
@@ -763,7 +758,7 @@ namespace NekoRay {
{"detour", "direct"}, {"detour", "direct"},
}; };
// DNS rules // sing-box dns rule object
auto add_rule_dns = [&](const QJsonArray &arr, const QString &server) { auto add_rule_dns = [&](const QJsonArray &arr, const QString &server) {
auto rule = make_rule(arr, false); auto rule = make_rule(arr, false);
if (rule.isEmpty()) return; if (rule.isEmpty()) return;
@@ -784,9 +779,9 @@ namespace NekoRay {
auto routingRules = QString2QJsonObject(dataStore->routing->custom)["rules"].toArray(); auto routingRules = QString2QJsonObject(dataStore->routing->custom)["rules"].toArray();
// dns hijack // dns hijack
routingRules += QJsonObject{{"protocol", "dns"}, if (!forTest) routingRules += QJsonObject{{"protocol", "dns"}, {"outbound", "dns-out"}};
{"outbound", "dns-out"}};
// sing-box routing rule object
auto add_rule_route = [&](const QJsonArray &arr, bool isIP, const QString &out) { auto add_rule_route = [&](const QJsonArray &arr, bool isIP, const QString &out) {
auto rule = make_rule(arr, isIP); auto rule = make_rule(arr, isIP);
if (rule.isEmpty()) return; if (rule.isEmpty()) return;
@@ -794,24 +789,10 @@ namespace NekoRay {
routingRules += rule; routingRules += rule;
}; };
// ip user rule // final add routing rule
for (const auto &line: SplitLines(dataStore->routing->block_ip)) {
if (line.startsWith("#")) continue;
status->ipListBlock += line;
}
for (const auto &line: SplitLines(dataStore->routing->proxy_ip)) {
if (line.startsWith("#")) continue;
status->ipListRemote += line;
}
for (const auto &line: SplitLines(dataStore->routing->direct_ip)) {
if (line.startsWith("#")) continue;
status->ipListDirect += line;
}
add_rule_route(status->ipListBlock, true, "block"); add_rule_route(status->ipListBlock, true, "block");
add_rule_route(status->ipListRemote, true, tagProxy); add_rule_route(status->ipListRemote, true, tagProxy);
add_rule_route(status->ipListDirect, true, "bypass"); add_rule_route(status->ipListDirect, true, "bypass");
// domain user rule
add_rule_route(status->domainListBlock, false, "block"); add_rule_route(status->domainListBlock, false, "block");
add_rule_route(status->domainListRemote, false, tagProxy); add_rule_route(status->domainListRemote, false, tagProxy);
add_rule_route(status->domainListDirect, false, "bypass"); add_rule_route(status->domainListDirect, false, "bypass");

View File

@@ -40,7 +40,11 @@ func main() {
// 1. update files // 1. update files
Updater() Updater()
// 2. start // 2. start
if os.Getenv("NKR_FROM_LAUNCHER") == "1" {
Launcher() Launcher()
} else {
exec.Command("./nekoray").Start()
}
} }
return return
} else if strings.HasPrefix(strings.ToLower(exe), "launcher") { } else if strings.HasPrefix(strings.ToLower(exe), "launcher") {

View File

@@ -558,7 +558,7 @@ void MainWindow::on_menu_exit_triggered() {
QProcess::startDetached("./updater", QStringList{}); QProcess::startDetached("./updater", QStringList{});
} else if (exit_reason == 2) { } else if (exit_reason == 2) {
QDir::setCurrent(QApplication::applicationDirPath()); QDir::setCurrent(QApplication::applicationDirPath());
QProcess::startDetached("./nekoray", QStringList{}); QProcess::startDetached(qEnvironmentVariable("NKR_FROM_LAUNCHER") == "1" ? "./launcher" : "./nekoray", QStringList{});
} }
tray->hide(); tray->hide();
QCoreApplication::quit(); QCoreApplication::quit();
@@ -1013,13 +1013,19 @@ void MainWindow::on_menu_export_config_triggered() {
QMessageBox msg(QMessageBox::Information, tr("Config copied"), config_core); QMessageBox msg(QMessageBox::Information, tr("Config copied"), config_core);
msg.addButton("Copy core config", QMessageBox::YesRole); msg.addButton("Copy core config", QMessageBox::YesRole);
msg.addButton("Copy test config", QMessageBox::YesRole);
msg.addButton(QMessageBox::Ok); msg.addButton(QMessageBox::Ok);
msg.setEscapeButton(QMessageBox::Ok);
msg.setDefaultButton(QMessageBox::Ok); msg.setDefaultButton(QMessageBox::Ok);
auto ret = msg.exec(); auto ret = msg.exec();
if (ret == 0) { if (ret == 0) {
result = NekoRay::BuildConfig(ent, false, false); result = NekoRay::BuildConfig(ent, false, false);
config_core = QJsonObject2QString(result->coreConfig, true); config_core = QJsonObject2QString(result->coreConfig, true);
QApplication::clipboard()->setText(config_core); QApplication::clipboard()->setText(config_core);
} else if (ret == 1) {
result = NekoRay::BuildConfig(ent, true, false);
config_core = QJsonObject2QString(result->coreConfig, true);
QApplication::clipboard()->setText(config_core);
} }
} }