mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-24 02:00:24 +07:00
Wireguard configurator fixed
This commit is contained in:
@@ -6,6 +6,11 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTemporaryFile>
|
#include <QTemporaryFile>
|
||||||
|
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
#include <openssl/rsa.h>
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
#include "sftpdefs.h"
|
#include "sftpdefs.h"
|
||||||
|
|
||||||
#include "core/server_defs.h"
|
#include "core/server_defs.h"
|
||||||
@@ -13,72 +18,34 @@
|
|||||||
#include "core/scripts_registry.h"
|
#include "core/scripts_registry.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
QProcessEnvironment WireguardConfigurator::prepareEnv()
|
|
||||||
{
|
|
||||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
|
||||||
QString pathEnvVar = env.value("PATH");
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
pathEnvVar.clear();
|
|
||||||
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\wireguard;");
|
|
||||||
#else
|
|
||||||
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
env.insert("PATH", pathEnvVar);
|
|
||||||
qDebug().noquote() << "ENV PATH" << pathEnvVar;
|
|
||||||
return env;
|
|
||||||
}
|
|
||||||
|
|
||||||
WireguardConfigurator::ConnectionData WireguardConfigurator::genClientKeys()
|
WireguardConfigurator::ConnectionData WireguardConfigurator::genClientKeys()
|
||||||
{
|
{
|
||||||
|
// TODO review
|
||||||
|
constexpr size_t EDDSA_KEY_LENGTH = 32;
|
||||||
|
|
||||||
ConnectionData connData;
|
ConnectionData connData;
|
||||||
|
|
||||||
QString program;
|
unsigned char buff[EDDSA_KEY_LENGTH];
|
||||||
#ifdef Q_OS_WIN
|
int ret = RAND_priv_bytes(buff, EDDSA_KEY_LENGTH);
|
||||||
program = QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\wireguard\\wg.exe";
|
if (ret <=0) return connData;
|
||||||
#else
|
|
||||||
program = QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS/wg";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef Q_OS_IOS
|
EVP_PKEY * pKey = EVP_PKEY_new();
|
||||||
|
q_check_ptr(pKey);
|
||||||
|
pKey = EVP_PKEY_new_raw_private_key(EVP_PKEY_ED25519, NULL, &buff[0], EDDSA_KEY_LENGTH);
|
||||||
|
|
||||||
// Priv
|
|
||||||
{
|
|
||||||
QProcess p;
|
|
||||||
p.setProcessEnvironment(prepareEnv());
|
|
||||||
p.setProcessChannelMode(QProcess::MergedChannels);
|
|
||||||
p.setProgram(program);
|
|
||||||
|
|
||||||
p.setArguments(QStringList() << "genkey");
|
size_t keySize = EDDSA_KEY_LENGTH;
|
||||||
|
|
||||||
p.start();
|
// save private key
|
||||||
p.waitForFinished();
|
unsigned char priv[EDDSA_KEY_LENGTH];
|
||||||
|
EVP_PKEY_get_raw_private_key(pKey, priv, &keySize);
|
||||||
|
connData.clientPrivKey = QByteArray::fromRawData((char*)priv, keySize).toBase64();
|
||||||
|
|
||||||
connData.clientPrivKey = QString(p.readAll());
|
// save public key
|
||||||
connData.clientPrivKey.replace("\r", "");
|
unsigned char pub[EDDSA_KEY_LENGTH];
|
||||||
connData.clientPrivKey.replace("\n", "");
|
EVP_PKEY_get_raw_public_key(pKey, pub, &keySize);
|
||||||
}
|
connData.clientPubKey = QByteArray::fromRawData((char*)pub, keySize).toBase64();
|
||||||
|
|
||||||
// Pub
|
|
||||||
{
|
|
||||||
QProcess p;
|
|
||||||
p.setProcessEnvironment(prepareEnv());
|
|
||||||
p.setProcessChannelMode(QProcess::MergedChannels);
|
|
||||||
p.setProgram(program);
|
|
||||||
|
|
||||||
p.setArguments(QStringList() << "pubkey");
|
|
||||||
|
|
||||||
p.start();
|
|
||||||
p.write(connData.clientPrivKey.toUtf8());
|
|
||||||
p.closeWriteChannel();
|
|
||||||
p.waitForFinished();
|
|
||||||
|
|
||||||
connData.clientPubKey = QString(p.readAll());
|
|
||||||
connData.clientPubKey.replace("\r", "");
|
|
||||||
connData.clientPubKey.replace("\n", "");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return connData;
|
return connData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QProcessEnvironment prepareEnv();
|
|
||||||
|
|
||||||
static ConnectionData prepareWireguardConfig(const ServerCredentials &credentials,
|
static ConnectionData prepareWireguardConfig(const ServerCredentials &credentials,
|
||||||
DockerContainer container, ErrorCode *errorCode = nullptr);
|
DockerContainer container, ErrorCode *errorCode = nullptr);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user