mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-05-25 12:26:45 +03:00
* refactor: move business logic from servers model * refactor: move containersModel initialization * refactor: added protocol ui controller and removed settings class from protocols model * refactor: moved cli management to separate controller * refactor: moved app split to separate controller * refactor: moved site split to separate controller * refactor: moved allowed dns to separate controller * refactor: moved language logic to separate ui controller * refactor: removed Settings from devices model * refactor: moved configs and services api logit to separate core controller * refactor: added a layer with a repository between the storage and controllers * refactor: use child parent system instead of smart pointers for controllers and models initialization * refactor: moved install functions from server controller to install controller * refactor: install controller refactoring * chore: renamed exportController to exportUiController * refactor: separate export controller * refactor: removed VpnConfigurationsController * chore: renamed ServerController to SshSession * refactor: replaced ServerController to SshSession * chore: moved qml controllers to separate folder * chore: include fixes * chore: moved utils from core root to core/utils * chore: include fixes * chore: rename core/utils files to camelCase foramt * chore: include fixes * chore: moved some utils to api and selfhosted folders * chore: include fixes * chore: remove unused file * chore: moved serialization folder to core/utils * chore: include fixes * chore: moved some files from client root to core/utils * chore: include fixes * chore: moved ui utils to ui/utils folder * chore: include fixes * chore: move utils from root to ui/utils * chore: include fixes * chore: moved configurators to core/configurators * chore: include fixes * refactor: moved iap logic from ui controller to core * refactor: moved remaining core logic from ApiConfigsController to SubscriptionController * chore: rename apiNewsController to apiNewsUiController * refactor: moved core logic from news ui controller to core * chore: renamed apiConfigsController to subscriptionUiController * chore: include fixes * refactor: merge ApiSettingsController with SubscriptionUiController * chore: moved ui selfhosted controllers to separate folder * chore: include fixes * chore: rename connectionController to connectiomUiController * refactor: moved core logic from connectionUiController * chore: rename settingsController to settingsUiController * refactor: move core logic from settingsUiController * refactor: moved core controller signal/slot connections to separate class * fix: newsController fixes after refactoring * chore: rename model to camelCase * chore: include fixes * chore: remove unused code * chore: move selfhosted core to separate folder * chore: include fixes * chore: rename importController to importUiController * refactor: move core logic from importUiController * chore: minor fixes * chore: remove prem v1 migration * refactor: remove openvpn over cloak and openvpn over shadowsocks * refactor: removed protocolsForContainer function * refactor: add core models * refactor: replace json with c++ structs for server config * refactor: move getDnsPair to ServerConfigUtils * feat: add admin selfhosted config export test * feat: add multi import test * refactor: use coreController for tests * feat: add few simple tests * chore: qrepos in all core controllers * feat: add test for settings * refactor: remove repo dependency from configurators * chore: moved protocols to core folder * chore: include fixes * refactor: moved containersDefs, defs, apiDefs, protocolsDefs to different places * chore: include fixes * chore: build fixes * chore: build fixes * refactor: remove q repo and interface repo * feat: add test for ui servers model and controller * chore: renamed to camelCase * chore: include fixes * refactor: moved core logic from sites ui controller * fix: fixed api config processing * fix: fixed processed server index processing * refactor: protocol models now use c++ structs instead of json configs * refactor: servers model now use c++ struct instead of json config * fix: fixed default server index processing * fix: fix logs init * fix: fix secure settings load keys * chore: build fixes * fix: fixed clear settings * fix: fixed restore backup * fix: sshSession usage * fix: fixed export functions signatures * fix: return missing part from buildContainerWorker * fix: fixed server description on page home * refactor: add container config helpers functions * refactor: c++ structs instead of json * chore: add dns protocol config struct * refactor: move config utils functions to config structs * feat: add test for selfhosted server setup * refactor: separate resources.qrc * fix: fixed server rename * chore: return nameOverriddenByUser * fix: build fixes * fix: fixed models init * refactor: cleanup models usage * fix: fixed models init * chore: cleanup connections and functions signatures * chore: cleanup updateModel calls * feat: added cache to servers repo * chore: cleanup unused functions * chore: ssxray processing * chore: remove transportProtoWithDefault and portWithDefault functions * chore: removed proto types any and l2tp * refactor: moved some constants * fix: fixed native configs export * refactor: remove json from processConfigWith functions * fix: fixed processed server index usage * fix: qml warning fixes * chore: merge fixes * chore: update tests * fix: fixed xray config processing * fix: fixed split tunneling processing * chore: rename sites controllers and model * chore: rename fixes * chore: minor fixes * chore: remove ability to load backup from "file with connection settings" button * fix: fixed api device revoke * fix: remove full model update when renaming a user * fix: fixed premium/free server rename * fix: fixed selfhosted new server install * fix: fixed updateContainer function * fix: fixed revoke for external premium configs * feat: add native configs qr processing * chore: codestyle fixes * fix: fixed admin config create * chore: again remove ability to load backup from "file with connection settings" button * chore: minor fixes * fix: fixed variables initialization * fix: fixed qml imports * fix: minor fixes * fix: fix vpnConnection function calls * feat: add buckup error handling * fix: fixed admin config revok * fix: fixed selfhosted awg installation * fix: ad visability * feat: add empty check for primary dns * chore: minor fixes
160 lines
4.7 KiB
C++
160 lines
4.7 KiB
C++
// The MIT License (MIT)
|
|
//
|
|
// Copyright (C) 2016 Mostafa Sedaghat Joo (mostafa.sedaghat@gmail.com)
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
#include "qAutoStart.h"
|
|
|
|
#include <QCoreApplication>
|
|
#include <QTextStream>
|
|
#include <QFileInfo>
|
|
#include <QSettings>
|
|
#include <QProcess>
|
|
#include <QString>
|
|
#include <QFile>
|
|
#include <QDir>
|
|
|
|
#if defined (Q_OS_WIN)
|
|
#define REG_KEY "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
|
|
|
bool Autostart::isAutostart() {
|
|
QSettings settings(REG_KEY, QSettings::NativeFormat);
|
|
|
|
if (settings.value(appName()).isNull()) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void Autostart::setAutostart(bool autostart) {
|
|
QSettings settings(REG_KEY, QSettings::NativeFormat);
|
|
|
|
if (autostart) {
|
|
settings.setValue(appName() , appPath().replace('/','\\'));
|
|
} else {
|
|
settings.remove(appName());
|
|
}
|
|
}
|
|
|
|
QString Autostart::appPath() {
|
|
return QCoreApplication::applicationFilePath() + " --autostart";
|
|
}
|
|
|
|
#elif defined Q_OS_MACX
|
|
|
|
bool Autostart::isAutostart() {
|
|
QProcess process;
|
|
process.start("osascript", {
|
|
"-e tell application \"System Events\" to get the path of every login item"
|
|
});
|
|
process.waitForFinished(3000);
|
|
const auto output = QString::fromLocal8Bit(process.readAllStandardOutput());
|
|
return output.contains(appPath());
|
|
}
|
|
|
|
void Autostart::setAutostart(bool autostart) {
|
|
// Remove any existing login entry for this app first, in case there was one
|
|
// from a previous installation, that may be under a different launch path.
|
|
{
|
|
QProcess::execute("osascript", {
|
|
"-e tell application \"System Events\" to delete every login item whose name is \"" + appName() + "\""
|
|
});
|
|
}
|
|
|
|
// Now install the login item, if needed.
|
|
if ( autostart )
|
|
{
|
|
QProcess::execute("osascript", {
|
|
"-e tell application \"System Events\" to make login item at end with properties {path:\"" + appPath() + "\", hidden:true, name: \"" + appName() + "\"}"
|
|
});
|
|
}
|
|
}
|
|
|
|
QString Autostart::appPath() {
|
|
QDir appDir = QDir(QCoreApplication::applicationDirPath());
|
|
appDir.cdUp();
|
|
appDir.cdUp();
|
|
QString absolutePath = appDir.absolutePath();
|
|
|
|
return absolutePath;
|
|
}
|
|
|
|
#elif defined (Q_OS_LINUX)
|
|
bool Autostart::isAutostart() {
|
|
QFileInfo check_file(QDir::homePath() + "/.config/autostart/" + appName() +".desktop");
|
|
|
|
if (check_file.exists() && check_file.isFile()) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void Autostart::setAutostart(bool autostart) {
|
|
QString path = QDir::homePath() + "/.config/autostart/";
|
|
QString name = appName() +".desktop";
|
|
QFile file(path+name);
|
|
|
|
file.remove();
|
|
|
|
if(autostart) {
|
|
QDir dir(path);
|
|
if(!dir.exists()) {
|
|
dir.mkpath(path);
|
|
}
|
|
|
|
if (file.open(QIODevice::ReadWrite)) {
|
|
QTextStream stream(&file);
|
|
stream << "[Desktop Entry]" << Qt::endl;
|
|
stream << "Exec=AmneziaVPN" << Qt::endl;
|
|
stream << "Type=Application" << Qt::endl;
|
|
stream << "Name=AmneziaVPN" << Qt::endl;
|
|
stream << "Comment=Client of your self-hosted VPN" << Qt::endl;
|
|
stream << "Icon=/usr/share/pixmaps/AmneziaVPN.png" << Qt::endl;
|
|
stream << "Categories=Network;Qt;Security;" << Qt::endl;
|
|
stream << "Terminal=false" << Qt::endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
QString Autostart::appPath() {
|
|
return QCoreApplication::applicationFilePath() + " --autostart";
|
|
}
|
|
|
|
#else
|
|
|
|
bool Autostart::isAutostart() {
|
|
return false;
|
|
}
|
|
|
|
void Autostart::setAutostart(bool autostart) {
|
|
Q_UNUSED(autostart);
|
|
}
|
|
|
|
QString Autostart::appPath() {
|
|
return QString();
|
|
}
|
|
#endif
|
|
|
|
QString Autostart::appName() {
|
|
return QCoreApplication::applicationName();
|
|
}
|