hostname is now added to the server name for imported openvpn and wireguard configs

This commit is contained in:
vladimir.kuznetsov 2022-11-05 19:40:51 +03:00
parent 6941b7463e
commit 7270e701d4

View file

@ -16,7 +16,13 @@
#endif #endif
namespace { namespace {
QString checkConfigFormat(const QString &config) enum class ConfigTypes {
Amnezia,
OpenVpn,
WireGuard
};
ConfigTypes checkConfigFormat(const QString &config)
{ {
const QString openVpnConfigPatternCli = "client"; const QString openVpnConfigPatternCli = "client";
const QString openVpnConfigPatternProto1 = "proto tcp"; const QString openVpnConfigPatternProto1 = "proto tcp";
@ -30,11 +36,11 @@ QString checkConfigFormat(const QString &config)
if (config.contains(openVpnConfigPatternCli) && if (config.contains(openVpnConfigPatternCli) &&
(config.contains(openVpnConfigPatternProto1) || config.contains(openVpnConfigPatternProto2)) && (config.contains(openVpnConfigPatternProto1) || config.contains(openVpnConfigPatternProto2)) &&
(config.contains(openVpnConfigPatternDriver1) || config.contains(openVpnConfigPatternDriver2))) { (config.contains(openVpnConfigPatternDriver1) || config.contains(openVpnConfigPatternDriver2))) {
return "OpenVpn"; return ConfigTypes::OpenVpn;
} else if (config.contains(wireguardConfigPatternSectionInterface) && } else if (config.contains(wireguardConfigPatternSectionInterface) &&
config.contains(wireguardConfigPatternSectionPeer)) config.contains(wireguardConfigPatternSectionPeer))
return "Wireguard"; return ConfigTypes::WireGuard;
return "Amnezia"; return ConfigTypes::Amnezia;
} }
} }
@ -169,9 +175,9 @@ void StartPageLogic::onPushButtonImportOpenFile()
QByteArray data = file.readAll(); QByteArray data = file.readAll();
auto configFormat = checkConfigFormat(QString(data)); auto configFormat = checkConfigFormat(QString(data));
if (configFormat == "OpenVpn") { if (configFormat == ConfigTypes::OpenVpn) {
importConnectionFromOpenVpnConfig(QString(data)); importConnectionFromOpenVpnConfig(QString(data));
} else if (configFormat == "Wireguard") { } else if (configFormat == ConfigTypes::WireGuard) {
importConnectionFromWireguardConfig(QString(data)); importConnectionFromWireguardConfig(QString(data));
} else { } else {
importConnectionFromCode(QString(data)); importConnectionFromCode(QString(data));
@ -261,10 +267,17 @@ bool StartPageLogic::importConnectionFromOpenVpnConfig(const QString &config)
QJsonArray arr; QJsonArray arr;
arr.push_back(containers); arr.push_back(containers);
QString hostName;
const static QRegularExpression hostNameRegExp("remote (.*) [0-9]*");
QRegularExpressionMatch hostNameMatch = hostNameRegExp.match(config);
if (hostNameMatch.hasMatch()) {
hostName = hostNameMatch.captured(1);
}
QJsonObject o; QJsonObject o;
o[config_key::containers] = arr; o[config_key::containers] = arr;
o[config_key::defaultContainer] = "amnezia-openvpn"; o[config_key::defaultContainer] = "amnezia-openvpn";
o[config_key::description] = "OpenVpn server"; o[config_key::description] = QString("OpenVpn server %1").arg(hostName);
const static QRegularExpression dnsRegExp("dhcp-option DNS (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)"); const static QRegularExpression dnsRegExp("dhcp-option DNS (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)");
@ -276,11 +289,7 @@ bool StartPageLogic::importConnectionFromOpenVpnConfig(const QString &config)
o[config_key::dns2] = dnsMatch.next().captured(1); o[config_key::dns2] = dnsMatch.next().captured(1);
} }
const static QRegularExpression hostNameRegExp("remote (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)"); o[config_key::hostName] = hostName;
QRegularExpressionMatch hostNameMatch = hostNameRegExp.match(config);
if (hostNameMatch.hasMatch()) {
o[config_key::hostName] = hostNameMatch.captured(1);
}
o[config_key::isThirdPartyConfig] = true; o[config_key::isThirdPartyConfig] = true;
@ -292,7 +301,7 @@ bool StartPageLogic::importConnectionFromWireguardConfig(const QString &config)
QJsonObject lastConfig; QJsonObject lastConfig;
lastConfig[config_key::config] = config; lastConfig[config_key::config] = config;
const static QRegularExpression hostNameAndPortRegExp("Endpoint = (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b):([0-9]*)"); const static QRegularExpression hostNameAndPortRegExp("Endpoint = (.*):([0-9]*)");
QRegularExpressionMatch hostNameAndPortMatch = hostNameAndPortRegExp.match(config); QRegularExpressionMatch hostNameAndPortMatch = hostNameAndPortRegExp.match(config);
QString hostName; QString hostName;
QString port; QString port;
@ -316,7 +325,7 @@ bool StartPageLogic::importConnectionFromWireguardConfig(const QString &config)
QJsonObject o; QJsonObject o;
o[config_key::containers] = arr; o[config_key::containers] = arr;
o[config_key::defaultContainer] = "amnezia-wireguard"; o[config_key::defaultContainer] = "amnezia-wireguard";
o[config_key::description] = "Wireguard server"; o[config_key::description] = QString("Wireguard server %1").arg(hostName);
const static QRegularExpression dnsRegExp("DNS = (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b).*(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)"); const static QRegularExpression dnsRegExp("DNS = (\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b).*(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)");
QRegularExpressionMatch dnsMatch = dnsRegExp.match(config); QRegularExpressionMatch dnsMatch = dnsRegExp.match(config);
@ -326,6 +335,7 @@ bool StartPageLogic::importConnectionFromWireguardConfig(const QString &config)
} }
o[config_key::hostName] = hostName; o[config_key::hostName] = hostName;
o[config_key::isThirdPartyConfig] = true; o[config_key::isThirdPartyConfig] = true;
return importConnection(o); return importConnection(o);