From 94edc63f5ef9641a1d6bc8548a89eb48116c055e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 7 Oct 2019 13:36:59 +0200 Subject: [PATCH 1/8] stopep using config file --- src/colnod/requestmanager.cpp | 7 +- src/colnod/requestmanager.h | 146 +++++++++++++++++----------------- 2 files changed, 78 insertions(+), 75 deletions(-) diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index 2c78589..48b5888 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -7,14 +7,14 @@ RequestManager::RequestManager() loginStatus = false; //should be false, true for testing request header - +/* QFile configFile(QDir::current().filePath("config.json")); if (!configFile.open(QIODevice::ReadOnly)) { qCritical() << "Couldn't open config file config.json" << QDir::current().filePath("config.json"); QCoreApplication::exit(-1); return; } - this->config = QJsonDocument::fromJson(configFile.readAll()); + this->config = QJsonDocument::fromJson(configFile.readAll());*/ QObject::connect(manager, &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError); } @@ -55,7 +55,8 @@ void RequestManager::getRequest(QString endpoint) { if (!loginStatus) { - login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString()); + // login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString()); + login(host, user, password); // QEventLoop loop; // QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit); // loop.exec(); diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index cf5ecf3..692289b 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -1,72 +1,74 @@ -#ifndef REQUESTMANAGER_H -#define REQUESTMANAGER_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include "databasemanager.h" -#include "token.h" -#include "subject.h" - -class RequestManager : public QObject -{ - Q_OBJECT - -public: - RequestManager(); - void getSubjects(); - void login(QString endpoint, QString username, QString password); - void getRequest(QString endpoint); - void loadSubjectsFromColnodToDB(); - - - - const QJsonDocument &getConfig() const {return config;} - const QString &getResponse() const {return jsonResponse;} - QString getToken(){return token;} - -private: - - QString getFromJson(QString json, const QString &member); - QString encryptedPassword(QString password); - QString getLoginHeader(QString username, QString hash); - void prepareAuthHeader(); - -private slots: - void onSSLError(QNetworkReply *reply, const QList &errors); - -signals: - void successLogin(); - void responseReady(); - - -private: - QNetworkAccessManager* manager; - QJsonDocument config; - QString authHeader; - QString host; - QString token; - QString jsonResponse; - bool loginStatus; - - -}; - -#endif // REQUESTMANAGER_H +#ifndef REQUESTMANAGER_H +#define REQUESTMANAGER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "databasemanager.h" +#include "token.h" +#include "subject.h" + +class RequestManager : public QObject +{ + Q_OBJECT + +public: + RequestManager(); + void getSubjects(); + void login(QString endpoint, QString username, QString password); + void getRequest(QString endpoint); + void loadSubjectsFromColnodToDB(); + + + + const QJsonDocument &getConfig() const {return config;} + const QString &getResponse() const {return jsonResponse;} + QString getToken(){return token;} + +private: + + QString getFromJson(QString json, const QString &member); + QString encryptedPassword(QString password); + QString getLoginHeader(QString username, QString hash); + void prepareAuthHeader(); + +private slots: + void onSSLError(QNetworkReply *reply, const QList &errors); + +signals: + void successLogin(); + void responseReady(); + + +private: + QNetworkAccessManager* manager; + QJsonDocument config; + QString authHeader; + QString host = "https://192.168.1.3:8443"; + QString password = "spaceti1"; + QString user = "spaceti"; + QString token; + QString jsonResponse; + bool loginStatus; + + +}; + +#endif // REQUESTMANAGER_H From b6c23177573c727fe79fbbc4851c8493fe80e75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 7 Oct 2019 13:53:05 +0200 Subject: [PATCH 2/8] fix wrong endlines --- test/unitTests/UnitTest.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 1dd6c48..4323b69 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -162,8 +162,13 @@ void UnitTest::debugConnection() QString token = testAccess->getToken(); token = token + ":";*/ - tmp = "POST /SubjectManager/getSubjects\r\nHTTP/1.1 Host: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*)"; - qDebug() << tmp.toUtf8(); + tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*"; + QFile file("output1234.txt"); + file.open(QIODevice::ReadWrite); + QTextStream st(&file); + st << tmp; + file.close(); + qDebug().noquote() << tmp.toUtf8(); ssl.write(tmp.toUtf8()); while (ssl.waitForReadyRead()) qDebug() << ssl.readAll().data(); From 81a9c66dedfe264cf9d0b6184b81c1c195b7d590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 7 Oct 2019 14:28:14 +0200 Subject: [PATCH 3/8] SSL socket works --- test/unitTests/UnitTest.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 4323b69..87a35fc 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -141,14 +141,14 @@ void UnitTest::debugConnection() Content-Length: 164 {"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0","username":"spaceti"}*/ - qDebug() << tmp.toUtf8(); + qDebug().noquote() << tmp.toUtf8(); ssl.write(tmp.toUtf8()); QString data; while (ssl.waitForReadyRead() && data.isEmpty()) { data.append(ssl.readAll().data()); } - qDebug() << data; + qDebug().noquote() << data; int index = data.lastIndexOf("id"); QString tkn = data.mid( index + 5, 36); tkn = tkn + ":"; @@ -162,7 +162,7 @@ void UnitTest::debugConnection() QString token = testAccess->getToken(); token = token + ":";*/ - tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*"; + tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\nContent-Type: application/json\r\nContent-Length: 0\r\n\r\n"; QFile file("output1234.txt"); file.open(QIODevice::ReadWrite); QTextStream st(&file); @@ -173,6 +173,8 @@ void UnitTest::debugConnection() while (ssl.waitForReadyRead()) qDebug() << ssl.readAll().data(); + qDebug() << ssl.errorString(); + QVERIFY(true); } From 41422bfb6e007d9d913f82afcc4468eca469b118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 7 Oct 2019 16:30:26 +0200 Subject: [PATCH 4/8] curl vs qt requests --- http/curlauth.txt | 9 +++++++++ http/curlsubject.txt | 6 ++++++ http/qtauth.txt | 14 ++++++++++++++ http/qtrequestoutput.txt | 14 ++++++++++++++ http/qtrequestoutputsubject.txt | 8 ++++++++ http/qtsubject.txt | 8 ++++++++ src/colnod/requestmanager.cpp | 13 +++++++------ src/colnod/requestmanager.h | 4 +++- test/unitTests/UnitTest.cpp | 2 +- 9 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 http/curlauth.txt create mode 100644 http/curlsubject.txt create mode 100644 http/qtauth.txt create mode 100644 http/qtrequestoutput.txt create mode 100644 http/qtrequestoutputsubject.txt create mode 100644 http/qtsubject.txt diff --git a/http/curlauth.txt b/http/curlauth.txt new file mode 100644 index 0000000..ab68759 --- /dev/null +++ b/http/curlauth.txt @@ -0,0 +1,9 @@ +POST /AaaManager/authSession HTTP/1.1 +Host: localhost:8080 +Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA== +User-Agent: curl/7.65.3 +Accept: */* +Content-Type: application/json +Content-Length: 164 + +{"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0","username":"spaceti"} \ No newline at end of file diff --git a/http/curlsubject.txt b/http/curlsubject.txt new file mode 100644 index 0000000..bfbcb3a --- /dev/null +++ b/http/curlsubject.txt @@ -0,0 +1,6 @@ +POST /SubjectManager/getSubjects HTTP/1.1 +Host: localhost:8080 +Authorization: Basic ZmYwMzYwZjYtMzRmZC00ZjAwLTlhNTYtMWZiMzhmNjlhNDIzOg== +User-Agent: curl/7.65.3 +Accept: */* + diff --git a/http/qtauth.txt b/http/qtauth.txt new file mode 100644 index 0000000..1f5d0b3 --- /dev/null +++ b/http/qtauth.txt @@ -0,0 +1,14 @@ +POST /AaaManager/authSession HTTP/1.1 +Host: localhost:8080 +Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA== +Content-Type: application/json; charset=UTF-8 +Content-Length: 178 +Connection: Keep-Alive +Accept-Encoding: gzip, deflate +Accept-Language: en-AI,* +User-Agent: Mozilla/5.0 + +{ + "password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0", + "username": "spaceti" +} diff --git a/http/qtrequestoutput.txt b/http/qtrequestoutput.txt new file mode 100644 index 0000000..1f5d0b3 --- /dev/null +++ b/http/qtrequestoutput.txt @@ -0,0 +1,14 @@ +POST /AaaManager/authSession HTTP/1.1 +Host: localhost:8080 +Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA== +Content-Type: application/json; charset=UTF-8 +Content-Length: 178 +Connection: Keep-Alive +Accept-Encoding: gzip, deflate +Accept-Language: en-AI,* +User-Agent: Mozilla/5.0 + +{ + "password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0", + "username": "spaceti" +} diff --git a/http/qtrequestoutputsubject.txt b/http/qtrequestoutputsubject.txt new file mode 100644 index 0000000..b10fb53 --- /dev/null +++ b/http/qtrequestoutputsubject.txt @@ -0,0 +1,8 @@ +POST /SubjectManager/getSubjects HTTP/1.1 +Host: localhost:8080 +Content-Length: 0 +Connection: Keep-Alive +Accept-Encoding: gzip, deflate +Accept-Language: en-AI,* +User-Agent: Mozilla/5.0 + diff --git a/http/qtsubject.txt b/http/qtsubject.txt new file mode 100644 index 0000000..b10fb53 --- /dev/null +++ b/http/qtsubject.txt @@ -0,0 +1,8 @@ +POST /SubjectManager/getSubjects HTTP/1.1 +Host: localhost:8080 +Content-Length: 0 +Connection: Keep-Alive +Accept-Encoding: gzip, deflate +Accept-Language: en-AI,* +User-Agent: Mozilla/5.0 + diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index 48b5888..071f041 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -4,7 +4,7 @@ RequestManager::RequestManager() { manager = new QNetworkAccessManager(); token = ""; - loginStatus = false; //should be false, true for testing request header + loginStatus = true; //should be false, true for testing request header /* @@ -70,11 +70,11 @@ void RequestManager::getRequest(QString endpoint) request.setUrl(host + endpoint); qDebug() << authHeader; request.setRawHeader("Authorization", authHeader.toLocal8Bit()); - request.setRawHeader("User-Agent", "curl/7.65.3"); - request.setRawHeader("Connection", "Keep-Alive"); - request.setRawHeader("Accept", "*/*"); - request.setRawHeader("Accept-Encoding", "*"); - request.setRawHeader("Accept-Language", "*"); + //request.setRawHeader("User-Agent", "curl/7.65.3"); + //request.setRawHeader("Connection", "Keep-Alive"); + //request.setRawHeader("Accept", "*/*"); + //request.setRawHeader("Accept-Encoding", "*"); + //request.setRawHeader("Accept-Language", "*"); QNetworkReply* reply = manager->post(request, QByteArray()); @@ -93,6 +93,7 @@ void RequestManager::getRequest(QString endpoint) getRequest(endpoint); return; } + qDebug() << reply->rawHeaderPairs(); qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); jsonResponse = reply->readAll(); emit responseReady(); diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 692289b..db0d2af 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -61,7 +61,9 @@ private: QNetworkAccessManager* manager; QJsonDocument config; QString authHeader; - QString host = "https://192.168.1.3:8443"; + //QString host = "https://192.168.1.3:8443"; + QString host = "http://localhost:8080"; + QString password = "spaceti1"; QString user = "spaceti"; QString token; diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 87a35fc..d8b9e71 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -162,7 +162,7 @@ void UnitTest::debugConnection() QString token = testAccess->getToken(); token = token + ":";*/ - tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\nContent-Type: application/json\r\nContent-Length: 0\r\n\r\n"; + tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\n\r\n"; QFile file("output1234.txt"); file.open(QIODevice::ReadWrite); QTextStream st(&file); From dcc88a669b6d57103ec67163a1faa2d849aa3f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 7 Oct 2019 16:49:11 +0200 Subject: [PATCH 5/8] fix, getsubject works --- src/colnod/requestmanager.cpp | 12 ++++++------ src/colnod/requestmanager.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index 071f041..c8aad31 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -4,7 +4,7 @@ RequestManager::RequestManager() { manager = new QNetworkAccessManager(); token = ""; - loginStatus = true; //should be false, true for testing request header + loginStatus = false; //should be false, true for testing request header /* @@ -57,9 +57,9 @@ void RequestManager::getRequest(QString endpoint) { // login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString()); login(host, user, password); - // QEventLoop loop; - // QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit); - // loop.exec(); + QEventLoop loop; + QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit); + loop.exec(); } // @@ -68,7 +68,7 @@ void RequestManager::getRequest(QString endpoint) QNetworkRequest request; request.setUrl(host + endpoint); - qDebug() << authHeader; + qDebug() << "Auth: " << authHeader; request.setRawHeader("Authorization", authHeader.toLocal8Bit()); //request.setRawHeader("User-Agent", "curl/7.65.3"); //request.setRawHeader("Connection", "Keep-Alive"); @@ -126,7 +126,7 @@ void RequestManager::prepareAuthHeader() { token = getFromJson(jsonResponse, "id"); QString authValue = token + ":"; - authHeader = "Basic" + authValue.toLocal8Bit().toBase64(); + authHeader = "Basic " + authValue.toLocal8Bit().toBase64(); } void RequestManager::onSSLError(QNetworkReply *reply, const QList &errors) diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index db0d2af..7436236 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -61,8 +61,8 @@ private: QNetworkAccessManager* manager; QJsonDocument config; QString authHeader; - //QString host = "https://192.168.1.3:8443"; - QString host = "http://localhost:8080"; + QString host = "https://192.168.1.3:8443"; + //QString host = "http://localhost:8080"; QString password = "spaceti1"; QString user = "spaceti"; From 988e01ef1ba555ba6068d362d4e307f483d69b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Tue, 8 Oct 2019 10:53:52 +0200 Subject: [PATCH 6/8] Add class for storing data --- src/colnod/colnod.pri | 40 ++++++------ src/colnod/data.cpp | 6 ++ src/colnod/data.h | 22 +++++++ src/colnod/dataprocessor.cpp | 111 +++++++++++++++++----------------- src/colnod/dataprocessor.h | 84 ++++++++++++------------- src/colnod/requestmanager.cpp | 31 ++-------- src/colnod/requestmanager.h | 6 +- test/unitTests/UnitTest.cpp | 43 +++++-------- 8 files changed, 172 insertions(+), 171 deletions(-) create mode 100644 src/colnod/data.cpp create mode 100644 src/colnod/data.h diff --git a/src/colnod/colnod.pri b/src/colnod/colnod.pri index 21bb360..9ac6916 100644 --- a/src/colnod/colnod.pri +++ b/src/colnod/colnod.pri @@ -1,19 +1,21 @@ -INCLUDEPATH += $$PWD -#SRC_DIR = $$PWD -message($$PWD) -SOURCES += \ - $$PWD/databasemanager.cpp \ - $$PWD/dataprocessor.cpp \ - $$PWD/entity.cpp \ - $$PWD/requestmanager.cpp \ - $$PWD/subject.cpp \ - $$PWD/token.cpp - -HEADERS += \ - $$PWD/databasemanager.h \ - $$PWD/dataprocessor.h \ - $$PWD/entity.h \ - $$PWD/requestmanager.h \ - $$PWD/subject.h \ - $$PWD/token.h -message($$SOURCES) +INCLUDEPATH += $$PWD +#SRC_DIR = $$PWD +message($$PWD) +SOURCES += \ + $$PWD/data.cpp \ + $$PWD/databasemanager.cpp \ + $$PWD/dataprocessor.cpp \ + $$PWD/entity.cpp \ + $$PWD/requestmanager.cpp \ + $$PWD/subject.cpp \ + $$PWD/token.cpp + +HEADERS += \ + $$PWD/data.h \ + $$PWD/databasemanager.h \ + $$PWD/dataprocessor.h \ + $$PWD/entity.h \ + $$PWD/requestmanager.h \ + $$PWD/subject.h \ + $$PWD/token.h +message($$SOURCES) diff --git a/src/colnod/data.cpp b/src/colnod/data.cpp new file mode 100644 index 0000000..f23b174 --- /dev/null +++ b/src/colnod/data.cpp @@ -0,0 +1,6 @@ +#include "data.h" + +Data::Data() +{ + +} diff --git a/src/colnod/data.h b/src/colnod/data.h new file mode 100644 index 0000000..e78aab2 --- /dev/null +++ b/src/colnod/data.h @@ -0,0 +1,22 @@ +#ifndef DATA_H +#define DATA_H +#include + +#include "subject.h" +#include "token.h" + +class Data : public QObject +{ + Q_OBJECT + +public: + Data(); + + +private: + QList subjects; + QList tokens; + +}; + +#endif // DATA_H diff --git a/src/colnod/dataprocessor.cpp b/src/colnod/dataprocessor.cpp index efcd9f6..644bf8f 100644 --- a/src/colnod/dataprocessor.cpp +++ b/src/colnod/dataprocessor.cpp @@ -1,56 +1,55 @@ -#include "dataprocessor.h" - -DataProcessor::DataProcessor() -{ - - db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12"); - reqMan = new RequestManager; -} - -void DataProcessor::processSubjects() -{ - reqMan->getSubjects(); - QEventLoop loop; - QObject::connect(reqMan, &RequestManager::responseReady, &loop, &QEventLoop::quit); - loop.exec(); - prepareSubjectJson(reqMan->getResponse()); -} - - - -/* -QUuid DataProcessor::getSubjectId(const QString &email) const -{ - auto subject = this->getSubjectByEmail(email); - if (!subject) - { - return ""; - } - return subject->getId(); -} - -Subject *DataProccesor::getSubjectById(const QUuid &id) const -{ - return this->subjectsById.value(id); -} - -Subject DataProcessor::getSubjectByEmail(const QString &email) const -{ - return this->subjectsByEmail.value(email); -} - -Token *Client::getTokenById(const QUuid &id) const -{ - return this->tokensById.value(id); -} - -Token *Client::getTokenByData(const QString &data) const -{ - return this->tokensByData.value(data); - }*/ - -void DataProcessor::prepareSubjectJson(QString json) -{ - QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - subjectArr = doc.object()["items"].toArray(); -} +#include "dataprocessor.h" + +DataProcessor::DataProcessor(Data *data) +{ + + db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12"); + reqMan = new RequestManager(data); + dataToProcess = data; +} + +void DataProcessor::processSubjects() +{ + reqMan->getSubjects(); + QEventLoop loop; + QObject::connect(reqMan, &RequestManager::responseReady, &loop, &QEventLoop::quit); + loop.exec(); + prepareSubjectJson(reqMan->getResponse()); +} + +/* +QUuid DataProcessor::getSubjectId(const QString &email) const +{ + auto subject = this->getSubjectByEmail(email); + if (!subject) + { + return ""; + } + return subject->getId(); +} + +Subject *DataProccesor::getSubjectById(const QUuid &id) const +{ + return this->subjectsById.value(id); +} + +Subject DataProcessor::getSubjectByEmail(const QString &email) const +{ + return this->subjectsByEmail.value(email); +} + +Token *Client::getTokenById(const QUuid &id) const +{ + return this->tokensById.value(id); +} + +Token *Client::getTokenByData(const QString &data) const +{ + return this->tokensByData.value(data); + }*/ + +void DataProcessor::prepareSubjectJson(QString json) +{ + QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + subjectArr = doc.object()["items"].toArray(); +} diff --git a/src/colnod/dataprocessor.h b/src/colnod/dataprocessor.h index 54554bf..6a9f437 100644 --- a/src/colnod/dataprocessor.h +++ b/src/colnod/dataprocessor.h @@ -1,41 +1,43 @@ -#ifndef DATAPROCESSOR_H -#define DATAPROCESSOR_H - -#include "token.h" -#include "subject.h" -#include "requestmanager.h" -#include "databasemanager.h" -#include -#include - - - -class DataProcessor : public QObject -{ - - Q_OBJECT - -public: - DataProcessor(); - - void processSubjects(); - - Subject *getSubjectById(const QUuid &id) const; - Subject *getSubjectByEmail(const QString &email) const; - QUuid getSubjectId(const QString &email) const; - - Token *getTokenById(const QUuid &id) const; - Token *getTokenByData(const QString &data) const; - -private slots: - void prepareSubjectJson(QString json); - -private: - RequestManager *reqMan; - DatabaseManager *db; - QJsonArray subjectArr; - - -}; - -#endif // DATAPROCESSOR_H +#ifndef DATAPROCESSOR_H +#define DATAPROCESSOR_H + +#include "token.h" +#include "subject.h" +#include "requestmanager.h" +#include "databasemanager.h" +#include +#include +#include "data.h" + + +class DataProcessor : public QObject +{ + + Q_OBJECT + +public: + DataProcessor(Data *data); + + void processSubjects(); + + Subject *getSubjectById(const QUuid &id) const; + Subject *getSubjectByEmail(const QString &email) const; + QUuid getSubjectId(const QString &email) const; + + Token *getTokenById(const QUuid &id) const; + Token *getTokenByData(const QString &data) const; + +private slots: + void prepareSubjectJson(QString json); + +private: + RequestManager *reqMan = nullptr; + DatabaseManager *db = nullptr; + QJsonArray subjectArr; + + Data *dataToProcess = nullptr; + + +}; + +#endif // DATAPROCESSOR_H diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index c8aad31..b2d5354 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -1,12 +1,11 @@ #include "requestmanager.h" -RequestManager::RequestManager() +RequestManager::RequestManager(Data *data) { manager = new QNetworkAccessManager(); token = ""; loginStatus = false; //should be false, true for testing request header - - + this->data = data; /* QFile configFile(QDir::current().filePath("config.json")); if (!configFile.open(QIODevice::ReadOnly)) { @@ -32,8 +31,8 @@ void RequestManager::login(QString host, QString username, QString password) request.setUrl(host + "/AaaManager/authSession"); request.setRawHeader("Authorization", authHeader.toLocal8Bit()); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); - QJsonDocument jsonDocument; + QJsonDocument jsonDocument; jsonDocument.setObject(reqBody); QNetworkReply* reply = manager->post(request, jsonDocument.toJson()); QObject::connect(reply, &QNetworkReply::finished, [=]() { @@ -57,44 +56,24 @@ void RequestManager::getRequest(QString endpoint) { // login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString()); login(host, user, password); + QEventLoop loop; QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit); loop.exec(); } - - // - //host = config.object()["host"].toString(); - // - QNetworkRequest request; request.setUrl(host + endpoint); qDebug() << "Auth: " << authHeader; request.setRawHeader("Authorization", authHeader.toLocal8Bit()); - //request.setRawHeader("User-Agent", "curl/7.65.3"); - //request.setRawHeader("Connection", "Keep-Alive"); - //request.setRawHeader("Accept", "*/*"); - //request.setRawHeader("Accept-Encoding", "*"); - //request.setRawHeader("Accept-Language", "*"); - QNetworkReply* reply = manager->post(request, QByteArray()); - - // - //QEventLoop loop; - //QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); - // loop.exec(); - // - QObject::connect(reply, &QNetworkReply::finished, [=]() { if (reply->error()) { qDebug() << reply->errorString(); - qDebug() << reply->readAll(); loginStatus = false; - getRequest(endpoint); + //getRequest(endpoint); return; } - qDebug() << reply->rawHeaderPairs(); - qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); jsonResponse = reply->readAll(); emit responseReady(); }); diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 7436236..2ce412d 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -24,13 +24,14 @@ #include "databasemanager.h" #include "token.h" #include "subject.h" +#include "data.h" class RequestManager : public QObject { Q_OBJECT public: - RequestManager(); + RequestManager(Data *data); void getSubjects(); void login(QString endpoint, QString username, QString password); void getRequest(QString endpoint); @@ -58,7 +59,7 @@ signals: private: - QNetworkAccessManager* manager; + QNetworkAccessManager* manager = nullptr; QJsonDocument config; QString authHeader; QString host = "https://192.168.1.3:8443"; @@ -69,6 +70,7 @@ private: QString token; QString jsonResponse; bool loginStatus; + Data *data = nullptr; }; diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index d8b9e71..39ebb35 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -2,7 +2,8 @@ void UnitTest::loginSuccessfully() { - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QJsonDocument config = testAccess->getConfig(); QSignalSpy spy(testAccess, SIGNAL(successLogin())); testAccess->login(host, email, password); @@ -18,7 +19,8 @@ void UnitTest::loginSuccessfully() //POST request w/o datas void UnitTest::getSubjects() { - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/SubjectManager/getSubjects"); spy.wait(); @@ -36,7 +38,8 @@ void UnitTest::getSubjects() void UnitTest::getTokens() { - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/TokenManager/getTokens"); QCOMPARE(spy.count(), 0); @@ -48,7 +51,8 @@ void UnitTest::getTokens() void UnitTest::getTokensOpenManager() { - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/OpenManager/getTokenSubject"); QCOMPARE(spy.count(), 0); @@ -75,11 +79,12 @@ void UnitTest::subjectJSONParser() QJsonObject obj = doc.object(); QJsonArray arr = obj["items"].toArray(); */ -QVERIFY(true); -return; + QVERIFY(true); + //return; - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/SubjectManager/getSubjects"); spy.wait(); @@ -94,7 +99,8 @@ return; void UnitTest::tokenJSONParser() { - RequestManager* testAccess = new RequestManager(); + Data *data = new Data(); + RequestManager* testAccess = new RequestManager(data); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/TokenManager/getTokens"); spy.wait(); @@ -132,15 +138,6 @@ void UnitTest::debugConnection() qDebug() << ssl.errorString(); } QString tmp = "POST /AaaManager/authSession HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\nContent-Type: application/json\r\nContent-Length: 164\r\n\r\n{\"password\":\"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0\",\"username\":\"spaceti\"}"; - /*POST /AaaManager/authSession HTTP/1.1 - Host: localhost:8080 - Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA== - User-Agent: curl/7.65.3 - Accept: - Content-Type: application/json - Content-Length: 164 - - {"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0","username":"spaceti"}*/ qDebug().noquote() << tmp.toUtf8(); ssl.write(tmp.toUtf8()); QString data; @@ -153,15 +150,6 @@ void UnitTest::debugConnection() QString tkn = data.mid( index + 5, 36); tkn = tkn + ":"; qDebug() << "parsed token : " <getConfig(); - QSignalSpy spy(testAccess, SIGNAL(successLogin())); - testAccess->login(host, email, password); - spy.wait(); - - QString token = testAccess->getToken(); - token = token + ":";*/ tmp = "POST /SubjectManager/getSubjects HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\n\r\n"; QFile file("output1234.txt"); file.open(QIODevice::ReadWrite); @@ -171,8 +159,9 @@ void UnitTest::debugConnection() qDebug().noquote() << tmp.toUtf8(); ssl.write(tmp.toUtf8()); while (ssl.waitForReadyRead()) + { qDebug() << ssl.readAll().data(); - + } qDebug() << ssl.errorString(); QVERIFY(true); From 0efd39d4ae5c7fb2b89d6b97410e2792b4cf3ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Tue, 8 Oct 2019 11:57:42 +0200 Subject: [PATCH 7/8] Finish unit test --- src/colnod/colnodapi.cpp | 6 +++++ src/colnod/colnodapi.h | 11 +++++++++ src/colnod/dataprocessor.cpp | 2 +- src/colnod/requestmanager.cpp | 3 +-- src/colnod/requestmanager.h | 2 +- test/unitTests/UnitTest.cpp | 43 +++++++++++++++-------------------- 6 files changed, 38 insertions(+), 29 deletions(-) create mode 100644 src/colnod/colnodapi.cpp create mode 100644 src/colnod/colnodapi.h diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp new file mode 100644 index 0000000..8ac672d --- /dev/null +++ b/src/colnod/colnodapi.cpp @@ -0,0 +1,6 @@ +#include "colnodapi.h" + +ColnodAPI::ColnodAPI() +{ + +} diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h new file mode 100644 index 0000000..9813294 --- /dev/null +++ b/src/colnod/colnodapi.h @@ -0,0 +1,11 @@ +#ifndef COLNODAPI_H +#define COLNODAPI_H + + +class ColnodAPI +{ +public: + ColnodAPI(); +}; + +#endif // COLNODAPI_H diff --git a/src/colnod/dataprocessor.cpp b/src/colnod/dataprocessor.cpp index 644bf8f..fadd754 100644 --- a/src/colnod/dataprocessor.cpp +++ b/src/colnod/dataprocessor.cpp @@ -4,7 +4,7 @@ DataProcessor::DataProcessor(Data *data) { db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12"); - reqMan = new RequestManager(data); + reqMan = new RequestManager(); dataToProcess = data; } diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index b2d5354..a113172 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -1,11 +1,10 @@ #include "requestmanager.h" -RequestManager::RequestManager(Data *data) +RequestManager::RequestManager() { manager = new QNetworkAccessManager(); token = ""; loginStatus = false; //should be false, true for testing request header - this->data = data; /* QFile configFile(QDir::current().filePath("config.json")); if (!configFile.open(QIODevice::ReadOnly)) { diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 2ce412d..22b954b 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -31,7 +31,7 @@ class RequestManager : public QObject Q_OBJECT public: - RequestManager(Data *data); + RequestManager(); void getSubjects(); void login(QString endpoint, QString username, QString password); void getRequest(QString endpoint); diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 39ebb35..504d15e 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -2,8 +2,7 @@ void UnitTest::loginSuccessfully() { - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QJsonDocument config = testAccess->getConfig(); QSignalSpy spy(testAccess, SIGNAL(successLogin())); testAccess->login(host, email, password); @@ -19,8 +18,7 @@ void UnitTest::loginSuccessfully() //POST request w/o datas void UnitTest::getSubjects() { - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/SubjectManager/getSubjects"); spy.wait(); @@ -38,21 +36,25 @@ void UnitTest::getSubjects() void UnitTest::getTokens() { - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/TokenManager/getTokens"); QCOMPARE(spy.count(), 0); spy.wait(); QVERIFY(spy.isValid()); QCOMPARE(spy.count(), 1); - qDebug() << testAccess->getResponse(); + QString json = testAccess->getResponse(); + qDebug() << json; + QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + QVERIFY(doc.isObject()); + QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response"); + qDebug() << doc.object().value("items").toArray()[0].toObject()["id"].toString(); + QVERIFY2(doc.object().value("items").toArray()[0].toObject()["id"].isString(), "ada"); } void UnitTest::getTokensOpenManager() { - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/OpenManager/getTokenSubject"); QCOMPARE(spy.count(), 0); @@ -79,12 +81,8 @@ void UnitTest::subjectJSONParser() QJsonObject obj = doc.object(); QJsonArray arr = obj["items"].toArray(); */ - QVERIFY(true); - //return; - - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/SubjectManager/getSubjects"); spy.wait(); @@ -99,22 +97,17 @@ void UnitTest::subjectJSONParser() void UnitTest::tokenJSONParser() { - Data *data = new Data(); - RequestManager* testAccess = new RequestManager(data); + RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); testAccess->getRequest("/TokenManager/getTokens"); spy.wait(); QString response = testAccess->getResponse(); - - //TODO - /* QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); + QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); QJsonArray arr = doc.object()["items"].toArray(); - auto testSubject = new Subject(); - testSubject->fromJSON(arr[1].toObject()); - qDebug() << testSubject->getName(); - QVERIFY(!testSubject->getName().isEmpty());*/ - QVERIFY(true); - + auto testToken = new Token(); + testToken->fromJSON(arr[5].toObject()); + qDebug() << testToken->getName() << " Size: " << arr.size(); + QVERIFY(!testToken->getName().isEmpty()); } void UnitTest::connectToDB() From a510938999f566348d74ab9799a4ce5928093a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Tue, 8 Oct 2019 18:28:25 +0200 Subject: [PATCH 8/8] Add property for save data from colnod to backend DB --- src/app/app.pro | 16 +++---- src/app/main.cpp | 30 ++++++++---- src/colnod/colnod.pri | 8 +++- src/colnod/colnodapi.cpp | 48 +++++++++++++++++++ src/colnod/colnodapi.h | 30 +++++++++++- src/colnod/data.cpp | 1 + src/colnod/data.h | 6 ++- src/colnod/databasemanager.cpp | 27 ++++++++--- src/colnod/databasemanager.h | 4 +- src/colnod/datamanager.cpp | 44 +++++++++++++++++ src/colnod/datamanager.h | 35 ++++++++++++++ src/colnod/dataprocessor.cpp | 55 ---------------------- src/colnod/dataprocessor.h | 43 ----------------- src/colnod/requestmanager.cpp | 86 +++++++++++++++++++++++++++------- src/colnod/requestmanager.h | 21 +++------ src/colnod/response.cpp | 6 +++ src/colnod/response.h | 25 ++++++++++ test/unitTests/UnitTest.cpp | 25 ++++++---- test/unitTests/unittest.h | 4 +- 19 files changed, 343 insertions(+), 171 deletions(-) create mode 100644 src/colnod/datamanager.cpp create mode 100644 src/colnod/datamanager.h delete mode 100644 src/colnod/dataprocessor.cpp delete mode 100644 src/colnod/dataprocessor.h create mode 100644 src/colnod/response.cpp create mode 100644 src/colnod/response.h diff --git a/src/app/app.pro b/src/app/app.pro index 619e67b..66c4a04 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -1,8 +1,8 @@ -TEMPLATE = app - -QT += core sql network -CONFIG += debug console - -SOURCES += main.cpp - -include(../colnod/colnod.pri) +TEMPLATE = app + +QT += core sql network +CONFIG += debug console + +SOURCES += main.cpp + +include(../colnod/colnod.pri) diff --git a/src/app/main.cpp b/src/app/main.cpp index 5088a36..7759942 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1,10 +1,20 @@ -#include -#include "requestmanager.h" - -int main(int argc, char *argv[]) -{ - QCoreApplication a(argc, argv); - //RequestManager *reqman = new RequestManager(); - - return a.exec(); -} +#include + +#include "data.h" +#include "datamanager.h" +#include "colnodapi.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + ColnodAPI *api = new ColnodAPI(); + + api->downloadData(); // this will start downloading data + QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){ + qDebug() << "now I have all data"; + api->syncData(); + QCoreApplication::quit(); + }); + + return a.exec(); +} diff --git a/src/colnod/colnod.pri b/src/colnod/colnod.pri index 9ac6916..2b038d4 100644 --- a/src/colnod/colnod.pri +++ b/src/colnod/colnod.pri @@ -2,20 +2,24 @@ INCLUDEPATH += $$PWD #SRC_DIR = $$PWD message($$PWD) SOURCES += \ + $$PWD/colnodapi.cpp \ $$PWD/data.cpp \ $$PWD/databasemanager.cpp \ - $$PWD/dataprocessor.cpp \ + $$PWD/datamanager.cpp \ $$PWD/entity.cpp \ $$PWD/requestmanager.cpp \ + $$PWD/response.cpp \ $$PWD/subject.cpp \ $$PWD/token.cpp HEADERS += \ + $$PWD/colnodapi.h \ $$PWD/data.h \ $$PWD/databasemanager.h \ - $$PWD/dataprocessor.h \ + $$PWD/datamanager.h \ $$PWD/entity.h \ $$PWD/requestmanager.h \ + $$PWD/response.h \ $$PWD/subject.h \ $$PWD/token.h message($$SOURCES) diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index 8ac672d..7452c39 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -2,5 +2,53 @@ ColnodAPI::ColnodAPI() { + reqMan = new RequestManager(); + //data = new Data(); + dataMan = new DataManager(); + connect(this, &ColnodAPI::partReady, this, &ColnodAPI::checkPartOfData); + connect(this, &ColnodAPI::partReady, this, &ColnodAPI::areDataReady); + } + +// PUBLIC FUNCTIONS +void ColnodAPI::downloadData() +{ + Response* resp0 = reqMan->getSubjects(); + connect(resp0, &Response::finished, [=](){ + dataMan->localSaveSubjects(resp0->reply->readAll()); + emit partReady(); + }); + + Response* resp1 = reqMan->getTokens(); + connect(resp1, &Response::finished, [=](){ + dataMan->localSaveTokens(resp1->reply->readAll()); + emit partReady(); + }); + + /* + QNetworkReply* reply2 = reqMan->getTokens(); + connect(reply2, &QNetworkReply::finished, [=](){ + data->saveTokens(reply2->readAll()); + }); + */ } + +void ColnodAPI::syncData() +{ + dataMan->pushDataToDB(); +} + +// PRIVATE FUNCTIONS +void ColnodAPI::areDataReady() +{ + if (index >= numOfMembers) + { + emit dataDownloaded(); + } +} + +void ColnodAPI::checkPartOfData() +{ + index++; +} + diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 9813294..e19d760 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -1,11 +1,39 @@ #ifndef COLNODAPI_H #define COLNODAPI_H +#include "requestmanager.h" +#include "data.h" +#include "datamanager.h" -class ColnodAPI + + + +class ColnodAPI : public QObject { + Q_OBJECT + public: + ColnodAPI(); + void downloadData(); + void syncData(); + +signals: + void dataDownloaded(); + void partReady(); + +private slots: + void areDataReady(); + void checkPartOfData(); + + +private: + RequestManager* reqMan = nullptr; + // Data* data = nullptr; + DataManager* dataMan = nullptr; + bool dataReady[2] = {false}; + int index = 0; + const int numOfMembers = 2; }; #endif // COLNODAPI_H diff --git a/src/colnod/data.cpp b/src/colnod/data.cpp index f23b174..0ee6f2c 100644 --- a/src/colnod/data.cpp +++ b/src/colnod/data.cpp @@ -4,3 +4,4 @@ Data::Data() { } + diff --git a/src/colnod/data.h b/src/colnod/data.h index e78aab2..fc25e4e 100644 --- a/src/colnod/data.h +++ b/src/colnod/data.h @@ -4,6 +4,8 @@ #include "subject.h" #include "token.h" +#include +#include class Data : public QObject { @@ -13,9 +15,9 @@ public: Data(); + private: - QList subjects; - QList tokens; + }; diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index 1b8839d..85c2654 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -17,14 +17,24 @@ DatabaseManager::DatabaseManager(QString host, QString dbName, QString user, QSt query = QSqlQuery("query", db); } -void DatabaseManager::saveSubject(Subject subject, QString table) +void DatabaseManager::saveSubject(Subject* subject, QString table) { - //TODO + query.prepare("INSERT INTO subject (id, name) VALUES (:id, :name)"); + query.bindValue(":table", table); + query.bindValue(":id",subject->getId().toString()); + qDebug() << subject->getId().toString() << subject->getName(); + query.bindValue(":name", subject->getName()); + query.exec(); } -void DatabaseManager::saveToken(Subject subject, QString table) +void DatabaseManager::saveToken(Token* token, QString table) { - //TODO + query.prepare("INSERT INTO :table (id, name) VALUES (:id, :data, :subject_id)"); + query.bindValue(":table", table); + query.bindValue(":id",token->getId()); + query.bindValue(":data", token->getTokenData()); + query.bindValue(":subject_id", token->getSubjectId()); + query.exec(); } QString DatabaseManager::getTestMessage(int id) @@ -42,8 +52,13 @@ void DatabaseManager::createTestRecord(QString msg) query.exec("SELECT MAX(id) FROM test"); query.next(); int id = query.value(0).toInt() + 1; - QString statement = QString("INSERT INTO test (id, message) VALUES (%1, '%2')").arg(id).arg(msg); - query.exec(statement); + //QString statement = QString("INSERT INTO test (id, message) VALUES (%1, '%2')").arg(id).arg(msg); + //query.exec(statement); + + query.prepare("INSERT INTO test (id, message) VALUES (:id, :msg)"); + query.bindValue(":id", id); + query.bindValue(":msg", msg); + query.exec(); query.next(); qDebug() << "U inserted new row, id: " << id << "msg: " << getTestMessage(id); diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index 1340673..42a2eae 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -17,8 +17,8 @@ class DatabaseManager : public QObject public: DatabaseManager(QString host, QString dbName, QString user, QString password); - void saveSubject(Subject subject, QString table); - void saveToken(Subject subject, QString table); + void saveSubject(Subject* subject, QString table); + void saveToken(Token* token, QString table); QString getTestMessage(int id); void createTestRecord(QString msg); diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp new file mode 100644 index 0000000..857b765 --- /dev/null +++ b/src/colnod/datamanager.cpp @@ -0,0 +1,44 @@ +#include "datamanager.h" + +DataManager::DataManager() +{ + db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12"); +} + +void DataManager::localSaveSubjects(QString response) +{ + QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); + QJsonArray items = doc.object()["items"].toArray(); + for (QJsonValueRef item : items) + { + auto subject = new Subject(); + subject->fromJSON(item.toObject()); + subjects.append(subject); + } +} + +void DataManager::localSaveTokens(QString response) +{ + QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); + QJsonArray items = doc.object()["items"].toArray(); + for (QJsonValueRef item : items) + { + auto token = new Token(); + token->fromJSON(item.toObject()); + tokens.append(token); + + } +} + +void DataManager::pushDataToDB() +{ + for (auto subject : subjects) + { + db->saveSubject(subject, "subject"); + } + + for (auto token : tokens) + { + db->saveToken(token, "Subjects"); + } +} diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h new file mode 100644 index 0000000..af741e6 --- /dev/null +++ b/src/colnod/datamanager.h @@ -0,0 +1,35 @@ +#ifndef DATAMANAGER_H +#define DATAMANAGER_H + +#include "token.h" +#include "subject.h" +#include "requestmanager.h" +#include "databasemanager.h" +#include +#include +#include "data.h" + + +class DataManager : public QObject +{ + + Q_OBJECT + +public: + DataManager(); + + void localSaveSubjects(QString jsonResponse); + void localSaveTokens(QString jsonResponse); + void pushDataToDB(); + + +private: + DatabaseManager *db = nullptr; + QList> subjects; + QList> tokens; + //Data *dataToProcess = nullptr; + + +}; + +#endif // DATAMANAGER_H diff --git a/src/colnod/dataprocessor.cpp b/src/colnod/dataprocessor.cpp deleted file mode 100644 index fadd754..0000000 --- a/src/colnod/dataprocessor.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "dataprocessor.h" - -DataProcessor::DataProcessor(Data *data) -{ - - db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12"); - reqMan = new RequestManager(); - dataToProcess = data; -} - -void DataProcessor::processSubjects() -{ - reqMan->getSubjects(); - QEventLoop loop; - QObject::connect(reqMan, &RequestManager::responseReady, &loop, &QEventLoop::quit); - loop.exec(); - prepareSubjectJson(reqMan->getResponse()); -} - -/* -QUuid DataProcessor::getSubjectId(const QString &email) const -{ - auto subject = this->getSubjectByEmail(email); - if (!subject) - { - return ""; - } - return subject->getId(); -} - -Subject *DataProccesor::getSubjectById(const QUuid &id) const -{ - return this->subjectsById.value(id); -} - -Subject DataProcessor::getSubjectByEmail(const QString &email) const -{ - return this->subjectsByEmail.value(email); -} - -Token *Client::getTokenById(const QUuid &id) const -{ - return this->tokensById.value(id); -} - -Token *Client::getTokenByData(const QString &data) const -{ - return this->tokensByData.value(data); - }*/ - -void DataProcessor::prepareSubjectJson(QString json) -{ - QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - subjectArr = doc.object()["items"].toArray(); -} diff --git a/src/colnod/dataprocessor.h b/src/colnod/dataprocessor.h deleted file mode 100644 index 6a9f437..0000000 --- a/src/colnod/dataprocessor.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef DATAPROCESSOR_H -#define DATAPROCESSOR_H - -#include "token.h" -#include "subject.h" -#include "requestmanager.h" -#include "databasemanager.h" -#include -#include -#include "data.h" - - -class DataProcessor : public QObject -{ - - Q_OBJECT - -public: - DataProcessor(Data *data); - - void processSubjects(); - - Subject *getSubjectById(const QUuid &id) const; - Subject *getSubjectByEmail(const QString &email) const; - QUuid getSubjectId(const QString &email) const; - - Token *getTokenById(const QUuid &id) const; - Token *getTokenByData(const QString &data) const; - -private slots: - void prepareSubjectJson(QString json); - -private: - RequestManager *reqMan = nullptr; - DatabaseManager *db = nullptr; - QJsonArray subjectArr; - - Data *dataToProcess = nullptr; - - -}; - -#endif // DATAPROCESSOR_H diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index a113172..d0ee796 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -18,16 +18,17 @@ RequestManager::RequestManager() void RequestManager::login(QString host, QString username, QString password) { + QNetworkRequest request; - QString hash = encryptedPassword(password); - authHeader = getLoginHeader(username, hash); + QString hash = encryptedPassword(this->password); + authHeader = getLoginHeader(this->user, hash); QJsonObject reqBody = { {"password", hash}, - {"username", username} + {"username", this->user} }; - this->host = host; + //this->host = host; - request.setUrl(host + "/AaaManager/authSession"); + request.setUrl(this->host + "/AaaManager/authSession"); request.setRawHeader("Authorization", authHeader.toLocal8Bit()); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); @@ -41,6 +42,8 @@ void RequestManager::login(QString host, QString username, QString password) loginStatus = false; return; } + if (loginStatus) + return; jsonResponse = reply->readAll(); prepareAuthHeader(); loginStatus = true; @@ -49,17 +52,8 @@ void RequestManager::login(QString host, QString username, QString password) }); } -void RequestManager::getRequest(QString endpoint) +QNetworkReply* RequestManager::getRequest(QString endpoint) { - if (!loginStatus) - { - // login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString()); - login(host, user, password); - - QEventLoop loop; - QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit); - loop.exec(); - } QNetworkRequest request; request.setUrl(host + endpoint); qDebug() << "Auth: " << authHeader; @@ -73,9 +67,10 @@ void RequestManager::getRequest(QString endpoint) //getRequest(endpoint); return; } - jsonResponse = reply->readAll(); emit responseReady(); }); + return reply; + } QString RequestManager::getFromJson(QString json, const QString &member) @@ -119,7 +114,62 @@ void RequestManager::onSSLError(QNetworkReply *reply, const QList &er } -void RequestManager::getSubjects() +Response* RequestManager::getSubjects() { - getRequest("/SubjectManager/getSubjects"); + auto response = new Response; + if (!loginStatus){ + login(host, user, password); + connect(this, &RequestManager::successLogin, [=](){ + auto subjectReply = getRequest("/SubjectManager/getSubjects"); + response->reply = subjectReply; + connect(subjectReply, &QNetworkReply::finished, response, &Response::finished); + }); + } + else + { + QNetworkReply* reply = getRequest("/SubjectManager/getSubjects"); + connect(reply, &QNetworkReply::finished, response, &Response::finished); + } + + return response; +} + +Response* RequestManager::getTokens() +{ + auto response = new Response; + if (!loginStatus){ + login(host, user, password); + connect(this, &RequestManager::successLogin, [=](){ + auto subjectReply = getRequest("/TokenManager/getTokens"); + response->reply = subjectReply; + connect(subjectReply, &QNetworkReply::finished, response, &Response::finished); + }); + } + else + { + QNetworkReply* reply = getRequest("/TokenManager/getTokens"); + connect(reply, &QNetworkReply::finished, response, &Response::finished); + } + + return response; +} + +Response* RequestManager::getTokenSubject() +{ + auto response = new Response; + if (!loginStatus){ + login(host, user, password); + connect(this, &RequestManager::successLogin, [=](){ + auto subjectReply = getRequest("/OpenManager/getTokenSubject"); + response->reply = subjectReply; + connect(subjectReply, &QNetworkReply::finished, response, &Response::finished); + }); + } + else + { + QNetworkReply* reply = getRequest("/OpenManager/getTokenSubject"); + connect(reply, &QNetworkReply::finished, response, &Response::finished); + } + + return response; } diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 22b954b..42b1a62 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -21,10 +21,7 @@ #include -#include "databasemanager.h" -#include "token.h" -#include "subject.h" -#include "data.h" +#include "response.h" class RequestManager : public QObject { @@ -32,19 +29,16 @@ class RequestManager : public QObject public: RequestManager(); - void getSubjects(); - void login(QString endpoint, QString username, QString password); - void getRequest(QString endpoint); - void loadSubjectsFromColnodToDB(); - - + Response* getSubjects(); + Response* getTokens(); + Response* getTokenSubject(); + void login(QString endpoint, QString username, QString password); //I want it private, but unittest??? const QJsonDocument &getConfig() const {return config;} const QString &getResponse() const {return jsonResponse;} - QString getToken(){return token;} private: - + QNetworkReply* getRequest(QString endpoint); QString getFromJson(QString json, const QString &member); QString encryptedPassword(QString password); QString getLoginHeader(QString username, QString hash); @@ -53,6 +47,7 @@ private: private slots: void onSSLError(QNetworkReply *reply, const QList &errors); + signals: void successLogin(); void responseReady(); @@ -70,8 +65,6 @@ private: QString token; QString jsonResponse; bool loginStatus; - Data *data = nullptr; - }; diff --git a/src/colnod/response.cpp b/src/colnod/response.cpp new file mode 100644 index 0000000..a3cb839 --- /dev/null +++ b/src/colnod/response.cpp @@ -0,0 +1,6 @@ +#include "response.h" + +Response::Response() +{ + +} diff --git a/src/colnod/response.h b/src/colnod/response.h new file mode 100644 index 0000000..aa5ef96 --- /dev/null +++ b/src/colnod/response.h @@ -0,0 +1,25 @@ +#ifndef RESPONSE_H +#define RESPONSE_H + +#include +#include + +class Response : public QObject +{ + Q_OBJECT +public: + Response(); + +public: + QNetworkReply *reply = nullptr; + +signals: + void finished(); + +public slots: + +private: + +}; + +#endif // RESPONSE_H diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 504d15e..a25c365 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -20,12 +20,11 @@ void UnitTest::getSubjects() { RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); - testAccess->getRequest("/SubjectManager/getSubjects"); + testAccess->getSubjects(); spy.wait(); QVERIFY(spy.isValid()); QCOMPARE(spy.count(), 1); QString json = testAccess->getResponse(); - qDebug() << json; QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QVERIFY(doc.isObject()); QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response"); @@ -38,13 +37,12 @@ void UnitTest::getTokens() { RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); - testAccess->getRequest("/TokenManager/getTokens"); + testAccess->getTokens(); QCOMPARE(spy.count(), 0); spy.wait(); QVERIFY(spy.isValid()); QCOMPARE(spy.count(), 1); QString json = testAccess->getResponse(); - qDebug() << json; QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QVERIFY(doc.isObject()); QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response"); @@ -52,11 +50,11 @@ void UnitTest::getTokens() QVERIFY2(doc.object().value("items").toArray()[0].toObject()["id"].isString(), "ada"); } -void UnitTest::getTokensOpenManager() +void UnitTest::getTokenSubject() { RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); - testAccess->getRequest("/OpenManager/getTokenSubject"); + testAccess->getTokenSubject(); QCOMPARE(spy.count(), 0); spy.wait(); QVERIFY(spy.isValid()); @@ -84,7 +82,7 @@ void UnitTest::subjectJSONParser() RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); - testAccess->getRequest("/SubjectManager/getSubjects"); + testAccess->getSubjects(); spy.wait(); QString response = testAccess->getResponse(); QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); @@ -99,7 +97,7 @@ void UnitTest::tokenJSONParser() { RequestManager* testAccess = new RequestManager(); QSignalSpy spy(testAccess, SIGNAL(responseReady())); - testAccess->getRequest("/TokenManager/getTokens"); + testAccess->getTokens(); spy.wait(); QString response = testAccess->getResponse(); QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); @@ -117,7 +115,7 @@ void UnitTest::connectToDB() qDebug() << db->getTestMessage(1); QVERIFY(true); QCOMPARE(db->getTestMessage(1), QStringLiteral("Hello world")); - db->createTestRecord("Does it work?"); + db->createTestRecord("Now it's diffrent"); QCOMPARE(db->getTestMessage(2), QStringLiteral("Does it work?")); } @@ -160,5 +158,14 @@ void UnitTest::debugConnection() QVERIFY(true); } +void UnitTest::saveDataToDB() +{ + DataManager* dataMan = new DataManager(); + + // dataMan->localSaveTokens(); + QVERIFY(true); + +} + QTEST_MAIN(UnitTest) diff --git a/test/unitTests/unittest.h b/test/unitTests/unittest.h index a1eafea..0765fa6 100644 --- a/test/unitTests/unittest.h +++ b/test/unitTests/unittest.h @@ -7,6 +7,7 @@ #include "subject.h" #include "databasemanager.h" #include +#include "datamanager.h" class UnitTest : public QObject @@ -18,11 +19,12 @@ private slots: void loginSuccessfully(); // /AaaManager/authSession void getSubjects(); // /SubjectManager/getSubjects void getTokens(); // /TokenManager/getTokens - void getTokensOpenManager(); // /OpenManager/getTokenSubject + void getTokenSubject(); // /OpenManager/getTokenSubject void subjectJSONParser(); void tokenJSONParser(); void connectToDB(); void debugConnection(); + void saveDataToDB(); private: //QString host = "http://localhost:8080"; //colnod server (ssh -L 8080:192.168.254.11:8443 penta-master)