diff --git a/src/app/main.cpp b/src/app/main.cpp index 62ab6ea..10a4150 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -10,8 +10,9 @@ int main(int argc, char *argv[]) QCoreApplication::setApplicationName("colnod-connector"); QCoreApplication::setApplicationVersion("1.0"); QCommandLineParser parser; + Logger *logger = Logger::getLogger(); parser.setApplicationDescription("Dry mode"); - QCommandLineOption dryModeOption("dryMode", "ColnodAPI", "Read-only mode, prints changes which normally be doing"); + QCommandLineOption dryModeOption("dryMode", "ColnodAPI", "Read-only mode, prints changes which would normally be made"); parser.addOption(dryModeOption); parser.process(app); auto *api = new ColnodAPI(true); // parser.isSet(dryModeOption)); diff --git a/src/colnod/colnod.pri b/src/colnod/colnod.pri index 51c711d..d9e86e2 100644 --- a/src/colnod/colnod.pri +++ b/src/colnod/colnod.pri @@ -6,6 +6,7 @@ SOURCES += \ $$PWD/databasemanager.cpp \ $$PWD/datamanager.cpp \ $$PWD/entity.cpp \ + $$PWD/logger.cpp \ $$PWD/requestmanager.cpp \ $$PWD/response.cpp \ $$PWD/subject.cpp \ @@ -16,6 +17,7 @@ HEADERS += \ $$PWD/databasemanager.h \ $$PWD/datamanager.h \ $$PWD/entity.h \ + $$PWD/logger.h \ $$PWD/requestmanager.h \ $$PWD/response.h \ $$PWD/subject.h \ diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 264320e..c287b6b 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -2,6 +2,7 @@ #include "requestmanager.h" #include "datamanager.h" +#include "logger.h" class ColnodAPI : public QObject { diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index 4d1f248..27a54d4 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -31,8 +31,8 @@ int DatabaseManager::saveSubject(Subject* subject, const QString& table) executeQuery(query); return -1; } - else - { + + query.prepare(QString("INSERT INTO %1 (id, description, last_update, name, pin) " "VALUES (:id, :description, :last_update, :name, :pin)").arg(table)); query.bindValue(":id", id); @@ -42,7 +42,7 @@ int DatabaseManager::saveSubject(Subject* subject, const QString& table) query.bindValue(":pin", subject->getPin()); executeQuery(query); return 1; - } + } // add or update token to DB @@ -69,8 +69,8 @@ int DatabaseManager::saveToken(Token* token, const QString& table) executeQuery(query); return -1; } - else - { + + query.prepare(QString("INSERT INTO %1 (id, auth_errors, description, enabled, last_update, name, no_validity, time_to_live, token_bits, token_data, token_type, subject_id, last_modified, deleted) " "VALUES (:id, :auth_errors, :description, :enabled, :last_update, :name, :no_validity, :time_to_live, :token_bits, :token_data, :token_type, :subject_id, :last_modified, :deleted)").arg(table)); query.bindValue(":id", id); @@ -89,7 +89,7 @@ int DatabaseManager::saveToken(Token* token, const QString& table) query.bindValue(":deleted", token->getDeleted()); executeQuery(query); return 1; - } + } // add of update subject attributes @@ -172,10 +172,10 @@ bool DatabaseManager::executeQuery(QSqlQuery &query) const query.exec(); return true; } - else{ + bool res = query.exec(); return res; - } + } void DatabaseManager::dropTables() @@ -270,3 +270,11 @@ void DatabaseManager::setLastUpdate(const QString& id, quint64 lastUpdate) executeQuery(query); } +void DatabaseManager::log(QString msg) +{ + query.prepare("INSERT INTO logs (msg) VALUES (:msg)"); + query.bindValue(":msg", msg); + query.exec(); + //executeQuery(query); +} + diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index 84a654d..2e4ddb6 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -10,6 +10,7 @@ #include "subject.h" #include "token.h" #include +//#include "logger.h" class DatabaseManager : public QObject @@ -35,6 +36,8 @@ public: void setLastUpdate(const QString& id, quint64 lastUpdate); + void log(QString msg); + private: bool checkIfExists(const QString& id, const QString& table); bool executeQuery(QSqlQuery &query) const; diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp index bd221f2..e758a1d 100644 --- a/src/colnod/datamanager.cpp +++ b/src/colnod/datamanager.cpp @@ -3,10 +3,11 @@ DataManager::DataManager(const bool &dryMode) { db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode); + //db = new DatabaseManager("localhost", "deloitte", "postgres", "34rjkciea12"); + Logger::setDBMan(db); nextLastSync = db->getNow(); lastSync = db->getLastSync(); this->dryMode = dryMode; - //db = new DatabaseManager("localhost", "deloitte", "postgres", "34rjkciea12"); } // load all tokens from colnod to comparing with working set from DB @@ -105,6 +106,8 @@ void DataManager::fillSubjectsToUpdateDB() // load working set with subjest to delete from Colnod void DataManager::fillSubjectsToDeleteColnod(const QString& json) { + Logger::log("hello from dataManager :)"); + Logger::logToDb("testing"); QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonArray items = doc.object()["items"].toArray(); if (!items.empty()) @@ -120,7 +123,7 @@ void DataManager::fillSubjectsToDeleteColnod(const QString& json) } } -// load working set with tokens to delete from colnod +// load working set with tokens to delete from DB void DataManager::fillTokensToDeleteColnod(const QString& json) { QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); @@ -149,7 +152,8 @@ void DataManager::pushSubjectsToDB() if (subjectsToUpdateFromColnodToDB.contains("empty")) { return; } - int updated = 0, added = 0; + int updated = 0; + int added = 0; qInfo() << "Subjects in progress..."; for (const auto& subject : subjectsToUpdateFromColnodToDB) { @@ -170,7 +174,8 @@ void DataManager::pushTokensToDB() return; } filterTokensColnod(); - int updated = 0, added = 0; + int updated = 0; + int added = 0; qInfo() << "Tokens in progress..."; for (const auto& token : tokensToUpdateFromColnodToDB) { @@ -181,6 +186,7 @@ void DataManager::pushTokensToDB() } qInfo() << added << " tokens added to DB"; qInfo() << updated << " tokens updated to DB"; + } void DataManager::deleteSubjectsFromDB() @@ -253,11 +259,11 @@ void DataManager::updateLastSync() // these to filter functions solve colision tokens -> remove when change on this token is earlier then change on the same token on the other side (Colnod/DB) void DataManager::filterTokensDB() { - for (auto token : tokensToUpdateFromDBToColnod) + for (const auto& token : tokensToUpdateFromDBToColnod) { QString id = token->idToStringWithoutBraces(); - Q_ASSERT(token = allTokensFromColnod.value(id)); // if working sets are loading correctly equels should never happend - if (allTokensFromColnod.contains(id) && token < allTokensFromColnod.value(id)) + Q_ASSERT(token != allTokensFromColnod.value(id)); // if working sets are loading correctly equels should never happend + if (allTokensFromColnod.contains(id) && *token < *allTokensFromColnod.value(id)) tokensToUpdateFromDBToColnod.remove(id); } } @@ -273,8 +279,7 @@ void DataManager::filterTokensColnod() auto tokenDB = new Token; tokenDB->fromSQLRecord(record); Q_ASSERT(tokenDB != token); - qDebug() << tokenDB->getLastModified() << " > " << token->getLastUpdate(); - if (tokenDB > token) + if (*tokenDB > *token) tokensToUpdateFromColnodToDB.remove(id); } } diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h index 2824ed8..7c036d1 100644 --- a/src/colnod/datamanager.h +++ b/src/colnod/datamanager.h @@ -6,6 +6,7 @@ #include "databasemanager.h" #include #include +#include class DataManager : public QObject diff --git a/src/colnod/entity.cpp b/src/colnod/entity.cpp index d1d93cb..fcae765 100644 --- a/src/colnod/entity.cpp +++ b/src/colnod/entity.cpp @@ -40,19 +40,19 @@ QString Entity::idToStringWithoutBraces() const } void Entity::fromJSON(const QJsonObject &json) { - id = json.value("id").toString(); - name = json.value("name").toString(); - description = json.value("description").toString(); - lastUpdate = json.value("lastUpdate").toDouble(); + id = json["id"].toString(); + name = json["name"].toString(); + description = json["description"].toString(); + lastUpdate = json["lastUpdate"].toDouble(); } QJsonObject Entity::toJSON() const { QJsonObject json; - json.value("id") = this->idToStringWithoutBraces(); - json.value("name") = name; - json.value("description") = description; - json.value("lastUpdate") = lastUpdate; + json["id"] = this->idToStringWithoutBraces(); + json["name"] = name; + json["description"] = description; + json["lastUpdate"] = lastUpdate; return json; } diff --git a/src/colnod/logger.cpp b/src/colnod/logger.cpp new file mode 100644 index 0000000..431897d --- /dev/null +++ b/src/colnod/logger.cpp @@ -0,0 +1,33 @@ +#include "logger.h" + +Logger::Logger() +{ + dbMan = nullptr; +} + +Logger *Logger::getLogger() +{ + if (!logger) + logger = new Logger; + return logger; +} + +void Logger::log(const QString& msg) +{ + qDebug() << msg; +} + +void Logger::logToDb(const QString &msg) +{ + dbMan->log(msg); +} + +void Logger::setDBMan(DatabaseManager *dbMan) +{ + Logger::dbMan = dbMan; +} + + +Logger *Logger::logger = nullptr; +DatabaseManager *Logger::dbMan = nullptr; + diff --git a/src/colnod/logger.h b/src/colnod/logger.h new file mode 100644 index 0000000..13e8494 --- /dev/null +++ b/src/colnod/logger.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include +#include +#include "databasemanager.h" + + +class Logger +{ + + static Logger *logger; + + Logger(); + + static DatabaseManager *dbMan; + +public: + static Logger *getLogger(); + static void log(const QString& msg); + static void logToDb(const QString& msg); + static void setDBMan(DatabaseManager* dbMan); + + +private: + +}; + diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 17b1bba..4d868ac 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -24,6 +24,7 @@ #include "token.h" #include "response.h" +#include "logger.h" class RequestManager : public QObject { @@ -83,7 +84,7 @@ private: QJsonDocument config; QString authHeader; QString host = "https://192.168.1.3:8443"; - // QString host = "https://localhost:8080"; + //QString host = "https://localhost:8080"; QString password = "spaceti1"; QString user = "spaceti"; diff --git a/src/colnod/subject.cpp b/src/colnod/subject.cpp index c5ef386..55e5999 100644 --- a/src/colnod/subject.cpp +++ b/src/colnod/subject.cpp @@ -16,21 +16,21 @@ QString Subject::getEmail() const { void Subject::fromJSON(const QJsonObject &json) { Entity::fromJSON(json); - attributes = json.value("attributes").toObject().value("items").toObject(); + attributes = json["attributes"].toObject()["items"].toObject(); for (const auto & attributeType : attributeTypes) { if (!attributes[attributeType].toString().isEmpty()){ atr.append(qMakePair(attributeType, attributes[attributeType].toString())); } } - const auto &tokenFlagsArray = json.value("tokenFlags").toArray(); + const auto &tokenFlagsArray = json["tokenFlags"].toArray(); for(const auto &flag : tokenFlagsArray){ tokenFlags.insert(flag.toString()); } - pin = json.value("pin").toString(); + pin = json["pin"].toString(); - const auto &pinFlagsArray = json.value("pinFlags").toArray(); + const auto &pinFlagsArray = json["pinFlags"].toArray(); for(const auto &flag : pinFlagsArray){ pinFlags.insert(flag.toString()); } @@ -41,10 +41,10 @@ QJsonObject Subject::toJSON() const { QJsonObject json = Entity::toJSON(); QJsonObject items({{"items", attributes}}); - json.value("atributes") = items; - json.value("tokenFlags") = QJsonArray::fromStringList(tokenFlags.toList()); - json.value("pin") = pin; - json.value("pinFlags") = QJsonArray::fromStringList(pinFlags.toList()); + json["atributes"] = items; + json["tokenFlags"] = QJsonArray::fromStringList(tokenFlags.toList()); + json["pin"] = pin; + json["pinFlags"] = QJsonArray::fromStringList(pinFlags.toList()); return json; } diff --git a/src/colnod/token.cpp b/src/colnod/token.cpp index 32315ce..001da85 100644 --- a/src/colnod/token.cpp +++ b/src/colnod/token.cpp @@ -26,32 +26,29 @@ Token::Token(const QString &name) void Token::fromJSON(const QJsonObject &json) { Entity::fromJSON(json); - tokenType = json.value("tokenType").toString(); - tokenBits = json.value("tokenBits").toInt(); - tokenData = json.value("tokenData").toString(); - validFrom = json.value("validFrom").toDouble(); - validTo = json.value("validTo").toDouble(); - timeToLive = json.value("timeToLive").toInt(); + tokenType = json["tokenType"].toString(); + tokenBits = json["tokenBits"].toInt(); + tokenData = json["tokenData"].toString(); + timeToLive = json["timeToLive"].toInt(); authErrors = json["authErrors"].toInt(); const auto &flagsArray = json["flags"].toArray(); for(const auto &flag : flagsArray){ flags.insert(flag.toString()); } - subjectId = json.value("subjectId").toString(); + subjectId = json["subjectId"].toString(); } QJsonObject Token::toJSON() const { QJsonObject json = Entity::toJSON(); - - json.value("tokenType") = tokenType; - json.value("tokenBits") = tokenBits; - json.value("tokenData") = tokenData; - json.value("validFrom") = validFrom; - json.value("validTo") = validTo; - json.value("timeToLive") = timeToLive; - json.value("authErrors") = authErrors; - json.value("flags") = QJsonArray::fromStringList(flags.toList()); - json.value("subjectId") = subjectId.toString().mid(1,36); + json.insert("tokenType", tokenType); + json["tokenBits"] = tokenBits; + json["tokenType"] = tokenType; + json["tokenBits"] = tokenBits; + json["tokenData"] = tokenData; + json["timeToLive"] = timeToLive; + json["authErrors"] = authErrors; + json["flags"] = QJsonArray::fromStringList(flags.toList()); + json["subjectId"] = subjectId.toString().mid(1,36); return json; } @@ -104,22 +101,6 @@ void Token::setTokenData(const QString &tokenData) { Token::tokenData = tokenData; } -quint64 Token::getValidFrom() const { - return validFrom; -} - -void Token::setValidFrom(quint64 validFrom) { - Token::validFrom = validFrom; -} - -quint64 Token::getValidTo() const { - return validTo; -} - -void Token::setValidTo(quint64 validTo) { - Token::validTo = validTo; -} - int Token::getTimeToLive() const { return timeToLive; } diff --git a/src/colnod/token.h b/src/colnod/token.h index 452a6f7..fe6b665 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -19,7 +19,7 @@ public: return lToken.getLastModified() < rToken.getLastUpdate(); } friend bool operator>(const Token &lToken, const Token &rToken){ - return rToken.getLastModified() > lToken.getLastUpdate(); + return lToken.getLastModified() > rToken.getLastUpdate(); } const QString &getTokenType() const; @@ -28,10 +28,6 @@ public: void setTokenBits(int tokenBits); const QString &getTokenData() const; void setTokenData(const QString &tokenData); - quint64 getValidFrom() const; - void setValidFrom(quint64 validFrom); - quint64 getValidTo() const; - void setValidTo(quint64 validTo); int getTimeToLive() const; void setTimeToLive(int timeToLive); int getAuthErrors() const; @@ -55,8 +51,6 @@ private: QString tokenType; int tokenBits{}; QString tokenData; - qint64 validFrom{}; - qint64 validTo{}; int timeToLive{}; int authErrors{}; QSet flags; diff --git a/test/unitTests/complextest.cpp b/test/unitTests/complextest.cpp index a489a1d..0bd7616 100644 --- a/test/unitTests/complextest.cpp +++ b/test/unitTests/complextest.cpp @@ -2,32 +2,33 @@ void ComplexTest::initTestCase() { - auto reqMan1 = new RequestManager; - QList ids; - ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); - ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546"); - Response* deleteTokensResp = reqMan1->deleteTokens(ids); - QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready); - QCOMPARE(deleteTokensRespSpy.count(), 0); - deleteTokensRespSpy.wait(timeout); - QTest::qWait(2500); +// auto reqMan1 = new RequestManager; +// QList ids; +// ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); +// ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546"); +// Response* deleteTokensResp = reqMan1->deleteTokens(ids); +// QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready); +// QCOMPARE(deleteTokensRespSpy.count(), 0); +// deleteTokensRespSpy.wait(timeout); +// QTest::qWait(2500); start = QDateTime::currentMSecsSinceEpoch()-2000; - api = new ColnodAPI(true); + api = new ColnodAPI(); qDebug() << start; + } void ComplexTest::cleanupTestCase() { - QList ids; - ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); - ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546"); - auto reqMan = new RequestManager; - Response* deleteTokensResp = reqMan->deleteTokens(ids); - QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready); - QCOMPARE(deleteTokensRespSpy.count(), 0); - deleteTokensRespSpy.wait(timeout); - QCOMPARE(deleteTokensRespSpy.count(), 1); +// QList ids; +// ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); +// ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546"); +// auto reqMan = new RequestManager; +// Response* deleteTokensResp = reqMan->deleteTokens(ids); +// QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready); +// QCOMPARE(deleteTokensRespSpy.count(), 0); +// deleteTokensRespSpy.wait(timeout); +// QCOMPARE(deleteTokensRespSpy.count(), 1); } void ComplexTest::complexTest() @@ -82,7 +83,7 @@ void ComplexTest::complexTest() // DELETE_TOKENS_CHECK_BEGIN QList ids; - ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); + ids.append("062c93f6-ba3e-46af-a3a6-7a2988d1f0e9"); Response* deleteTokensResp = reqMan->deleteTokens(ids); QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready); QCOMPARE(deleteTokensRespSpy.count(), 0); @@ -101,7 +102,7 @@ void ComplexTest::complexTest() QCOMPARE(getTokensDeletedRespSpy.count(), 1); auto doc2 = getJsonDoc(getTokensDeletedResp->getJson()); QCOMPARE(doc2.object()["items"].toArray().size(), 1); - QVERIFY(doc2.object()["items"].toArray().contains("582c982d-6fd7-4856-8548-7ce542791c7a")); + QVERIFY(doc2.object()["items"].toArray().contains("062c93f6-ba3e-46af-a3a6-7a2988d1f0e9")); // CHECK_DELETED_TOKENS_END // LAST_TESTS (for sure) @@ -128,6 +129,8 @@ void ComplexTest::fullSync() void ComplexTest::syncLastUpdated() { + Logger *logger = Logger::getLogger(); + Logger::log("ahoj"); api->loadDataFromColnod(); QSignalSpy spy(api, &ColnodAPI::dataDownloaded); spy.wait(timeout); @@ -175,7 +178,7 @@ QJsonDocument ComplexTest::getJsonDoc(const QString &json) QPointer ComplexTest::getTestToken() { QJsonObject jsonToken; - jsonToken.insert("id", "582c982d-6fd7-4856-8548-7ce542791c7a"); + jsonToken.insert("id", "062c93f6-ba3e-46af-a3a6-7a2988d1f0e9"); jsonToken.insert("name", "test"); jsonToken.insert("description", "mobile"); jsonToken.insert("tokenType", "Token"); diff --git a/test/unitTests/complextest.h b/test/unitTests/complextest.h index 0aa1c74..a887cab 100644 --- a/test/unitTests/complextest.h +++ b/test/unitTests/complextest.h @@ -6,6 +6,7 @@ #include "response.h" #include "requestmanager.h" #include "colnodapi.h" +#include "logger.h" class ComplexTest : public QObject {