refactoring
Protocol to DockerContainer
This commit is contained in:
parent
615bba69e5
commit
d424bb24cf
13 changed files with 60 additions and 64 deletions
|
@ -7,12 +7,10 @@
|
|||
#include "protocols/protocols_defs.h"
|
||||
|
||||
QJsonObject CloakConfigurator::genCloakConfig(const ServerCredentials &credentials,
|
||||
Protocol proto, ErrorCode *errorCode)
|
||||
DockerContainer container, ErrorCode *errorCode)
|
||||
{
|
||||
ErrorCode e = ErrorCode::NoError;
|
||||
|
||||
DockerContainer container = amnezia::containerForProto(proto);
|
||||
|
||||
QString cloakPublicKey = ServerController::getTextFileFromContainer(container, credentials,
|
||||
amnezia::protocols::cloak::ckPublicKeyPath, &e);
|
||||
cloakPublicKey.replace("\n", "");
|
||||
|
|
|
@ -11,7 +11,7 @@ class CloakConfigurator
|
|||
{
|
||||
public:
|
||||
|
||||
static QJsonObject genCloakConfig(const ServerCredentials &credentials, Protocol proto,
|
||||
static QJsonObject genCloakConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
ErrorCode *errorCode = nullptr);
|
||||
};
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::createCertRequest()
|
|||
}
|
||||
|
||||
OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(const ServerCredentials &credentials,
|
||||
Protocol proto, ErrorCode *errorCode)
|
||||
DockerContainer container, ErrorCode *errorCode)
|
||||
{
|
||||
OpenVpnConfigurator::ConnectionData connData = OpenVpnConfigurator::createCertRequest();
|
||||
connData.host = credentials.hostName;
|
||||
|
@ -153,8 +153,6 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co
|
|||
arg(amnezia::protocols::openvpn::clientsDirPath).
|
||||
arg(connData.clientId);
|
||||
|
||||
DockerContainer container = amnezia::containerForProto(proto);
|
||||
|
||||
ErrorCode e = ServerController::uploadTextFileToContainer(container, credentials, connData.request, reqFileName);
|
||||
if (e) {
|
||||
if (errorCode) *errorCode = e;
|
||||
|
@ -194,7 +192,7 @@ Settings &OpenVpnConfigurator::m_settings()
|
|||
}
|
||||
|
||||
QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentials,
|
||||
Protocol proto, ErrorCode *errorCode)
|
||||
DockerContainer container, ErrorCode *errorCode)
|
||||
{
|
||||
// QFile configTemplFile;
|
||||
// if (proto == Protocol::OpenVpn)
|
||||
|
@ -206,20 +204,20 @@ QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentia
|
|||
// configTemplFile.open(QIODevice::ReadOnly);
|
||||
// QString config = configTemplFile.readAll();
|
||||
|
||||
QString config = amnezia::scriptData(ProtocolScriptType::openvpn_template, proto);
|
||||
QString config = amnezia::scriptData(ProtocolScriptType::openvpn_template, container);
|
||||
|
||||
ConnectionData connData = prepareOpenVpnConfig(credentials, proto, errorCode);
|
||||
ConnectionData connData = prepareOpenVpnConfig(credentials, container, errorCode);
|
||||
if (errorCode && *errorCode) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (proto == Protocol::OpenVpn)
|
||||
if (container == DockerContainer::OpenVpn)
|
||||
config.replace("$PROTO", "udp");
|
||||
else if (proto == Protocol::ShadowSocksOverOpenVpn) {
|
||||
else if (container == DockerContainer::ShadowSocksOverOpenVpn) {
|
||||
config.replace("$PROTO", "tcp");
|
||||
config.replace("$LOCAL_PROXY_PORT", amnezia::protocols::shadowsocks::ssLocalProxyPort);
|
||||
}
|
||||
else if (proto == Protocol::OpenVpnOverCloak) {
|
||||
else if (container == DockerContainer::OpenVpnOverCloak) {
|
||||
config.replace("$PROTO", "tcp");
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ public:
|
|||
QString host; // host ip
|
||||
};
|
||||
|
||||
static QString genOpenVpnConfig(const ServerCredentials &credentials, Protocol proto,
|
||||
static QString genOpenVpnConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
ErrorCode *errorCode = nullptr);
|
||||
|
||||
static QString convertOpenSShKey(const QString &key);
|
||||
|
@ -40,7 +40,7 @@ private:
|
|||
static ConnectionData createCertRequest();
|
||||
|
||||
static ConnectionData prepareOpenVpnConfig(const ServerCredentials &credentials,
|
||||
Protocol proto, ErrorCode *errorCode = nullptr);
|
||||
DockerContainer container, ErrorCode *errorCode = nullptr);
|
||||
|
||||
static Settings &m_settings();
|
||||
};
|
||||
|
|
|
@ -10,8 +10,8 @@ Q_NAMESPACE
|
|||
enum class Protocol {
|
||||
Any,
|
||||
OpenVpn,
|
||||
ShadowSocksOverOpenVpn,
|
||||
OpenVpnOverCloak,
|
||||
ShadowSocks,
|
||||
Cloak,
|
||||
WireGuard
|
||||
};
|
||||
Q_ENUM_NS(Protocol)
|
||||
|
@ -44,18 +44,18 @@ inline QString containerToString(DockerContainer container){
|
|||
return QVariant::fromValue(container).toString();
|
||||
}
|
||||
|
||||
static DockerContainer containerForProto(Protocol proto)
|
||||
{
|
||||
Q_ASSERT(proto != Protocol::Any);
|
||||
//static DockerContainer containerForProto(Protocol proto)
|
||||
//{
|
||||
// Q_ASSERT(proto != Protocol::Any);
|
||||
|
||||
switch (proto) {
|
||||
case Protocol::OpenVpn: return DockerContainer::OpenVpn;
|
||||
case Protocol::OpenVpnOverCloak: return DockerContainer::OpenVpnOverCloak;
|
||||
case Protocol::ShadowSocksOverOpenVpn: return DockerContainer::ShadowSocksOverOpenVpn;
|
||||
case Protocol::WireGuard: return DockerContainer::WireGuard;
|
||||
case Protocol::Any: return DockerContainer::None;
|
||||
}
|
||||
}
|
||||
// switch (proto) {
|
||||
// case Protocol::OpenVpn: return DockerContainer::OpenVpn;
|
||||
// case Protocol::OpenVpnOverCloak: return DockerContainer::OpenVpnOverCloak;
|
||||
// case Protocol::ShadowSocksOverOpenVpn: return DockerContainer::ShadowSocksOverOpenVpn;
|
||||
// case Protocol::WireGuard: return DockerContainer::WireGuard;
|
||||
// case Protocol::Any: return DockerContainer::None;
|
||||
// }
|
||||
//}
|
||||
|
||||
struct ServerCredentials
|
||||
{
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
#include <QDebug>
|
||||
#include <QFile>
|
||||
|
||||
QString amnezia::scriptFolder(amnezia::Protocol proto)
|
||||
QString amnezia::scriptFolder(amnezia::DockerContainer container)
|
||||
{
|
||||
switch (proto) {
|
||||
case Protocol::OpenVpn: return QLatin1String("openvpn");
|
||||
case Protocol::OpenVpnOverCloak: return QLatin1String("openvpn_cloak");
|
||||
case Protocol::ShadowSocksOverOpenVpn: return QLatin1String("openvpn_shadowsocks");
|
||||
case Protocol::WireGuard: return QLatin1String("wireguard");
|
||||
switch (container) {
|
||||
case DockerContainer::OpenVpn: return QLatin1String("openvpn");
|
||||
case DockerContainer::OpenVpnOverCloak: return QLatin1String("openvpn_cloak");
|
||||
case DockerContainer::ShadowSocksOverOpenVpn: return QLatin1String("openvpn_shadowsocks");
|
||||
case DockerContainer::WireGuard: return QLatin1String("wireguard");
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
@ -49,9 +49,9 @@ QString amnezia::scriptData(amnezia::SharedScriptType type)
|
|||
return file.readAll();
|
||||
}
|
||||
|
||||
QString amnezia::scriptData(amnezia::ProtocolScriptType type, amnezia::Protocol proto)
|
||||
QString amnezia::scriptData(amnezia::ProtocolScriptType type, DockerContainer container)
|
||||
{
|
||||
QString fileName = QString(":/server_scripts/%1/%2").arg(amnezia::scriptFolder(proto), amnezia::scriptName(type));
|
||||
QString fileName = QString(":/server_scripts/%1/%2").arg(amnezia::scriptFolder(container), amnezia::scriptName(type));
|
||||
QFile file(fileName);
|
||||
if (! file.open(QIODevice::ReadOnly)) {
|
||||
qDebug() << "Error opening script" << fileName;
|
||||
|
|
|
@ -25,13 +25,13 @@ enum ProtocolScriptType {
|
|||
};
|
||||
|
||||
|
||||
QString scriptFolder(Protocol proto);
|
||||
QString scriptFolder(DockerContainer container);
|
||||
|
||||
QString scriptName(SharedScriptType type);
|
||||
QString scriptName(ProtocolScriptType type);
|
||||
|
||||
QString scriptData(SharedScriptType type);
|
||||
QString scriptData(ProtocolScriptType type, Protocol proto);
|
||||
QString scriptData(ProtocolScriptType type, DockerContainer container);
|
||||
}
|
||||
|
||||
#endif // SCRIPTS_REGISTRY_H
|
||||
|
|
|
@ -467,7 +467,7 @@ ErrorCode ServerController::setupOpenVpnOverCloakServer(const ServerCredentials
|
|||
genVarsForScript(credentials, container)));
|
||||
if (e) return e;
|
||||
|
||||
uploadFileToHost(credentials, amnezia::scriptData(ProtocolScriptType::dockerfile, Protocol::OpenVpnOverCloak).toUtf8(),
|
||||
uploadFileToHost(credentials, amnezia::scriptData(ProtocolScriptType::dockerfile, DockerContainer::OpenVpnOverCloak).toUtf8(),
|
||||
amnezia::server::getDockerfileFolder(container) + "/Dockerfile");
|
||||
|
||||
|
||||
|
@ -489,12 +489,12 @@ ErrorCode ServerController::setupOpenVpnOverCloakServer(const ServerCredentials
|
|||
|
||||
|
||||
runScript(sshParams(credentials),
|
||||
replaceVars(amnezia::scriptData(ProtocolScriptType::configure_container, Protocol::OpenVpnOverCloak),
|
||||
replaceVars(amnezia::scriptData(ProtocolScriptType::configure_container, DockerContainer::OpenVpnOverCloak),
|
||||
genVarsForScript(credentials, container)));
|
||||
if (e) return e;
|
||||
|
||||
uploadTextFileToContainer(DockerContainer::OpenVpnOverCloak, credentials,
|
||||
replaceVars(amnezia::scriptData(ProtocolScriptType::container_startup, Protocol::OpenVpnOverCloak),
|
||||
replaceVars(amnezia::scriptData(ProtocolScriptType::container_startup, DockerContainer::OpenVpnOverCloak),
|
||||
genVarsForScript(credentials, container)),
|
||||
"/opt/amnezia/start.sh");
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ QString ShadowSocksVpnProtocol::shadowSocksExecPath()
|
|||
#endif
|
||||
}
|
||||
|
||||
QJsonObject ShadowSocksVpnProtocol::genShadowSocksConfig(const ServerCredentials &credentials, Protocol proto)
|
||||
QJsonObject ShadowSocksVpnProtocol::genShadowSocksConfig(const ServerCredentials &credentials, DockerContainer container)
|
||||
{
|
||||
QJsonObject ssConfig;
|
||||
ssConfig.insert("server", credentials.hostName);
|
||||
|
|
|
@ -13,7 +13,7 @@ public:
|
|||
ErrorCode start() override;
|
||||
void stop() override;
|
||||
|
||||
static QJsonObject genShadowSocksConfig(const ServerCredentials &credentials, Protocol proto = Protocol::ShadowSocksOverOpenVpn);
|
||||
static QJsonObject genShadowSocksConfig(const ServerCredentials &credentials, DockerContainer container = DockerContainer::ShadowSocksOverOpenVpn);
|
||||
|
||||
protected:
|
||||
void readShadowSocksConfiguration(const QJsonObject &configuration);
|
||||
|
|
|
@ -108,12 +108,12 @@ QJsonObject Settings::protocolConfig(int serverIndex, DockerContainer container,
|
|||
switch (proto) {
|
||||
case Protocol::OpenVpn:
|
||||
return c.value(config_key::openvpn).toObject();
|
||||
case Protocol::OpenVpnOverCloak:
|
||||
return c.value(config_key::openvpn).toObject();
|
||||
case Protocol::ShadowSocksOverOpenVpn:
|
||||
return c.value(config_key::openvpn).toObject();
|
||||
case Protocol::ShadowSocks:
|
||||
return c.value(config_key::shadowsocks).toObject();
|
||||
case Protocol::Cloak:
|
||||
return c.value(config_key::cloak).toObject();
|
||||
default:
|
||||
break;
|
||||
return QJsonObject();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -80,11 +80,11 @@ ErrorCode VpnConnection::lastError() const
|
|||
return m_vpnProtocol.data()->lastError();
|
||||
}
|
||||
|
||||
ErrorCode VpnConnection::createVpnConfiguration(const ServerCredentials &credentials, Protocol protocol)
|
||||
ErrorCode VpnConnection::createVpnConfiguration(const ServerCredentials &credentials, DockerContainer container)
|
||||
{
|
||||
ErrorCode errorCode = ErrorCode::NoError;
|
||||
if (protocol == Protocol::OpenVpn || protocol == Protocol::ShadowSocksOverOpenVpn || protocol == Protocol::OpenVpnOverCloak) {
|
||||
QString openVpnConfigData = OpenVpnConfigurator::genOpenVpnConfig(credentials, protocol, &errorCode);
|
||||
if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocksOverOpenVpn || container == DockerContainer::OpenVpnOverCloak) {
|
||||
QString openVpnConfigData = OpenVpnConfigurator::genOpenVpnConfig(credentials, container, &errorCode);
|
||||
m_vpnConfiguration.insert(config::key_openvpn_config_data, openVpnConfigData);
|
||||
if (errorCode) {
|
||||
return errorCode;
|
||||
|
@ -101,13 +101,13 @@ ErrorCode VpnConnection::createVpnConfiguration(const ServerCredentials &credent
|
|||
}
|
||||
}
|
||||
|
||||
if (protocol == Protocol::ShadowSocksOverOpenVpn) {
|
||||
if (container == DockerContainer::ShadowSocksOverOpenVpn) {
|
||||
QJsonObject ssConfigData = ShadowSocksVpnProtocol::genShadowSocksConfig(credentials);
|
||||
m_vpnConfiguration.insert(config::key_shadowsocks_config_data, ssConfigData);
|
||||
}
|
||||
|
||||
if (protocol == Protocol::OpenVpnOverCloak) {
|
||||
QJsonObject cloakConfigData = CloakConfigurator::genCloakConfig(credentials, Protocol::OpenVpnOverCloak, &errorCode);
|
||||
if (container == DockerContainer::OpenVpnOverCloak) {
|
||||
QJsonObject cloakConfigData = CloakConfigurator::genCloakConfig(credentials, DockerContainer::OpenVpnOverCloak, &errorCode);
|
||||
m_vpnConfiguration.insert(config::key_cloak_config_data, cloakConfigData);
|
||||
}
|
||||
|
||||
|
@ -115,13 +115,13 @@ ErrorCode VpnConnection::createVpnConfiguration(const ServerCredentials &credent
|
|||
return ErrorCode::NoError;
|
||||
}
|
||||
|
||||
ErrorCode VpnConnection::connectToVpn(const ServerCredentials &credentials, Protocol protocol)
|
||||
ErrorCode VpnConnection::connectToVpn(const ServerCredentials &credentials, DockerContainer container)
|
||||
{
|
||||
qDebug() << "connectToVpn, CustomRouting is" << m_settings.customRouting();
|
||||
// qDebug() << "Cred" << m_settings.serverCredentials().hostName <<
|
||||
// m_settings.serverCredentials().password;
|
||||
//protocol = Protocol::ShadowSocks;
|
||||
protocol = Protocol::OpenVpnOverCloak;
|
||||
container = DockerContainer::OpenVpnOverCloak;
|
||||
|
||||
// TODO: Try protocols one by one in case of Protocol::Any
|
||||
// TODO: Implement some behavior in case if connection not stable
|
||||
|
@ -138,8 +138,8 @@ ErrorCode VpnConnection::connectToVpn(const ServerCredentials &credentials, Prot
|
|||
|
||||
//qApp->processEvents();
|
||||
|
||||
if (protocol == Protocol::Any || protocol == Protocol::OpenVpn) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, Protocol::OpenVpn);
|
||||
if (container == DockerContainer::None || container == DockerContainer::OpenVpn) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, DockerContainer::OpenVpn);
|
||||
if (e) {
|
||||
emit connectionStateChanged(VpnProtocol::ConnectionState::Error);
|
||||
return e;
|
||||
|
@ -152,8 +152,8 @@ ErrorCode VpnConnection::connectToVpn(const ServerCredentials &credentials, Prot
|
|||
return e;
|
||||
}
|
||||
}
|
||||
else if (protocol == Protocol::ShadowSocksOverOpenVpn) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, Protocol::ShadowSocksOverOpenVpn);
|
||||
else if (container == DockerContainer::ShadowSocksOverOpenVpn) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, DockerContainer::ShadowSocksOverOpenVpn);
|
||||
if (e) {
|
||||
emit connectionStateChanged(VpnProtocol::ConnectionState::Error);
|
||||
return e;
|
||||
|
@ -166,8 +166,8 @@ ErrorCode VpnConnection::connectToVpn(const ServerCredentials &credentials, Prot
|
|||
return e;
|
||||
}
|
||||
}
|
||||
else if (protocol == Protocol::OpenVpnOverCloak) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, Protocol::OpenVpnOverCloak);
|
||||
else if (container == DockerContainer::OpenVpnOverCloak) {
|
||||
ErrorCode e = createVpnConfiguration(credentials, DockerContainer::OpenVpnOverCloak);
|
||||
if (e) {
|
||||
emit connectionStateChanged(VpnProtocol::ConnectionState::Error);
|
||||
return e;
|
||||
|
|
|
@ -24,9 +24,9 @@ public:
|
|||
static QString bytesPerSecToText(quint64 bytes);
|
||||
|
||||
ErrorCode lastError() const;
|
||||
ErrorCode createVpnConfiguration(const ServerCredentials &credentials, Protocol protocol);
|
||||
ErrorCode createVpnConfiguration(const ServerCredentials &credentials, DockerContainer container);
|
||||
|
||||
ErrorCode connectToVpn(const ServerCredentials &credentials, Protocol protocol = Protocol::Any);
|
||||
ErrorCode connectToVpn(const ServerCredentials &credentials, DockerContainer container = DockerContainer::None);
|
||||
void disconnectFromVpn();
|
||||
|
||||
bool isConnected() const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue