#ifndef SERVERCONTROLLER_H #define SERVERCONTROLLER_H #include #include #include "defs.h" #include "containers/containers_defs.h" #include "sshclient.h" class Settings; class VpnConfigurator; using namespace amnezia; class ServerController : public QObject { Q_OBJECT public: ServerController(std::shared_ptr settings, QObject *parent = nullptr); ~ServerController(); typedef QList> Vars; // ErrorCode fromSshConnectionErrorCode(QSsh::SshError error); // QSsh exitCode and exitStatus are different things // ErrorCode fromSshProcessExitStatus(int exitStatus); // QSsh::SshConnectionParameters sshParams(const ServerCredentials &credentials); void disconnectFromHost(const ServerCredentials &credentials); ErrorCode removeAllContainers(const ServerCredentials &credentials); ErrorCode removeContainer(const ServerCredentials &credentials, DockerContainer container); ErrorCode setupContainer(const ServerCredentials &credentials, DockerContainer container, QJsonObject &config); ErrorCode updateContainer(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &oldConfig, QJsonObject &newConfig); // create initial config - generate passwords, etc QJsonObject createContainerInitialConfig(DockerContainer container, int port, TransportProto tp); bool isReinstallContainerRequred(DockerContainer container, const QJsonObject &oldConfig, const QJsonObject &newConfig); ErrorCode checkOpenVpnServer(DockerContainer container, const ServerCredentials &credentials); ErrorCode uploadFileToHost(const ServerCredentials &credentials, const QByteArray &data, const QString &remotePath, libssh::SftpOverwriteMode overwriteMode = libssh::SftpOverwriteMode::SftpOverwriteExisting); ErrorCode uploadTextFileToContainer(DockerContainer container, const ServerCredentials &credentials, const QString &file, const QString &path, libssh::SftpOverwriteMode overwriteMode = libssh::SftpOverwriteMode::SftpOverwriteExisting); QByteArray getTextFileFromContainer(DockerContainer container, const ServerCredentials &credentials, const QString &path, ErrorCode *errorCode = nullptr); ErrorCode setupServerFirewall(const ServerCredentials &credentials); QString replaceVars(const QString &script, const Vars &vars); ErrorCode runScript(const ServerCredentials &credentials, QString script, const std::function &cbReadStdOut = nullptr, const std::function &cbReadStdErr = nullptr); ErrorCode runContainerScript(const ServerCredentials &credentials, DockerContainer container, QString script, const std::function &cbReadStdOut = nullptr, const std::function &cbReadStdErr = nullptr); Vars genVarsForScript(const ServerCredentials &credentials, DockerContainer container = DockerContainer::None, const QJsonObject &config = QJsonObject()); QString checkSshConnection(const ServerCredentials &credentials, ErrorCode *errorCode = nullptr); private: ErrorCode installDockerWorker(const ServerCredentials &credentials, DockerContainer container); ErrorCode prepareHostWorker(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &config = QJsonObject()); ErrorCode buildContainerWorker(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &config = QJsonObject()); ErrorCode runContainerWorker(const ServerCredentials &credentials, DockerContainer container, QJsonObject &config); ErrorCode configureContainerWorker(const ServerCredentials &credentials, DockerContainer container, QJsonObject &config); ErrorCode startupContainerWorker(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &config = QJsonObject()); std::shared_ptr m_settings; std::shared_ptr m_configurator; libssh::Client m_sshClient; }; #endif // SERVERCONTROLLER_H