added import of configs in wireguard format
This commit is contained in:
parent
1a44307664
commit
99a6cd82b2
4 changed files with 48 additions and 2 deletions
|
|
@ -62,6 +62,7 @@ constexpr char last_config[] = "last_config";
|
||||||
constexpr char is_third_party_config[] = "is_third_party_config";
|
constexpr char is_third_party_config[] = "is_third_party_config";
|
||||||
|
|
||||||
constexpr char openvpn[] = "openvpn";
|
constexpr char openvpn[] = "openvpn";
|
||||||
|
constexpr char wireguard[] = "wireguard";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,16 @@ QString checkConfigFormat(const QString &config)
|
||||||
const QString openVpnConfigPatternDriver1 = "dev tun";
|
const QString openVpnConfigPatternDriver1 = "dev tun";
|
||||||
const QString openVpnConfigPatternDriver2 = "dev tap";
|
const QString openVpnConfigPatternDriver2 = "dev tap";
|
||||||
|
|
||||||
|
const QString wireguardConfigPatternSectionInterface = "[Interface]";
|
||||||
|
const QString wireguardConfigPatternSectionPeer = "[Peer]";
|
||||||
|
|
||||||
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 "OpenVpn";
|
||||||
}
|
} else if (config.contains(wireguardConfigPatternSectionInterface) &&
|
||||||
|
config.contains(wireguardConfigPatternSectionPeer))
|
||||||
|
return "Wireguard";
|
||||||
return "Amnezia";
|
return "Amnezia";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,7 +160,7 @@ void StartPageLogic::onPushButtonImport()
|
||||||
void StartPageLogic::onPushButtonImportOpenFile()
|
void StartPageLogic::onPushButtonImportOpenFile()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(nullptr, tr("Open profile"),
|
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;
|
if (fileName.isEmpty()) return;
|
||||||
|
|
||||||
|
|
@ -166,6 +171,8 @@ void StartPageLogic::onPushButtonImportOpenFile()
|
||||||
auto configFormat = checkConfigFormat(QString(data));
|
auto configFormat = checkConfigFormat(QString(data));
|
||||||
if (configFormat == "OpenVpn") {
|
if (configFormat == "OpenVpn") {
|
||||||
importConnectionFromOpenVpnConfig(QString(data));
|
importConnectionFromOpenVpnConfig(QString(data));
|
||||||
|
} else if (configFormat == "Wireguard") {
|
||||||
|
importConnectionFromWireguardConfig(QString(data));
|
||||||
} else {
|
} else {
|
||||||
importConnectionFromCode(QString(data));
|
importConnectionFromCode(QString(data));
|
||||||
}
|
}
|
||||||
|
|
@ -279,3 +286,39 @@ bool StartPageLogic::importConnectionFromOpenVpnConfig(const QString &config)
|
||||||
|
|
||||||
return importConnection(o);
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ public:
|
||||||
bool importConnectionFromCode(QString code);
|
bool importConnectionFromCode(QString code);
|
||||||
bool importConnectionFromQr(const QByteArray &data);
|
bool importConnectionFromQr(const QByteArray &data);
|
||||||
bool importConnectionFromOpenVpnConfig(const QString &config);
|
bool importConnectionFromOpenVpnConfig(const QString &config);
|
||||||
|
bool importConnectionFromWireguardConfig(const QString &config);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StartPageLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
explicit StartPageLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ PageProtocolBase {
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
visible: !logic.isThirdPartyConfig
|
visible: !logic.isThirdPartyConfig
|
||||||
enabled: logic.pageEnabled
|
enabled: logic.pageEnabled
|
||||||
|
|
||||||
LabelType {
|
LabelType {
|
||||||
id: lb_subnet
|
id: lb_subnet
|
||||||
height: 21
|
height: 21
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue