diff --git a/debian/nymea-remoteproxy.service b/debian/nymea-remoteproxy.service index 37b348c..af023ee 100644 --- a/debian/nymea-remoteproxy.service +++ b/debian/nymea-remoteproxy.service @@ -6,7 +6,7 @@ Wants=network-online.target [Service] Type=simple -ExecStart=/usr/bin/nymea-remoteproxy -c /etc/nymea/nymea-remoteproxy.conf --verbose +ExecStart=/usr/bin/nymea-remoteproxy -c /etc/nymea/nymea-remoteproxy.conf StandardOutput=journal StandardError=journal Restart=on-failure diff --git a/libnymea-remoteproxy/authentication/authenticationprocess.cpp b/libnymea-remoteproxy/authentication/authenticationprocess.cpp index b9707db..3f5eea3 100644 --- a/libnymea-remoteproxy/authentication/authenticationprocess.cpp +++ b/libnymea-remoteproxy/authentication/authenticationprocess.cpp @@ -1,5 +1,6 @@ #include "authenticationprocess.h" #include "loggingcategories.h" +#include "userinformation.h" #include #include @@ -152,8 +153,16 @@ void AuthenticationProcess::onProcessFinished(int exitCode, QProcess::ExitStatus } bool isValid = response.value("isValid").toBool(); - if (isValid) { + QVariantMap verifiedDataMap = response.value("verifiedData").toMap(); + QString vendorId = verifiedDataMap.value("vendorId").toString(); + QString userPoolId = verifiedDataMap.value("userPoolId").toString(); + QVariantMap verifiedParsedTokenMap = verifiedDataMap.value("verifiedParsedToken").toMap(); + QString email = verifiedParsedTokenMap.value("email").toString(); + QString cognitoUsername = verifiedParsedTokenMap.value("cognito:username").toString(); + + UserInformation userInformation(email, cognitoUsername, vendorId, userPoolId); + emit authenticationFinished(Authenticator::AuthenticationErrorNoError); } else { emit authenticationFinished(Authenticator::AuthenticationErrorAuthenticationFailed); diff --git a/libnymea-remoteproxy/authentication/userinformation.cpp b/libnymea-remoteproxy/authentication/userinformation.cpp new file mode 100644 index 0000000..2dde27d --- /dev/null +++ b/libnymea-remoteproxy/authentication/userinformation.cpp @@ -0,0 +1,42 @@ +#include "userinformation.h" + +namespace remoteproxy { + +UserInformation::UserInformation(const QString &email, const QString &cognitoUsername, const QString &vendorId, const QString &userPoolId) : + m_email(email), + m_cognitoUsername(cognitoUsername), + m_vendorId(vendorId), + m_userPoolId(userPoolId) +{ + +} + +QString UserInformation::email() const +{ + return m_email; +} + +QString UserInformation::cognitoUsername() const +{ + return m_cognitoUsername; +} + +QString UserInformation::vendorId() const +{ + return m_vendorId; +} + +QString UserInformation::userPoolId() const +{ + return m_userPoolId; +} + +bool UserInformation::isValid() +{ + return !m_email.isEmpty() + && !m_cognitoUsername.isEmpty() + && !m_vendorId.isEmpty() + && !m_userPoolId.isEmpty(); +} + +} diff --git a/libnymea-remoteproxy/authentication/userinformation.h b/libnymea-remoteproxy/authentication/userinformation.h new file mode 100644 index 0000000..0e32ae8 --- /dev/null +++ b/libnymea-remoteproxy/authentication/userinformation.h @@ -0,0 +1,30 @@ +#ifndef USERINFORMATION_H +#define USERINFORMATION_H + +#include + +namespace remoteproxy { + + +class UserInformation +{ +public: + UserInformation(const QString &email = QString(), const QString &cognitoUsername = QString(), const QString &vendorId = QString(), const QString &userPoolId = QString()); + + QString email() const; + QString cognitoUsername() const; + QString vendorId() const; + QString userPoolId() const; + + bool isValid(); + +private: + QString m_email; + QString m_cognitoUsername; + QString m_vendorId; + QString m_userPoolId; +}; + +} + +#endif // USERINFORMATION_H diff --git a/libnymea-remoteproxy/engine.cpp b/libnymea-remoteproxy/engine.cpp index 5bee31e..33180a3 100644 --- a/libnymea-remoteproxy/engine.cpp +++ b/libnymea-remoteproxy/engine.cpp @@ -169,9 +169,9 @@ void Engine::setRunning(bool running) if (m_running == running) return; - qCDebug(dcEngine()) << "----------------------------------------------------------"; + //qCDebug(dcEngine()) << "----------------------------------------------------------"; qCDebug(dcEngine()) << "Engine is" << (running ? "now running." : "not running any more."); - qCDebug(dcEngine()) << "----------------------------------------------------------"; + //qCDebug(dcEngine()) << "----------------------------------------------------------"; m_running = running; emit runningChanged(m_running); } diff --git a/libnymea-remoteproxy/libnymea-remoteproxy.pro b/libnymea-remoteproxy/libnymea-remoteproxy.pro index 125d5b3..9f3b43e 100644 --- a/libnymea-remoteproxy/libnymea-remoteproxy.pro +++ b/libnymea-remoteproxy/libnymea-remoteproxy.pro @@ -3,12 +3,6 @@ include(../nymea-remoteproxy.pri) TEMPLATE = lib TARGET = nymea-remoteproxy -# -L/home/timon/guh/development/cloud/aws-sdk-cpp/build/install/lib -# -laws-cpp-sdk-access-management \ -# -laws-cpp-sdk-cognito-identity \ -# -laws-cpp-sdk-iam \ -# -laws-cpp-sdk-kinesis\ - HEADERS += \ engine.h \ loggingcategories.h \ @@ -16,6 +10,9 @@ HEADERS += \ websocketserver.h \ proxyclient.h \ proxyserver.h \ + monitorserver.h \ + proxyconfiguration.h \ + tunnelconnection.h \ jsonrpcserver.h \ jsonrpc/jsonhandler.h \ jsonrpc/jsonreply.h \ @@ -24,11 +21,9 @@ HEADERS += \ authentication/authenticator.h \ authentication/awsauthenticator.h \ authentication/authenticationreply.h \ - proxyconfiguration.h \ - tunnelconnection.h \ + authentication/userinformation.h \ authentication/authenticationprocess.h \ authentication/dummyauthenticator.h \ - monitorserver.h SOURCES += \ engine.cpp \ @@ -37,6 +32,9 @@ SOURCES += \ websocketserver.cpp \ proxyclient.cpp \ proxyserver.cpp \ + monitorserver.cpp \ + proxyconfiguration.cpp \ + tunnelconnection.cpp \ jsonrpcserver.cpp \ jsonrpc/jsonhandler.cpp \ jsonrpc/jsonreply.cpp \ @@ -45,11 +43,9 @@ SOURCES += \ authentication/authenticator.cpp \ authentication/awsauthenticator.cpp \ authentication/authenticationreply.cpp \ - proxyconfiguration.cpp \ - tunnelconnection.cpp \ + authentication/userinformation.cpp \ authentication/authenticationprocess.cpp \ authentication/dummyauthenticator.cpp \ - monitorserver.cpp # install header file with relative subdirectory diff --git a/libnymea-remoteproxy/monitorserver.cpp b/libnymea-remoteproxy/monitorserver.cpp index 20d99ea..fb48fe1 100644 --- a/libnymea-remoteproxy/monitorserver.cpp +++ b/libnymea-remoteproxy/monitorserver.cpp @@ -94,10 +94,11 @@ void MonitorServer::startServer() void MonitorServer::stopServer() { + m_timer->stop(); if (!m_server) return; - qCDebug(dcMonitorServer()) << "Stopping server" << m_serverName; + qCDebug(dcMonitorServer()) << "Stop server" << m_serverName; foreach (QLocalSocket *clientConnection, m_clients) { clientConnection->close(); } diff --git a/monitor/monitor.pro b/monitor/monitor.pro index 128c63c..53236c6 100644 --- a/monitor/monitor.pro +++ b/monitor/monitor.pro @@ -9,4 +9,3 @@ target.path = /usr/bin INSTALLS += target HEADERS += \ - proxyclient.h diff --git a/server/main.cpp b/server/main.cpp index f5507c6..1fe93c4 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -21,6 +20,7 @@ #include "engine.h" #include "loggingcategories.h" #include "proxyconfiguration.h" +#include "remoteproxyserverapplication.h" #include "authentication/awsauthenticator.h" #include "authentication/dummyauthenticator.h" @@ -87,7 +87,7 @@ int main(int argc, char *argv[]) { qInstallMessageHandler(consoleLogHandler); - QCoreApplication application(argc, argv); + RemoteProxyServerApplication application(argc, argv); application.setApplicationName(SERVER_NAME_STRING); application.setOrganizationName("nymea"); application.setApplicationVersion(SERVER_VERSION_STRING); diff --git a/server/remoteproxyserverapplication.cpp b/server/remoteproxyserverapplication.cpp new file mode 100644 index 0000000..e4d0880 --- /dev/null +++ b/server/remoteproxyserverapplication.cpp @@ -0,0 +1,59 @@ +#include "remoteproxyserverapplication.h" +#include "loggingcategories.h" +#include "engine.h" + +#include +#include +#include +#include +#include +#include +#include + +using namespace remoteproxy; + +static void catchUnixSignals(const std::vector& quitSignals, const std::vector& ignoreSignals = std::vector()) +{ + auto handler = [](int sig) ->void { + switch (sig) { + case SIGQUIT: + qCDebug(dcApplication()) << "Cought SIGQUIT quit signal..."; + break; + case SIGINT: + qCDebug(dcApplication()) << "Cought SIGINT quit signal..."; + break; + case SIGTERM: + qCDebug(dcApplication()) << "Cought SIGTERM quit signal..."; + break; + case SIGHUP: + qCDebug(dcApplication()) << "Cought SIGHUP quit signal..."; + break; + case SIGSEGV: { + qCDebug(dcApplication()) << "Cought SIGSEGV signal. Segmentation fault!"; + exit(1); + } + default: + break; + } + + qCDebug(dcApplication()) << "=========================================================="; + qCDebug(dcApplication) << "Shutting down nymea-remoteproxy"; + qCDebug(dcApplication()) << "=========================================================="; + + Engine::instance()->destroy(); + RemoteProxyServerApplication::quit(); + }; + + // all these signals will be ignored. + for (int sig : ignoreSignals) + signal(sig, SIG_IGN); + + for (int sig : quitSignals) + signal(sig, handler); +} + +RemoteProxyServerApplication::RemoteProxyServerApplication(int &argc, char **argv) : + QCoreApplication(argc, argv) +{ + catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP, SIGSEGV}); +} diff --git a/server/remoteproxyserverapplication.h b/server/remoteproxyserverapplication.h new file mode 100644 index 0000000..ff3aec5 --- /dev/null +++ b/server/remoteproxyserverapplication.h @@ -0,0 +1,19 @@ +#ifndef REMOTEPROXYSERVERAPPLICATION_H +#define REMOTEPROXYSERVERAPPLICATION_H + +#include +#include +#include + +class RemoteProxyServerApplication : public QCoreApplication +{ + Q_OBJECT +public: + explicit RemoteProxyServerApplication(int &argc, char **argv); + +signals: + +public slots: +}; + +#endif // REMOTEPROXYSERVERAPPLICATION_H diff --git a/server/server.pro b/server/server.pro index 5a87a7d..eb044bb 100644 --- a/server/server.pro +++ b/server/server.pro @@ -7,7 +7,11 @@ INCLUDEPATH += ../libnymea-remoteproxy LIBS += -L$$top_builddir/libnymea-remoteproxy/ -lnymea-remoteproxy -SOURCES += main.cpp +SOURCES += main.cpp \ + remoteproxyserverapplication.cpp target.path = /usr/bin INSTALLS += target + +HEADERS += \ + remoteproxyserverapplication.h