diff --git a/client/core/openvpnconfigurator.cpp b/client/core/openvpnconfigurator.cpp index 813b4b85..cfb4b146 100644 --- a/client/core/openvpnconfigurator.cpp +++ b/client/core/openvpnconfigurator.cpp @@ -32,7 +32,7 @@ QString OpenVpnConfigurator::getEasyRsaShPath() //return "\"" + easyRsaShPath + "\""; return "\"/Program Files (x86)/AmneziaVPN/easyrsa/easyrsa\""; #else - return QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/easyrsa/easyrsa"; + return QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/easyrsa"; #endif } @@ -40,69 +40,82 @@ QProcessEnvironment OpenVpnConfigurator::prepareEnv() { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QString pathEnvVar = env.value("PATH"); + +#ifdef Q_OS_WIN pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\easyrsa\\bin;"); pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\openvpn\\i386;"); pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\openvpn\\x64;"); +#else + pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS"); +#endif env.insert("PATH", pathEnvVar); return env; } -void OpenVpnConfigurator::initPKI(const QString &path) +ErrorCode OpenVpnConfigurator::initPKI(const QString &path) { -#ifdef Q_OS_WIN QProcess p; p.setProcessChannelMode(QProcess::MergedChannels); p.setProcessEnvironment(prepareEnv()); - //QString command = QString("sh.exe"); - QString command = QString("cmd.exe"); - +#ifdef Q_OS_WIN + //p.setProgram("sh.exe"); //p.setNativeArguments(getEasyRsaShPath() + " init-pki"); + + p.setProgram("cmd.exe"); p.setNativeArguments(QString("/C \"sh.exe %1\"").arg(getEasyRsaShPath() + " init-pki")); - //qDebug().noquote() << p.nativeArguments(); +#else + p.setProgram(getEasyRsaShPath()); + p.setArguments(QStringList() << "init-pki"); +#endif p.setWorkingDirectory(path); - p.start(command); - p.waitForFinished(); - qDebug().noquote() << p.readAll(); +// QObject::connect(&p, &QProcess::channelReadyRead, [&](){ +// qDebug().noquote() << p.readAll(); +// }); -#endif + p.start(); + p.waitForFinished(); + + if (p.exitCode() == 0) return ErrorCode::NoError; + else return ErrorCode::EasyRsaError; } -QString OpenVpnConfigurator::genReq(const QString &path, const QString &clientId) +ErrorCode OpenVpnConfigurator::genReq(const QString &path, const QString &clientId) { -#ifdef Q_OS_WIN QProcess p; p.setProcessChannelMode(QProcess::MergedChannels); p.setProcessEnvironment(prepareEnv()); - //QString command = QString("sh.exe"); - QString command = QString("cmd.exe"); - +#ifdef Q_OS_WIN + //p.setProgram("sh.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.setProgram("cmd.exe"); + p.setNativeArguments(QString("/C \"sh.exe %1\"").arg(getEasyRsaShPath() + " gen-req " + clientId + " nopass")); +#else + p.setArguments(QStringList() << "gen-req" << clientId << "nopass"); + p.setProgram(getEasyRsaShPath()); +#endif p.setWorkingDirectory(path); QObject::connect(&p, &QProcess::channelReadyRead, [&](){ QString data = p.readAll(); - qDebug().noquote() << data; + //qDebug().noquote() << data; if (data.contains("Common Name (eg: your user, host, or server name)")) { p.write("\n"); } }); - p.start(command); + p.start(); p.waitForFinished(); -// qDebug().noquote() << p.readAll(); - return ""; -#endif + if (p.exitCode() == 0) return ErrorCode::NoError; + else return ErrorCode::EasyRsaError; } @@ -119,7 +132,7 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::createCertRequest() QString path = dir.path(); initPKI(path); - genReq(path, connData.clientId); + ErrorCode errorCode = genReq(path, connData.clientId); QFile req(path + "/pki/reqs/" + connData.clientId + ".req"); diff --git a/client/core/openvpnconfigurator.h b/client/core/openvpnconfigurator.h index a4e965d4..9f9b060b 100644 --- a/client/core/openvpnconfigurator.h +++ b/client/core/openvpnconfigurator.h @@ -29,8 +29,8 @@ private: static QString getEasyRsaShPath(); static QProcessEnvironment prepareEnv(); - static void initPKI(const QString &path); - static QString genReq(const QString &path, const QString &clientId); + static ErrorCode initPKI(const QString &path); + static ErrorCode genReq(const QString &path, const QString &clientId); static ConnectionData createCertRequest();