refactoring

This commit is contained in:
pokamest 2021-10-04 21:13:07 +03:00
parent fa151cd320
commit 9ecb703b99
11 changed files with 56 additions and 44 deletions

View file

@ -66,18 +66,6 @@ enum ErrorCode
CloakExecutableCrashed
};
namespace config {
// config keys
const char key_openvpn_config_data[] = "openvpn_config_data";
const char key_openvpn_config_path[] = "openvpn_config_path";
const char key_shadowsocks_config_data[] = "shadowsocks_config_data";
const char key_cloak_config_data[] = "cloak_config_data";
const char key_wireguard_config_data[] = "wireguard_config_data";
const char key_ikev2_config_data[] = "ikev2_config_data";
}
} // namespace amnezia
Q_DECLARE_METATYPE(amnezia::ErrorCode)

View file

@ -31,6 +31,9 @@ void debugMessageHandler(QtMsgType type, const QMessageLogContext& context, cons
bool Debug::init()
{
qSetMessagePattern("%{time yyyy-MM-dd hh:mm:ss} %{type} %{message}");
#ifndef QT_DEBUG
QString path = userLogsDir();
QDir appDir(path);
if (!appDir.mkpath(path)) {
@ -39,7 +42,6 @@ bool Debug::init()
m_logFileName = QString("%1.log").arg(APPLICATION_NAME);
qSetMessagePattern("%{time yyyy-MM-dd hh:mm:ss} %{type} %{message}");
m_file.setFileName(appDir.filePath(m_logFileName));
if (!m_file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
@ -49,6 +51,7 @@ bool Debug::init()
m_file.setTextModeEnabled(true);
m_textStream.setDevice(&m_file);
qInstallMessageHandler(debugMessageHandler);
#endif
return true;
}

View file

@ -32,7 +32,8 @@ void Ikev2Protocol::stop()
void Ikev2Protocol::readIkev2Configuration(const QJsonObject &configuration)
{
m_config = configuration.value(config::key_ikev2_config_data).toObject();
QString cfgData = configuration.value(ProtocolProps::key_proto_config_data(Protocol::Ikev2)).toString();
m_config = QJsonDocument::fromJson(cfgData.toUtf8()).object();
}

View file

@ -113,5 +113,5 @@ QString OpenVpnOverCloakProtocol::cloakExecPath()
void OpenVpnOverCloakProtocol::readCloakConfiguration(const QJsonObject &configuration)
{
m_cloakConfig = configuration.value(config::key_cloak_config_data).toObject();
m_cloakConfig = configuration.value(ProtocolProps::key_proto_config_data(Protocol::Cloak)).toObject();
}

View file

@ -86,16 +86,16 @@ void OpenVpnProtocol::killOpenVpnProcess()
void OpenVpnProtocol::readOpenVpnConfiguration(const QJsonObject &configuration)
{
if (configuration.contains(config::key_openvpn_config_data)) {
if (configuration.contains(ProtocolProps::key_proto_config_data(Protocol::OpenVpn))) {
m_configFile.open();
m_configFile.write(configuration.value(config::key_openvpn_config_data).toString().toUtf8());
m_configFile.write(configuration.value(ProtocolProps::key_proto_config_data(Protocol::OpenVpn)).toString().toUtf8());
m_configFile.close();
m_configFileName = m_configFile.fileName();
qDebug().noquote() << QString("Set config data") << m_configFileName;
}
else if (configuration.contains(config::key_openvpn_config_path)) {
m_configFileName = configuration.value(config::key_openvpn_config_path).toString();
else if (configuration.contains(ProtocolProps::key_proto_config_path(Protocol::OpenVpn))) {
m_configFileName = configuration.value(ProtocolProps::key_proto_config_path(Protocol::OpenVpn)).toString();
QFileInfo file(m_configFileName);
if (file.fileName().isEmpty()) {

View file

@ -174,3 +174,13 @@ bool ProtocolProps::defaultTransportProtoChangeable(Protocol p)
default: return false;
}
}
QString ProtocolProps::key_proto_config_data(Protocol p)
{
return protoToString(p) + "_config_data";
}
QString ProtocolProps::key_proto_config_path(Protocol p)
{
return protoToString(p) + "_config_path";
}

View file

@ -164,6 +164,10 @@ public:
Q_INVOKABLE static TransportProto defaultTransportProto(Protocol p);
Q_INVOKABLE static bool defaultTransportProtoChangeable(Protocol p);
Q_INVOKABLE static QString key_proto_config_data(Protocol p);
Q_INVOKABLE static QString key_proto_config_path(Protocol p);
};
static void declareQmlProtocolEnum() {

View file

@ -112,5 +112,5 @@ QString ShadowSocksVpnProtocol::shadowSocksExecPath()
void ShadowSocksVpnProtocol::readShadowSocksConfiguration(const QJsonObject &configuration)
{
m_shadowSocksConfig = configuration.value(config::key_shadowsocks_config_data).toObject();
m_shadowSocksConfig = configuration.value(ProtocolProps::key_proto_config_data(Protocol::ShadowSocks)).toObject();
}

View file

@ -73,7 +73,7 @@ void WireguardProtocol::stop()
void WireguardProtocol::readWireguardConfiguration(const QJsonObject &configuration)
{
if (configuration.contains(config::key_wireguard_config_data)) {
if (configuration.contains(ProtocolProps::key_proto_config_data(Protocol::WireGuard))) {
if (!m_configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
qCritical() << "Failed to save wireguard config to" << m_configFile.fileName();
return;
@ -81,12 +81,12 @@ void WireguardProtocol::readWireguardConfiguration(const QJsonObject &configurat
m_isConfigLoaded = true;
m_configFile.write(configuration.value(config::key_wireguard_config_data).toString().toUtf8());
m_configFile.write(configuration.value(ProtocolProps::key_proto_config_data(Protocol::Ikev2)).toString().toUtf8());
m_configFile.close();
m_configFileName = m_configFile.fileName();
qDebug().noquote() << QString("Set config data") << m_configFileName;
qDebug().noquote() << QString("Set config data") << configuration.value(config::key_wireguard_config_data).toString().toUtf8();
qDebug().noquote() << QString("Set config data") << configuration.value(ProtocolProps::key_proto_config_data(Protocol::WireGuard)).toString().toUtf8();
}
// else if (configuration.contains(config::key_wireguard_config_path)) {
// m_configFileName = configuration.value(config::key_wireguard_config_path).toString();

View file

@ -184,10 +184,12 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
return configData;
}
ErrorCode VpnConnection::createVpnConfiguration(int serverIndex,
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig)
QJsonObject VpnConnection::createVpnConfiguration(int serverIndex,
const ServerCredentials &credentials, DockerContainer container,
const QJsonObject &containerConfig, ErrorCode *errorCode)
{
ErrorCode errorCode = ErrorCode::NoError;
ErrorCode e = ErrorCode::NoError;
QJsonObject vpnConfiguration;
if (container == DockerContainer::OpenVpn ||
container == DockerContainer::ShadowSocks ||
@ -195,12 +197,13 @@ ErrorCode VpnConnection::createVpnConfiguration(int serverIndex,
QString openVpnConfigData =
createVpnConfigurationForProto(
serverIndex, credentials, container, containerConfig, Protocol::OpenVpn, &errorCode);
serverIndex, credentials, container, containerConfig, Protocol::OpenVpn, &e);
m_vpnConfiguration.insert(config::key_openvpn_config_data, openVpnConfigData);
if (errorCode) {
return errorCode;
vpnConfiguration.insert(ProtocolProps::key_proto_config_data(Protocol::OpenVpn), openVpnConfigData);
if (e) {
if (errorCode) *errorCode = e;
return {};
}
QFile file(OpenVpnProtocol::defaultConfigFileName());
@ -210,44 +213,45 @@ ErrorCode VpnConnection::createVpnConfiguration(int serverIndex,
file.close();
}
else {
return ErrorCode::FailedToSaveConfigData;
if (errorCode) *errorCode = ErrorCode::FailedToSaveConfigData;
return {};
}
}
if (container == DockerContainer::ShadowSocks) {
QJsonObject ssConfigData = QJsonDocument::fromJson(
createVpnConfigurationForProto(
serverIndex, credentials, container, containerConfig, Protocol::ShadowSocks, &errorCode).toUtf8()).
serverIndex, credentials, container, containerConfig, Protocol::ShadowSocks, &e).toUtf8()).
object();
m_vpnConfiguration.insert(config::key_shadowsocks_config_data, ssConfigData);
vpnConfiguration.insert(ProtocolProps::key_proto_config_data(Protocol::ShadowSocks), ssConfigData);
}
if (container == DockerContainer::Cloak) {
QJsonObject cloakConfigData = QJsonDocument::fromJson(
createVpnConfigurationForProto(
serverIndex, credentials, container, containerConfig, Protocol::Cloak, &errorCode).toUtf8()).
serverIndex, credentials, container, containerConfig, Protocol::Cloak, &e).toUtf8()).
object();
m_vpnConfiguration.insert(config::key_cloak_config_data, cloakConfigData);
vpnConfiguration.insert(ProtocolProps::key_proto_config_data(Protocol::Cloak), cloakConfigData);
}
if (container == DockerContainer::WireGuard) {
QString wgConfigData = createVpnConfigurationForProto(
serverIndex, credentials, container, containerConfig, Protocol::WireGuard, &errorCode);
serverIndex, credentials, container, containerConfig, Protocol::WireGuard, &e);
m_vpnConfiguration.insert(config::key_wireguard_config_data, wgConfigData);
vpnConfiguration.insert(ProtocolProps::key_proto_config_data(Protocol::WireGuard), wgConfigData);
}
if (container == DockerContainer::Ipsec) {
QString ikev2ConfigData = createVpnConfigurationForProto(
serverIndex, credentials, container, containerConfig, Protocol::Ikev2, &errorCode);
serverIndex, credentials, container, containerConfig, Protocol::Ikev2, &e);
m_vpnConfiguration.insert(config::key_ikev2_config_data, ikev2ConfigData);
vpnConfiguration.insert(ProtocolProps::key_proto_config_data(Protocol::Ikev2), ikev2ConfigData);
}
//qDebug().noquote() << "VPN config" << QJsonDocument(m_vpnConfiguration).toJson();
return ErrorCode::NoError;
return vpnConfiguration;
}
ErrorCode VpnConnection::connectToVpn(int serverIndex,
@ -265,7 +269,8 @@ ErrorCode VpnConnection::connectToVpn(int serverIndex,
m_vpnProtocol.reset();
}
ErrorCode e = createVpnConfiguration(serverIndex, credentials, container, containerConfig);
ErrorCode e = ErrorCode::NoError;
m_vpnConfiguration = createVpnConfiguration(serverIndex, credentials, container, containerConfig);
if (e) {
emit connectionStateChanged(VpnProtocol::Error);
return e;
@ -274,7 +279,7 @@ ErrorCode VpnConnection::connectToVpn(int serverIndex,
#ifndef Q_OS_ANDROID
m_vpnProtocol.reset(VpnProtocol::factory(container, containerConfig));
m_vpnProtocol.reset(VpnProtocol::factory(container, m_vpnConfiguration));
if (!m_vpnProtocol) {
return ErrorCode::InternalError;
}

View file

@ -30,8 +30,9 @@ public:
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, Protocol proto,
ErrorCode *errorCode = nullptr);
ErrorCode createVpnConfiguration(int serverIndex,
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig);
QJsonObject createVpnConfiguration(int serverIndex,
const ServerCredentials &credentials, DockerContainer container,
const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr);
ErrorCode connectToVpn(int serverIndex,
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig);