Merge pull request #462 from amnezia-vpn/bugfix/service-containers-search
fixed server search for sftp, dns and tor containers
This commit is contained in:
commit
0f1519a21f
1 changed files with 66 additions and 0 deletions
|
@ -31,6 +31,11 @@
|
||||||
|
|
||||||
#include <configurators/vpn_configurator.h>
|
#include <configurators/vpn_configurator.h>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
Logger logger("ServerController");
|
||||||
|
}
|
||||||
|
|
||||||
ServerController::ServerController(std::shared_ptr<Settings> settings, QObject *parent) : m_settings(settings)
|
ServerController::ServerController(std::shared_ptr<Settings> settings, QObject *parent) : m_settings(settings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -857,6 +862,67 @@ ErrorCode ServerController::getAlreadyInstalledContainers(const ServerCredential
|
||||||
containerConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader);
|
containerConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader);
|
||||||
containerConfig[config_key::underloadPacketMagicHeader] = serverConfigMap.value(config_key::underloadPacketMagicHeader);
|
containerConfig[config_key::underloadPacketMagicHeader] = serverConfigMap.value(config_key::underloadPacketMagicHeader);
|
||||||
containerConfig[config_key::transportPacketMagicHeader] = serverConfigMap.value(config_key::transportPacketMagicHeader);
|
containerConfig[config_key::transportPacketMagicHeader] = serverConfigMap.value(config_key::transportPacketMagicHeader);
|
||||||
|
} else if (protocol == Proto::Sftp) {
|
||||||
|
stdOut.clear();
|
||||||
|
script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name);
|
||||||
|
|
||||||
|
ErrorCode errorCode = runScript(credentials, script, cbReadStdOut, cbReadStdErr);
|
||||||
|
if (errorCode != ErrorCode::NoError) {
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto sftpInfo = stdOut.split(":");
|
||||||
|
if (sftpInfo.size() < 2) {
|
||||||
|
logger.error() << "Key parameters for the sftp container are missing";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto userName = sftpInfo.at(0);
|
||||||
|
userName = userName.remove(0, 1);
|
||||||
|
auto password = sftpInfo.at(1);
|
||||||
|
|
||||||
|
containerConfig.insert(config_key::userName, userName);
|
||||||
|
containerConfig.insert(config_key::password, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
config.insert(config_key::container, ContainerProps::containerToString(container));
|
||||||
|
}
|
||||||
|
config.insert(ProtocolProps::protoToString(protocol), containerConfig);
|
||||||
|
}
|
||||||
|
installedContainers.insert(container, config);
|
||||||
|
}
|
||||||
|
const static QRegularExpression torOrDnsRegExp("(amnezia-(?:torwebsite|dns)).*?([0-9]*)/(udp|tcp).*");
|
||||||
|
QRegularExpressionMatch torOrDnsRegMatch = torOrDnsRegExp.match(containerInfo);
|
||||||
|
if (torOrDnsRegMatch.hasMatch()) {
|
||||||
|
QString name = torOrDnsRegMatch.captured(1);
|
||||||
|
QString port = torOrDnsRegMatch.captured(2);
|
||||||
|
QString transportProto = torOrDnsRegMatch.captured(3);
|
||||||
|
DockerContainer container = ContainerProps::containerFromString(name);
|
||||||
|
|
||||||
|
QJsonObject config;
|
||||||
|
Proto mainProto = ContainerProps::defaultProtocol(container);
|
||||||
|
for (auto protocol : ContainerProps::protocolsForContainer(container)) {
|
||||||
|
QJsonObject containerConfig;
|
||||||
|
if (protocol == mainProto) {
|
||||||
|
containerConfig.insert(config_key::port, port);
|
||||||
|
containerConfig.insert(config_key::transport_proto, transportProto);
|
||||||
|
|
||||||
|
if (protocol == Proto::TorWebSite) {
|
||||||
|
stdOut.clear();
|
||||||
|
script = QString("sudo docker exec -i %1 sh -c 'cat /var/lib/tor/hidden_service/hostname'").arg(name);
|
||||||
|
|
||||||
|
ErrorCode errorCode = runScript(credentials, script, cbReadStdOut, cbReadStdErr);
|
||||||
|
if (errorCode != ErrorCode::NoError) {
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stdOut.isEmpty()) {
|
||||||
|
logger.error() << "Key parameters for the tor container are missing";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString onion = stdOut;
|
||||||
|
onion.replace("\n", "");
|
||||||
|
containerConfig.insert(config_key::site, onion);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.insert(config_key::container, ContainerProps::containerToString(container));
|
config.insert(config_key::container, ContainerProps::containerToString(container));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue