VPN configuration class fixes

This commit is contained in:
pokamest 2021-10-02 21:56:47 +03:00
parent 535e628eba
commit a5bcf1a02d
7 changed files with 65 additions and 39 deletions

View file

@ -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)
{

View file

@ -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);

View file

@ -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";
}

View file

@ -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;

View file

@ -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,

View file

@ -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());

View file

@ -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);
}
}