diff --git a/server-sdk b/server-sdk index 174ede9..b92095a 160000 --- a/server-sdk +++ b/server-sdk @@ -1 +1 @@ -Subproject commit 174ede92eefe414712445c519b98b880088ddf1c +Subproject commit b92095a459ff5829f9e1cf9d119391ddcb99ac9c diff --git a/src/app/main.cpp b/src/app/main.cpp index 71fed8d..2dff844 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -6,6 +6,8 @@ #include "serversdk/requestmanager.h" #include "serversdk/request.h" +#include "colnodapi.h" + int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); @@ -21,8 +23,52 @@ int main(int argc, char *argv[]) parser.addOption(dropTablesOption); parser.addOption(createTablesOption); parser.process(app); + + SyncManager api(parser.isSet(dryModeOption)); + + serversdk::RequestManager requestManager; + + + ColnodAPI colnod(&requestManager); + + // Get data + colnod.downloadData(); + QObject::connect(&colnod, &ColnodAPI::downloadDataFinished, [=](std::shared_ptr data) { + qDebug() << "now i must have data"; + qDebug() << "Tokens:" << data->deletedTokens.count(); + QCoreApplication::exit(); + }); + + + + + + + + + + + + + + // Process data + + + + + + + + + + // Sync data + + + + + // // diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index 4e051b5..bd401fe 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -1,24 +1,7 @@ #include "colnodapi.h" -class LoginTable : public serversdk::DatabaseTable { - Q_OBJECT - TABLE_PROPERTY(QString, username, set_username, "") - TABLE_PROPERTY(QString, password, set_password, "") -}; - -class AuthToken : public serversdk::DatabaseTable { - Q_OBJECT - TABLE_PROPERTY(QUuid, id, set_id, QUuid()) - public: - QString idWithoutCurlyBraces() - { - return a_id.toString().mid(1, 36); - } -}; - ColnodAPI::ColnodAPI() { - } ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan) @@ -27,21 +10,55 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan) } +void ColnodAPI::downloadData() +{ + // Have to get Login + auto login = requestLogin(); + connect(login.get(), &serversdk::Request::finished, this, [=](){ + // Get token + AuthToken token; + token.fromJson(login->responseData()); + + auto data = std::make_shared(); + emit downloadDataFinished(); + }); +} + +std::shared_ptr ColnodAPI::requestLogin() +{ + Q_ASSERT(mReqMan); + LoginResp login; + login.set_username(userName()); + + // password + QString encodedPassword = QCryptographicHash::hash( + password().toLocal8Bit(), // -> bytearray + QCryptographicHash::Sha512 // SHA 512 + ).toHex().toUpper(); + login.set_password(encodedPassword); + + auto loginRequest = composeRequest("/AaaManager/authSession", login.jsonData()); +// auto loginRequest = std::make_shared("POST", "https://192.168.1.3:8443/AaaManager/authSession", login->jsonData()); + loginRequest->setUserName(login.username()); + loginRequest->setPassword(login.password()); + mReqMan->processRequest(loginRequest); + + return loginRequest; +} + QList ColnodAPI::getTokensUpdated(const qint64 &time) { - AuthToken token; - token.fromJson(data); - serversdk::Request request("POST", host + "/TokenManager/getTokensUpdated", getTimestampJson(time)); - request.setToken(mToken); - mReqMan->processRequest(); +// AuthToken token; +// token.fromJson(data); +// serversdk::Request request("POST", host + "/TokenManager/getTokensUpdated", getTimestampJson(time)); +// request.setToken(mToken); +// mReqMan->processRequest(); } QString ColnodAPI::login(const QString &username, const QString &password) { - - - auto login = std::make_unique(); + auto login = std::make_unique(); login->set_username(username); login->set_password(QCryptographicHash::hash(QString(password).toLocal8Bit(), QCryptographicHash::Sha512).toHex().toUpper()); @@ -69,3 +86,29 @@ QByteArray ColnodAPI::getTimestampJson(const qint64 &time) doc.setObject(reqBody); return doc.toJson(); } + +std::shared_ptr ColnodAPI::composeRequest(const QString &endpoint, const QByteArray &data) +{ + QString url = host + endpoint; + return std::make_shared("POST", url, data); +} + +QString ColnodAPI::password() const +{ + return mPassword; +} + +void ColnodAPI::setPassword(const QString &password) +{ + mPassword = password; +} + +QString ColnodAPI::userName() const +{ + return mUserName; +} + +void ColnodAPI::setUserName(const QString &userName) +{ + mUserName = userName; +} diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 66d9250..c93cb3b 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -8,6 +8,32 @@ #include "serversdk/request.h" #include "serversdk/databasetable.h" +struct ColnodData +{ + QList> updatedTokens; + QList> updatedSubjects; + QList> deletedTokens; + QList> deletedSubjects; + + bool isValid(); +}; + +class LoginResp : public serversdk::DatabaseTable { + Q_OBJECT + TABLE_PROPERTY(QString, username, set_username, "") + TABLE_PROPERTY(QString, password, set_password, "") +}; + +class AuthToken : public serversdk::DatabaseTable { + Q_OBJECT + TABLE_PROPERTY(QUuid, id, set_id, QUuid()) + public: + QString idWithoutCurlyBraces() + { + return a_id.toString().mid(1, 36); + } +}; + class ColnodAPI: public QObject { Q_OBJECT @@ -15,6 +41,12 @@ public: ColnodAPI(); ColnodAPI(serversdk::RequestManager* reqMan); + void downloadData(); + + // New approach + std::shared_ptr requestLogin(); + + QList getTokensUpdated(const qint64 &time); QList getTokensDeleted(const qint64 &time); QList getSubjectsUpdated(const qint64 &time); @@ -23,12 +55,24 @@ public: bool setTokens(const QList &tokens); bool deleteTokens(const QList &tokenIds); + // Attributes + QString userName() const; + void setUserName(const QString &userName); + QString password() const; + void setPassword(const QString &password); + private: QString login(const QString &username, const QString &password); QByteArray getTimestampJson(const qint64 &time); + std::shared_ptr composeRequest(const QString &endpoint, const QByteArray &data); + +signals: + void downloadDataFinished(std::shared_ptr = std::shared_ptr()); private: serversdk::RequestManager* mReqMan = nullptr; QString host = "https://192.168.1.3:8443"; + QString mUserName; + QString mPassword; };