refactoring
This commit is contained in:
parent
fa151cd320
commit
9ecb703b99
11 changed files with 56 additions and 44 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue