VPN configuration class fixes
This commit is contained in:
parent
535e628eba
commit
a5bcf1a02d
7 changed files with 65 additions and 39 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
#include "openvpn_configurator.h"
|
#include "openvpn_configurator.h"
|
||||||
#include "cloak_configurator.h"
|
#include "cloak_configurator.h"
|
||||||
#include "shadowsocks_configurator.h"
|
#include "shadowsocks_configurator.h"
|
||||||
//#include "wireguard_configurator.h"
|
#include "wireguard_configurator.h"
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
@ -24,14 +24,30 @@ QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentia
|
||||||
case Protocol::Cloak:
|
case Protocol::Cloak:
|
||||||
return CloakConfigurator::genCloakConfig(credentials, container, containerConfig, errorCode);
|
return CloakConfigurator::genCloakConfig(credentials, container, containerConfig, errorCode);
|
||||||
|
|
||||||
// case Protocol::WireGuard:
|
case Protocol::WireGuard:
|
||||||
// return WireGuardConfigurator::genWireGuardConfig(credentials, container, containerConfig, errorCode);
|
return WireguardConfigurator::genWireguardConfig(credentials, container, containerConfig, errorCode);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VpnConfigurator::processConfigWithLocalSettings(DockerContainer container, Protocol proto, QString config)
|
||||||
|
{
|
||||||
|
if (proto == Protocol::OpenVpn) {
|
||||||
|
return OpenVpnConfigurator::processConfigWithLocalSettings(config);
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VpnConfigurator::processConfigWithExportSettings(DockerContainer container, Protocol proto, QString config)
|
||||||
|
{
|
||||||
|
if (proto == Protocol::OpenVpn) {
|
||||||
|
return OpenVpnConfigurator::processConfigWithExportSettings(config);
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
void VpnConfigurator::updateContainerConfigAfterInstallation(DockerContainer container, QJsonObject &containerConfig,
|
void VpnConfigurator::updateContainerConfigAfterInstallation(DockerContainer container, QJsonObject &containerConfig,
|
||||||
const QString &stdOut)
|
const QString &stdOut)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ public:
|
||||||
static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container,
|
static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||||
const QJsonObject &containerConfig, Protocol proto, ErrorCode *errorCode = nullptr);
|
const QJsonObject &containerConfig, Protocol proto, ErrorCode *errorCode = nullptr);
|
||||||
|
|
||||||
|
static QString processConfigWithLocalSettings(DockerContainer container, Protocol proto, QString config);
|
||||||
|
static QString processConfigWithExportSettings(DockerContainer container, Protocol proto, QString config);
|
||||||
|
|
||||||
|
// workaround for containers which is not support normal configaration
|
||||||
static void updateContainerConfigAfterInstallation(DockerContainer container,
|
static void updateContainerConfigAfterInstallation(DockerContainer container,
|
||||||
QJsonObject &containerConfig, const QString &stdOut);
|
QJsonObject &containerConfig, const QString &stdOut);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,8 @@ ErrorCode OpenVpnOverCloakProtocol::start()
|
||||||
<< "-p" << m_cloakConfig.value(config_key::port).toString(amnezia::protocols::cloak::defaultPort)
|
<< "-p" << m_cloakConfig.value(config_key::port).toString(amnezia::protocols::cloak::defaultPort)
|
||||||
<< "-l" << amnezia::protocols::openvpn::defaultPort;
|
<< "-l" << amnezia::protocols::openvpn::defaultPort;
|
||||||
|
|
||||||
if (m_cloakConfig.value(config_key::transport_proto).toString() == protocols::UDP) {
|
ProtocolEnumNS::TransportProto tp = ProtocolProps::transportProtoFromString(m_cloakConfig.value(config_key::transport_proto).toString());
|
||||||
|
if (tp == ProtocolEnumNS::TransportProto::Udp) {
|
||||||
args << "-u";
|
args << "-u";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ TransportProto ProtocolProps::transportProtoFromString(QString p)
|
||||||
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
||||||
for (int i = 0; i < metaEnum.keyCount(); ++i) {
|
for (int i = 0; i < metaEnum.keyCount(); ++i) {
|
||||||
TransportProto tp = static_cast<TransportProto>(i);
|
TransportProto tp = static_cast<TransportProto>(i);
|
||||||
if (p.toLower() == transportProtoToString(tp)) return tp;
|
if (p.toLower() == transportProtoToString(tp).toLower()) return tp;
|
||||||
}
|
}
|
||||||
return TransportProto::Udp;
|
return TransportProto::Udp;
|
||||||
}
|
}
|
||||||
|
|
@ -52,12 +52,17 @@ QString ProtocolProps::transportProtoToString(TransportProto proto, Protocol p)
|
||||||
{
|
{
|
||||||
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
||||||
QString protoKey = metaEnum.valueToKey(static_cast<int>(proto));
|
QString protoKey = metaEnum.valueToKey(static_cast<int>(proto));
|
||||||
if (p == Protocol::OpenVpn){
|
return protoKey.toLower();
|
||||||
return protoKey.toUpper();
|
|
||||||
}
|
// if (p == Protocol::OpenVpn){
|
||||||
else {
|
// return protoKey.toLower();
|
||||||
return protoKey.toLower();
|
// }
|
||||||
}
|
// else if (p == Protocol::ShadowSocks) {
|
||||||
|
// return protoKey.toUpper();
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// return protoKey.toLower();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -103,6 +108,9 @@ int ProtocolProps::defaultPort(Protocol p)
|
||||||
case Protocol::Cloak : return 443;
|
case Protocol::Cloak : return 443;
|
||||||
case Protocol::ShadowSocks : return 6789;
|
case Protocol::ShadowSocks : return 6789;
|
||||||
case Protocol::WireGuard : return 51820;
|
case Protocol::WireGuard : return 51820;
|
||||||
|
case Protocol::Ikev2 : return -1;
|
||||||
|
case Protocol::L2tp : return -1;
|
||||||
|
|
||||||
case Protocol::TorWebSite : return -1;
|
case Protocol::TorWebSite : return -1;
|
||||||
case Protocol::Dns : return 53;
|
case Protocol::Dns : return 53;
|
||||||
case Protocol::FileShare : return 139;
|
case Protocol::FileShare : return 139;
|
||||||
|
|
@ -119,7 +127,11 @@ bool ProtocolProps::defaultPortChangeable(Protocol p)
|
||||||
case Protocol::Cloak : return true;
|
case Protocol::Cloak : return true;
|
||||||
case Protocol::ShadowSocks : return true;
|
case Protocol::ShadowSocks : return true;
|
||||||
case Protocol::WireGuard : return true;
|
case Protocol::WireGuard : return true;
|
||||||
case Protocol::TorWebSite : return true;
|
case Protocol::Ikev2 : return false;
|
||||||
|
case Protocol::L2tp : return false;
|
||||||
|
|
||||||
|
|
||||||
|
case Protocol::TorWebSite : return true;
|
||||||
case Protocol::Dns : return false;
|
case Protocol::Dns : return false;
|
||||||
case Protocol::FileShare : return false;
|
case Protocol::FileShare : return false;
|
||||||
default: return -1;
|
default: return -1;
|
||||||
|
|
@ -134,12 +146,13 @@ TransportProto ProtocolProps::defaultTransportProto(Protocol p)
|
||||||
case Protocol::Cloak : return TransportProto::Tcp;
|
case Protocol::Cloak : return TransportProto::Tcp;
|
||||||
case Protocol::ShadowSocks : return TransportProto::Tcp;
|
case Protocol::ShadowSocks : return TransportProto::Tcp;
|
||||||
case Protocol::WireGuard : return TransportProto::Udp;
|
case Protocol::WireGuard : return TransportProto::Udp;
|
||||||
|
case Protocol::Ikev2 : return TransportProto::Udp;
|
||||||
|
case Protocol::L2tp : return TransportProto::Udp;
|
||||||
// non-vpn
|
// non-vpn
|
||||||
case Protocol::TorWebSite : return TransportProto::Tcp;
|
case Protocol::TorWebSite : return TransportProto::Tcp;
|
||||||
case Protocol::Dns : return TransportProto::Udp;
|
case Protocol::Dns : return TransportProto::Udp;
|
||||||
case Protocol::FileShare : return TransportProto::Udp;
|
case Protocol::FileShare : return TransportProto::Udp;
|
||||||
case Protocol::Sftp : return TransportProto::Tcp;
|
case Protocol::Sftp : return TransportProto::Tcp;
|
||||||
default: return TransportProto::Udp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -151,6 +164,8 @@ bool ProtocolProps::defaultTransportProtoChangeable(Protocol p)
|
||||||
case Protocol::Cloak : return false;
|
case Protocol::Cloak : return false;
|
||||||
case Protocol::ShadowSocks : return false;
|
case Protocol::ShadowSocks : return false;
|
||||||
case Protocol::WireGuard : return false;
|
case Protocol::WireGuard : return false;
|
||||||
|
case Protocol::Ikev2 : return false;
|
||||||
|
case Protocol::L2tp : return false;
|
||||||
// non-vpn
|
// non-vpn
|
||||||
case Protocol::TorWebSite : return false;
|
case Protocol::TorWebSite : return false;
|
||||||
case Protocol::Dns : return false;
|
case Protocol::Dns : return false;
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,6 @@ constexpr char last_config[] = "last_config";
|
||||||
namespace protocols {
|
namespace protocols {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constexpr char UDP[] = "udp"; // case sens
|
|
||||||
constexpr char TCP[] = "tcp";
|
|
||||||
|
|
||||||
namespace openvpn {
|
namespace openvpn {
|
||||||
constexpr char defaultSubnetAddress[] = "10.8.0.0";
|
constexpr char defaultSubnetAddress[] = "10.8.0.0";
|
||||||
constexpr char defaultSubnetMask[] = "255.255.255.0";
|
constexpr char defaultSubnetMask[] = "255.255.255.0";
|
||||||
|
|
@ -122,6 +118,8 @@ enum Protocol {
|
||||||
ShadowSocks,
|
ShadowSocks,
|
||||||
Cloak,
|
Cloak,
|
||||||
WireGuard,
|
WireGuard,
|
||||||
|
Ikev2,
|
||||||
|
L2tp,
|
||||||
|
|
||||||
// non-vpn
|
// non-vpn
|
||||||
TorWebSite,
|
TorWebSite,
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,9 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
|
||||||
QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
||||||
{
|
{
|
||||||
oldConfig.insert(config_key::subnet_address, lineEditSubnetText());
|
oldConfig.insert(config_key::subnet_address, lineEditSubnetText());
|
||||||
oldConfig.insert(config_key::transport_proto, radioButtonUdpChecked() ? protocols::UDP : protocols::TCP);
|
oldConfig.insert(config_key::transport_proto,
|
||||||
|
ProtocolProps::transportProtoToString(radioButtonUdpChecked() ? ProtocolEnumNS::Udp : ProtocolEnumNS::Tcp));
|
||||||
|
|
||||||
oldConfig.insert(config_key::ncp_disable, ! checkBoxAutoEncryptionChecked());
|
oldConfig.insert(config_key::ncp_disable, ! checkBoxAutoEncryptionChecked());
|
||||||
oldConfig.insert(config_key::cipher, comboBoxVpnCipherText());
|
oldConfig.insert(config_key::cipher, comboBoxVpnCipherText());
|
||||||
oldConfig.insert(config_key::hash, comboBoxVpnHashText());
|
oldConfig.insert(config_key::hash, comboBoxVpnHashText());
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <configurators/cloak_configurator.h>
|
#include <configurators/cloak_configurator.h>
|
||||||
#include <configurators/shadowsocks_configurator.h>
|
#include <configurators/shadowsocks_configurator.h>
|
||||||
#include <configurators/wireguard_configurator.h>
|
#include <configurators/wireguard_configurator.h>
|
||||||
|
#include <configurators/vpn_configurator.h>
|
||||||
#include <core/servercontroller.h>
|
#include <core/servercontroller.h>
|
||||||
#include <protocols/wireguardprotocol.h>
|
#include <protocols/wireguardprotocol.h>
|
||||||
|
|
||||||
|
|
@ -154,30 +155,19 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
||||||
QString configData;
|
QString configData;
|
||||||
if (lastVpnConfig.contains(proto)) {
|
if (lastVpnConfig.contains(proto)) {
|
||||||
configData = lastVpnConfig.value(proto);
|
configData = lastVpnConfig.value(proto);
|
||||||
if (proto == Protocol::OpenVpn) {
|
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
||||||
configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData);
|
|
||||||
}
|
|
||||||
qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto);
|
qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qDebug() << "VpnConnection::createVpnConfiguration: gen new config for" << ProtocolProps::protoToString(proto);
|
qDebug() << "VpnConnection::createVpnConfiguration: gen new config for" << ProtocolProps::protoToString(proto);
|
||||||
if (proto == Protocol::OpenVpn) {
|
configData = VpnConfigurator::genVpnProtocolConfig(credentials,
|
||||||
configData = OpenVpnConfigurator::genOpenVpnConfig(credentials,
|
container, containerConfig, proto, &e);
|
||||||
container, containerConfig, &e);
|
|
||||||
configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData);
|
QString configDataBeforeLocalProcessing = configData;
|
||||||
}
|
|
||||||
else if (proto == Protocol::Cloak) {
|
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
||||||
configData = CloakConfigurator::genCloakConfig(credentials,
|
|
||||||
container, containerConfig, &e);
|
|
||||||
}
|
|
||||||
else if (proto == Protocol::ShadowSocks) {
|
|
||||||
configData = ShadowSocksConfigurator::genShadowSocksConfig(credentials,
|
|
||||||
container, containerConfig, &e);
|
|
||||||
}
|
|
||||||
else if (proto == Protocol::WireGuard) {
|
|
||||||
configData = WireguardConfigurator::genWireguardConfig(credentials,
|
|
||||||
container, containerConfig, &e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errorCode && e) {
|
if (errorCode && e) {
|
||||||
*errorCode = e;
|
*errorCode = e;
|
||||||
|
|
@ -188,7 +178,7 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
||||||
if (serverIndex >= 0) {
|
if (serverIndex >= 0) {
|
||||||
qDebug() << "VpnConnection::createVpnConfiguration: saving config for server #" << serverIndex << container << proto;
|
qDebug() << "VpnConnection::createVpnConfiguration: saving config for server #" << serverIndex << container << proto;
|
||||||
QJsonObject protoObject = m_settings.protocolConfig(serverIndex, container, proto);
|
QJsonObject protoObject = m_settings.protocolConfig(serverIndex, container, proto);
|
||||||
protoObject.insert(config_key::last_config, configData);
|
protoObject.insert(config_key::last_config, configDataBeforeLocalProcessing);
|
||||||
m_settings.setProtocolConfig(serverIndex, container, proto, protoObject);
|
m_settings.setProtocolConfig(serverIndex, container, proto, protoObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue