diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index b4fa9a5..d571060 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -184,6 +184,49 @@ QByteArray RequestManager::makeTimeStampJson(uint64_t time) return doc.toJson(); } +QByteArray RequestManager::makeTokensJson(QList> tokens) +{ + QJsonObject items; + QJsonArray jsonTokens; + for (auto token : tokens) + { + QJsonObject jsonToken; + jsonToken.insert("id",token->idToStringWithoutBraces()); + jsonToken.insert("name",token->getName()); + jsonToken.insert("description", token->getDescription()); + jsonToken.insert("tokenType", token->getTokenType()); + jsonToken.insert("tokenBits", token->getTokenBits()); + jsonToken.insert("tokenData", token->getTokenData()); + jsonToken.insert("timeToLive", token->getTimeToLive()); + jsonToken.insert("authErrors", token->getAuthErrors()); + QJsonArray flags; + auto flagStructure = token->getFlags(); + for (auto flag : flagStructure) + flags.push_back(flag); + jsonToken.insert("flags", flags); + jsonToken.insert("subjectId", token->subjectIdToStringWithoutBraces()); + jsonTokens.push_back(jsonToken); + } + items.insert("items", jsonTokens); + QJsonDocument doc; + doc.setObject(items); + return doc.toJson(); +} + +QByteArray RequestManager::makeIdsJson(QList ids) +{ + QJsonArray jsonIds; + for (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 getRequestReturnLogic("/SubjectManager/getSubjects"); @@ -249,7 +292,15 @@ Response* RequestManager::getAccessGroupMembershipDeleted(uint64_t time) return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipDeleted", makeTimeStampJson(time)); } - +Response* RequestManager::setTokens(QList> tokens) +{ + return postRequestReturnLogic("/TokenManager/setTokens", makeTokensJson(tokens)); +} + +Response* RequestManager::deleteTokens(QList ids) +{ + return postRequestReturnLogic("/TokenManager/deleteTokens", makeIdsJson(ids)); +} diff --git a/src/colnod/requestmanager.h b/src/colnod/requestmanager.h index 8b5cdb8..d34be11 100644 --- a/src/colnod/requestmanager.h +++ b/src/colnod/requestmanager.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,7 @@ #include +#include "token.h" #include "response.h" class RequestManager : public QObject @@ -47,6 +49,9 @@ public: Response* getAccessGroupMembershipUpdated(uint64_t time); Response* getAccessGroupMembershipDeleted(uint64_t time); + Response* setTokens(QList> tokens); + Response* deleteTokens(QList ids); + void login(QString endpoint, QString username, QString password); //I want it private, but unittest??? const QJsonDocument &getConfig() const {return config;} @@ -61,7 +66,9 @@ private: QString encryptedPassword(QString password); QString getLoginHeader(QString username, QString hash); void prepareAuthHeader(); - QByteArray makeTimeStampJson(uint64_t); + QByteArray makeTimeStampJson(uint64_t time); + QByteArray makeTokensJson(QList> tokens); + QByteArray makeIdsJson(QList ids); private slots: void onSSLError(QNetworkReply *reply, const QList &errors); diff --git a/src/colnod/tokens.json b/src/colnod/tokens.json new file mode 100644 index 0000000..d3e882f --- /dev/null +++ b/src/colnod/tokens.json @@ -0,0 +1,34 @@ +{ + "items": [ + { + "id": "582c982d-6fd7-4856-8548-7ce542791c7a", + "name": "test", + "description": "mobile", + "tokenType": "Token", + "tokenBits": 32, + "tokenData": "7B9D32", + "timeToLive": 255, + "authErrors": 255, + "flags": [ + "Enabled", + "NoValidity" + ], + "subjectId": "72b37f7e-5761-4e6c-8e87-20c0bed0d904" + }, + { + "id": "3ff23b41-3da3-4b33-82ce-d8e2d8c9a546", + "name": "test1", + "description": "mobile", + "tokenType": "Token", + "tokenBits": 32, + "tokenData": "7B9D12", + "timeToLive": 255, + "authErrors": 255, + "flags": [ + "Enabled", + "NoValidity" + ], + "subjectId": "72b37f7e-5761-4e6c-8e87-20c0bed0d904" + } + ] +} \ No newline at end of file diff --git a/test/unitTests/UnitTest.cpp b/test/unitTests/UnitTest.cpp index 19d645f..3365ac9 100644 --- a/test/unitTests/UnitTest.cpp +++ b/test/unitTests/UnitTest.cpp @@ -193,6 +193,55 @@ void UnitTest::getAccessGroupMembershipDeleted() QVERIFY(!json.isEmpty()); } +void UnitTest::setTokens() +{ + QFile jsonData(QDir::current().filePath("tokens.json")); + + if (!jsonData.open(QIODevice::ReadOnly)) { + qCritical() << "Couldn't open config file config.json" << QDir::current().filePath("subjects.json"); + QCoreApplication::exit(-1); + return; + } + + QJsonDocument doc = QJsonDocument::fromJson(jsonData.readAll()); + QJsonObject obj = doc.object(); + QJsonArray arr = obj["items"].toArray(); + qDebug() << arr; + QList> tokens; + for (auto object : arr) + { + auto token = new Token; + token->fromJSON(object.toObject()); + qDebug() << token; + tokens.append(token); + } + RequestManager* testAccess = new RequestManager(); + QSignalSpy spy(testAccess, SIGNAL(responseReady())); + Response* response = testAccess->setTokens(tokens); + QCOMPARE(spy.count(), 0); + spy.wait(10000); + QVERIFY(spy.isValid()); + QCOMPARE(spy.count(), 1); + QString json = response->reply->readAll(); + QVERIFY(!json.isEmpty()); +} + +void UnitTest::deleteTokens() +{ + RequestManager* testAccess = new RequestManager(); + QSignalSpy spy(testAccess, SIGNAL(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(10000); + QVERIFY(spy.isValid()); + QCOMPARE(spy.count(), 1); + QString json = response->reply->readAll(); + QVERIFY(!json.isEmpty()); +} + void UnitTest::subjectJSONParser() { /* diff --git a/test/unitTests/unittest.h b/test/unitTests/unittest.h index 16bdd09..6d580f1 100644 --- a/test/unitTests/unittest.h +++ b/test/unitTests/unittest.h @@ -31,6 +31,8 @@ private slots: void getAccessGroupMembership(); void getAccessGroupMembershipUpdated(); void getAccessGroupMembershipDeleted(); + void setTokens(); + void deleteTokens(); void subjectJSONParser(); void tokenJSONParser(); void connectToDB();