From 7f903b601b4310753f220e0344be79b9dd93afd0 Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Fri, 8 Nov 2019 18:21:59 +0100 Subject: [PATCH 1/6] updating ci --- .gitlab-ci.yml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 99da401..bb1e0c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,23 +6,29 @@ stages: # To clone also submodules variables: GIT_SUBMODULE_STRATEGY: recursive + PRO_FILE: ../colnod-connector.pro + SCRIPT_PATH: server-sdk/scripts +cache: + paths: + - build/ -########## +########### # Build ########## build: stage: build tags: - - shell + - shell + before_script: + - git submodule sync --recursive + - git submodule update --init --recursive script: + - ls server-sdk - mkdir -p build - cd build - - qmake ../colnod-connector.pro + - qmake $PRO_FILE - make -j4 - artifacts: - paths: - - build/ ########## # Test @@ -32,7 +38,9 @@ test: tags: - shell script: + - mkdir -p build - cd build + - qmake $PRO_FILE - make check # memory leak check for unittest @@ -41,7 +49,9 @@ valgrind: tags: - shell script: + - mkdir -p build - cd build + - qmake $PRO_FILE - valgrind make check # Quality of code @@ -51,7 +61,7 @@ cppcheck: - shell #allow_failure: true # Probably needed to allow failure script: - - server-sdk/scripts/cppcheck.sh + - $SCRIPT_PATH/cppcheck.sh dependencies: [] # Common checks ( Line endings ) From 4ded4f943c604eb8a3adcd44923edfcbb3b817b4 Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Fri, 8 Nov 2019 18:29:15 +0100 Subject: [PATCH 2/6] updating ci --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bb1e0c8..7fcb3f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,6 @@ build: - git submodule sync --recursive - git submodule update --init --recursive script: - - ls server-sdk - mkdir -p build - cd build - qmake $PRO_FILE From 3c321fbdecc74cbb5fbbcd3b90cb770a2a571857 Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Fri, 8 Nov 2019 18:33:47 +0100 Subject: [PATCH 3/6] updating ci --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7fcb3f1..b0e8c51 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,7 +69,7 @@ lineendings: tags: - shell script: - - server-sdk/scripts/check.sh + - $SCRIPT_PATH/check.sh dependencies: [] codecoverage: @@ -77,7 +77,7 @@ codecoverage: tags: - shell script: - - server-sdk/scripts/codecoverage.sh + - $SCRIPT_PATH/codecoverage.sh coverage: '/^\s+functions..:\s+(\d+\.\d+%).+$/' dependencies: [] @@ -86,5 +86,5 @@ doc: tags: - shell script: - - server-sdk/scripts/doc.sh clean # 'clean' better clean before generating documentation + - $SCRIPT_PATH/doc.sh clean # 'clean' better clean before generating documentation dependencies: [] From e34aaeb2a6caf7eb02daa2fef50495b9c902c173 Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Mon, 11 Nov 2019 10:36:35 +0100 Subject: [PATCH 4/6] updating server-sdk to work without SDK_ROOT path and other defines --- server-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-sdk b/server-sdk index ee50768..d54da50 160000 --- a/server-sdk +++ b/server-sdk @@ -1 +1 @@ -Subproject commit ee507683c6faf69730451b16fbe3ef2b508a15fa +Subproject commit d54da50d5ed3e0ce70b46bb13f8548a048c64120 From a7617762f7eeeca005df065151378641f5847d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 11 Nov 2019 17:13:32 +0100 Subject: [PATCH 5/6] Change functionality for input with only important data --- README.md | 3 +++ doc/possible-checks.md | 5 +++++ src/app/main.cpp | 20 ++++++++++++++++---- src/colnod/databasemanager.cpp | 27 ++++++++++++++++++--------- src/colnod/databasemanager.h | 2 ++ src/colnod/datamanager.cpp | 31 +++++++++++++++++++++++++++---- src/colnod/datamanager.h | 4 +++- src/colnod/syncmanager.cpp | 13 +++++++++---- src/colnod/syncmanager.h | 3 ++- src/colnod/token.cpp | 8 ++------ src/colnod/token.h | 20 +++++++++++++++----- 11 files changed, 102 insertions(+), 34 deletions(-) create mode 100644 doc/possible-checks.md diff --git a/README.md b/README.md index 0ff36da..f33eb4a 100644 --- a/README.md +++ b/README.md @@ -168,3 +168,6 @@ It is possible to chain requests: [see doc](https://support.insomnia.rest/articl #### Install snowboard `npm install -g snowboard` + +## Possible checks + [here](https://gitlab.com/spaceti-app/integrations/acs/colnod-connector/blob/master/doc/possible-checks.md) diff --git a/doc/possible-checks.md b/doc/possible-checks.md new file mode 100644 index 0000000..add579c --- /dev/null +++ b/doc/possible-checks.md @@ -0,0 +1,5 @@ + +# Possible checks + +## Cases: +- try to add new virtual token to subject who has no physical card diff --git a/src/app/main.cpp b/src/app/main.cpp index c3b24d8..836491d 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -13,9 +13,25 @@ int main(int argc, char *argv[]) Logger *logger = Logger::getLogger(); parser.setApplicationDescription("Colnod sync"); QCommandLineOption dryModeOption("dryMode", "ColnodAPI", "Read-only mode, prints changes which would normally be made"); + QCommandLineOption dropTablesOption("dropTables", "ColnodAPI", "Delete tables with datas from Colnod"); + QCommandLineOption createTablesOption("createTables", "ColnodAPI", "Create tables to saving data from Colnod"); parser.addOption(dryModeOption); + parser.addOption(dropTablesOption); + parser.addOption(createTablesOption); parser.process(app); SyncManager api(parser.isSet(dryModeOption)); + QObject::connect(&api, &SyncManager::error, &app, [](){ + qDebug() << "error"; + QCoreApplication::exit(1); + }, Qt::QueuedConnection); + if (parser.isSet(dropTablesOption)){ + api.dropTables(); + return 0; + } + if (parser.isSet(createTablesOption)){ + api.createTables(); + return 0; + } api.loadDataFromDB(); api.loadDataFromColnod(); QObject::connect(&api, &SyncManager::dataDownloaded, [&](){ @@ -26,9 +42,5 @@ int main(int argc, char *argv[]) api.syncDataFromColnodToDB(); api.syncDataFromDBToColnod(); }); - QObject::connect(&api, &SyncManager::error, &app, [](){ - qDebug() << "error"; - QCoreApplication::exit(1); - }, Qt::QueuedConnection); return QCoreApplication::exec(); } diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index 6e06145..74e493c 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -186,19 +186,19 @@ void DatabaseManager::createTables() "deleted BOOLEAN)"); executeQuery(query, "CREATE TABLE colnod_token (" "id CHAR(36) primary key NOT NULL," - "auth_errors INTEGER NOT NULL," + "auth_errors INTEGER DEFAULT 255," "description VARCHAR(255)," - "enabled BOOLEAN NOT NULL," - "last_update timestamp NOT NULL," + "enabled BOOLEAN DEFAULT true," + "last_update timestamp DEFAULT '1970-01-01 00:00:00'::timestamp without time zone," "name VARCHAR(255)," - "no_validity BOOLEAN NOT NULL," - "time_to_live INTEGER NOT NULL," - "token_bits INTEGER," + "no_validity BOOLEAN DEFAULT true," + "time_to_live INTEGER DEFAULT 255," + "token_bits INTEGER DEFAULT 32," "token_data VARCHAR(255)," - "token_type VARCHAR(255)," + "token_type VARCHAR(255) DEFAULT 'Token'::character varying," "subject_id CHAR(36)," - "last_modified timestamp," - "deleted BOOLEAN)"); + "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)," @@ -307,6 +307,15 @@ bool DatabaseManager::checkDeletedToken(const QString &id) return query.value(0).toBool(); } +qint16 DatabaseManager::getNumOfTokensOfSubject(const QString &id) +{ + QSqlQuery query; + query.prepare("SELECT 1 FROM colnod_token WHERE subject_id = :id AND deleted = false"); + query.bindValue(":id", id); + executeQuery(query); + return static_cast(query.size()); +} + bool DatabaseManager::isOpen() { return opened; diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index f95a9d4..74fc989 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -40,6 +40,8 @@ public: QString getSubjectNameById(const QString &id); bool checkDeletedToken(const QString &id); + qint16 getNumOfTokensOfSubject(const QString &id); + bool isOpen(); diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp index 3d81721..7a0dd6b 100644 --- a/src/colnod/datamanager.cpp +++ b/src/colnod/datamanager.cpp @@ -9,7 +9,7 @@ DataManager::DataManager(const bool &dryMode) : nextLastSync = db->getNow(); lastSync = db->getLastSync(); } - connect(db.get(), &DatabaseManager::error, this, &DataManager::error); + connect(db.get(), &DatabaseManager::error, this, &DataManager::error, Qt::QueuedConnection); } // load all tokens from colnod to comparing with working set from DB @@ -84,6 +84,13 @@ void DataManager::fillTokensToChangeDB() { 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()); } @@ -252,10 +259,26 @@ void DataManager::setDeletedToTokensFromDB() } // recreate working tables -void DataManager::emptyDatabase() +void DataManager::dropTables() { - db->dropTables(); - db->createTables(); + 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) diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h index d3e94ac..1793cf8 100644 --- a/src/colnod/datamanager.h +++ b/src/colnod/datamanager.h @@ -38,7 +38,9 @@ public: void updateLastSync(); - void emptyDatabase(); + void dropTables(); + + void createTables(); quint64 getLastModifiedOfToken(const QString &id); diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 29dcf07..1c72bd8 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -5,8 +5,8 @@ SyncManager::SyncManager(bool dryMode) : dataMan( std::make_unique(dryMode)), dryMode(dryMode) { - connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error); - connect(dataMan.get(), &DataManager::error, this, &SyncManager::error); + connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error, Qt::QueuedConnection); + connect(dataMan.get(), &DataManager::error, this, &SyncManager::error, Qt::QueuedConnection); } void SyncManager::loadDataFromColnod() @@ -180,9 +180,14 @@ void SyncManager::syncDeletedDataFromDBToColnod() } // For full sync -void SyncManager::prepareDatabase() +void SyncManager::dropTables() { - dataMan->emptyDatabase(); + dataMan->dropTables(); +} + +void SyncManager::createTables() +{ + dataMan->createTables(); } bool SyncManager::isValid() diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index f39db10..33a9df6 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -14,7 +14,8 @@ public: void syncDataFromColnodToDB(); void syncDataFromDBToColnod(); - void prepareDatabase(); + void dropTables(); + void createTables(); bool isValid(); diff --git a/src/colnod/token.cpp b/src/colnod/token.cpp index aa22cad..ff3b573 100644 --- a/src/colnod/token.cpp +++ b/src/colnod/token.cpp @@ -3,18 +3,13 @@ #include #include + Token::Token(const QString& name, QString tokenData, const QString& decription) { this->setName(name); this->tokenData = std::move(tokenData); this->setDescription(decription); this->setId(QUuid::createUuid()); - this->tokenType = "Token"; - this->tokenBits = 32; - this->timeToLive = 255; - this->authErrors = 255; - this->flags = {"Enabled", "NoValidity"}; - } Token::Token(const QString &name) @@ -35,6 +30,7 @@ void Token::fromJSON(const QJsonObject &json) { timeToLive = json["timeToLive"].toInt(); authErrors = json["authErrors"].toInt(); const auto &flagsArray = json["flags"].toArray(); + flags.clear(); for(const auto &flag : flagsArray){ flags.insert(flag.toString()); } diff --git a/src/colnod/token.h b/src/colnod/token.h index bce4c69..9d49cbf 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -11,6 +11,16 @@ class Token : public Entity { public: // using Entity::Entity; + /** + * # Needed values to proper sync + * + * * id - primary key + * * lastModified - when it was edited/modified + * * tokenData - key to open doors + * * subjectId - no way of make unassinged token (token without subject) + * + */ + Token() = default; Token(const QString& name, QString tokenData, const QString& decription = "mobile"); explicit Token(const QString& name); @@ -60,11 +70,11 @@ public: QJsonObject toJSON() const override; private: - QString tokenType; - int tokenBits{}; + QString tokenType = "Token"; + int tokenBits = 32; QString tokenData; - int timeToLive{}; - int authErrors{}; - QSet flags; + int timeToLive = 255; + int authErrors = 255; + QSet flags = {"NoValidity", "Enabled"}; QUuid subjectId; }; From b316e39e21733de39b8fadaba814734aa38918f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Mon, 11 Nov 2019 17:25:39 +0100 Subject: [PATCH 6/6] fix end line --- doc/possible-checks.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/possible-checks.md b/doc/possible-checks.md index add579c..4ea4530 100644 --- a/doc/possible-checks.md +++ b/doc/possible-checks.md @@ -1,5 +1,5 @@ - -# Possible checks - -## Cases: -- try to add new virtual token to subject who has no physical card + +# Possible checks + +## Cases: +- try to add new virtual token to subject who has no physical card