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 }