added import of configs in wireguard format

This commit is contained in:
vladimir.kuznetsov 2022-11-03 23:39:58 +03:00
parent 1a44307664
commit 99a6cd82b2
4 changed files with 48 additions and 2 deletions

View file

@ -62,6 +62,7 @@ constexpr char last_config[] = "last_config";
constexpr char is_third_party_config[] = "is_third_party_config";
constexpr char openvpn[] = "openvpn";
constexpr char wireguard[] = "wireguard";
}

View file

@ -24,11 +24,16 @@ QString checkConfigFormat(const QString &config)
const QString openVpnConfigPatternDriver1 = "dev tun";
const QString openVpnConfigPatternDriver2 = "dev tap";
const QString wireguardConfigPatternSectionInterface = "[Interface]";
const QString wireguardConfigPatternSectionPeer = "[Peer]";
if (config.contains(openVpnConfigPatternCli) &&
(config.contains(openVpnConfigPatternProto1) || config.contains(openVpnConfigPatternProto2)) &&
(config.contains(openVpnConfigPatternDriver1) || config.contains(openVpnConfigPatternDriver2))) {
return "OpenVpn";
}
} else if (config.contains(wireguardConfigPatternSectionInterface) &&
config.contains(wireguardConfigPatternSectionPeer))
return "Wireguard";
return "Amnezia";
}
@ -155,7 +160,7 @@ void StartPageLogic::onPushButtonImport()
void StartPageLogic::onPushButtonImportOpenFile()
{
QString fileName = QFileDialog::getOpenFileName(nullptr, tr("Open profile"),
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.vpn *.ovpn");
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.vpn *.ovpn *.conf");
if (fileName.isEmpty()) return;
@ -166,6 +171,8 @@ void StartPageLogic::onPushButtonImportOpenFile()
auto configFormat = checkConfigFormat(QString(data));
if (configFormat == "OpenVpn") {
importConnectionFromOpenVpnConfig(QString(data));
} else if (configFormat == "Wireguard") {
importConnectionFromWireguardConfig(QString(data));
} else {
importConnectionFromCode(QString(data));
}
@ -279,3 +286,39 @@ bool StartPageLogic::importConnectionFromOpenVpnConfig(const QString &config)
return importConnection(o);
}
bool StartPageLogic::importConnectionFromWireguardConfig(const QString &config)
{
QJsonObject lastConfig;
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]*)");
QRegularExpressionMatch hostNameAndPortMatch = hostNameAndPortRegExp.match(config);
QString hostName;
QString port;
if (hostNameAndPortMatch.hasMatch()) {
hostName = hostNameAndPortMatch.captured(1);
port = hostNameAndPortMatch.captured(2);
}
QJsonObject wireguardConfig;
wireguardConfig[config_key::last_config] = lastConfig;
wireguardConfig[config_key::port] = port;
wireguardConfig[config_key::transport_proto] = "udp";
QJsonObject containers;
containers.insert(config_key::container, QJsonValue("amnezia-wireguard"));
containers.insert(config_key::wireguard, QJsonValue(wireguardConfig));
QJsonArray arr;
arr.push_back(containers);
QJsonObject o;
o[config_key::containers] = arr;
o[config_key::defaultContainer] = "amnezia-wireguard";
o[config_key::description] = "Wireguard server";
o[config_key::hostName] = hostName;
return importConnection(o);
}

View file

@ -33,6 +33,7 @@ public:
bool importConnectionFromCode(QString code);
bool importConnectionFromQr(const QByteArray &data);
bool importConnectionFromOpenVpnConfig(const QString &config);
bool importConnectionFromWireguardConfig(const QString &config);
public:
explicit StartPageLogic(UiLogic *uiLogic, QObject *parent = nullptr);

View file

@ -43,6 +43,7 @@ PageProtocolBase {
ColumnLayout {
visible: !logic.isThirdPartyConfig
enabled: logic.pageEnabled
LabelType {
id: lb_subnet
height: 21