diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index a0776c30..585050e2 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -36,15 +36,14 @@ #include "ui/pages_logic/protocols/ShadowSocksLogic.h" -AmneziaApplication::AmneziaApplication(int &argc, char *argv[], bool allowSecondary, - SingleApplication::Options options, int timeout, const QString &userData): - #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) - QAPPLICATION_CLASS(argc, argv); - #else - SingleApplication(argc, argv, allowSecondary, options, timeout, userData) - #endif - - +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + AmneziaApplication::AmneziaApplication(int &argc, char *argv[]): + AMNEZIA_BASE_CLASS(argc, argv) +#else + AmneziaApplication::AmneziaApplication(int &argc, char *argv[], bool allowSecondary, + SingleApplication::Options options, int timeout, const QString &userData): + SingleApplication(argc, argv, allowSecondary, options, timeout, userData) +#endif { setQuitOnLastWindowClosed(false); m_settings = std::shared_ptr(new Settings); @@ -59,6 +58,9 @@ AmneziaApplication::~AmneziaApplication() QObject::disconnect(m_uiLogic, 0,0,0); delete m_uiLogic; + + delete m_protocolProps; + delete m_containerProps; } void AmneziaApplication::init() @@ -112,7 +114,7 @@ void AmneziaApplication::init() if (m_parser.isSet("a")) m_uiLogic->showOnStartup(); else emit m_uiLogic->show(); #else - uiLogic->showOnStartup(); + m_uiLogic->showOnStartup(); #endif // TODO - fix @@ -144,7 +146,6 @@ void AmneziaApplication::registerTypes() qRegisterMetaType("PageProtocolLogicBase *"); - declareQmlPageEnum(); declareQmlProtocolEnum(); declareQmlContainerEnum(); @@ -152,11 +153,11 @@ void AmneziaApplication::registerTypes() qmlRegisterType("PageType", 1, 0, "PageType"); qmlRegisterType("QRCodeReader", 1, 0, "QRCodeReader"); - QScopedPointer containerProps(new ContainerProps); - qmlRegisterSingletonInstance("ContainerProps", 1, 0, "ContainerProps", containerProps.get()); + m_containerProps = new ContainerProps; + qmlRegisterSingletonInstance("ContainerProps", 1, 0, "ContainerProps", m_containerProps); - QScopedPointer protocolProps(new ProtocolProps); - qmlRegisterSingletonInstance("ProtocolProps", 1, 0, "ProtocolProps", protocolProps.get()); + m_protocolProps = new ProtocolProps; + qmlRegisterSingletonInstance("ProtocolProps", 1, 0, "ProtocolProps", m_protocolProps); } void AmneziaApplication::loadFonts() diff --git a/client/amnezia_application.h b/client/amnezia_application.h index e0dfbc3a..c665ffef 100644 --- a/client/amnezia_application.h +++ b/client/amnezia_application.h @@ -13,13 +13,12 @@ #include "ui/uilogic.h" #include "configurators/vpn_configurator.h" -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) - #define AMNEZIA_BASE_CLASS SingleApplication - #define QAPPLICATION_CLASS QGuiApplication - #include "singleapplication.h" - //#undef QAPPLICATION_CLASS +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + #define AMNEZIA_BASE_CLASS QGuiApplication #else - #define AMNEZIA_BASE_CLASS QApplication + #define AMNEZIA_BASE_CLASS SingleApplication + #define QAPPLICATION_CLASS QApplication + #include "singleapplication.h" #endif class AmneziaApplication : public AMNEZIA_BASE_CLASS @@ -47,6 +46,9 @@ private: std::shared_ptr m_configurator; std::shared_ptr m_serverController; + ContainerProps* m_containerProps; + ProtocolProps* m_protocolProps; + QTranslator* m_translator; QCommandLineParser m_parser; diff --git a/client/client.pro b/client/client.pro index 996521d1..15702755 100644 --- a/client/client.pro +++ b/client/client.pro @@ -2,7 +2,6 @@ QT += widgets core gui network xml remoteobjects quick svg TARGET = AmneziaVPN TEMPLATE = app -#CONFIG += console CONFIG += qtquickcompiler CONFIG += qzxing_multimedia \ @@ -287,7 +286,7 @@ android { } ios { - message("Client ios build") + message("Client iOS build") CONFIG += static CONFIG += file_copies diff --git a/client/secure_qsettings.cpp b/client/secure_qsettings.cpp index 488feb49..547326df 100644 --- a/client/secure_qsettings.cpp +++ b/client/secure_qsettings.cpp @@ -32,6 +32,8 @@ SecureQSettings::SecureQSettings(const QString &organization, const QString &app QVariant SecureQSettings::value(const QString &key, const QVariant &defaultValue) const { + QMutexLocker locker(&mutex); + if (m_cache.contains(key)) { return m_cache.value(key); } @@ -76,6 +78,8 @@ QVariant SecureQSettings::value(const QString &key, const QVariant &defaultValue void SecureQSettings::setValue(const QString &key, const QVariant &value) { + QMutexLocker locker(&mutex); + if (encryptionRequired() && encryptedKeys.contains(key)) { if (!getEncKey().isEmpty() && !getEncIv().isEmpty()) { QByteArray decryptedValue; @@ -103,6 +107,8 @@ void SecureQSettings::setValue(const QString &key, const QVariant &value) void SecureQSettings::remove(const QString &key) { + QMutexLocker locker(&mutex); + m_settings.remove(key); m_cache.remove(key); diff --git a/client/secure_qsettings.h b/client/secure_qsettings.h index b36de1eb..ea6da106 100644 --- a/client/secure_qsettings.h +++ b/client/secure_qsettings.h @@ -3,6 +3,9 @@ #include #include +#include +#include + constexpr const char* settingsKeyTag = "settingsKeyTag"; constexpr const char* settingsIvTag = "settingsIvTag"; @@ -40,6 +43,7 @@ private: const QByteArray magicString { "EncData" }; // Magic keyword used for mark encrypted QByteArray + mutable QMutex mutex; }; #endif // SECUREQSETTINGS_H diff --git a/client/settings.cpp b/client/settings.cpp index 21deb0bd..58695f60 100644 --- a/client/settings.cpp +++ b/client/settings.cpp @@ -295,60 +295,10 @@ void Settings::removeVpnSites(RouteMode mode, const QStringList &sites) setVpnSites(mode, sitesMap); } -//void Settings::addVpnForwardSite(const QString &site, const QString &ip) -//{ -// auto sites = vpnForwardSites(); -// QStringList l = sites.value(site).toStringList(); -// if (!l.contains(ip)) { -// l.append(ip); -// setVpnForwardSites(sites); -// } -//} - -//QStringList Settings::getVpnForwardIps() const -//{ -// QStringList ips; -// const QVariantMap &m = vpnForwardSites(); -// for (const QVariant &v : m) { -// ips.append(v.toStringList()); -// } -// ips.removeDuplicates(); -// return ips; -//} - -//void Settings::addVpnExceptSite(const QString &site, const QString &ip) -//{ -// auto sites = vpnExceptSites(); -// QStringList l = sites.value(site).toStringList(); -// if (!l.contains(ip)) { -// l.append(ip); -// setVpnExceptSites(sites); -// } -//} - -//QStringList Settings::getVpnExceptIps() const -//{ -// QStringList ips; -// const QVariantMap &m = vpnExceptSites(); -// for (const QVariant &v : m) { -// ips.append(v.toStringList()); -// } -// ips.removeDuplicates(); -// return ips; -//} - QString Settings::primaryDns() const { return m_settings.value("Conf/primaryDns", cloudFlareNs1).toString(); } QString Settings::secondaryDns() const { return m_settings.value("Conf/secondaryDns", cloudFlareNs2).toString(); } -//void Settings::setServerCredentials(const ServerCredentials &credentials) -//{ -// setServerName(credentials.hostName); -// setServerPort(credentials.port); -// setUserName(credentials.userName); -// setPassword(credentials.password); -//} - ServerCredentials Settings::defaultServerCredentials() const { return serverCredentials(defaultServerIndex()); diff --git a/client/settings.h b/client/settings.h index fc575329..aa32cb0e 100644 --- a/client/settings.h +++ b/client/settings.h @@ -8,7 +8,6 @@ #include #include #include -#include #include "core/defs.h" #include "containers/containers_defs.h" @@ -27,7 +26,6 @@ public: ServerCredentials defaultServerCredentials() const; ServerCredentials serverCredentials(int index) const; - //void setServerCredentials(const ServerCredentials &credentials); QJsonArray serversArray() const { return QJsonDocument::fromJson(m_settings.value("Servers/serversList").toByteArray()).array(); } void setServersArray(const QJsonArray &servers) { m_settings.setValue("Servers/serversList", QJsonDocument(servers).toJson()); } @@ -117,7 +115,7 @@ public: private: SecureQSettings m_settings; - QMutex m_mutex; + }; #endif // SETTINGS_H