File indexing completed on 2024-04-28 16:44:07
0001 /* 0002 SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #ifndef CONNECTION_H 0008 #define CONNECTION_H 0009 0010 #include <QObject> 0011 #include <QUrl> 0012 0013 #include "apijob.h" 0014 #include "exceptions.h" 0015 #include "query.h" 0016 0017 namespace Bugzilla 0018 { 0019 class APIJob; 0020 0021 /** 0022 * Base Connection. Has CRUD-y methods that need implementing in a specific 0023 * connection variant. 0024 */ 0025 class Connection : public QObject 0026 { 0027 Q_OBJECT 0028 public: 0029 using QObject::QObject; 0030 0031 virtual void setToken(const QString &authToken) = 0; 0032 0033 virtual APIJob *get(const QString &path, const Query &query = Query()) const = 0; 0034 virtual APIJob *post(const QString &path, const QByteArray &data, const Query &query = Query()) const = 0; 0035 virtual APIJob *put(const QString &path, const QByteArray &data, const Query &query = Query()) const = 0; 0036 }; 0037 0038 /** 0039 * HTTP Connection. 0040 */ 0041 class HTTPConnection : public Connection 0042 { 0043 Q_OBJECT 0044 friend class ConnectionTest; 0045 0046 public: 0047 explicit HTTPConnection(const QUrl &root = QUrl(QStringLiteral("http://bugstest.kde.org/rest")), QObject *parent = nullptr); 0048 ~HTTPConnection() override; 0049 0050 void setToken(const QString &authToken) override; 0051 0052 APIJob *get(const QString &path, const Query &query = Query()) const override; 0053 APIJob *post(const QString &path, const QByteArray &data, const Query &query = Query()) const override; 0054 APIJob *put(const QString &path, const QByteArray &data, const Query &query = Query()) const override; 0055 0056 QUrl root() const; 0057 0058 private: 0059 QUrl url(const QString &appendix, Query query) const; 0060 0061 QUrl m_root; 0062 QString m_token; 0063 0064 Q_DISABLE_COPY_MOVE(HTTPConnection) 0065 }; 0066 0067 /** 0068 * @return the "default" global connection instance. This is the instance used 0069 * by all clients unless another one is manually set on the client. 0070 */ 0071 Connection &connection(); 0072 0073 /** 0074 * Changes the "default" global connection. This generally shouldn't be used 0075 * outside tests, where it is used to inject connection doubles. 0076 */ 0077 void setConnection(Connection *newConnection); 0078 0079 } // namespace Bugzilla 0080 0081 #endif // CONNECTION_H