Files
amnezia-client/client/configurators/ssh_configurator.cpp
T

113 lines
3.3 KiB
C++
Raw Normal View History

2021-06-12 11:59:36 +03:00
#include "ssh_configurator.h"
2023-08-31 16:00:41 +05:00
#include <QDebug>
#include <QObject>
2021-06-12 11:59:36 +03:00
#include <QProcess>
#include <QString>
#include <QTemporaryDir>
#include <QTemporaryFile>
#include <QThread>
#include <qtimer.h>
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) || defined(MACOS_NE)
2023-08-31 16:00:41 +05:00
#include <QGuiApplication>
#else
#include <QApplication>
#endif
2021-06-12 11:59:36 +03:00
#include "core/server_defs.h"
#include "utilities.h"
2021-06-12 11:59:36 +03:00
SshConfigurator::SshConfigurator(std::shared_ptr<Settings> settings, const QSharedPointer<ServerController> &serverController, QObject *parent)
: ConfiguratorBase(settings, serverController, parent)
2022-08-25 17:35:28 +03:00
{
}
2021-06-12 11:59:36 +03:00
QString SshConfigurator::convertOpenSShKey(const QString &key)
{
#if !defined(Q_OS_IOS) && !defined(MACOS_NE)
2021-06-12 11:59:36 +03:00
QProcess p;
p.setProcessChannelMode(QProcess::MergedChannels);
QTemporaryFile tmp;
2023-08-31 16:00:41 +05:00
#ifdef QT_DEBUG
2021-06-12 11:59:36 +03:00
tmp.setAutoRemove(false);
2023-08-31 16:00:41 +05:00
#endif
2021-06-12 11:59:36 +03:00
tmp.open();
tmp.write(key.toUtf8());
tmp.close();
// ssh-keygen -p -P "" -N "" -m pem -f id_ssh
2023-08-31 16:00:41 +05:00
#ifdef Q_OS_WIN
2021-06-12 11:59:36 +03:00
p.setProcessEnvironment(prepareEnv());
p.setProgram("cmd.exe");
p.setNativeArguments(QString("/C \"ssh-keygen.exe -p -P \"\" -N \"\" -m pem -f \"%1\"\"").arg(tmp.fileName()));
2023-08-31 16:00:41 +05:00
#else
2021-06-12 11:59:36 +03:00
p.setProgram("ssh-keygen");
2023-08-31 16:00:41 +05:00
p.setArguments(QStringList() << "-p"
<< "-P"
<< ""
<< "-N"
<< ""
<< "-m"
<< "pem"
<< "-f" << tmp.fileName());
#endif
2021-06-12 11:59:36 +03:00
p.start();
p.waitForFinished();
qDebug().noquote() << "OpenVpnConfigurator::convertOpenSShKey" << p.exitCode() << p.exitStatus() << p.readAll();
tmp.open();
return tmp.readAll();
2021-09-15 08:03:28 -07:00
#else
return key;
#endif
2021-06-12 11:59:36 +03:00
}
// DEAD CODE.
2021-06-12 11:59:36 +03:00
void SshConfigurator::openSshTerminal(const ServerCredentials &credentials)
{
#if !defined(Q_OS_IOS) && !defined(MACOS_NE)
2021-06-12 11:59:36 +03:00
QProcess *p = new QProcess();
p->setProcessChannelMode(QProcess::SeparateChannels);
2021-06-12 11:59:36 +03:00
2023-08-31 16:00:41 +05:00
#ifdef Q_OS_WIN
2021-06-12 11:59:36 +03:00
p->setProcessEnvironment(prepareEnv());
p->setProgram(qApp->applicationDirPath() + "\\cygwin\\putty.exe");
if (credentials.secretData.contains("PRIVATE KEY")) {
2021-06-12 11:59:36 +03:00
// todo: connect by key
2023-08-31 16:00:41 +05:00
// p->setNativeArguments(QString("%1@%2")
// .arg(credentials.userName).arg(credentials.hostName).arg(credentials.secretData));
} else {
p->setNativeArguments(QString("%1@%2 -pw %3").arg(credentials.userName).arg(credentials.hostName).arg(credentials.secretData));
2021-06-12 11:59:36 +03:00
}
2023-08-31 16:00:41 +05:00
#else
2021-06-14 03:48:46 -07:00
p->setProgram("/bin/bash");
2023-08-31 16:00:41 +05:00
#endif
2021-06-12 11:59:36 +03:00
p->startDetached();
2021-09-15 08:03:28 -07:00
#endif
2021-06-12 11:59:36 +03:00
}
QProcessEnvironment SshConfigurator::prepareEnv()
{
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString pathEnvVar = env.value("PATH");
#ifdef Q_OS_WIN
pathEnvVar.clear();
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\cygwin;");
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\openvpn;");
#elif defined(Q_OS_MACX) && !defined(MACOS_NE)
2021-06-12 11:59:36 +03:00
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS");
#endif
env.insert("PATH", pathEnvVar);
2023-08-31 16:00:41 +05:00
// qDebug().noquote() << "ENV PATH" << pathEnvVar;
2021-06-12 11:59:36 +03:00
return env;
}