diff --git a/client/core/defs.h b/client/core/defs.h index 99a7fc40..6df97d31 100644 --- a/client/core/defs.h +++ b/client/core/defs.h @@ -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) diff --git a/client/debug.cpp b/client/debug.cpp index a54b0131..9c0578b5 100644 --- a/client/debug.cpp +++ b/client/debug.cpp @@ -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; } diff --git a/client/protocols/ikev2_vpn_protocol.cpp b/client/protocols/ikev2_vpn_protocol.cpp index df143cf5..e7e80fcb 100644 --- a/client/protocols/ikev2_vpn_protocol.cpp +++ b/client/protocols/ikev2_vpn_protocol.cpp @@ -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(); } diff --git a/client/protocols/openvpnovercloakprotocol.cpp b/client/protocols/openvpnovercloakprotocol.cpp index 6636c27a..f2ac4512 100644 --- a/client/protocols/openvpnovercloakprotocol.cpp +++ b/client/protocols/openvpnovercloakprotocol.cpp @@ -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(); } diff --git a/client/protocols/openvpnprotocol.cpp b/client/protocols/openvpnprotocol.cpp index cb8c7807..c6dc4d35 100644 --- a/client/protocols/openvpnprotocol.cpp +++ b/client/protocols/openvpnprotocol.cpp @@ -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()) { diff --git a/client/protocols/protocols_defs.cpp b/client/protocols/protocols_defs.cpp index 26c86c4c..de54424a 100644 --- a/client/protocols/protocols_defs.cpp +++ b/client/protocols/protocols_defs.cpp @@ -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"; +} diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 770fed26..e046c0bc 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -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() { diff --git a/client/protocols/shadowsocksvpnprotocol.cpp b/client/protocols/shadowsocksvpnprotocol.cpp index b3267d01..702a35d8 100644 --- a/client/protocols/shadowsocksvpnprotocol.cpp +++ b/client/protocols/shadowsocksvpnprotocol.cpp @@ -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(); } diff --git a/client/protocols/wireguardprotocol.cpp b/client/protocols/wireguardprotocol.cpp index 0f5c06fe..5c37d446 100644 --- a/client/protocols/wireguardprotocol.cpp +++ b/client/protocols/wireguardprotocol.cpp @@ -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(); diff --git a/client/vpnconnection.cpp b/client/vpnconnection.cpp index 84d3a980..bda6d74c 100644 --- a/client/vpnconnection.cpp +++ b/client/vpnconnection.cpp @@ -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; } diff --git a/client/vpnconnection.h b/client/vpnconnection.h index 23d377c3..5ad0ef94 100644 --- a/client/vpnconnection.h +++ b/client/vpnconnection.h @@ -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);