Update configurations and add monitor socket

more-debug
Simon Stürz 2018-08-16 19:20:48 +02:00
parent f0599d59eb
commit 481cddb869
8 changed files with 67 additions and 27 deletions

View File

@ -59,7 +59,7 @@ void Engine::start(ProxyConfiguration *configuration)
qCDebug(dcEngine()) << "Starting proxy server";
m_proxyServer->startServer();
m_monitorServer = new MonitorServer("/tmp/nymea-remoteproxy-monitor.socket", this);
m_monitorServer = new MonitorServer(configuration->monitorSocketFileName(), this);
m_monitorServer->startServer();
// Set tunning true in the next event loop
@ -169,7 +169,9 @@ void Engine::setRunning(bool running)
if (m_running == running)
return;
qCDebug(dcEngine()) << "----------------------------------------------------------";
qCDebug(dcEngine()) << "Engine is" << (running ? "now running." : "not running any more.");
qCDebug(dcEngine()) << "----------------------------------------------------------";
m_running = running;
emit runningChanged(m_running);
}

View File

@ -103,7 +103,7 @@ void MonitorServer::stopServer()
}
m_server->close();
m_server->deleteLater();
delete m_server;
m_server = nullptr;
}

View File

@ -16,26 +16,32 @@ ProxyConfiguration::ProxyConfiguration(QObject *parent) :
bool ProxyConfiguration::loadConfiguration(const QString &fileName)
{
QFileInfo fileInfo(fileName);
m_fileName = fileName;
QFileInfo fileInfo(m_fileName);
if (!fileInfo.exists()) {
qCWarning(dcApplication()) << "Configuration: Could not find configuration file" << fileName;
qCWarning(dcApplication()) << "Configuration: Could not find configuration file" << m_fileName;
return false;
}
if (!fileInfo.isReadable()) {
qCWarning(dcApplication()) << "Configuration: Cannot read configuration file" << fileName;
qCWarning(dcApplication()) << "Configuration: Cannot read configuration file" << m_fileName;
return false;
}
QSettings settings(fileName, QSettings::IniFormat);
QSettings settings(m_fileName, QSettings::IniFormat);
settings.beginGroup("ProxyServer");
setServerName(settings.value("name", "nymea-remoteproxy").toString());
setWriteLogFile(settings.value("writeLogs", false).toBool());
setLogFileName(settings.value("logFile", "/var/log/nymea-remoteproxy.log").toString());
setMonitorSocketFileName(settings.value("monitorSocket", "/tmp/nymea-remoteproxy.monitor").toString());
settings.endGroup();
settings.beginGroup("SSL");
setSslCertificateFileName(settings.value("certificate", "/etc/ssl/certs/ssl-cert-snakeoil.pem").toString());
setSslCertificateKeyFileName(settings.value("certificateKey", "/etc/ssl/private/ssl-cert-snakeoil.key").toString());
setSslCertificateChainFileName(settings.value("certificateChain", "").toString());
settings.endGroup();
settings.beginGroup("WebSocketServer");
setWebSocketServerHost(QHostAddress(settings.value("host", "127.0.0.1").toString()));
@ -92,6 +98,11 @@ bool ProxyConfiguration::loadConfiguration(const QString &fileName)
return true;
}
QString ProxyConfiguration::fileName() const
{
return m_fileName;
}
QString ProxyConfiguration::serverName() const
{
return m_serverName;
@ -210,14 +221,24 @@ void ProxyConfiguration::setTcpServerPort(quint16 port)
QDebug operator<<(QDebug debug, ProxyConfiguration *configuration)
{
debug.nospace() << endl << "========== ProxyConfiguration ==========" << endl;
debug.nospace() << "General" << endl;
debug.nospace() << " - name:" << configuration->serverName() << endl;
debug.nospace() << " - write logfile:" << configuration->writeLogFile() << endl;
debug.nospace() << " - logfile:" << configuration->logFileName() << endl;
debug.nospace() << " - certificate:" << configuration->sslCertificateFileName() << endl;
debug.nospace() << " - certificate key:" << configuration->sslCertificateKeyFileName() << endl;
debug.nospace() << " - certificate chain:" << configuration->sslCertificateChainFileName() << endl;
debug.nospace() << " - SSL certificate information:";
debug.nospace() << "Configuration file:" << configuration->fileName() << endl;
debug.nospace() << "RemoteProxy configuration" << endl;
debug.nospace() << " - Server name:" << configuration->serverName() << endl;
debug.nospace() << " - Write logfile:" << configuration->writeLogFile() << endl;
debug.nospace() << " - Logfile:" << configuration->logFileName() << endl;
debug.nospace() << "SSL configuration" << endl;
debug.nospace() << " - Certificate:" << configuration->sslCertificateFileName() << endl;
debug.nospace() << " - Certificate key:" << configuration->sslCertificateKeyFileName() << endl;
debug.nospace() << " - Certificate chain:" << configuration->sslCertificateChainFileName() << endl;
debug.nospace() << " - SSL certificate information:" << endl;
debug.nospace() << " Common name:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::CommonName) << endl;
debug.nospace() << " Organisation:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::Organization) << endl;
debug.nospace() << " Organisation unit name:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::OrganizationalUnitName) << endl;
debug.nospace() << " Country name:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::CountryName) << endl;
debug.nospace() << " Locality name:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::LocalityName) << endl;
debug.nospace() << " State/Province:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::StateOrProvinceName) << endl;
debug.nospace() << " Email address:" << configuration->sslConfiguration().localCertificate().subjectInfo(QSslCertificate::EmailAddress) << endl;
debug.nospace() << " - SSL certificate issuer information:" << endl;
debug.nospace() << " Common name:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::CommonName) << endl;
debug.nospace() << " Organisation:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::Organization) << endl;
debug.nospace() << " Organisation unit name:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::OrganizationalUnitName) << endl;
@ -225,14 +246,13 @@ QDebug operator<<(QDebug debug, ProxyConfiguration *configuration)
debug.nospace() << " Locality name:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::LocalityName) << endl;
debug.nospace() << " State/Province:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::StateOrProvinceName) << endl;
debug.nospace() << " Email address:" << configuration->sslConfiguration().localCertificate().issuerInfo(QSslCertificate::EmailAddress) << endl;
debug.nospace() << "WebSocketServer" << endl;
debug.nospace() << " - host:" << configuration->webSocketServerHost().toString() << endl;
debug.nospace() << " - port:" << configuration->webSocketServerPort() << endl;
debug.nospace() << "WebSocketServer configuration" << endl;
debug.nospace() << " - Host:" << configuration->webSocketServerHost().toString() << endl;
debug.nospace() << " - Port:" << configuration->webSocketServerPort() << endl;
debug.nospace() << "TcpServer" << endl;
debug.nospace() << " - host:" << configuration->tcpServerHost().toString() << endl;
debug.nospace() << " - port:" << configuration->tcpServerPort() << endl;
debug.nospace() << "========== ProxyConfiguration ==========" << endl;
debug.nospace() << " - Host:" << configuration->tcpServerHost().toString() << endl;
debug.nospace() << " - Port:" << configuration->tcpServerPort() << endl;
debug.nospace() << "========== ProxyConfiguration ==========";
return debug;
}

View File

@ -16,7 +16,9 @@ public:
bool loadConfiguration(const QString &fileName);
// General
QString fileName() const;
// ProxyServer
QString serverName() const;
void setServerName(const QString &serverName);
@ -29,6 +31,7 @@ public:
QString monitorSocketFileName() const;
void setMonitorSocketFileName(const QString &fileName);
// Ssl
QString sslCertificateFileName() const;
void setSslCertificateFileName(const QString &fileName);
@ -55,11 +58,14 @@ public:
void setTcpServerPort(quint16 port);
private:
// General
// ProxyServer
QString m_fileName;
QString m_serverName;
bool m_writeLogFile = false;
QString m_logFileName = "/var/log/nymea-remoteproxy.log";
QString m_monitorSocketFileName;
// Ssl
QString m_sslCertificateFileName = "/etc/ssl/certs/ssl-cert-snakeoil.pem";
QString m_sslCertificateKeyFileName = "/etc/ssl/private/ssl-cert-snakeoil.key";
QString m_sslCertificateChainFileName;

View File

@ -27,7 +27,7 @@ int main(int argc, char *argv[])
QCommandLineOption tokenOption(QStringList() << "s" << "socket", "The AWS token for authentication.", "socket");
QCommandLineOption tokenOption(QStringList() << "s" << "socket", "The AWS token for authentication. Default /tmp/", "socket");
parser.addOption(tokenOption);
parser.process(application);

View File

@ -1,7 +1,10 @@
[ProxyServer]
name=nymea-remoteproxy
writeLogs=false
logFile=/var/log/nymea-remoteproxy.log
monitorSocket=/tmp/nymea-remoteproxy.monitor
monitorSocket=/tmp/nymea-remoteproxy-monitor.sock
[SSL]
certificate=/etc/ssl/certs/ssl-cert-snakeoil.pem
certificateKey=/etc/ssl/private/ssl-cert-snakeoil.key
certificateChain=

View File

@ -1,8 +1,13 @@
[ProxyServer]
name=test-nymea-remoteproxy
writeLogs=false
logFile=/var/log/nymea-remoteproxy.log
monitorSocket=/tmp/nymea-remoteproxy-test.sock
[SSL]
certificate=:/test-certificate.crt
certificateKey=:/test-certificate.key
certificateChain=
[WebSocketServer]
host=127.0.0.1

View File

@ -55,12 +55,16 @@ void RemoteProxyOfflineTests::dummyAuthenticator()
void RemoteProxyOfflineTests::monitorServer()
{
startServer();
QVERIFY(Engine::instance()->monitorServer()->running());
stopServer();
}
void RemoteProxyOfflineTests::webserverConnectionBlocked()
{
cleanUpEngine();
// Create a dummy server which blocks the port
QWebSocketServer dummyServer("dummy-server", QWebSocketServer::NonSecureMode);
dummyServer.listen(QHostAddress::LocalHost, 1212);
@ -70,7 +74,7 @@ void RemoteProxyOfflineTests::webserverConnectionBlocked()
Engine::instance()->setAuthenticator(m_authenticator);
Engine::instance()->start(m_configuration);
runningSpy.wait();
qDebug() << runningSpy.count();
QVERIFY(runningSpy.count() == 1);
// Make sure the server is not running