mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-23 02:00:20 +07:00
added domain name and ipv6 processing when importing awg/wg configs
This commit is contained in:
@@ -106,7 +106,8 @@ ErrorCode ServerController::runContainerScript(const ServerCredentials &credenti
|
|||||||
if (e)
|
if (e)
|
||||||
return e;
|
return e;
|
||||||
|
|
||||||
QString runner = QString("sudo docker exec -i $CONTAINER_NAME %2 %1 ").arg(fileName, (container == DockerContainer::Socks5Proxy ? "sh" : "bash"));
|
QString runner =
|
||||||
|
QString("sudo docker exec -i $CONTAINER_NAME %2 %1 ").arg(fileName, (container == DockerContainer::Socks5Proxy ? "sh" : "bash"));
|
||||||
e = runScript(credentials, replaceVars(runner, genVarsForScript(credentials, container)), cbReadStdOut, cbReadStdErr);
|
e = runScript(credentials, replaceVars(runner, genVarsForScript(credentials, container)), cbReadStdOut, cbReadStdErr);
|
||||||
|
|
||||||
QString remover = QString("sudo docker exec -i $CONTAINER_NAME rm %1 ").arg(fileName);
|
QString remover = QString("sudo docker exec -i $CONTAINER_NAME rm %1 ").arg(fileName);
|
||||||
@@ -437,7 +438,8 @@ ErrorCode ServerController::buildContainerWorker(const ServerCredentials &creden
|
|||||||
return ErrorCode::NoError;
|
return ErrorCode::NoError;
|
||||||
};
|
};
|
||||||
|
|
||||||
errorCode = runScript(credentials,
|
errorCode =
|
||||||
|
runScript(credentials,
|
||||||
replaceVars(amnezia::scriptData(SharedScriptType::build_container), genVarsForScript(credentials, container, config)),
|
replaceVars(amnezia::scriptData(SharedScriptType::build_container), genVarsForScript(credentials, container, config)),
|
||||||
cbReadStdOut);
|
cbReadStdOut);
|
||||||
if (errorCode)
|
if (errorCode)
|
||||||
@@ -626,7 +628,9 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
|
|||||||
vars.append({ { "$SOCKS5_USER", socks5user } });
|
vars.append({ { "$SOCKS5_USER", socks5user } });
|
||||||
vars.append({ { "$SOCKS5_AUTH_TYPE", socks5user.isEmpty() ? "none" : "strong" } });
|
vars.append({ { "$SOCKS5_AUTH_TYPE", socks5user.isEmpty() ? "none" : "strong" } });
|
||||||
|
|
||||||
QString serverIp = NetworkUtilities::getIPAddress(credentials.hostName);
|
QString serverIp = (container != DockerContainer::Awg && container != DockerContainer::WireGuard)
|
||||||
|
? NetworkUtilities::getIPAddress(credentials.hostName)
|
||||||
|
: credentials.hostName;
|
||||||
if (!serverIp.isEmpty()) {
|
if (!serverIp.isEmpty()) {
|
||||||
vars.append({ { "$SERVER_IP_ADDRESS", serverIp } });
|
vars.append({ { "$SERVER_IP_ADDRESS", serverIp } });
|
||||||
} else {
|
} else {
|
||||||
@@ -712,7 +716,8 @@ ErrorCode ServerController::isServerPortBusy(const ServerCredentials &credential
|
|||||||
udpProtoScript.append("' | grep -i udp");
|
udpProtoScript.append("' | grep -i udp");
|
||||||
tcpProtoScript.append(" | grep LISTEN");
|
tcpProtoScript.append(" | grep LISTEN");
|
||||||
|
|
||||||
ErrorCode errorCode = runScript(credentials, replaceVars(tcpProtoScript, genVarsForScript(credentials, container)), cbReadStdOut, cbReadStdErr);
|
ErrorCode errorCode =
|
||||||
|
runScript(credentials, replaceVars(tcpProtoScript, genVarsForScript(credentials, container)), cbReadStdOut, cbReadStdErr);
|
||||||
if (errorCode != ErrorCode::NoError) {
|
if (errorCode != ErrorCode::NoError) {
|
||||||
return errorCode;
|
return errorCode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,10 @@ QStringList NetworkUtilities::summarizeRoutes(const QStringList &ips, const QStr
|
|||||||
|
|
||||||
QString NetworkUtilities::getIPAddress(const QString &host)
|
QString NetworkUtilities::getIPAddress(const QString &host)
|
||||||
{
|
{
|
||||||
if (ipAddressRegExp().match(host).hasMatch()) {
|
QHostAddress address(host);
|
||||||
|
if (QAbstractSocket::IPv4Protocol == address.protocol()) {
|
||||||
|
return host;
|
||||||
|
} else if (QAbstractSocket::IPv6Protocol == address.protocol()) {
|
||||||
return host;
|
return host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QQuickItem>
|
#include <QQuickItem>
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
#include <QUrlQuery>
|
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
#include <QUrlQuery>
|
||||||
|
|
||||||
#include "utilities.h"
|
|
||||||
#include "core/serialization/serialization.h"
|
|
||||||
#include "core/errorstrings.h"
|
#include "core/errorstrings.h"
|
||||||
|
#include "core/serialization/serialization.h"
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
#include "platforms/android/android_controller.h"
|
#include "platforms/android/android_controller.h"
|
||||||
@@ -96,36 +96,40 @@ bool ImportController::extractConfigFromData(QString data)
|
|||||||
|
|
||||||
if (config.startsWith("vless://")) {
|
if (config.startsWith("vless://")) {
|
||||||
m_configType = ConfigTypes::Xray;
|
m_configType = ConfigTypes::Xray;
|
||||||
m_config = extractXrayConfig(Utils::JsonToString(serialization::vless::Deserialize(config, &prefix, &errormsg),
|
m_config = extractXrayConfig(
|
||||||
QJsonDocument::JsonFormat::Compact), prefix);
|
Utils::JsonToString(serialization::vless::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
|
||||||
|
prefix);
|
||||||
return m_config.empty() ? false : true;
|
return m_config.empty() ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.startsWith("vmess://") && config.contains("@")) {
|
if (config.startsWith("vmess://") && config.contains("@")) {
|
||||||
m_configType = ConfigTypes::Xray;
|
m_configType = ConfigTypes::Xray;
|
||||||
m_config = extractXrayConfig(Utils::JsonToString(serialization::vmess_new::Deserialize(config, &prefix, &errormsg),
|
m_config = extractXrayConfig(
|
||||||
QJsonDocument::JsonFormat::Compact), prefix);
|
Utils::JsonToString(serialization::vmess_new::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
|
||||||
|
prefix);
|
||||||
return m_config.empty() ? false : true;
|
return m_config.empty() ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.startsWith("vmess://")) {
|
if (config.startsWith("vmess://")) {
|
||||||
m_configType = ConfigTypes::Xray;
|
m_configType = ConfigTypes::Xray;
|
||||||
m_config = extractXrayConfig(Utils::JsonToString(serialization::vmess::Deserialize(config, &prefix, &errormsg),
|
m_config = extractXrayConfig(
|
||||||
QJsonDocument::JsonFormat::Compact), prefix);
|
Utils::JsonToString(serialization::vmess::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
|
||||||
|
prefix);
|
||||||
return m_config.empty() ? false : true;
|
return m_config.empty() ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.startsWith("trojan://")) {
|
if (config.startsWith("trojan://")) {
|
||||||
m_configType = ConfigTypes::Xray;
|
m_configType = ConfigTypes::Xray;
|
||||||
m_config = extractXrayConfig(Utils::JsonToString(serialization::trojan::Deserialize(config, &prefix, &errormsg),
|
m_config = extractXrayConfig(
|
||||||
QJsonDocument::JsonFormat::Compact), prefix);
|
Utils::JsonToString(serialization::trojan::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
|
||||||
|
prefix);
|
||||||
return m_config.empty() ? false : true;
|
return m_config.empty() ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.startsWith("ss://") && !config.contains("plugin=")) {
|
if (config.startsWith("ss://") && !config.contains("plugin=")) {
|
||||||
m_configType = ConfigTypes::ShadowSocks;
|
m_configType = ConfigTypes::ShadowSocks;
|
||||||
m_config = extractXrayConfig(Utils::JsonToString(serialization::ss::Deserialize(config, &prefix, &errormsg),
|
m_config = extractXrayConfig(
|
||||||
QJsonDocument::JsonFormat::Compact), prefix);
|
Utils::JsonToString(serialization::ss::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact), prefix);
|
||||||
return m_config.empty() ? false : true;
|
return m_config.empty() ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,20 +357,19 @@ QJsonObject ImportController::extractWireGuardConfig(const QString &data)
|
|||||||
QJsonObject lastConfig;
|
QJsonObject lastConfig;
|
||||||
lastConfig[config_key::config] = data;
|
lastConfig[config_key::config] = data;
|
||||||
|
|
||||||
const static QRegularExpression hostNameAndPortRegExp("Endpoint = (.*):([0-9]*)");
|
auto url { QUrl::fromUserInput(configMap.value("Endpoint")) };
|
||||||
QRegularExpressionMatch hostNameAndPortMatch = hostNameAndPortRegExp.match(data);
|
|
||||||
QString hostName;
|
QString hostName;
|
||||||
QString port;
|
QString port;
|
||||||
if (hostNameAndPortMatch.hasCaptured(1)) {
|
if (!url.host().isEmpty()) {
|
||||||
hostName = hostNameAndPortMatch.captured(1);
|
hostName = url.host();
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Key parameter 'Endpoint' is missing";
|
qDebug() << "Key parameter 'Endpoint' is missing or has an invalid format";
|
||||||
emit importErrorOccurred(ErrorCode::ImportInvalidConfigError, false);
|
emit importErrorOccurred(ErrorCode::ImportInvalidConfigError, false);
|
||||||
return QJsonObject();
|
return QJsonObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hostNameAndPortMatch.hasCaptured(2)) {
|
if (url.port() != -1) {
|
||||||
port = hostNameAndPortMatch.captured(2);
|
port = QString::number(url.port());
|
||||||
} else {
|
} else {
|
||||||
port = protocols::wireguard::defaultPort;
|
port = protocols::wireguard::defaultPort;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user