new approach for using server-sdk

This commit is contained in:
Filip Bucek 2019-11-13 10:00:55 +01:00
parent eb4ed9cc4c
commit fcbb030ce9
4 changed files with 159 additions and 26 deletions

@ -1 +1 @@
Subproject commit 174ede92eefe414712445c519b98b880088ddf1c Subproject commit b92095a459ff5829f9e1cf9d119391ddcb99ac9c

View File

@ -6,6 +6,8 @@
#include "serversdk/requestmanager.h" #include "serversdk/requestmanager.h"
#include "serversdk/request.h" #include "serversdk/request.h"
#include "colnodapi.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
@ -21,8 +23,52 @@ int main(int argc, char *argv[])
parser.addOption(dropTablesOption); parser.addOption(dropTablesOption);
parser.addOption(createTablesOption); parser.addOption(createTablesOption);
parser.process(app); parser.process(app);
SyncManager api(parser.isSet(dryModeOption)); SyncManager api(parser.isSet(dryModeOption));
serversdk::RequestManager requestManager;
ColnodAPI colnod(&requestManager);
// Get data
colnod.downloadData();
QObject::connect(&colnod, &ColnodAPI::downloadDataFinished, [=](std::shared_ptr<ColnodData> data) {
qDebug() << "now i must have data";
qDebug() << "Tokens:" << data->deletedTokens.count();
QCoreApplication::exit();
});
// Process data
// Sync data
// //
// //

View File

@ -1,24 +1,7 @@
#include "colnodapi.h" #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()
{ {
} }
ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan) 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<ColnodData>();
emit downloadDataFinished();
});
}
std::shared_ptr<serversdk::Request> 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<serversdk::Request>("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<Token> ColnodAPI::getTokensUpdated(const qint64 &time) QList<Token> ColnodAPI::getTokensUpdated(const qint64 &time)
{ {
AuthToken token; // AuthToken token;
token.fromJson(data); // token.fromJson(data);
serversdk::Request request("POST", host + "/TokenManager/getTokensUpdated", getTimestampJson(time)); // serversdk::Request request("POST", host + "/TokenManager/getTokensUpdated", getTimestampJson(time));
request.setToken(mToken); // request.setToken(mToken);
mReqMan->processRequest(); // mReqMan->processRequest();
} }
QString ColnodAPI::login(const QString &username, const QString &password) QString ColnodAPI::login(const QString &username, const QString &password)
{ {
auto login = std::make_unique<LoginResp>();
auto login = std::make_unique<LoginTable>();
login->set_username(username); login->set_username(username);
login->set_password(QCryptographicHash::hash(QString(password).toLocal8Bit(), QCryptographicHash::Sha512).toHex().toUpper()); 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); doc.setObject(reqBody);
return doc.toJson(); return doc.toJson();
} }
std::shared_ptr<serversdk::Request> ColnodAPI::composeRequest(const QString &endpoint, const QByteArray &data)
{
QString url = host + endpoint;
return std::make_shared<serversdk::Request>("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;
}

View File

@ -8,6 +8,32 @@
#include "serversdk/request.h" #include "serversdk/request.h"
#include "serversdk/databasetable.h" #include "serversdk/databasetable.h"
struct ColnodData
{
QList<std::shared_ptr<Token>> updatedTokens;
QList<std::shared_ptr<Token>> updatedSubjects;
QList<std::shared_ptr<Token>> deletedTokens;
QList<std::shared_ptr<Token>> 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 class ColnodAPI: public QObject
{ {
Q_OBJECT Q_OBJECT
@ -15,6 +41,12 @@ public:
ColnodAPI(); ColnodAPI();
ColnodAPI(serversdk::RequestManager* reqMan); ColnodAPI(serversdk::RequestManager* reqMan);
void downloadData();
// New approach
std::shared_ptr<serversdk::Request> requestLogin();
QList<Token> getTokensUpdated(const qint64 &time); QList<Token> getTokensUpdated(const qint64 &time);
QList<QString> getTokensDeleted(const qint64 &time); QList<QString> getTokensDeleted(const qint64 &time);
QList<Subject> getSubjectsUpdated(const qint64 &time); QList<Subject> getSubjectsUpdated(const qint64 &time);
@ -23,12 +55,24 @@ public:
bool setTokens(const QList<Token> &tokens); bool setTokens(const QList<Token> &tokens);
bool deleteTokens(const QList<QString> &tokenIds); bool deleteTokens(const QList<QString> &tokenIds);
// Attributes
QString userName() const;
void setUserName(const QString &userName);
QString password() const;
void setPassword(const QString &password);
private: private:
QString login(const QString &username, const QString &password); QString login(const QString &username, const QString &password);
QByteArray getTimestampJson(const qint64 &time); QByteArray getTimestampJson(const qint64 &time);
std::shared_ptr<serversdk::Request> composeRequest(const QString &endpoint, const QByteArray &data);
signals:
void downloadDataFinished(std::shared_ptr<ColnodData> = std::shared_ptr<ColnodData>());
private: private:
serversdk::RequestManager* mReqMan = nullptr; serversdk::RequestManager* mReqMan = nullptr;
QString host = "https://192.168.1.3:8443"; QString host = "https://192.168.1.3:8443";
QString mUserName;
QString mPassword;
}; };