colnod-connector/src/colnod/requestmanager.h
2019-10-29 15:59:21 +01:00

96 lines
2.7 KiB
C++

#pragma once
#include <QObject>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QJsonDocument>
#include <QJsonObject>
#include <qcoreapplication.h>
#include <qnetworkreply.h>
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include <QFile>
#include <QString>
#include <QMultiMap>
#include <QPointer>
#include <QDir>
#include <QSslError>
#include <QPair>
#include "token.h"
#include "response.h"
#include "logger.h"
class RequestManager : public QObject
{
Q_OBJECT
public:
RequestManager();
Response* getSubjects();
Response* getTokens();
Response* getTokenSubject();
Response* getSubjectsUpdated(uint64_t time);
Response* getSubjectsDeleted(uint64_t time);
Response* getTokensUpdated(uint64_t time);
Response* getTokensDeleted(uint64_t time);
Response* getAccessGroups();
Response* getAccessGroupsUpdated(uint64_t time);
Response* getAccessGroupsDeleted(uint64_t time);
Response* getAccessGroupMembership();
Response* getAccessGroupMembershipUpdated(uint64_t time);
Response* getAccessGroupMembershipDeleted(uint64_t time);
Response* setTokens(const QHash<QString, QPointer<Token>> &tokens);
Response* deleteTokens(const QList<QString> &ids);
Response* login(); //I want it private, but unittest???
const QJsonDocument &getConfig() const {return config;}
const QString &getResponse() const {return jsonResponse;}
private:
QNetworkReply* postRequest(const QString& endpoint, const QByteArray& json = QByteArray());
Response* postRequestReturnLogic(const QString& endpoint, const QByteArray& data = QByteArray());
QString getFromJson(const QString& json, const QString &member);
QString encryptedPassword(const QString& password);
QString getLoginHeader(const QString& username, const QString& hash);
QByteArray makeTimestampJson(uint64_t time);
QByteArray makeTokensJson(const QHash<QString, QPointer<Token>> &tokens);
QByteArray makeIdsJson(const QList<QString> &ids);
Response* getLoginResponse();
private slots:
void onSSLError(QNetworkReply *reply, const QList<QSslError> &errors);
void prepareAuthHeader();
signals:
void successLogin();
void responseReady();
private:
QNetworkAccessManager* manager = nullptr;
Response* loginResponse = nullptr;
QJsonDocument config;
QString authHeader;
QString host = "https://192.168.1.3:8443";
//QString host = "https://localhost:8080";
QString password = "spaceti1";
QString user = "spaceti";
QString token;
QString jsonResponse;
bool loginStatus;
};