refactoring

Protocol to DockerContainer
This commit is contained in:
pokamest 2021-04-26 23:19:19 +03:00
parent 615bba69e5
commit d424bb24cf
13 changed files with 60 additions and 64 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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