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 "cloak_configurator.h"
|
||||
#include "shadowsocks_configurator.h"
|
||||
//#include "wireguard_configurator.h"
|
||||
#include "wireguard_configurator.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QJsonObject>
|
||||
|
@ -24,14 +24,30 @@ QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentia
|
|||
case Protocol::Cloak:
|
||||
return CloakConfigurator::genCloakConfig(credentials, container, containerConfig, errorCode);
|
||||
|
||||
// case Protocol::WireGuard:
|
||||
// return WireGuardConfigurator::genWireGuardConfig(credentials, container, containerConfig, errorCode);
|
||||
case Protocol::WireGuard:
|
||||
return WireguardConfigurator::genWireguardConfig(credentials, container, containerConfig, errorCode);
|
||||
|
||||
default:
|
||||
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,
|
||||
const QString &stdOut)
|
||||
{
|
||||
|
|
|
@ -14,6 +14,10 @@ public:
|
|||
static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
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,
|
||||
QJsonObject &containerConfig, const QString &stdOut);
|
||||
|
||||
|
|
|
@ -44,7 +44,8 @@ ErrorCode OpenVpnOverCloakProtocol::start()
|
|||
<< "-p" << m_cloakConfig.value(config_key::port).toString(amnezia::protocols::cloak::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";
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ TransportProto ProtocolProps::transportProtoFromString(QString p)
|
|||
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
||||
for (int i = 0; i < metaEnum.keyCount(); ++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;
|
||||
}
|
||||
|
@ -52,12 +52,17 @@ QString ProtocolProps::transportProtoToString(TransportProto proto, Protocol p)
|
|||
{
|
||||
QMetaEnum metaEnum = QMetaEnum::fromType<TransportProto>();
|
||||
QString protoKey = metaEnum.valueToKey(static_cast<int>(proto));
|
||||
if (p == Protocol::OpenVpn){
|
||||
return protoKey.toUpper();
|
||||
}
|
||||
else {
|
||||
return protoKey.toLower();
|
||||
}
|
||||
return protoKey.toLower();
|
||||
|
||||
// if (p == Protocol::OpenVpn){
|
||||
// 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::ShadowSocks : return 6789;
|
||||
case Protocol::WireGuard : return 51820;
|
||||
case Protocol::Ikev2 : return -1;
|
||||
case Protocol::L2tp : return -1;
|
||||
|
||||
case Protocol::TorWebSite : return -1;
|
||||
case Protocol::Dns : return 53;
|
||||
case Protocol::FileShare : return 139;
|
||||
|
@ -119,7 +127,11 @@ bool ProtocolProps::defaultPortChangeable(Protocol p)
|
|||
case Protocol::Cloak : return true;
|
||||
case Protocol::ShadowSocks : 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::FileShare : return false;
|
||||
default: return -1;
|
||||
|
@ -134,12 +146,13 @@ TransportProto ProtocolProps::defaultTransportProto(Protocol p)
|
|||
case Protocol::Cloak : return TransportProto::Tcp;
|
||||
case Protocol::ShadowSocks : return TransportProto::Tcp;
|
||||
case Protocol::WireGuard : return TransportProto::Udp;
|
||||
case Protocol::Ikev2 : return TransportProto::Udp;
|
||||
case Protocol::L2tp : return TransportProto::Udp;
|
||||
// non-vpn
|
||||
case Protocol::TorWebSite : return TransportProto::Tcp;
|
||||
case Protocol::Dns : return TransportProto::Udp;
|
||||
case Protocol::FileShare : return TransportProto::Udp;
|
||||
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::ShadowSocks : return false;
|
||||
case Protocol::WireGuard : return false;
|
||||
case Protocol::Ikev2 : return false;
|
||||
case Protocol::L2tp : return false;
|
||||
// non-vpn
|
||||
case Protocol::TorWebSite : return false;
|
||||
case Protocol::Dns : return false;
|
||||
|
|
|
@ -46,10 +46,6 @@ constexpr char last_config[] = "last_config";
|
|||
namespace protocols {
|
||||
|
||||
|
||||
|
||||
constexpr char UDP[] = "udp"; // case sens
|
||||
constexpr char TCP[] = "tcp";
|
||||
|
||||
namespace openvpn {
|
||||
constexpr char defaultSubnetAddress[] = "10.8.0.0";
|
||||
constexpr char defaultSubnetMask[] = "255.255.255.0";
|
||||
|
@ -122,6 +118,8 @@ enum Protocol {
|
|||
ShadowSocks,
|
||||
Cloak,
|
||||
WireGuard,
|
||||
Ikev2,
|
||||
L2tp,
|
||||
|
||||
// non-vpn
|
||||
TorWebSite,
|
||||
|
|
|
@ -133,7 +133,9 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
|
|||
QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
||||
{
|
||||
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::cipher, comboBoxVpnCipherText());
|
||||
oldConfig.insert(config_key::hash, comboBoxVpnHashText());
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <configurators/cloak_configurator.h>
|
||||
#include <configurators/shadowsocks_configurator.h>
|
||||
#include <configurators/wireguard_configurator.h>
|
||||
#include <configurators/vpn_configurator.h>
|
||||
#include <core/servercontroller.h>
|
||||
#include <protocols/wireguardprotocol.h>
|
||||
|
||||
|
@ -154,30 +155,19 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
|||
QString configData;
|
||||
if (lastVpnConfig.contains(proto)) {
|
||||
configData = lastVpnConfig.value(proto);
|
||||
if (proto == Protocol::OpenVpn) {
|
||||
configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData);
|
||||
}
|
||||
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
||||
|
||||
qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto);
|
||||
}
|
||||
else {
|
||||
qDebug() << "VpnConnection::createVpnConfiguration: gen new config for" << ProtocolProps::protoToString(proto);
|
||||
if (proto == Protocol::OpenVpn) {
|
||||
configData = OpenVpnConfigurator::genOpenVpnConfig(credentials,
|
||||
container, containerConfig, &e);
|
||||
configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData);
|
||||
}
|
||||
else if (proto == Protocol::Cloak) {
|
||||
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);
|
||||
}
|
||||
configData = VpnConfigurator::genVpnProtocolConfig(credentials,
|
||||
container, containerConfig, proto, &e);
|
||||
|
||||
QString configDataBeforeLocalProcessing = configData;
|
||||
|
||||
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
||||
|
||||
|
||||
if (errorCode && e) {
|
||||
*errorCode = e;
|
||||
|
@ -188,7 +178,7 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
|||
if (serverIndex >= 0) {
|
||||
qDebug() << "VpnConnection::createVpnConfiguration: saving config for server #" << 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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue