Warning, file /network/ruqola/src/rocketchatrestapi-qt/restapiabstractjob.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002    SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "librocketchatrestapi-qt_export.h"
0010 #include <QNetworkReply>
0011 #include <QNetworkRequest>
0012 #include <QObject>
0013 #include <QPointer>
0014 
0015 class QNetworkAccessManager;
0016 
0017 namespace RocketChatRestApi
0018 {
0019 class RestApiMethod;
0020 class AbstractLogger;
0021 
0022 class LIBROCKETCHATRESTAPI_QT_EXPORT QueryParameters
0023 {
0024 public:
0025     enum class SortOrder {
0026         Ascendant,
0027         Descendant,
0028         NoSorting,
0029     };
0030     QueryParameters();
0031 
0032     [[nodiscard]] int offset() const;
0033     void setOffset(int offset);
0034 
0035     [[nodiscard]] int count() const;
0036     void setCount(int count);
0037 
0038     [[nodiscard]] bool isValid() const;
0039 
0040     [[nodiscard]] QMap<QString, SortOrder> sorting() const;
0041     void setSorting(const QMap<QString, SortOrder> &sorting);
0042 
0043     [[nodiscard]] QString type() const;
0044     void setType(const QString &type);
0045 
0046     [[nodiscard]] QMap<QString, QString> custom() const;
0047     void setCustom(const QMap<QString, QString> &custom);
0048 
0049     static void generateQueryParameter(const QueryParameters &queryParameters, QUrlQuery &urlQuery);
0050 
0051     [[nodiscard]] const QString &searchString() const;
0052     void setSearchString(const QString &newSearchString);
0053 
0054     void setFilter(const QString &filter);
0055     [[nodiscard]] QString filter() const;
0056 
0057 private:
0058     int mOffset = -1;
0059     int mCount = -1;
0060     QMap<QString, SortOrder> mSorting;
0061     QMap<QString, QString> mCustom;
0062     QString mType;
0063     QString mSearchString;
0064     QString mFilter;
0065 };
0066 
0067 class LIBROCKETCHATRESTAPI_QT_EXPORT RestApiAbstractJob : public QObject
0068 {
0069     Q_OBJECT
0070 public:
0071     explicit RestApiAbstractJob(QObject *parent = nullptr);
0072     ~RestApiAbstractJob() override;
0073     [[nodiscard]] QNetworkAccessManager *networkAccessManager() const;
0074     void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager);
0075 
0076     [[nodiscard]] RocketChatRestApi::RestApiMethod *restApiMethod() const;
0077     void setRestApiMethod(RocketChatRestApi::RestApiMethod *restApiMethod);
0078 
0079     [[nodiscard]] QString authToken() const;
0080     void setAuthToken(const QString &authToken);
0081 
0082     [[nodiscard]] QString userId() const;
0083     void setUserId(const QString &userId);
0084 
0085     [[nodiscard]] bool hasAuthenticationValue() const;
0086 
0087     virtual bool start() = 0;
0088     virtual bool requireHttpAuthentication() const = 0;
0089     virtual bool requireTwoFactorAuthentication() const;
0090 
0091     virtual bool hasQueryParameterSupport() const;
0092 
0093     void setEnforcePasswordFallback(bool enforce);
0094     [[nodiscard]] bool enforcePasswordFallback() const;
0095 
0096     RocketChatRestApi::AbstractLogger *restApiLogger() const;
0097     void setRestApiLogger(RocketChatRestApi::AbstractLogger *restApiLogger);
0098 
0099     void addLoggerInfo(const QByteArray &str);
0100     void addLoggerWarning(const QByteArray &str);
0101     void addStartRestApiInfo(const QByteArray &str);
0102 
0103     [[nodiscard]] virtual bool canStart() const;
0104 
0105     virtual QNetworkRequest request() const = 0;
0106 
0107     [[nodiscard]] QueryParameters queryParameters() const;
0108     void setQueryParameters(const QueryParameters &queryParameters);
0109 
0110     void addQueryParameter(QUrlQuery &urlQuery) const;
0111     void addRequestAttribute(QNetworkRequest &request, bool addContentTypeHeader = true) const;
0112 
0113     [[nodiscard]] const QString &authMethod() const;
0114     void setAuthMethod(const QString &newAuthMethod);
0115 
0116     [[nodiscard]] const QString &authCode() const;
0117     void setAuthCode(const QString &newAuthCode);
0118 
0119     [[nodiscard]] QDateTime updatedSince() const;
0120     void setUpdatedSince(const QDateTime &newUpdatedSince);
0121 
0122 Q_SIGNALS:
0123     void failed(const QString &str);
0124 
0125 protected:
0126     Q_DISABLE_COPY(RestApiAbstractJob)
0127 
0128     [[nodiscard]] QString errorStr(const QJsonObject &replyObject);
0129 
0130     [[nodiscard]] QJsonDocument convertToJsonDocument(QNetworkReply *reply);
0131     void emitFailedMessage(const QString &replyErrorString, const QJsonObject &replyObject);
0132     void addAuthRawHeader(QNetworkRequest &request) const;
0133     [[nodiscard]] virtual QString errorMessage(const QString &str, const QJsonObject &detail);
0134     [[nodiscard]] virtual QString jobName() const;
0135     [[nodiscard]] virtual QString generateErrorMessage(const QString &errorStr) const;
0136 
0137     // The main methods used for sending requests to the server
0138     void submitGetRequest();
0139     void submitPostRequest(const QJsonDocument &doc);
0140     void submitDeleteRequest();
0141 
0142     RocketChatRestApi::RestApiMethod *mRestApiMethod = nullptr;
0143     QPointer<QNetworkReply> mReply;
0144 
0145 protected Q_SLOTS:
0146     virtual void onGetRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson)
0147     {
0148         Q_UNUSED(replyJson)
0149         Q_UNUSED(replyErrorString)
0150     }
0151     virtual void onPostRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson)
0152     {
0153         Q_UNUSED(replyJson)
0154         Q_UNUSED(replyErrorString)
0155     }
0156     virtual void onDeleteRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson)
0157     {
0158         Q_UNUSED(replyJson)
0159         Q_UNUSED(replyErrorString)
0160     }
0161 
0162 private:
0163     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void genericResponseHandler(void (RestApiAbstractJob::*func)(const QString &, const QJsonDocument &));
0164 
0165     QDateTime mUpdatedSince;
0166     QueryParameters mQueryParameters;
0167     QString mAuthToken;
0168     QString mUserId;
0169     QString mAuthMethod;
0170     QString mAuthCode;
0171     bool mEnforcePasswordFallBack = true;
0172     QNetworkAccessManager *mNetworkAccessManager = nullptr;
0173     RocketChatRestApi::AbstractLogger *mRestApiLogger = nullptr;
0174 };
0175 }