diff --git a/src/app/main.cpp b/src/app/main.cpp index 1dacdb7..00849fd 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1,13 +1,19 @@ #include -#include "datamanager.h" #include "syncmanager.h" #include #include "serversdk/requestmanager.h" #include "serversdk/request.h" +#include "serversdk/logger.h" +#include "serversdk/core.h" + #include "colnodapi.h" +constexpr auto equels = R"(==================================================================)"; +constexpr auto underScore = R"(__________________________________________________________________)"; +constexpr auto dash = R"(------------------------------------------------------------------)"; + int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); @@ -24,6 +30,15 @@ int main(int argc, char *argv[]) parser.process(app); + // ======== LOGGER ============== + serversdk::initAppLogger(); // <-- then Logger::outputMessage will handle all messages + // Log messge Filtering + QStringList filters; + filters << "qt.*=false"; + filters << "sdk.core.*=true"; + //filters << "*=false"; + QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n"))); + SyncManager api; // TODO: handle error in init diff --git a/src/colnod/colnod.pri b/src/colnod/colnod.pri index 9118df7..f8d6a6b 100644 --- a/src/colnod/colnod.pri +++ b/src/colnod/colnod.pri @@ -1,32 +1,22 @@ -INCLUDEPATH += $$PWD - -CONFIG += c++14 - - -SOURCES += \ - $$PWD/colnodapi.cpp \ - $$PWD/data.cpp \ - $$PWD/databaseapi.cpp \ - $$PWD/datamanager.cpp \ - $$PWD/entity.cpp \ - $$PWD/logger.cpp \ - $$PWD/requestmanager.cpp \ - $$PWD/response.cpp \ - $$PWD/subject.cpp \ - $$PWD/syncmanager.cpp \ - $$PWD/token.cpp - -HEADERS += \ - $$PWD/colnodapi.h \ - $$PWD/data.h \ - $$PWD/databaseapi.h \ - $$PWD/datamanager.h \ - $$PWD/entity.h \ - $$PWD/logger.h \ - $$PWD/requestmanager.h \ - $$PWD/response.h \ - $$PWD/subject.h \ - $$PWD/syncmanager.h \ - $$PWD/token.h - -include(../../server-sdk/serversdk.pri) +INCLUDEPATH += $$PWD + +CONFIG += c++14 + + +SOURCES += \ + $$PWD/colnodapi.cpp \ + $$PWD/data.cpp \ + $$PWD/databaseapi.cpp \ + $$PWD/subject.cpp \ + $$PWD/syncmanager.cpp \ + $$PWD/token.cpp + +HEADERS += \ + $$PWD/colnodapi.h \ + $$PWD/data.h \ + $$PWD/databaseapi.h \ + $$PWD/subject.h \ + $$PWD/syncmanager.h \ + $$PWD/token.h + +include(../../server-sdk/serversdk.pri) diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index dc11ae3..051a0e6 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -1,5 +1,7 @@ #include "colnodapi.h" +Q_LOGGING_CATEGORY(colnod, "colnod.api"); + ColnodAPI::ColnodAPI() { } @@ -185,6 +187,14 @@ void ColnodAPI::setUserName(const QString &userName) void ColnodAPI::areDataReady() { if (++amountData == 4) { + + qDebug(colnod) << "COLNOD DATA:"; + qDebug(colnod) << TAB << data->updatedTokens.size() << "TOKENS TO UPDATE"; + qDebug(colnod) << TAB << data->deletedTokens.size() << "TOKENS TO DELETE"; + qDebug(colnod) << TAB << data->updatedSubjects.size() << "SUBJECTS TO UPDATE"; + qDebug(colnod) << TAB << data->deletedSubjects.size() << "SUBJECTS TO DELETE"; + qDebug(colnod) << UNDERSCORE << endl; + emit downloadDataFinished(data); newData(); } diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 986aa25..b418f00 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -3,9 +3,11 @@ #include "serversdk/requestmanager.h" #include "serversdk/request.h" #include "serversdk/databasetable.h" -#include "QDateTime" +#include "serversdk/logger.h" #include "data.h" +Q_DECLARE_LOGGING_CATEGORY(colnod) + class LoginResp : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(QString, username, set_username, "") diff --git a/src/colnod/data.cpp b/src/colnod/data.cpp index e8d9afa..4df20f5 100644 --- a/src/colnod/data.cpp +++ b/src/colnod/data.cpp @@ -21,7 +21,6 @@ void Data::loadTokensFromJson(const QByteArray &data) auto token = std::make_shared(); doc.setObject(item.toObject()); token->fromJson(doc.toJson()); - //token->setDeleted(false); updatedTokens.insert(token->id(), token); } } @@ -34,7 +33,6 @@ void Data::loadSubjectsFormJson(const QByteArray &data) auto subject = std::make_shared(); doc.setObject(item.toObject()); subject->fromJson(doc.toJson()); - subject->setDeleted(false); updatedSubjects.insert(subject->id(), subject); } } diff --git a/src/colnod/data.h b/src/colnod/data.h index 891cd3a..3ca3a6e 100644 --- a/src/colnod/data.h +++ b/src/colnod/data.h @@ -3,6 +3,11 @@ #include "token.h" #include "subject.h" +// constants for output design +#define EQUALS "==================================================================" +#define UNDERSCORE "__________________________________________________________________" +#define DASH "------------------------------------------------------------------" +#define TAB "\t" class Data { diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 0befc82..b5fb088 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -1,6 +1,8 @@ #include "databaseapi.h" -#include "logger.h" +Q_LOGGING_CATEGORY(database, "db.api"); + +#define STH 803 DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan) :mDbMan(dbMan), utils(std::make_unique(dbMan)) @@ -34,10 +36,6 @@ void DatabaseAPI::processData(std::shared_ptr data) deleteItems(data->deletedSubjects, "colnod_subject"); } - - - - std::shared_ptr DatabaseAPI::composeData(QSqlQuery updatedQuery, QSqlQuery deletedQuery) { auto data = std::make_shared(); @@ -49,6 +47,13 @@ std::shared_ptr DatabaseAPI::composeData(QSqlQuery updatedQuery, QSqlQuery while (deletedQuery.next()) { data->deletedTokens.append(deletedQuery.value(0).toString()); } + + qDebug(database) << "DATABASE DATA:"; + qDebug(database) << TAB << data->updatedTokens.size() << "TOKENS TO UPDATE"; + qDebug(database) << TAB << data->deletedTokens.size() << "TOKENS TO DELETE"; + qDebug(database) << DASH ; + + return data; } @@ -125,6 +130,8 @@ void DatabaseAPI::uploadSubjects(QHash> subjec // TODO: auto query = mDbMan->createQuery(); for (const auto &subject : subjects) { + // TODO: attributes + // NOTE: about actions if (exists(subject->id(), "colnod_subject")) { query = utils->updateTable(subject.get(), "colnod_subject"); } @@ -172,11 +179,6 @@ bool DatabaseAPI::exists(const QString &id, const QString &tableName) return query.next(); } - - - - - qint16 DatabaseAPI::getNumOfTokensOfSubject(const QString &id) { auto query = mDbMan->createQuery(); @@ -195,312 +197,3 @@ QString DatabaseAPI::getSubjectNameByTokenId(const QString &tokenId) qWarning() << "Token:" << tokenId << "is not assigned to any subject"; return "(No subject)"; } - - - - - - - - - - - - - - - - - - - - - - - - -// OLD -//DatabaseAPI::DatabaseAPI(const QString& host, const QString& dbName, const QString& user, const QString& password, const bool &dryMode) -// :dryMode(dryMode) -//{ -// db = QSqlDatabase::addDatabase("QPSQL"); -// db.setDatabaseName(dbName); -// db.setHostName(host); -// db.setUserName(user); // home-office stuff -->> db.setPort(80); -// db.setPassword(password); -// if (!db.open()) -// { -// opened = false; -// Logger::log("Opening error" + db.lastError().text()); -// emit error(); -// } -// else{ -// opened = true; -// } -//} - -//// add or update subject to db -//int DatabaseAPI::saveSubject(const std::shared_ptr& subject, const QString& table) -//{ -// QSqlQuery query; -// QString id = subject->idToStringWithoutBraces(); -// int rtn; -// if (checkIfExists(id, table)){ -// query.prepare(QString("UPDATE %1 SET id = :id, description = :description, last_update = :last_update, name = :name, pin = :pin, last_modified = :last_modified, deleted = :deleted " -// "WHERE id = :id").arg(table)); -// rtn = -1; -// }else{ -// query.prepare(QString("INSERT INTO %1 (id, description, last_update, name, pin, last_modified, deleted) " -// "VALUES (:id, :description, :last_update, :name, :pin, :last_modified, :deleted)").arg(table)); -// rtn = 1; -// } -// query.bindValue(":id", id); -// query.bindValue(":description", subject->getDescription()); -// query.bindValue(":name", subject->getName()); -// query.bindValue(":last_update", QDateTime::fromMSecsSinceEpoch(subject->getLastUpdate()).toString("yyyy-MM-dd hh:mm:ss.zzz")); -// query.bindValue(":pin", subject->getPin()); -// query.bindValue(":last_modified", QDateTime::fromMSecsSinceEpoch(subject->getLastUpdate()).toString("yyyy-MM-dd hh:mm:ss.zzz")); -// query.bindValue(":deleted", subject->getDeleted()); -// executeQuery(query); -// return rtn; -//} - -//QSqlQuery DatabaseAPI::getUpdatedTokens() -//{ -// QSqlQuery query; -// executeQuery(query, "SELECT id, auth_errors, description, enabled, last_update, name, no_validity, time_to_live, token_bits, token_data, token_type, subject_id, last_modified, deleted " -// "FROM colnod_token WHERE EXTRACT(EPOCH FROM last_modified) * 1000 > EXTRACT(EPOCH FROM last_update) * 1000 AND deleted = false"); -// return query; -//} - - -//// add or update token to DB -//int DatabaseAPI::saveToken(const std::shared_ptr& token, const QString& table) -//{ -// QSqlQuery query; -// QString id = token->idToStringWithoutBraces(); -// int rtn; -// if (checkIfExists(id, table)){ -// query.prepare(QString("UPDATE %1 SET id = :id, auth_errors = :auth_errors, description = :description, enabled = :enabled, last_update = :last_update, name = :name, no_validity = :no_validity, time_to_live = :time_to_live, token_bits = :token_bits, token_data = :token_data, token_type = :token_type, subject_id = :subject_id, last_modified = :last_modified, deleted = :deleted " -// "WHERE id = :id").arg(table)); -// rtn = -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)); -// rtn = 1; -// } -// query.bindValue(":id", id); -// query.bindValue(":auth_errors", token->getAuthErrors()); -// query.bindValue(":description", token->getDescription()); -// query.bindValue(":enabled", token->getFlags().contains("Enabled")); -// query.bindValue(":last_update", QDateTime::fromMSecsSinceEpoch(token->getLastUpdate()).toString("yyyy-MM-dd hh:mm:ss.zzz")); -// query.bindValue(":name", token->getName()); -// query.bindValue(":no_validity", token->getFlags().contains("NoValidity")); -// query.bindValue(":time_to_live", token->getTimeToLive()); -// query.bindValue(":token_bits", token->getTokenBits()); -// query.bindValue(":token_data", token->getTokenData()); -// query.bindValue(":token_type", token->getTokenType()); -// query.bindValue(":subject_id", token->subjectIdToStringWithoutBraces()); -// query.bindValue(":last_modified", QDateTime::fromMSecsSinceEpoch(token->getLastUpdate()).toString("yyyy-MM-dd hh:mm:ss.zzz")); -// query.bindValue(":deleted", token->getDeleted()); -// executeQuery(query); -// return rtn; -//} - -//// add of update subject attributes -//void DatabaseAPI::saveSubjectAttributes(const std::shared_ptr& subject, const QString& table) -//{ -// QSqlQuery query; -// auto attributes = subject->getAtr(); -// for (const auto& attribute : attributes){ -// QString id = subject->idToStringWithoutBraces() + " " + attribute.first; -// if (checkIfExists(id, table)){ -// query.prepare(QString("UPDATE %1 SET id = :id, attribute_key = :key, attribute_value = :value, subject_id = :subject_id) " -// "WHERE id = :id").arg(table)); -// }else{ -// query.prepare(QString("INSERT INTO %1 (id, attribute_key, attribute_value, subject_id)" -// "VALUES (:id, :key, :value, :subject_id)").arg(table)); -// } -// query.bindValue(":id", id); -// query.bindValue(":key", attribute.first); -// query.bindValue(":value", attribute.second); -// query.bindValue(":subject_id", subject->idToStringWithoutBraces()); -// executeQuery(query); -// } -//} - -//// "delete" tokens from DB -> set deleted true -//void DatabaseAPI::setDeleted(const QString& id, const QString& table, quint64 time) -//{ -// QSqlQuery query; -// QString nowString = QDateTime::fromMSecsSinceEpoch(time).toString("yyyy-MM-dd hh:mm:ss.zzz"); -// query.prepare(QString("UPDATE %1 SET deleted = true, last_update = :now, last_modified = :now WHERE id = :id").arg(table)); -// query.bindValue(":id", id); -// query.bindValue(":now", nowString); -// executeQuery(query); -//} - -//bool DatabaseAPI::checkIfExists(const QString& id, const QString& table) -//{ -// QSqlQuery query; -// query.prepare(QString("SELECT EXISTS(SELECT 1 FROM %1 WHERE id = :id)").arg(table)); -// query.bindValue(":id", id); -// executeQuery(query); -// query.first(); -// return query.value(0).toBool(); -//} - -//QString DatabaseAPI::getLastQuery(const QSqlQuery& query) const -//{ -// QString str = query.lastQuery(); -// QMapIterator it(query.boundValues()); -// while (it.hasNext()) -// { -// it.next(); -// str.replace(it.key(),it.value().toString()); -// } -// return str; -//} - -//bool DatabaseAPI::executeQuery(QSqlQuery &query, const QString &statement) -//{ -// if (statement.isEmpty()){ -// if (dryMode){ -// QString sqlStatement = getLastQuery(query); -// qDebug() << sqlStatement; -// } -// if (!dryMode || getLastQuery(query).startsWith("SELECT")){ -// if (!query.exec()){ -// QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); -// Logger::logToDb(QString(msg)); -// emit error(); -// } -// } -// return true; -// } -// if (dryMode){ -// qDebug() << statement; -// } -// if (!dryMode || statement.startsWith("SELECT")){ -// if (!query.exec(statement)){ -// QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); -// Logger::logToDb(QString(msg)); -// emit error(); -// } -// } -// return true; -//} - -//void DatabaseAPI::dropTables() -//{ -// QSqlQuery query; - -// executeQuery(query, "DROP TABLE IF EXISTS colnod_token, colnod_subject, colnod_subject_attribute"); -//} - -//// create table after deleting, it is used for full sync -//void DatabaseAPI::createTables() -//{ -// QSqlQuery query; - -// executeQuery(query, "CREATE TABLE colnod_subject (" -// "id character(36) primary key NOT NULL," -// "description character varying(255)," -// "last_update timestamp NOT NULL," -// "name character varying(255)," -// "pin character varying(255)," -// "last_modified timestamp," -// "deleted BOOLEAN)"); -// executeQuery(query, "CREATE TABLE colnod_token (" -// "id CHAR(36) primary key NOT NULL," -// "auth_errors INTEGER DEFAULT 255," -// "description VARCHAR(255)," -// "enabled BOOLEAN DEFAULT true," -// "last_update timestamp DEFAULT '1970-01-01 00:00:00'::timestamp without time zone," -// "name VARCHAR(255)," -// "no_validity BOOLEAN DEFAULT true," -// "time_to_live INTEGER DEFAULT 255," -// "token_bits INTEGER DEFAULT 32," -// "token_data VARCHAR(255)," -// "token_type VARCHAR(255) DEFAULT 'Token'::character varying," -// "subject_id CHAR(36)," -// "last_modified timestamp NOT NULL," -// "deleted BOOLEAN DEFAULT false)"); -// executeQuery(query, "CREATE TABLE colnod_subject_attribute (" -// "id VARCHAR(255) primary key," -// "attribute_key VARCHAR(255)," -// "attribute_value VARCHAR(255)," -// "subject_id CHAR(36))"); -//} - - -//// on the very end of sync set new Last_sync time (begin of this sync) - - - -//// return set of tokens to update form DB - -//QSqlQuery DatabaseAPI::getToken(const QString& id) -//{ -// QSqlQuery query; -// query.prepare("SELECT id, auth_errors, description, enabled, last_update, name, no_validity, time_to_live, token_bits, token_data, token_type, subject_id, last_modified, deleted " -// "FROM colnod_token WHERE id = :id"); -// query.bindValue(":id", id); -// executeQuery(query); -// query.next(); -// return query; -//} - - - -//// sync last update back to DB from Colnod after changes made to Colnod - - -//void DatabaseAPI::log(const QString &msg) -//{ -// QSqlQuery query; -// query.prepare("INSERT INTO logs (log_time, msg) VALUES (NOW(), :msg)"); -// query.bindValue(":msg", msg); -// query.exec(); -//} - -//QString DatabaseAPI::getSubjectNameByTokenId(const QString &tokenId) -//{ -// QSqlQuery query; -// query.prepare("SELECT name FROM colnod_subject WHERE id = (SELECT subject_id FROM colnod_token WHERE id = :tokenId)"); -// query.bindValue(":tokenId", tokenId); -// executeQuery(query); -// if (query.next()) -// return query.value(0).toString(); -// qWarning() << "Token:" << tokenId << "is not assigned to any subject"; -// return "(No subject)"; -//} - -//QString DatabaseAPI::getSubjectNameById(const QString &id) -//{ -// QSqlQuery query; -// query.prepare("SELECT name FROM colnod_subject WHERE id = :id"); -// query.bindValue(":id", id); -// executeQuery(query); -// if (query.next()) -// return query.value(0).toString(); -// qWarning() << "Subject:" << id << "doesn't exists"; -// return "(No subject)"; -//} - -//bool DatabaseAPI::checkDeletedToken(const QString &id) -//{ -// QSqlQuery query; -// query.prepare("SELECT deleted FROM colnod_token WHERE id = :id"); -// query.bindValue(":id", id); -// executeQuery(query); -// query.next(); -// return query.value(0).toBool(); -//} - - - -//bool DatabaseAPI::isOpen() -//{ -// return opened; -//} diff --git a/src/colnod/databaseapi.h b/src/colnod/databaseapi.h index c2d9276..ac8a842 100644 --- a/src/colnod/databaseapi.h +++ b/src/colnod/databaseapi.h @@ -1,19 +1,15 @@ #pragma once #include -#include -#include -#include -#include -#include -#include "subject.h" -#include "token.h" -#include #include "data.h" + #include "serversdk/databasemanager.h" #include "serversdk/databasetable.h" #include "serversdk/databaseutils.h" +#include "serversdk/logger.h" + +Q_DECLARE_LOGGING_CATEGORY(database) class DatabaseAPI : public QObject { @@ -50,53 +46,7 @@ private: signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); - - private: serversdk::DatabaseManager *mDbMan = nullptr; std::unique_ptr utils; - - - - - - - // old -// DatabaseAPI(const QString& host, const QString& dbName, const QString& user, const QString& password, const bool& dryMode = false); - -// int saveSubject(const std::shared_ptr& subject, const QString& table); -// int saveToken(const std::shared_ptr& token, const QString& table); -// void saveSubjectAttributes(const std::shared_ptr& subject, const QString& table); -// void setDeleted(const QString& id, const QString& table, quint64 time); - -// void dropTables(); -// void createTables(); - -// void updateLastSync(quint64 lastSync); - -// QSqlQuery getToken(const QString& id); - -// void setLastUpdate(const QString& id, quint64 lastUpdate); - -// void log(const QString &msg); -// QString getSubjectNameById(const QString &id); -// bool checkDeletedToken(const QString &id); - - - -// bool isOpen(); - - -//private: -// bool checkIfExists(const QString& id, const QString& table); -// bool executeQuery(QSqlQuery &query, const QString &statement = QString()); -// QString getLastQuery(const QSqlQuery &query) const; - -//signals: -// void error(); - -//private: -// QSqlDatabase db; -// bool dryMode = false; -// bool opened = false; }; diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp deleted file mode 100644 index a53a219..0000000 --- a/src/colnod/datamanager.cpp +++ /dev/null @@ -1,372 +0,0 @@ -#include "datamanager.h" - -//DataManager::DataManager(const bool &dryMode) : -// db(std::make_shared("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode)), -// dryMode(dryMode) -//{ -// if (db->isOpen()){ -// Logger::setDBMan(db); -// nextLastSync = db->getNow(); -// lastSync = db->getLastSync(); -// } -// connect(db.get(), &DatabaseAPI::error, this, &DataManager::error, Qt::QueuedConnection); -//} - -//// load all tokens from colnod to comparing with working set from DB -//void DataManager::fillFullTokensColnod(const QString& response) -//{ -// QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); -// QJsonArray items = doc.object()["items"].toArray(); -// if (!items.empty()) -// { -// for (QJsonValueRef item : items){ -// auto token = std::make_shared(); -// token->fromJSON(item.toObject()); -// allTokensFromColnodById.insert(token->idToStringWithoutBraces(), token); -// allTokensFromColnodByName.insert(token->getName(), token); -// } -// } -// else{ -// qCritical() << "Colnod is Empty"; -// } -//} - -//// load working set with updated tokens from Colnod -//void DataManager::fillTokensToUpdateColnod(const QString& response) -//{ -// QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); -// QJsonArray items = doc.object()["items"].toArray(); -// if (!items.empty()) -// { -// for (QJsonValueRef item : items) -// { -// auto token = std::make_shared(); -// token->fromJSON(item.toObject()); -// token->setDeleted(false); -// tokensToUpdateFromColnodToDB.insert(token->idToStringWithoutBraces(), token); -// } -// qInfo() << "Colnod:" << tokensToUpdateFromColnodToDB.size() << "tokens to update"; -// } -// else -// { -// qInfo() << "Colnod: 0 tokens to update"; -// } -//} - -//// load working set with updated subjects from Colnod -//void DataManager::fillSubjectsToUpdateColnod(const QString& response) -//{ -// QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8()); -// QJsonArray items = doc.object()["items"].toArray(); -// if (!items.empty()) -// { -// for (QJsonValueRef item : items) -// { -// auto subject = std::make_shared(); -// subject->fromJSON(item.toObject()); -// subject->setDeleted(false); -// subjectsToUpdateFromColnodToDB.insert(subject->idToStringWithoutBraces(), subject); -// } -// qInfo() << "Colnod:" << subjectsToUpdateFromColnodToDB.size() << "subjects to update"; -// } -// else -// { -// qInfo() << "Colnod:" << "0 subjects to update"; -// } -//} - -//// load working sets with updated/deleted tokens from DB -//void DataManager::fillTokensToChangeDB() -//{ -// if (db->isOpen()){ -// QSqlQuery query = db->getUpdatedTokens(); -// while (query.next()) -// { -// auto token = std::make_shared(); -// token->fromSQLRecord(query); -// if (token->getName() == NULL){ -// qint16 num = db->getNumOfTokensOfSubject(token->subjectIdToStringWithoutBraces()); -// token->setName(db->getSubjectNameByTokenId(token->idToStringWithoutBraces()) + "_mobile_" + QString::number(num + 1)); -// token->setDescription("mobile"); -// token->setLastUpdate(token->getLastModified()); -// db->saveToken(token, "colnod_token"); -// } -// if (token->getDeleted()){ // sort to delete / to update -// tokensFromDBToDeleteFromColnod.append(token->idToStringWithoutBraces()); -// } -// else{ -// tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token); -// } -// } -// qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update"; -// qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete"; -// } -// else -// emit error(); -//} - -//void DataManager::fillSubjectsToUpdateDB() -//{ -// // Not needed yet -//} - -//// load working set with subjest to delete from Colnod -//void DataManager::fillSubjectsToDeleteColnod(const QString& json) -//{ -// QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); -// QJsonArray items = doc.object()["items"].toArray(); -// if (!items.empty()) -// { -// for (QJsonValueRef item : items) { -// subjectsFromColnodToDeleteFromDB.append(item.toString()); -// } -// qInfo() << "Colnod:" << subjectsFromColnodToDeleteFromDB.size() << "subjects to delete"; -// } -// else { -// qInfo() << "Colnod: 0 subjects to delete"; -// } -//} - -//// load working set with tokens to delete from DB -//void DataManager::fillTokensToDeleteColnod(const QString& json) -//{ -// QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); -// QJsonArray items = doc.object()["items"].toArray(); -// if (!items.empty()) -// { -// for (QJsonValueRef item : items) { -// tokensFromColnodToDeleteFromDB.append(item.toString()); -// } -// qInfo() << "Colnod:" << tokensFromColnodToDeleteFromDB.size() << "tokens to delete"; -// } -// else { -// qInfo() << "Colnod: 0 tokens to delete"; -// } -//} - -//void DataManager::fillSubjectsToDeleteDB() -//{ -// // Not needed yet -//} - -//// update subjects from colnod to DB -//void DataManager::pushSubjectsToDB() -//{ -// if (subjectsToUpdateFromColnodToDB.isEmpty()) { -// qInfo() << "DB: 0 subjects added"; -// qInfo() << "DB: 0 subjects updated"; -// return; -// } -// int updated = 0; -// int added = 0; -// for (const auto& subject : subjectsToUpdateFromColnodToDB) -// { -// if (db->saveSubject(subject, "colnod_subject") > 0){ -// added++; -// if (dryMode) -// qInfo() << "Adding subject:" << subject->idToStringWithoutBraces() << "to DB"; -// else -// Logger::logToDb(Logger::makeSubjectMsg( subject->idToStringWithoutBraces(),"added", "DB")); -// } -// else{ -// updated++; -// if (dryMode) -// qInfo() << "Updating subject:" << subject->idToStringWithoutBraces() << "to DB"; -// else -// Logger::logToDb(Logger::makeSubjectMsg( subject->idToStringWithoutBraces(),"updated", "DB")); -// } -// db->saveSubjectAttributes(subject, "colnod_subject_attribute"); -// } -// qInfo() << "DB:" << added << "subjects added"; -// qInfo() << "DB:" << updated << "subjects updated"; -//} - -//// update tokens from colnod to DB -//void DataManager::pushTokensToDB() -//{ -// if (tokensToUpdateFromColnodToDB.isEmpty()){ -// qInfo() << "DB: 0 tokens added"; -// qInfo() << "DB: 0 tokens updated"; -// return; -// } -// filterTokensColnod(); -// int updated = 0; -// int added = 0; -// for (const auto& token : tokensToUpdateFromColnodToDB) -// { - -// QString text; -// // 1 = adding token -// // -1 = updating token -// if (db->saveToken(token, "colnod_token") == 1){ -// added++; -// text = "Added"; -// } -// else { -// updated++; -// text = "Updating"; -// } -// if (dryMode) -// qInfo() << text << "token:" << token->idToStringWithoutBraces() << "to DB"; -// else -// Logger::logToDb(Logger::makeTokenMsg(token->idToStringWithoutBraces(), text, "DB")); -// } -// qInfo() << "DB:" << added << "tokens added/edited"; -// qInfo() << "DB:" << updated << "tokens updated"; - -//} - -//void DataManager::deleteSubjectsFromDB() -//{ -// if (subjectsFromColnodToDeleteFromDB.isEmpty()) -// { -// qInfo() << "DB: 0 subjects deleted"; -// return; -// } -// for (const auto& subjectId : subjectsFromColnodToDeleteFromDB) -// { -// db->setDeleted(subjectId, "colnod_subject", nextLastSync); -// if (dryMode) -// qInfo() << "Deleting subject:" << subjectId << "from DB"; -// else -// Logger::logToDb(Logger::makeSubjectMsg(subjectId, "deleted", "DB")); -// } -// qInfo() << "DB:" << subjectsFromColnodToDeleteFromDB.size() << " subject deleted"; -//} - -//// "delete" (set deleted true) tokens in DB depends on Colnod -//void DataManager::setDeletedToTokensFromDB() -//{ -// if (tokensFromColnodToDeleteFromDB.isEmpty()) -// { -// qDebug() << "DB: 0 tokens deleted"; -// return; -// } -// int alreadyDeleted = 0; -// for (const auto& tokenId : tokensFromColnodToDeleteFromDB) -// { -// if (!db->checkDeletedToken(tokenId)){ -// db->setDeleted(tokenId, "colnod_token", nextLastSync); -// if (dryMode) -// qInfo() << "Deleting token:" << tokenId << "from DB"; -// else -// Logger::logToDb(Logger::makeTokenMsg(tokenId, "deleted", "DB")); -// } -// else -// alreadyDeleted++; -// } -// qDebug() << "DB:" << tokensFromColnodToDeleteFromDB.size() - alreadyDeleted << "tokens deleted"; -//} - -//// recreate working tables -//void DataManager::dropTables() -//{ -// if (db->isOpen()){ -// db->dropTables(); -// } -// else{ -// emit error(); -// } -//} - - -//void DataManager::createTables() -//{ -// if (db->isOpen()){ -// db->createTables(); -// db->updateLastSync(0); -// } -// else{ -// emit error(); -// } -//} - -//quint64 DataManager::getLastModifiedOfToken(const QString &id) -//{ -// auto record = db->getToken(id); -// auto token = std::make_shared(); -// token->fromSQLRecord(record); -// return token->getLastModified(); -//} - -////clear all structures -//void DataManager::clear() -//{ -// subjectsToUpdateFromColnodToDB.clear(); -// subjectsFromColnodToDeleteFromDB.clear(); -// tokensToUpdateFromColnodToDB.clear(); -// tokensFromColnodToDeleteFromDB.clear(); -// //subjectsDB.clear(); // not need yet -// // subjectsToDeleteDB.clear(); // not need yet -// tokensToUpdateFromDBToColnod.clear(); -// tokensFromDBToDeleteFromColnod.clear(); -// allTokensFromColnodById.clear(); -//} - -//// on the very end of sync update last sync time to begin time of this sync -//void DataManager::updateLastSync() -//{ -// if (db->isOpen()) -// db->updateLastSync(nextLastSync); -//} - -//// 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() -//{ -// QList idsToDelete; -// for (const auto& token : tokensToUpdateFromDBToColnod) -// { -// QString id = token->idToStringWithoutBraces(); -// Q_ASSERT(token != allTokensFromColnodById.value(id)); // if working sets are loading correctly equels should never happend -// if (allTokensFromColnodById.contains(id) && *token < *allTokensFromColnodById.value(id)) -// idsToDelete.append(id); -// if (allTokensFromColnodById.contains(id) && token->getLastModified() == allTokensFromColnodById.value(id)->getLastUpdate()){ -// idsToDelete.append(id); -// qWarning() << "Same token has been edited in colnod and db in same time. Change from Colnod has been used"; -// } -// if (allTokensFromColnodByName.contains(token->getName())){ -// qWarning() << "Token:" << token->idToStringWithoutBraces() << "won't be added to Colnod, because token with the same name already exists, please change it manually"; -// if (!dryMode){ -// QString message = QString("Error: Token: %1 won't be added to Colnod, because token with the same name already exists, please change it manually").arg(token->idToStringWithoutBraces()); -// Logger::logToDb(Logger::makeErrorMsg("Db", message)); -// } -// } -// } -// for (const auto &id : idsToDelete) -// tokensToUpdateFromDBToColnod.remove(id); -//} - -//void DataManager::filterTokensColnod() -//{ -// QList idsToDelete; -// for (const auto &token : tokensToUpdateFromColnodToDB) -// { -// QString id = token->idToStringWithoutBraces(); -// auto record = db->getToken(id); -// if (!record.isValid()) -// continue; -// auto tokenDB = std::make_shared(); -// tokenDB->fromSQLRecord(record); -// if (*tokenDB == *token || *tokenDB > *token){ -// idsToDelete.append(id); -// } -// } -// for (const auto &id : idsToDelete) -// tokensToUpdateFromColnodToDB.remove(id); -//} - -//// sync last update from colnod to DB -//void DataManager::setLastUpdate() -//{ -// if (!tokensToUpdateFromColnodToDB.isEmpty()) -// for (const auto &token : tokensToUpdateFromColnodToDB) -// db->setLastUpdate(token->idToStringWithoutBraces(), token->getLastUpdate()); -//} - -//void DataManager::setLastUpdate(const QString &id) -//{ -// db->setLastUpdate(id, nextLastSync); -//} - - - diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h deleted file mode 100644 index 60e7f80..0000000 --- a/src/colnod/datamanager.h +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once - -#include "token.h" -#include "subject.h" -#include "requestmanager.h" -#include "databaseapi.h" -#include -#include -#include - - -class DataManager : public QObject -{ - - Q_OBJECT - -public: - explicit DataManager(const bool& dryMode = false); - - void fillFullTokensColnod(const QString& jsonResponse); - - void fillTokensToUpdateColnod(const QString& jsonResponse); - void fillSubjectsToUpdateColnod(const QString& jsonResponse); - void fillSubjectsToDeleteColnod(const QString& jsonResponse); - void fillTokensToDeleteColnod(const QString& jsonResponse); - - void fillTokensToChangeDB(); - void fillSubjectsToUpdateDB(); - void fillSubjectsToDeleteDB(); - - void filterTokensDB(); - void filterTokensColnod(); - - void pushSubjectsToDB(); - void pushTokensToDB(); - void deleteSubjectsFromDB(); - void setDeletedToTokensFromDB(); - - void updateLastSync(); - - void dropTables(); - - void createTables(); - - quint64 getLastModifiedOfToken(const QString &id); - - QHash> getTokensToUpdateFromColnod() {return tokensToUpdateFromColnodToDB;} - QList getTokensToDeleteColnod() {return tokensFromColnodToDeleteFromDB;} - QHash> getTokensToUpdateFromDB() {return tokensToUpdateFromDBToColnod;} - QList getTokensToDeleteDB() {return tokensFromDBToDeleteFromColnod;} - - const quint64 &getLastSync() {return lastSync;} - const quint64 &getCurrentSync() {return nextLastSync;} - - -public slots: -// void clear(); -// void setLastUpdate(); -// void setLastUpdate(const QString &id); - -signals: -// void error(); - -private: - std::shared_ptr db; - - quint64 lastSync; // time of last run - quint64 nextLastSync; // time of begin of this run - - QHash> allTokensFromColnodById; - QHash> allTokensFromColnodByName; - QHash> subjectsToUpdateFromColnodToDB; - QHash> tokensToUpdateFromColnodToDB; - QHash> subjectsDB; // in future - QHash> tokensToUpdateFromDBToColnod; - - QList subjectsFromColnodToDeleteFromDB; - QList tokensFromColnodToDeleteFromDB; - QList subjectsToDeleteDB; - QList tokensFromDBToDeleteFromColnod; - - bool dryMode = false; - -}; diff --git a/src/colnod/entity.cpp b/src/colnod/entity.cpp deleted file mode 100644 index 667b2c8..0000000 --- a/src/colnod/entity.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include "entity.h" - -const QUuid &Entity::getId() const { - return id; -} - -void Entity::setId(const QUuid &id) { - Entity::id = id; -} - -const QString &Entity::getName() const { - return name; -} - -void Entity::setName(const QString &name) { - Entity::name = name; -} - -const QString &Entity::getDescription() const { - return description; -} - -void Entity::setDescription(const QString &description) { - Entity::description = description; -} - -qint64 Entity::getLastUpdate() const { - return lastUpdate; -} - -void Entity::setLastUpdate(qint64 lastUpdate) { - this->lastUpdate = lastUpdate; -} - -qint64 Entity::getLastModified() const { - return lastModified; -} - -void Entity::setLastModified(const qint64 &lastModified) { - this->lastModified = lastModified; -} - -bool Entity::getDeleted() const -{ - return deleted; -} - -void Entity::setDeleted(const bool &deleted) -{ - this->deleted = deleted; -} - -QString Entity::idToStringWithoutBraces() const -{ - const qint8 lengthOfUuid = 36; - return id.toString().mid(1, lengthOfUuid); -} - -void Entity::fromJSON(const QJsonObject &json) { - id = json["id"].toString(); - name = json["name"].toString(); - description = json["description"].toString(); - lastUpdate = json["lastUpdate"].toDouble(); -} - -QJsonObject Entity::toJSON() const { - QJsonObject json; - - json["id"] = this->idToStringWithoutBraces(); - json["name"] = name; - json["description"] = description; - json["lastUpdate"] = lastUpdate; - - return json; -} diff --git a/src/colnod/entity.h b/src/colnod/entity.h deleted file mode 100644 index 9654e55..0000000 --- a/src/colnod/entity.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -// NOTE: it will be no longer useful -class Entity : public QObject { - Q_OBJECT -public: - explicit Entity() = default; - using QObject::QObject; - - const QUuid &getId() const; - void setId(const QUuid &id); - - const QString &getName() const; - void setName(const QString &name); - - const QString &getDescription() const; - void setDescription(const QString &description); - - qint64 getLastUpdate() const; - void setLastUpdate(qint64 lastUpdate); - - qint64 getLastModified() const; - void setLastModified(const qint64 &lastModified); - - bool getDeleted() const; - void setDeleted(const bool &deleted); - - QString idToStringWithoutBraces() const; - - virtual void fromJSON(const QJsonObject &json); - virtual QJsonObject toJSON() const; - - - -private: - QUuid id; - QString name; - QString description; - qint64 lastUpdate{}; - qint64 lastModified{}; - bool deleted{}; -}; diff --git a/src/colnod/logger.cpp b/src/colnod/logger.cpp deleted file mode 100644 index 56c4752..0000000 --- a/src/colnod/logger.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "logger.h" -#include "databaseapi.h" - -#include - -std::shared_ptr Logger::dbMan = nullptr; -Logger *Logger::logger = nullptr; - -//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) -//{ -// if (dbMan) -// // Logger::dbMan->log(msg); -//} - -//void Logger::setDBMan(std::shared_ptr dbMan) -//{ -// Logger::dbMan = std::move(dbMan); -//} - -//QString Logger::makeTokenMsg(const QString &tokenId, const QString &action, const QString &source) -//{ -// return QString("Token: %1 of subject: %2 %3. Source: %4").arg(tokenId,dbMan->getSubjectNameByTokenId(tokenId), action, source); -//} - -//QString Logger::makeSubjectMsg(const QString &subjectId, const QString &action, const QString &source) -//{ -// return QString("Subject: %1 %2. Source: %3").arg(dbMan->getSubjectNameById(subjectId), action, source); -//} - -//QString Logger::makeErrorMsg(const QString &source, const QString &errMsg) -//{ -// return QString("Source: %1, Error: %2").arg(source, errMsg); -//} - - - - diff --git a/src/colnod/logger.h b/src/colnod/logger.h deleted file mode 100644 index e8b7fb5..0000000 --- a/src/colnod/logger.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -class DatabaseAPI; - - -class Logger -{ - - static Logger *logger; - - Logger(); - - static std::shared_ptr dbMan; - -public: - static Logger *getLogger(); - static void log(const QString& msg); - static void logToDb(const QString& msg); - static void setDBMan(std::shared_ptr dbMan); - static QString makeTokenMsg(const QString& tokenId, const QString& action, const QString& source); - static QString makeSubjectMsg(const QString& subjectId, const QString& action, const QString& source); - static QString makeErrorMsg(const QString& source, const QString& errMsg); - -private: - -}; - - diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp deleted file mode 100644 index 6f9f67c..0000000 --- a/src/colnod/requestmanager.cpp +++ /dev/null @@ -1,248 +0,0 @@ -#include "requestmanager.h" - -RequestManager::RequestManager() - : manager(std::make_unique()) -{ - connect(manager.get(), &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError); -} - -std::shared_ptr RequestManager::login() -{ - Q_ASSERT(!loginResponse); - loginResponse = std::make_shared(); - QNetworkRequest request; - QString hash = encryptedPassword(this->password); - authHeader = getLoginHeader(this->user, hash); - QJsonObject reqBody = { - {"password", hash}, - {"username", this->user} - }; - request.setUrl(this->host + "/AaaManager/authSession"); - qDebug() << authHeader.toLocal8Bit(); - request.setRawHeader("Authorization", authHeader.toLocal8Bit()); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); - QJsonDocument jsonDocument; - jsonDocument.setObject(reqBody); - QNetworkReply* reply = manager->post(request, jsonDocument.toJson()); - loginResponse->setReply(reply); - connect(reply, &QNetworkReply::finished, [=]() { - if (reply->error()) - { - //Logger::logToDb(Logger::makeErrorMsg("Request Manager", reply->errorString())); - loginStatus = false; - reply->deleteLater(); - emit error(); - return; - } - loginStatus = true; - emit successLogin(); - reply->deleteLater(); - }); - connect(this, &RequestManager::successLogin, loginResponse.get(), &Response::ready); - connect(this, &RequestManager::successLogin, this, &RequestManager::prepareAuthHeader); - return loginResponse; -} - -QNetworkReply* RequestManager::postRequest(const QString& endpoint, const QByteArray& json) -{ - QNetworkRequest request; - request.setUrl(host + endpoint); - request.setRawHeader("Authorization", authHeader.toLocal8Bit()); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); - QNetworkReply* reply = manager->post(request, json); - QObject::connect(reply, &QNetworkReply::finished, [=]() { - if (reply->error()) - { - //Logger::logToDb(Logger::makeErrorMsg("Request Manager", reply->errorString())); - loginStatus = false; - reply->deleteLater(); - emit error(); - return; - } - emit responseReady(); - reply->deleteLater(); - }); - return reply; -} - -// This will ensure login is called only once -std::shared_ptr RequestManager::getLoginResponse() { - if (!loginResponse){ - loginResponse = login(); - } - return loginResponse; -} - -Response* RequestManager::postRequestReturnLogic(const QString& endpoint, const QByteArray& data) -{ - auto loginResponse = getLoginResponse(); - Q_ASSERT(loginResponse); - auto response = new Response; - - if (!loginStatus){ - connect(this, &RequestManager::successLogin, [=](){ - response->setReply(postRequest(endpoint, data)); - connect(response->getReply(), &QNetworkReply::finished, response, &Response::ready); - }); - } - else - { - response->setReply(postRequest(endpoint, data)); - connect(response->getReply(), &QNetworkReply::finished, response, &Response::ready); - } - return response; -} - -// get value of member in json -QString RequestManager::getFromJson(const QString& json, const QString &member) -{ - QJsonParseError err{}; - QJsonDocument document = QJsonDocument::fromJson(json.toUtf8(),&err); - if (err.error != 0) - { - qDebug() << err.errorString(); - } - return document.object().value(member).toString(); -} - -QString RequestManager::encryptedPassword(const QString& password) -{ - return QCryptographicHash::hash(password.toLocal8Bit(), QCryptographicHash::Sha512).toHex().toUpper(); -} - -QString RequestManager::getLoginHeader(const QString& username, const QString& hash) -{ - QString authValue = username + ":" + hash; - return "Basic " + authValue.toLocal8Bit().toBase64(); -} - -void RequestManager::prepareAuthHeader() -{ - jsonResponse = loginResponse->getJson(); - QString token = getFromJson(jsonResponse, "id"); - QString authValue = token + ":"; - authHeader = "Basic " + authValue.toLocal8Bit().toBase64(); -} - -void RequestManager::onSSLError(QNetworkReply *reply, const QList &errors) -{ - //qDebug() << "Network SSL errors"; - for (const auto &error : errors) - { - if (error.error() == QSslError::SelfSignedCertificate) - reply->ignoreSslErrors(errors); - //qDebug() << error.errorString(); - } - -} - -QByteArray RequestManager::makeTimestampJson(uint64_t time) -{ - QJsonObject reqBody = {{"timestamp",QJsonValue(static_cast(time)) }}; - QJsonDocument doc; - doc.setObject(reqBody); - return doc.toJson(); -} - -QByteArray RequestManager::makeTokensJson(const QHash> &tokens) -{ - QJsonObject items; - QJsonArray jsonTokens; - for (const auto& token : tokens) - { - //jsonTokens.push_back(token->toJSON()); - } - items.insert("items", jsonTokens); - QJsonDocument doc; - doc.setObject(items); - return doc.toJson(); -} - -QByteArray RequestManager::makeIdsJson(const QList &ids) -{ - QJsonArray jsonIds; - for (const auto& id : ids) - { - jsonIds.push_back(id); - } - QJsonObject items; - items.insert("items", jsonIds); - QJsonDocument doc; - doc.setObject(items); - return doc.toJson(); -} - -Response* RequestManager::getSubjects() -{ - return postRequestReturnLogic("/SubjectManager/getSubjects"); -} - -Response* RequestManager::getTokens() -{ - return postRequestReturnLogic("/TokenManager/getTokens"); -} - -Response* RequestManager::getTokenSubject() -{ - return postRequestReturnLogic("/OpenManager/getTokenSubject"); -} - -Response* RequestManager::getSubjectsUpdated(uint64_t time) -{ - return postRequestReturnLogic("/SubjectManager/getSubjectsUpdated", makeTimestampJson(time)); -} - -Response* RequestManager::getSubjectsDeleted(uint64_t time) -{ - return postRequestReturnLogic("/SubjectManager/getSubjectsDeleted", makeTimestampJson(time)); -} - -Response* RequestManager::getTokensUpdated(uint64_t time) -{ - return postRequestReturnLogic("/TokenManager/getTokensUpdated", makeTimestampJson(time)); -} - -Response* RequestManager::getTokensDeleted(uint64_t time) -{ - return postRequestReturnLogic("/TokenManager/getTokensDeleted", makeTimestampJson(time)); -} - -Response* RequestManager::getAccessGroups() -{ - return postRequestReturnLogic("/AccessManager/getAccessGroups"); -} - -Response* RequestManager::getAccessGroupsUpdated(uint64_t time) -{ - return postRequestReturnLogic("/AccessManager/getAccessGroupsUpdated", makeTimestampJson(time)); -} - -Response* RequestManager::getAccessGroupsDeleted(uint64_t time) -{ - return postRequestReturnLogic("/AccessManager/getAccessGroupsDeleted", makeTimestampJson(time)); -} - -Response* RequestManager::getAccessGroupMembership() -{ - return postRequestReturnLogic("/AccessManager/getAccessGroupMembership"); -} - -Response* RequestManager::getAccessGroupMembershipUpdated(uint64_t time) -{ - return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipUpdated", makeTimestampJson(time)); -} - -Response* RequestManager::getAccessGroupMembershipDeleted(uint64_t time) -{ - return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipDeleted", makeTimestampJson(time)); -} - -Response* RequestManager::setTokens(const QHash> &tokens) -{ - return postRequestReturnLogic("/TokenManager/setTokens", makeTokensJson(tokens)); -} - -Response* RequestManager::deleteTokens(const QList &ids) -{ - return postRequestReturnLogic("/TokenManager/deleteTokens", makeIdsJson(ids)); -} diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h deleted file mode 100644 index 627dc1c..0000000 --- a/src/colnod/requestmanager.h +++ /dev/null @@ -1,100 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include "token.h" -#include "response.h" -#include "logger.h" - -class RequestManager : public QObject -{ - Q_OBJECT - -public: - friend class UnitTest; - friend class ComplexTest; - - RequestManager(); - - // this should be in ColnodAPI class BEGIN - Response* getSubjects(); - Response* getTokens(); - Response* getTokenSubject(); - - Response* getSubjectsUpdated(uint64_t time); - Response* getSubjectsDeleted(uint64_t time); - - Response* getTokensUpdated(uint64_t time); - Response* getTokensDeleted(uint64_t time); - - Response* getAccessGroups(); - Response* getAccessGroupsUpdated(uint64_t time); - Response* getAccessGroupsDeleted(uint64_t time); - Response* getAccessGroupMembership(); - Response* getAccessGroupMembershipUpdated(uint64_t time); - Response* getAccessGroupMembershipDeleted(uint64_t time); - - Response* setTokens(const QHash> &tokens); - Response* deleteTokens(const QList &ids); - // END - -private: - // should be public - QNetworkReply* postRequest(const QString& endpoint, const QByteArray& json = QByteArray()); - Response* postRequestReturnLogic(const QString& endpoint, const QByteArray& data = QByteArray()); - - std::shared_ptr login(); - std::shared_ptr getLoginResponse(); - QString getFromJson(const QString& json, const QString &member); - QString encryptedPassword(const QString& password); - QString getLoginHeader(const QString& username, const QString& hash); - - // in colnod api as well - QByteArray makeTimestampJson(uint64_t time); - QByteArray makeTokensJson(const QHash> &tokens); // maybe better to be in Token class - QByteArray makeIdsJson(const QList &ids); // Entity class - -private slots: - void onSSLError(QNetworkReply *reply, const QList &errors); - //void onReplyFinished(QNetworkReply *reply); - void prepareAuthHeader(); - -signals: - void successLogin(); - void responseReady(); - void error(); - -private: - std::unique_ptr manager; - std::shared_ptr loginResponse; - QJsonDocument config; - QString authHeader; - const QString host = "https://192.168.1.3:8443"; - //QString host = "https://localhost:8080"; - - const QString password = "spaceti1"; - const QString user = "spaceti"; - QString jsonResponse; - bool loginStatus = false; - -}; diff --git a/src/colnod/response.cpp b/src/colnod/response.cpp deleted file mode 100644 index 9bc8406..0000000 --- a/src/colnod/response.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "response.h" - -Response::Response() -{ - connect(this, &Response::ready, this, &Response::setJson); -} - -int Response::getStatusCode() -{ - return reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); -} diff --git a/src/colnod/response.h b/src/colnod/response.h deleted file mode 100644 index 85e5dab..0000000 --- a/src/colnod/response.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include - -class Response : public QObject -{ - Q_OBJECT -public: - - Response(); - - int getStatusCode(); - QString getJson() {return json;} - void setReply(QNetworkReply* rpl) {reply = rpl;} - QNetworkReply* getReply() {return reply;} -public: - - -signals: - - void ready(); - - -private slots: - void setJson() {json = reply->readAll();} - - -private: - QString json; - QNetworkReply *reply = nullptr; -}; diff --git a/src/colnod/subject.cpp b/src/colnod/subject.cpp index c8af5a8..9a052fa 100644 --- a/src/colnod/subject.cpp +++ b/src/colnod/subject.cpp @@ -1,9 +1,5 @@ -#include - #include "subject.h" -#include - Subject::Subject(const QString &name) { setName(name); @@ -28,30 +24,4 @@ bool Subject::fromJson(const QByteArray &data) // Populate this object data bool res = fromVariantMap(variant); return res; - } - - -//const QSet &Subject::getTokenFlags() const { -// return tokenFlags; -//} - -//void Subject::setTokenFlags(const QSet &tokenFlags) { -// Subject::tokenFlags = tokenFlags; -//} - -//const QSet &Subject::getPinFlags() const { -// return pinFlags; -//} - -//void Subject::setPinFlags(const QSet &pinFlags) { -// Subject::pinFlags = pinFlags; -//} - -//const QList> &Subject::getAtr() const { -// return atr; -//} - -//void Subject::setAtr(const QList> &atr) { -// this->atr = atr; -//} diff --git a/src/colnod/subject.h b/src/colnod/subject.h index 9da9e88..6652dc9 100644 --- a/src/colnod/subject.h +++ b/src/colnod/subject.h @@ -1,14 +1,9 @@ #pragma once -#include - -#include "entity.h" -#include -#include -#include #include #include "serversdk/databasetable.h" #include +#include class SubjectAttribute : public serversdk::DatabaseTable { Q_OBJECT @@ -36,25 +31,6 @@ public: bool fromJson(const QByteArray &data) override; -// const QJsonObject &getAttributes() const; -// void setAttributes(const QJsonObject &attributes); -// const QSet &getTokenFlags() const; -// void setTokenFlags(const QSet &tokenFlags); -// const QString &getPin() const; -// void setPin(const QString &pin); -// const QSet &getPinFlags() const; -// void setPinFlags(const QSet &pinFlags); - -// const QList> &getAtr() const; -// void setAtr(const QList> &atr); - private: QList> attributes; - - - QSet tokenFlags; - QSet pinFlags; - QList> atr; - const QList attributeTypes = {"Jmeno", "Prijmeni", "ProfilParking", "Spolecnost", "Profil", "spz"}; - }; diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index ce9253e..74fc584 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -1,5 +1,10 @@ #include "syncmanager.h" + +Q_LOGGING_CATEGORY(syncmanager, "sync.manager"); + + + bool SyncManager::init() { database = std::make_shared(&dbMan); @@ -21,8 +26,10 @@ void SyncManager::run() { qint64 syncBegin = database->getNow(); database->initNewTokens(); + downloadData(); connect(this, &SyncManager::dataReady, [=](){ + qDebug(syncmanager) << "FINISH"; prepareData(); connect(this, &SyncManager::dataProcessFinished, [=](){ @@ -39,12 +46,14 @@ void SyncManager::run() void SyncManager::downloadData() { + qInfo(syncmanager) << EQUALS << endl; + qInfo(syncmanager) << "DOWNLOADING DATA -> BEGIN" << endl; + qInfo(syncmanager) << UNDERSCORE; + connect(colnod.get(), &ColnodAPI::downloadDataFinished, this, &SyncManager::saveColnodData); - connect(colnod.get(), &ColnodAPI::downloadDataFinished, this, &SyncManager::areDataReady); connect(database.get(), &DatabaseAPI::downloadDataFinished, this, &SyncManager::saveDatabaseData); - connect(database.get(), &DatabaseAPI::downloadDataFinished, this, &SyncManager::areDataReady); - colnod->downloadData(); database->downloadData(); + colnod->downloadData(); } // finds conflicts -> changes on both sides (colnod and DB), apply newer change @@ -104,261 +113,22 @@ void SyncManager::updateLastUpdate(qint64 syncBegin) void SyncManager::areDataReady() { if (++dataAmount == 2) + + qDebug(syncmanager) << "DOWNLOADING DATA -> FINISHED" << endl << endl; + qDebug(syncmanager) << EQUALS; + qDebug(syncmanager) << EQUALS << endl << endl; + emit dataReady(); } - void SyncManager::saveColnodData(const std::shared_ptr &data) { colnodData = data; + areDataReady(); } void SyncManager::saveDatabaseData(const std::shared_ptr &data) { databaseData = data; + areDataReady(); } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//SyncManager::SyncManager(bool dryMode) : -// reqMan(std::make_unique()), -// dataMan( std::make_unique(dryMode)), -// dryMode(dryMode) -//{ -// connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error, Qt::QueuedConnection); -// connect(dataMan.get(), &DataManager::error, this, &SyncManager::error, Qt::QueuedConnection); -//} - -//void SyncManager::loadDataFromColnod() -//{ -// loadTokensFromColnod(); -// loadUpdatedDataFromColnod(); -// loadDeletedDataFromColnod(); -//} - -//// download all tokens form colnod for comparing with tokens to update from DB -//void SyncManager::loadTokensFromColnod() -//{ -// Response* resp = reqMan->getTokens(); -// connect(resp, &Response::ready, [=](){ -// dataMan->fillFullTokensColnod(resp->getJson()); -// areChangedDataReady(); -// resp->deleteLater(); -// }); -//} - -//// fill tokens/subjects to update in data manager -//void SyncManager::loadUpdatedDataFromColnod() -//{ -// uint64_t lastUpdate = dataMan->getLastSync(); -// Response* resp0 = reqMan->getSubjectsUpdated(lastUpdate); -// connect(resp0, &Response::ready, [=](){ -// dataMan->fillSubjectsToUpdateColnod(resp0->getJson()); -// areChangedDataReady(); -// resp0->deleteLater(); -// }); - -// Response* resp1 = reqMan->getTokensUpdated(lastUpdate); -// connect(resp1, &Response::ready, [=](){ -// dataMan->fillTokensToUpdateColnod(resp1->getJson()); -// areChangedDataReady(); -// resp1->deleteLater(); -// }); -//} - -//// fill tokens/subjects to delete in data manager -//void SyncManager::loadDeletedDataFromColnod() -//{ -// uint64_t lastUpdate = dataMan->getLastSync(); -// Response* resp2 = reqMan->getSubjectsDeleted(lastUpdate); -// connect(resp2, &Response::ready, [=](){ -// dataMan->fillSubjectsToDeleteColnod(resp2->getJson()); -// areChangedDataReady(); -// resp2->deleteLater(); -// }); - -// Response* resp3 = reqMan->getTokensDeleted(lastUpdate); -// connect(resp3, &Response::ready, [=](){ -// dataMan->fillTokensToDeleteColnod(resp3->getJson()); -// areChangedDataReady(); -// resp3->deleteLater(); -// }); - -//} - -//// fill structures in data manager (tokens to updata/to delte) -//void SyncManager::loadDataFromDB() -//{ -// dataMan->fillTokensToChangeDB(); -//} - -//void SyncManager::syncDataFromColnodToDB() -//{ -// syncUpdatedDataFromColnodToDB(); -// if (dataMan->getLastSync() != 0) -// syncDeletedDataFromColnodToDB(); -//} - -//// push data from colnod to DB -//void SyncManager::syncUpdatedDataFromColnodToDB() -//{ -// dataMan->pushSubjectsToDB(); -// dataMan->pushTokensToDB(); -//} - -//// set deleted tokens from Colnod, delete subject -//void SyncManager::syncDeletedDataFromColnodToDB() -//{ -// dataMan->deleteSubjectsFromDB(); -// dataMan->setDeletedToTokensFromDB(); -//} - -//// push changes form DB to Colnod -//void SyncManager::syncDataFromDBToColnod() -//{ - -// connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::clear); -// //connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::setLastSync); -// if (!dryMode) -// connect(this, &SyncManager::dataUpdatedToColnod, [=](){ -// auto resp = reqMan->getTokensUpdated(dataMan->getCurrentSync()); -// connect(resp, &Response::ready, [=](){ -// dataMan->fillTokensToUpdateColnod(resp->getJson()); -// dataMan->setLastUpdate(); -// dataMan->clear(); -// dataMan->updateLastSync(); -// emit syncFinished(); -// resp->deleteLater(); -// }); -// }); -// else -// connect(this, &SyncManager::dataUpdatedToColnod, [=](){ -// dataMan->updateLastSync(); -// emit syncFinished(); -// }); -// if (!dataMan->getTokensToUpdateFromDB().isEmpty()){ -// syncUpdatedDataFromDBToColnod(); -// } -// else -// updateFinished = true; -// if (!dataMan->getTokensToDeleteDB().isEmpty()){ -// syncDeletedDataFromDBToColnod(); -// } -// else{ -// deleteFinished = true; -// areDataUpdatedToColnod(); -// } -//} - -//// add or update tokens to Colnod -//void SyncManager::syncUpdatedDataFromDBToColnod() -//{ -// dataMan->filterTokensDB(); -// auto tokensToUpdate = dataMan->getTokensToUpdateFromDB(); -// if (dryMode){ -// for (const auto &token : tokensToUpdate) -// qInfo() << "Updating token:" << token->idToStringWithoutBraces() << "to Colnod"; -// updateFinished = true; -// areDataUpdatedToColnod(); -// } -// else { -// Response* resp0 = reqMan->setTokens(tokensToUpdate); -// connect(resp0, &Response::ready, [=](){ -// qInfo() << "Colnod:" << tokensToUpdate.size() << "tokens updated"; -// for(const auto &token : tokensToUpdate) -// Logger::logToDb(Logger::makeTokenMsg(token->idToStringWithoutBraces(), "updated", "Colnod")); -// updateFinished = true; -// areDataUpdatedToColnod(); -// resp0->deleteLater(); -// }); -// } -//} - -//// delete tokens in Colnod -//void SyncManager::syncDeletedDataFromDBToColnod() -//{ -// auto tokensToDelete = dataMan->getTokensToDeleteDB(); -// if (dryMode){ -// for (const auto &token : tokensToDelete) -// qInfo() << "Deleting token:" << token << "from Colnod"; -// deleteFinished = true; -// areDataUpdatedToColnod(); -// } -// else { -// Response* resp1 = reqMan.deleteTokens(tokensToDelete); -// connect(resp1, &Response::ready, [=](){ -// qInfo() << "Colnod:" << tokensToDelete.size() << "tokens deleted"; -// for (const auto &id : tokensToDelete){ -// dataMan->setLastUpdate(id); -// Logger::logToDb(Logger::makeTokenMsg(id, "deleted", "Colnod")); -// } -// deleteFinished = true; -// areDataUpdatedToColnod(); -// resp1->deleteLater(); -// }); -// } -//} - -//// For full sync -//void SyncManager::dropTables() -//{ -// dataMan->dropTables(); -//} - -//void SyncManager::createTables() -//{ -// dataMan->createTables(); -//} - -//bool SyncManager::isValid() -//{ -// return dataMan->isDBOpened(); -//} - -//// emit signal when all data is downloaded from Colnod -//void SyncManager::areChangedDataReady() -//{ -// if (++dataCounter == 5) -// emit dataReady(); -//} - -//// emit signal when writing to Colnod is finised -//void SyncManager::areDataUpdatedToColnod() -//{ -// if (deleteFinished && updateFinished) -// { -// emit dataUpdatedToColnod(); -// } -//} - diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index 9393b55..07a2560 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -2,17 +2,13 @@ #include "colnodapi.h" #include "databaseapi.h" -#include "requestmanager.h" -#include "datamanager.h" -#include "logger.h" -#include "colnodapi.h" -#include "serversdk/databasemanager.h" + +Q_DECLARE_LOGGING_CATEGORY(syncmanager) class SyncManager : public QObject { Q_OBJECT - // NEW public: bool init(); void run(); @@ -48,65 +44,4 @@ private: std::shared_ptr databaseDataToProcess; int dataAmount = 0; - - - - - - - - - - - - - - // OLD -//public: -// explicit SyncManager(bool dryMode = false); - -// void syncDataFromColnodToDB(); -// void syncDataFromDBToColnod(); - -// void dropTables(); -// void createTables(); - -// bool isValid(); - -//public slots: -// void loadDataFromColnod(); -// void loadDataFromDB(); - -//signals: -// void dataUpdatedToColnod(); - -// void error(); - -//private slots: - - -//private: -// void loadTokensFromColnod(); -// void loadUpdatedDataFromColnod(); -// void loadDeletedDataFromColnod(); -// void loadUpdatedDataFromDB(); -// void loadDeletedDataFromDB(); - -// void syncUpdatedDataFromColnodToDB(); -// void syncDeletedDataFromColnodToDB(); - -// void syncUpdatedDataFromDBToColnod(); -// void syncDeletedDataFromDBToColnod(); - -// void areChangedDataReady(); -// void areDataUpdatedToColnod(); - -//private: -// // std::unique_ptr reqMan; -// std::unique_ptr dataMan; -// bool dryMode = false; -// bool updateFinished = false; -// bool deleteFinished = false; -// int dataCounter = 0; }; - diff --git a/src/colnod/token.cpp b/src/colnod/token.cpp index 6b6b88b..f7b5079 100644 --- a/src/colnod/token.cpp +++ b/src/colnod/token.cpp @@ -4,20 +4,6 @@ #include #include - -Token::Token(const QString& name, QString tokenData, const QString& decription) -{ - this->setName(name); - this->setTokenData(tokenData); - this->setDescription(decription); - this->setId(QUuid::createUuid().toString().mid(1, 36)); -} - -Token::Token(const QString &name) -{ - this->setName(name); -} - Token::~Token() = default; @@ -29,8 +15,6 @@ QByteArray Token::tokensToColnodJson(const QHash for (const auto& token : tokens) { jsonTokens.push_back(QJsonValue(QJsonDocument::fromJson(token->jsonData()).object())); - //jsonTokens.append(QJsonValue::fromVariant(token->jsonData())); - //jsonTokens.push_back(QJsonValue::fromVariant(token->jsonData())); } items.insert("items", jsonTokens); QJsonDocument doc; @@ -98,8 +82,11 @@ QByteArray Token::idsToJSON(const QList &ids) return doc.toJson(); } +#include + void Token::fromSQLRecord(const QSqlQuery& query) { + auto rec = query.record(); setId(query.value(0).toString()); a_authErrors = query.value(1).toInt(); setDescription(query.value(2).toString()); @@ -117,16 +104,3 @@ void Token::fromSQLRecord(const QSqlQuery& query) setLastModified(date); setDeleted(query.value(13).toBool()); } - -//void Token::setFlags(const QSet &flags) { -// Token::flags = flags; -//} - -//QString Token::idToStringWithoutBraces() -//{ -// return a_id.toString().mid(1, 36); -//} - -//QString Token::subjectIdToStringWithoutBraces(){ -// return a_subjectId.toString().mid(1,36); -//} diff --git a/src/colnod/token.h b/src/colnod/token.h index 2f2fc45..0ea30e4 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -1,16 +1,12 @@ #pragma once -#include "entity.h" -#include -#include -#include -#include #include #include "serversdk/databasetable.h" +#include +#include +#include #include - - class Token : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(QString, id, setId, QString()) @@ -42,8 +38,6 @@ public: */ explicit Token() = default; - Token(const QString& name, QString tokenData, const QString& decription = "mobile"); - explicit Token(const QString& name); ~Token() override; QByteArray jsonData(const QSet &filters = {}) const override; @@ -71,20 +65,10 @@ public: lToken.subjectId() == rToken.subjectId(); } - - const QSet &getFlags() const; - void setFlags(const QSet &flags); - - QString idToStringWithoutBraces(); - QString subjectIdToStringWithoutBraces(); - void fromSQLRecord(const QSqlQuery& query); - void fromJSON(const QJsonObject &json); - QJsonObject toJSON() const; static QByteArray tokensToColnodJson(const QHash > &tokens); static QByteArray idsToJSON(const QList &ids); private: - //QSet flags = {"NoValidity", "Enabled"}; }; diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 495e195..81db7d4 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -5,299 +5,6 @@ void UnitTest::initTestCase() } -void UnitTest::loginSuccessfully() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::successLogin); - QVERIFY(spy.isValid()); - testAccess.login(); - spy.wait(timeout); - QCOMPARE(spy.count(), 1); - QString json = testAccess.jsonResponse; - qDebug() << json; - QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - QVERIFY2(doc.object().value("id").isString(), "No parameter 'id' in response"); -} - -//POST request w/o datas -void UnitTest::getSubjects() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - QVERIFY(spy.isValid()); - Response* response = testAccess.getSubjects(); - QSignalSpy spy1(response, &Response::ready); - spy.wait(timeout); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy1.count(), 1); - QString json = response->getJson(); - 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"); - response->deleteLater(); -} - -void UnitTest::getTokens() -{ - RequestManager testAccess; - Response* response = testAccess.getTokens(); - QSignalSpy spy(response, &Response::ready); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - 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"); - response->deleteLater(); -} - -void UnitTest::getTokenSubject() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getTokenSubject(); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getSubjectsUpdated() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getSubjectsUpdated(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getSubjectsDeleted() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getSubjectsDeleted(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getTokensUpdated() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getTokensUpdated(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getTokensDeleted() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getTokensDeleted(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroups() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroups(); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroupsUpdated() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroupsUpdated(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroupsDeleted() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroupsDeleted(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroupMembership() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroupMembership(); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroupMembershipUpdated() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroupMembershipUpdated(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::getAccessGroupMembershipDeleted() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getAccessGroupMembershipDeleted(epochMS); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::setTokens() -{ - - QHash> tokens; - auto token = getTestToken(); - tokens.insert(token->id(), token); - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.setTokens(tokens); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::deleteTokens() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - QList ids; - ids.append("582c982d-6fd7-4856-8548-7ce542791c7a"); - ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546"); - Response* response = testAccess.deleteTokens(ids); - QCOMPARE(spy.count(), 0); - spy.wait(timeout); - QVERIFY(spy.isValid()); - QCOMPARE(spy.count(), 1); - QString json = response->getJson(); - QVERIFY(!json.isEmpty()); - response->deleteLater(); -} - -void UnitTest::subjectJSONParser() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getSubjects(); - spy.wait(timeout); - QString json = response->getJson(); - QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - QJsonArray arr = doc.object()["items"].toArray(); - Subject testSubject; - //testSubject.fromJSON(arr[1].toObject()); - //qDebug() << testSubject.getName() << " Size: " << arr.size(); - //QVERIFY(!testSubject.getName().isEmpty()); - response->deleteLater(); -} - -void UnitTest::tokenJSONParser() -{ - RequestManager testAccess; - QSignalSpy spy(&testAccess, &RequestManager::responseReady); - Response* response = testAccess.getTokens(); - spy.wait(timeout); - QString json = response->getJson(); - QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - QJsonArray arr = doc.object()["items"].toArray(); - Token testToken; - //testToken.fromJSON(arr[5].toObject()); - //qDebug() << testToken.getName() << " Size: " << arr.size(); - //QVERIFY(!testToken.getName().isEmpty()); - response->deleteLater(); -} - -std::shared_ptr UnitTest::getTestToken() -{ - QJsonObject jsonToken; - jsonToken.insert("id", "062c93f6-ba3e-46af-a3a6-7a2988d1f0e9"); - jsonToken.insert("name", "test"); - jsonToken.insert("description", "mobile"); - jsonToken.insert("tokenType", "Token"); - jsonToken.insert("tokenBits", 32); - jsonToken.insert("tokenData", "7B9D32"); - jsonToken.insert("timeToLive", 255); - jsonToken.insert("authErrors", 255); - QJsonArray flags; - flags.push_back("Enabled"); - flags.push_back("NoValidity"); - jsonToken.insert("flags", flags); - jsonToken.insert("subjectId", "72b37f7e-5761-4e6c-8e87-20c0bed0d904"); - auto token = std::make_shared(); - //token->fromJSON(jsonToken); - return token; -} QTEST_MAIN(UnitTest) diff --git a/test/unitTests/complextest.cpp b/test/unitTests/complextest.cpp index ef72769..3951dbb 100644 --- a/test/unitTests/complextest.cpp +++ b/test/unitTests/complextest.cpp @@ -167,22 +167,22 @@ void ComplexTest::testingStuff() // HELPFUL_FUNCTIONS int ComplexTest::getNumOfSubjects() { - auto reqMan = new RequestManager; - Response* subjectsResp = reqMan->getSubjects(); - QSignalSpy subjectsRespSpy(subjectsResp, &Response::ready); - subjectsRespSpy.wait(timeout); - auto doc = getJsonDoc(subjectsResp->getJson()); - return doc.object()["items"].toArray().size(); +// auto reqMan = new RequestManager; +// Response* subjectsResp = reqMan->getSubjects(); +// QSignalSpy subjectsRespSpy(subjectsResp, &Response::ready); +// subjectsRespSpy.wait(timeout); +// auto doc = getJsonDoc(subjectsResp->getJson()); +// return doc.object()["items"].toArray().size(); } int ComplexTest::getNumOfTokens() { - auto reqMan = new RequestManager; - Response* tokensResp = reqMan->getTokens(); - QSignalSpy tokensRespSpy(tokensResp, &Response::ready); - tokensRespSpy.wait(timeout); - auto doc = getJsonDoc(tokensResp->getJson()); - return doc.object()["items"].toArray().size(); +// auto reqMan = new RequestManager; +// Response* tokensResp = reqMan->getTokens(); +// QSignalSpy tokensRespSpy(tokensResp, &Response::ready); +// tokensRespSpy.wait(timeout); +// auto doc = getJsonDoc(tokensResp->getJson()); +// return doc.object()["items"].toArray().size(); } QJsonDocument ComplexTest::getJsonDoc(const QString &json) diff --git a/test/unitTests/complextest.h b/test/unitTests/complextest.h index 1fb2690..b1e0ae0 100644 --- a/test/unitTests/complextest.h +++ b/test/unitTests/complextest.h @@ -3,10 +3,7 @@ #include #include -#include "response.h" -#include "requestmanager.h" #include "syncmanager.h" -#include "logger.h" class ComplexTest : public QObject { diff --git a/test/unitTests/unittest.h b/test/unitTests/unittest.h index c74c27a..5b14e98 100644 --- a/test/unitTests/unittest.h +++ b/test/unitTests/unittest.h @@ -3,13 +3,9 @@ #include #include -#include #include "subject.h" #include "databaseapi.h" #include -#include "datamanager.h" -#include "response.h" - class UnitTest : public QObject { @@ -19,24 +15,7 @@ private slots: void initTestCase(); - void loginSuccessfully(); // /AaaManager/authSession - void getSubjects(); // /SubjectManager/getSubjects - void getTokens(); // /TokenManager/getTokens - void getTokenSubject(); // /OpenManager/getTokenSubject - void getSubjectsUpdated(); - void getSubjectsDeleted(); - void getTokensUpdated(); - void getTokensDeleted(); - void getAccessGroups(); - void getAccessGroupsUpdated(); - void getAccessGroupsDeleted(); - void getAccessGroupMembership(); - void getAccessGroupMembershipUpdated(); - void getAccessGroupMembershipDeleted(); - void setTokens(); - void deleteTokens(); - void subjectJSONParser(); - void tokenJSONParser(); + private: std::shared_ptr getTestToken();