Openvpn scripts fixes

some refactoring
This commit is contained in:
pokamest 2021-01-07 20:53:42 +03:00
parent c7dafe9c00
commit bfdbe27a8d
5 changed files with 74 additions and 51 deletions

View file

@ -2,7 +2,7 @@ QT += widgets core gui network xml
TARGET = AmneziaVPN TARGET = AmneziaVPN
TEMPLATE = app TEMPLATE = app
CONFIG += console #CONFIG += console
DEFINES += QT_DEPRECATED_WARNINGS DEFINES += QT_DEPRECATED_WARNINGS
@ -10,52 +10,52 @@ include("3rd/QtSsh/src/ssh/ssh.pri")
include("3rd/QtSsh/src/botan/botan.pri") include("3rd/QtSsh/src/botan/botan.pri")
HEADERS += \ HEADERS += \
communicator.h \ communicator.h \
core/defs.h \ core/defs.h \
core/errorstrings.h \ core/errorstrings.h \
core/openvpnconfigurator.h \ core/openvpnconfigurator.h \
core/router.h \ core/router.h \
core/servercontroller.h \ core/servercontroller.h \
debug.h \ debug.h \
defines.h \ defines.h \
localclient.h \ localclient.h \
managementserver.h \ managementserver.h \
message.h \ message.h \
runguard.h \ runguard.h \
settings.h \ settings.h \
ui/Controls/SlidingStackedWidget.h \ ui/Controls/SlidingStackedWidget.h \
ui/mainwindow.h \ ui/mainwindow.h \
utils.h \ utils.h \
vpnconnection.h \ vpnconnection.h \
protocols/vpnprotocol.h \ protocols/vpnprotocol.h \
protocols/openvpnprotocol.h \ protocols/openvpnprotocol.h \
SOURCES += \ SOURCES += \
communicator.cpp \ communicator.cpp \
core/openvpnconfigurator.cpp \ core/openvpnconfigurator.cpp \
core/router.cpp \ core/router.cpp \
core/servercontroller.cpp \ core/servercontroller.cpp \
debug.cpp \ debug.cpp \
localclient.cpp \ localclient.cpp \
main.cpp \ main.cpp \
managementserver.cpp \ managementserver.cpp \
message.cpp \ message.cpp \
runguard.cpp \ runguard.cpp \
settings.cpp \ settings.cpp \
ui/Controls/SlidingStackedWidget.cpp \ ui/Controls/SlidingStackedWidget.cpp \
ui/mainwindow.cpp \ ui/mainwindow.cpp \
utils.cpp \ utils.cpp \
vpnconnection.cpp \ vpnconnection.cpp \
protocols/vpnprotocol.cpp \ protocols/vpnprotocol.cpp \
protocols/openvpnprotocol.cpp \ protocols/openvpnprotocol.cpp \
FORMS += ui/mainwindow.ui FORMS += ui/mainwindow.ui
RESOURCES += \ RESOURCES += \
resources.qrc resources.qrc
TRANSLATIONS = \ TRANSLATIONS = \
translations/amneziavpn_ru.ts translations/amneziavpn_ru.ts
CONFIG(release, debug|release) { CONFIG(release, debug|release) {
DESTDIR = $$PWD/../../AmneziaVPN-build/client/release DESTDIR = $$PWD/../../AmneziaVPN-build/client/release

View file

@ -44,6 +44,7 @@ enum ErrorCode
FailedToSaveConfigData, FailedToSaveConfigData,
OpenVpnConfigMissing, OpenVpnConfigMissing,
OpenVpnManagementServerError, OpenVpnManagementServerError,
EasyRsaError,
// Distro errors // Distro errors
AmneziaServiceConnectionFailed, AmneziaServiceConnectionFailed,

View file

@ -21,12 +21,19 @@ QString OpenVpnConfigurator::getRandomString(int len)
QString OpenVpnConfigurator::getEasyRsaShPath() QString OpenVpnConfigurator::getEasyRsaShPath()
{ {
#ifdef Q_OS_WIN
// easyrsa sh path should looks like
// "/Program Files (x86)/AmneziaVPN/easyrsa/easyrsa"
QString easyRsaShPath = QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\easyrsa\\easyrsa"; QString easyRsaShPath = QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\easyrsa\\easyrsa";
easyRsaShPath.replace(":", ""); easyRsaShPath.replace("C:\\", "");
easyRsaShPath.replace("\\", "/"); easyRsaShPath.replace("\\", "/");
easyRsaShPath.prepend("/"); easyRsaShPath.prepend("/");
return easyRsaShPath; //return "\"" + easyRsaShPath + "\"";
return "\"/Program Files (x86)/AmneziaVPN/easyrsa/easyrsa\"";
#else
return QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/easyrsa/easyrsa";
#endif
} }
QProcessEnvironment OpenVpnConfigurator::prepareEnv() QProcessEnvironment OpenVpnConfigurator::prepareEnv()
@ -46,9 +53,12 @@ void OpenVpnConfigurator::initPKI(const QString &path)
p.setProcessChannelMode(QProcess::MergedChannels); p.setProcessChannelMode(QProcess::MergedChannels);
p.setProcessEnvironment(prepareEnv()); p.setProcessEnvironment(prepareEnv());
QString command = QString("sh.exe"); //QString command = QString("sh.exe");
QString command = QString("cmd.exe");
p.setNativeArguments(getEasyRsaShPath() + " init-pki"); //p.setNativeArguments(getEasyRsaShPath() + " init-pki");
p.setNativeArguments(QString("/C \"sh.exe %1\"").arg(getEasyRsaShPath() + " init-pki"));
//qDebug().noquote() << p.nativeArguments();
p.setWorkingDirectory(path); p.setWorkingDirectory(path);
@ -66,9 +76,13 @@ QString OpenVpnConfigurator::genReq(const QString &path, const QString &clientId
p.setProcessChannelMode(QProcess::MergedChannels); p.setProcessChannelMode(QProcess::MergedChannels);
p.setProcessEnvironment(prepareEnv()); p.setProcessEnvironment(prepareEnv());
QString command = QString("sh.exe"); //QString command = QString("sh.exe");
QString command = QString("cmd.exe");
//p.setNativeArguments(getEasyRsaShPath() + " gen-req " + clientId + " nopass");
p.setNativeArguments(QString("/C \"sh.exe %1\"").arg(getEasyRsaShPath() + " gen-req " + clientId + " nopass"));
//qDebug().noquote() << p.nativeArguments();
p.setNativeArguments(getEasyRsaShPath() + " gen-req " + clientId + " nopass");
p.setWorkingDirectory(path); p.setWorkingDirectory(path);
@ -114,9 +128,8 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::createCertRequest()
key.open(QIODevice::ReadOnly); key.open(QIODevice::ReadOnly);
connData.privKey = key.readAll(); connData.privKey = key.readAll();
qDebug().noquote() << connData.request; // qDebug().noquote() << connData.request;
qDebug().noquote() << connData.privKey; // qDebug().noquote() << connData.privKey;
return connData; return connData;
} }
@ -126,6 +139,11 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co
OpenVpnConfigurator::ConnectionData connData = OpenVpnConfigurator::createCertRequest(); OpenVpnConfigurator::ConnectionData connData = OpenVpnConfigurator::createCertRequest();
connData.host = credentials.hostName; connData.host = credentials.hostName;
if (connData.privKey.isEmpty() || connData.request.isEmpty()) {
*errorCode = ErrorCode::EasyRsaExecutableMissing;
return connData;
}
QString reqFileName = QString("/opt/amneziavpn_data/clients/%1.req").arg(connData.clientId); QString reqFileName = QString("/opt/amneziavpn_data/clients/%1.req").arg(connData.clientId);
ErrorCode e = ServerController::uploadTextFileToContainer(credentials, connData.request, reqFileName); ErrorCode e = ServerController::uploadTextFileToContainer(credentials, connData.request, reqFileName);
if (e) { if (e) {

View file

@ -1,5 +1,6 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QFileInfo> #include <QFileInfo>
#include <QTcpSocket>
#include "communicator.h" #include "communicator.h"
#include "debug.h" #include "debug.h"
@ -94,8 +95,11 @@ QString OpenVpnProtocol::configPath() const
void OpenVpnProtocol::writeCommand(const QString& command) void OpenVpnProtocol::writeCommand(const QString& command)
{ {
QTextStream stream(reinterpret_cast<QIODevice*>(m_managementServer.socket())); QIODevice *device = dynamic_cast<QIODevice*>(m_managementServer.socket().data());
stream << command << endl; if (device) {
QTextStream stream(device);
stream << command << endl;
}
} }
QString OpenVpnProtocol::openVpnExecPath() const QString OpenVpnProtocol::openVpnExecPath() const

View file

@ -15,7 +15,7 @@ class OpenVpnProtocol : public VpnProtocol
public: public:
explicit OpenVpnProtocol(const QString& args = QString(), QObject* parent = nullptr); explicit OpenVpnProtocol(const QString& args = QString(), QObject* parent = nullptr);
~OpenVpnProtocol(); ~OpenVpnProtocol() override;
ErrorCode start() override; ErrorCode start() override;
void stop() override; void stop() override;