From 4080ac3b9cc6a3f5c2c1cfb369155de5f8a296b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 8 Jun 2016 20:04:06 +0200 Subject: [PATCH] add cloud interface and design API --- server/cloud/cloudclient.cpp | 8 +++++++ server/cloud/cloudclient.h | 17 ++++++++++++++ server/cloud/cloudconnection.cpp | 39 +++++++++++++++++++++++++++----- server/cloud/cloudconnection.h | 3 ++- server/cloud/cloudinterface.cpp | 8 +++++++ server/cloud/cloudinterface.h | 17 ++++++++++++++ server/server.pri | 4 ++++ 7 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 server/cloud/cloudclient.cpp create mode 100644 server/cloud/cloudclient.h create mode 100644 server/cloud/cloudinterface.cpp create mode 100644 server/cloud/cloudinterface.h diff --git a/server/cloud/cloudclient.cpp b/server/cloud/cloudclient.cpp new file mode 100644 index 00000000..ab5f10ea --- /dev/null +++ b/server/cloud/cloudclient.cpp @@ -0,0 +1,8 @@ +#include "cloudclient.h" + +CloudClient::CloudClient(QObject *parent) : + QObject(parent) +{ + +} + diff --git a/server/cloud/cloudclient.h b/server/cloud/cloudclient.h new file mode 100644 index 00000000..efcf5e98 --- /dev/null +++ b/server/cloud/cloudclient.h @@ -0,0 +1,17 @@ +#ifndef CLOUDCLIENT_H +#define CLOUDCLIENT_H + +#include + +class CloudClient : public QObject +{ + Q_OBJECT +public: + explicit CloudClient(QObject *parent = 0); + +signals: + +public slots: +}; + +#endif // CLOUDCLIENT_H diff --git a/server/cloud/cloudconnection.cpp b/server/cloud/cloudconnection.cpp index 02752948..e716b461 100644 --- a/server/cloud/cloudconnection.cpp +++ b/server/cloud/cloudconnection.cpp @@ -19,10 +19,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "cloudconnection.h" - #include "loggingcategories.h" #include "guhsettings.h" +#include + namespace guhserver { CloudConnection::CloudConnection(QObject *parent) : @@ -36,8 +37,14 @@ CloudConnection::CloudConnection(QObject *parent) : m_proxyUrl = QUrl("ws://127.0.0.1:1212"); m_keystoneUrl = QUrl("http://localhost:8000/oauth2/token"); -// GuhSettings settings(GuhSettings::SettingsRoleGlobal); -// settings.beginGroup("CloudConnection"); + GuhSettings settings(GuhSettings::SettingsRoleDevices); + settings.beginGroup("guhd"); + m_guhUuid = settings.value("uuid", QVariant()).toUuid(); + if (m_guhUuid.isNull()) { + m_guhUuid = QUuid::createUuid().toString(); + settings.setValue("uuid", m_guhUuid); + } + settings.endGroup(); m_connection = new QWebSocket("guhd", QWebSocketProtocol::Version13, this); connect(m_connection, SIGNAL(connected()), this, SLOT(onConnected())); @@ -49,6 +56,8 @@ CloudConnection::CloudConnection(QObject *parent) : m_authenticator->setUrl(m_keystoneUrl); connect(m_authenticator, &CloudAuthenticator::authenticationChanged, this, &CloudConnection::onAuthenticationChanged); + + connectToCloud("simon.stuerz@guh.guru", "wshslwshsl"); } void CloudConnection::connectToCloud(const QString &username, const QString &password) @@ -135,12 +144,30 @@ void CloudConnection::onConnected() qCDebug(dcCloud()) << "Connected to cloud proxy server" << m_proxyUrl.toString(); setConnected(true); - // TODO: authenticate cloud connection + QVariantMap introspectMap; + introspectMap.insert("id", 0); + introspectMap.insert("method", "Interface.Introspect"); + m_connection->sendTextMessage(QJsonDocument::fromVariant(introspectMap).toJson()); + + QVariantMap authenticationMap; + authenticationMap.insert("id", 1); + authenticationMap.insert("method", "Authentication.Authenticate"); + + QVariantMap params; + // TODO: use server name + params.insert("name", "guhIO"); + params.insert("id", m_guhUuid); + params.insert("token", m_authenticator->token()); + params.insert("type", "ConnectionTypeServer"); + + authenticationMap.insert("params", params); + + m_connection->sendTextMessage(QJsonDocument::fromVariant(authenticationMap).toJson()); } void CloudConnection::onDisconnected() { - qCDebug(dcCloud()) << "Disconnected from cloud connection:" << m_connection->closeReason(); + qCDebug(dcCloud()) << "Disconnected from cloud:" << m_connection->closeReason(); setConnected(false); } @@ -151,7 +178,7 @@ void CloudConnection::onError(const QAbstractSocket::SocketError &error) void CloudConnection::onTextMessageReceived(const QString &message) { - qCDebug(dcCloud()) << "Cloud message received" << message; + qCDebug(dcCloud()) << "Cloud message -> " << qUtf8Printable(message.toUtf8()); } } diff --git a/server/cloud/cloudconnection.h b/server/cloud/cloudconnection.h index a21c88ce..0eab28e6 100644 --- a/server/cloud/cloudconnection.h +++ b/server/cloud/cloudconnection.h @@ -22,6 +22,7 @@ #define CLOUDCONNECTION_H #include +#include #include #include @@ -59,7 +60,7 @@ private: QWebSocket *m_connection; CloudAuthenticator *m_authenticator; CloudConnectionError m_error; - + QUuid m_guhUuid; QUrl m_proxyUrl; QUrl m_keystoneUrl; diff --git a/server/cloud/cloudinterface.cpp b/server/cloud/cloudinterface.cpp new file mode 100644 index 00000000..1aef539f --- /dev/null +++ b/server/cloud/cloudinterface.cpp @@ -0,0 +1,8 @@ +#include "cloudinterface.h" + +CloudInterface::CloudInterface(QObject *parent) : + QObject(parent) +{ + +} + diff --git a/server/cloud/cloudinterface.h b/server/cloud/cloudinterface.h new file mode 100644 index 00000000..18c1439e --- /dev/null +++ b/server/cloud/cloudinterface.h @@ -0,0 +1,17 @@ +#ifndef CLOUDINTERFACE_H +#define CLOUDINTERFACE_H + +#include + +class CloudInterface : public QObject +{ + Q_OBJECT +public: + explicit CloudInterface(QObject *parent = 0); + +signals: + +public slots: +}; + +#endif // CLOUDINTERFACE_H diff --git a/server/server.pri b/server/server.pri index 4a55c8dc..6afb0fae 100644 --- a/server/server.pri +++ b/server/server.pri @@ -41,6 +41,8 @@ HEADERS += $$top_srcdir/server/guhcore.h \ $$top_srcdir/server/time/timemanager.h \ $$top_srcdir/server/cloud/cloudconnection.h \ $$top_srcdir/server/cloud/cloudauthenticator.h \ + $$PWD/cloud/cloudinterface.h \ + $$PWD/cloud/cloudclient.h SOURCES += $$top_srcdir/server/guhcore.cpp \ @@ -82,3 +84,5 @@ SOURCES += $$top_srcdir/server/guhcore.cpp \ $$top_srcdir/server/time/timemanager.cpp \ $$top_srcdir/server/cloud/cloudconnection.cpp \ $$top_srcdir/server/cloud/cloudauthenticator.cpp \ + $$PWD/cloud/cloudinterface.cpp \ + $$PWD/cloud/cloudclient.cpp