mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 14:10:40 +02:00
Add some logic for change tokens to Colnod depends on our DB
This commit is contained in:
parent
ecdb181ca9
commit
dcd0034110
@ -117,6 +117,34 @@ void ColnodAPI::syncDataToColnod()
|
||||
void ColnodAPI::syncChangedDataToColnod()
|
||||
{
|
||||
// TODO
|
||||
dataMan->loadTokensToAdd();
|
||||
dataMan->loadTokensToDelete();
|
||||
processDataToColnod();
|
||||
dataMan->clear();
|
||||
|
||||
}
|
||||
|
||||
void ColnodAPI::processDataToColnod()
|
||||
{
|
||||
QList<QString>* tokensToDelete = dataMan->getTokensToDelete();
|
||||
if ((*tokensToDelete)[0] != "empty")
|
||||
{
|
||||
Response* resp0 = reqMan->deleteTokens(dataMan->getTokensToDelete());
|
||||
connect(resp0, &Response::ready, [=](){
|
||||
areProcessDataReady();
|
||||
resp0->deleteLater();
|
||||
});
|
||||
}
|
||||
QList<QPointer<Token>>* tokens = dataMan->getTokens();
|
||||
if ((*tokens)[0]->getName() != "empty")
|
||||
{
|
||||
Response* resp1 = reqMan->setTokens(dataMan->getTokens());
|
||||
connect(resp1, &Response::ready, [=](){
|
||||
areProcessDataReady();
|
||||
resp1->deleteLater();
|
||||
});
|
||||
}
|
||||
connect(this, &ColnodAPI::dataLoaded, this, &ColnodAPI::syncChangedDataFromColnod);
|
||||
}
|
||||
|
||||
void ColnodAPI::prepareDatabase()
|
||||
@ -138,4 +166,10 @@ void ColnodAPI::areChangedDataReady()
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ColnodAPI::areProcessDataReady()
|
||||
{
|
||||
if (dataMan->haveProcessData())
|
||||
{
|
||||
emit dataLoaded();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,17 +19,22 @@ public:
|
||||
void syncDataToColnod();
|
||||
|
||||
|
||||
void downloadChangedDataFromColnod();
|
||||
|
||||
void syncChangedDataFromColnod();
|
||||
void syncChangedDataToColnod();
|
||||
|
||||
|
||||
|
||||
|
||||
void prepareDatabase();
|
||||
|
||||
public slots:
|
||||
void downloadChangedDataFromColnod();
|
||||
|
||||
|
||||
signals:
|
||||
void dataDownloaded();
|
||||
void partReady();
|
||||
void dataLoaded();
|
||||
|
||||
private slots:
|
||||
|
||||
@ -41,6 +46,8 @@ private:
|
||||
void syncDeletedDataFromColnod();
|
||||
void areDataReady();
|
||||
void areChangedDataReady();
|
||||
void areProcessDataReady();
|
||||
void processDataToColnod();
|
||||
|
||||
|
||||
|
||||
|
||||
@ -73,7 +73,7 @@ void DatabaseManager::saveSubjectAttribute(Subject *subject, QString table)
|
||||
auto attributes = subject->getAtr();
|
||||
for (auto attribute : attributes){
|
||||
QString id = subject->idToStringWithoutBraces() + " " + attribute.first;
|
||||
//if (checkIfExists(id, table))
|
||||
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));
|
||||
@ -83,7 +83,7 @@ void DatabaseManager::saveSubjectAttribute(Subject *subject, QString table)
|
||||
query.bindValue(":subject_id", subject->idToStringWithoutBraces());
|
||||
query.exec();
|
||||
}
|
||||
/* else
|
||||
else
|
||||
{
|
||||
query.prepare(QString("INSERT INTO %1 (id, attribute_key, attribute_value, subject_id)"
|
||||
"VALUES (:id, :key, :value, :subject_id)").arg(table));
|
||||
@ -92,7 +92,7 @@ void DatabaseManager::saveSubjectAttribute(Subject *subject, QString table)
|
||||
query.bindValue(":value", attribute.second);
|
||||
query.bindValue(":subject_id", subject->idToStringWithoutBraces());
|
||||
query.exec();
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,7 +166,7 @@ void DatabaseManager::createTables()
|
||||
|
||||
uint64_t DatabaseManager::getLastUpdate()
|
||||
{
|
||||
query.exec("SELECT EXTRACT(EPOCH FROM (SELECT MIN(last_sync) FROM changes))*1000");
|
||||
query.exec("SELECT EXTRACT(EPOCH FROM (SELECT MIN(last_sync) FROM changes))*1000"); //MAX for using, MIN for testing
|
||||
query.next();
|
||||
return query.value(0).toULongLong();
|
||||
}
|
||||
@ -186,3 +186,27 @@ void DatabaseManager::updateLastSync()
|
||||
query.bindValue(":time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"));
|
||||
query.exec();
|
||||
}
|
||||
|
||||
|
||||
QSqlQuery* DatabaseManager::getTokensToAdd()
|
||||
{
|
||||
QSqlQuery* qry = new QSqlQuery;
|
||||
qry->exec("SELECT name, token_data FROM changes WHERE status = 'toBeAdd'");
|
||||
return qry;
|
||||
}
|
||||
|
||||
QSqlQuery* DatabaseManager::getTokensToDelete()
|
||||
{
|
||||
QSqlQuery* qry = new QSqlQuery;
|
||||
qry->exec("SELECT id FROM changes WHERE status = 'toBeDeleted'");
|
||||
return qry;
|
||||
}
|
||||
|
||||
QUuid DatabaseManager::getId(QString name)
|
||||
{
|
||||
query.prepare("SELECT id FROM colnod_subject WHERE name = :name");
|
||||
query.bindValue(":name", name);
|
||||
query.exec();
|
||||
query.next();
|
||||
return query.value(0).toUuid();
|
||||
}
|
||||
|
||||
@ -36,6 +36,11 @@ public:
|
||||
uint64_t getLastUpdate();
|
||||
void updateLastSync();
|
||||
|
||||
QSqlQuery* getTokensToAdd();
|
||||
QSqlQuery* getTokensToDelete();
|
||||
|
||||
QUuid getId(QString name);
|
||||
|
||||
|
||||
private:
|
||||
bool checkIfExists(QString id, QString table);
|
||||
|
||||
@ -166,6 +166,13 @@ bool DataManager::haveChangedData()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DataManager::haveProcessData()
|
||||
{
|
||||
if ( !tokens.isEmpty() && !tokensToDelete.isEmpty())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t DataManager::getLastUpdate()
|
||||
{
|
||||
return db->getLastUpdate();
|
||||
@ -190,4 +197,29 @@ void DataManager::updateLastSync()
|
||||
db->updateLastSync();
|
||||
}
|
||||
|
||||
void DataManager::loadTokensToAdd()
|
||||
{
|
||||
QSqlQuery* query = db->getTokensToAdd();
|
||||
while (query->next())
|
||||
{
|
||||
Token* token = new Token(query->value(0).toString(), query->value(1).toString());
|
||||
token->setSubjectId(db->getId(token->getName()));
|
||||
tokens.append(token);
|
||||
}
|
||||
if (tokens.isEmpty())
|
||||
tokens.append(new Token("empty"));
|
||||
}
|
||||
|
||||
void DataManager::loadTokensToDelete()
|
||||
{
|
||||
QSqlQuery* query = db->getTokensToDelete();
|
||||
while (query->next())
|
||||
{
|
||||
tokensToDelete.append(query->value(0).toString());
|
||||
}
|
||||
if (tokensToDelete.isEmpty())
|
||||
tokensToDelete.append("empty");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -32,10 +32,18 @@ public:
|
||||
|
||||
bool haveData();
|
||||
bool haveChangedData();
|
||||
bool haveProcessData();
|
||||
|
||||
void emptyDatabase();
|
||||
void clear();
|
||||
|
||||
void loadTokensToAdd();
|
||||
void loadTokensToDelete();
|
||||
|
||||
QList<QPointer<Token>>* getTokens() {return &tokens;}
|
||||
QList<QString>* getTokensToDelete() {return &tokensToDelete;}
|
||||
|
||||
|
||||
private:
|
||||
DatabaseManager *db = nullptr;
|
||||
QList<QPointer<Subject>> subjects;
|
||||
|
||||
@ -157,11 +157,11 @@ QByteArray RequestManager::makeTimeStampJson(uint64_t time)
|
||||
return doc.toJson();
|
||||
}
|
||||
|
||||
QByteArray RequestManager::makeTokensJson(QList<QPointer<Token>> tokens)
|
||||
QByteArray RequestManager::makeTokensJson(QList<QPointer<Token>>* tokens)
|
||||
{
|
||||
QJsonObject items;
|
||||
QJsonArray jsonTokens;
|
||||
for (auto token : tokens)
|
||||
for (auto token : *tokens)
|
||||
{
|
||||
QJsonObject jsonToken;
|
||||
jsonToken.insert("id",token->idToStringWithoutBraces());
|
||||
@ -186,10 +186,10 @@ QByteArray RequestManager::makeTokensJson(QList<QPointer<Token>> tokens)
|
||||
return doc.toJson();
|
||||
}
|
||||
|
||||
QByteArray RequestManager::makeIdsJson(QList<QString> ids)
|
||||
QByteArray RequestManager::makeIdsJson(QList<QString>* ids)
|
||||
{
|
||||
QJsonArray jsonIds;
|
||||
for (auto id : ids)
|
||||
for (auto id : *ids)
|
||||
{
|
||||
jsonIds.push_back(id);
|
||||
}
|
||||
@ -265,12 +265,12 @@ Response* RequestManager::getAccessGroupMembershipDeleted(uint64_t time)
|
||||
return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipDeleted", makeTimeStampJson(time));
|
||||
}
|
||||
|
||||
Response* RequestManager::setTokens(QList<QPointer<Token>> tokens)
|
||||
Response* RequestManager::setTokens(QList<QPointer<Token>>* tokens)
|
||||
{
|
||||
return postRequestReturnLogic("/TokenManager/setTokens", makeTokensJson(tokens));
|
||||
}
|
||||
|
||||
Response* RequestManager::deleteTokens(QList<QString> ids)
|
||||
Response* RequestManager::deleteTokens(QList<QString>* ids)
|
||||
{
|
||||
return postRequestReturnLogic("/TokenManager/deleteTokens", makeIdsJson(ids));
|
||||
}
|
||||
|
||||
@ -49,8 +49,8 @@ public:
|
||||
Response* getAccessGroupMembershipUpdated(uint64_t time);
|
||||
Response* getAccessGroupMembershipDeleted(uint64_t time);
|
||||
|
||||
Response* setTokens(QList<QPointer<Token>> tokens);
|
||||
Response* deleteTokens(QList<QString> ids);
|
||||
Response* setTokens(QList<QPointer<Token>>* tokens);
|
||||
Response* deleteTokens(QList<QString>* ids);
|
||||
|
||||
Response* login(); //I want it private, but unittest???
|
||||
|
||||
@ -65,8 +65,8 @@ private:
|
||||
QString getLoginHeader(QString username, QString hash);
|
||||
|
||||
QByteArray makeTimeStampJson(uint64_t time);
|
||||
QByteArray makeTokensJson(QList<QPointer<Token>> tokens);
|
||||
QByteArray makeIdsJson(QList<QString> ids);
|
||||
QByteArray makeTokensJson(QList<QPointer<Token>>* tokens);
|
||||
QByteArray makeIdsJson(QList<QString>* ids);
|
||||
Response* getLoginResponse();
|
||||
|
||||
private slots:
|
||||
|
||||
@ -2,6 +2,25 @@
|
||||
|
||||
#include <QJsonArray>
|
||||
|
||||
Token::Token(QString namee, QString tokenData, QString decription)
|
||||
{
|
||||
this->name = namee;
|
||||
this->tokenData = tokenData;
|
||||
this->description = decription;
|
||||
this->id = QUuid::createUuid();
|
||||
this->tokenType = "Token";
|
||||
this->tokenBits = 32;
|
||||
this->timeToLive = 255;
|
||||
this->authErrors = 255;
|
||||
this->flags = {"Enabled", "NoValidity"};
|
||||
|
||||
}
|
||||
|
||||
Token::Token(QString namee)
|
||||
{
|
||||
this->name = namee;
|
||||
}
|
||||
|
||||
void Token::fromJSON(const QJsonObject &json) {
|
||||
Entity::fromJSON(json);
|
||||
|
||||
|
||||
@ -10,6 +10,9 @@ class Token : public Entity {
|
||||
public:
|
||||
// using Entity::Entity;
|
||||
|
||||
Token() = default;
|
||||
Token(QString name, QString tokenData, QString decription = "mobile");
|
||||
Token(QString name);
|
||||
const QString &getTokenType() const;
|
||||
void setTokenType(const QString &tokenType);
|
||||
int getTokenBits() const;
|
||||
|
||||
@ -222,7 +222,7 @@ void UnitTest::setTokens()
|
||||
}
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
Response* response = testAccess->setTokens(tokens);
|
||||
Response* response = testAccess->setTokens(&tokens);
|
||||
QCOMPARE(spy.count(), 0);
|
||||
spy.wait(15000);
|
||||
QVERIFY(spy.isValid());
|
||||
@ -238,7 +238,7 @@ void UnitTest::deleteTokens()
|
||||
QList<QString> ids;
|
||||
ids.append("582c982d-6fd7-4856-8548-7ce542791c7a");
|
||||
ids.append("3ff23b41-3da3-4b33-82ce-d8e2d8c9a546");
|
||||
Response* response = testAccess->deleteTokens(ids);
|
||||
Response* response = testAccess->deleteTokens(&ids);
|
||||
QCOMPARE(spy.count(), 0);
|
||||
spy.wait(15000);
|
||||
QVERIFY(spy.isValid());
|
||||
|
||||
@ -12,7 +12,7 @@ void ComplexTest::cleanupTestCase()
|
||||
{
|
||||
QList<QString> ids;
|
||||
ids.append("582c982d-6fd7-4856-8548-7ce542791c7a");
|
||||
Response* deleteTokensResp = reqMan->deleteTokens(ids);
|
||||
Response* deleteTokensResp = reqMan->deleteTokens(&ids);
|
||||
QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready);
|
||||
QCOMPARE(deleteTokensRespSpy.count(), 0);
|
||||
deleteTokensRespSpy.wait(10000);
|
||||
@ -45,7 +45,7 @@ void ComplexTest::complexTest()
|
||||
// ADD_TOKENS_CHECK_BEGIN
|
||||
QList<QPointer<Token>> tokens;
|
||||
tokens.append(getTestToken());
|
||||
Response* setTokensResp = reqMan->setTokens(tokens);
|
||||
Response* setTokensResp = reqMan->setTokens(&tokens);
|
||||
QSignalSpy setTokensRespSpy(setTokensResp, &Response::ready);
|
||||
QCOMPARE(setTokensRespSpy.count(), 0);
|
||||
setTokensRespSpy.wait(10000);
|
||||
@ -69,7 +69,7 @@ void ComplexTest::complexTest()
|
||||
// DELETE_TOKENS_CHECK_BEGIN
|
||||
QList<QString> ids;
|
||||
ids.append("582c982d-6fd7-4856-8548-7ce542791c7a");
|
||||
Response* deleteTokensResp = reqMan->deleteTokens(ids);
|
||||
Response* deleteTokensResp = reqMan->deleteTokens(&ids);
|
||||
QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready);
|
||||
QCOMPARE(deleteTokensRespSpy.count(), 0);
|
||||
deleteTokensRespSpy.wait(10000);
|
||||
@ -116,7 +116,7 @@ void ComplexTest::syncLastUpdated()
|
||||
QSignalSpy spy(api, &ColnodAPI::dataDownloaded);
|
||||
spy.wait(10000);
|
||||
api->syncChangedDataFromColnod();
|
||||
//api->syncUpdatedDataToColnod();
|
||||
// api->syncChangedDataToColnod();
|
||||
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user