1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QOAUTH1_H
5#define QOAUTH1_H
6
7#include <QtNetworkAuth/qoauthglobal.h>
8
9#ifndef QT_NO_HTTP
10
11#include <QtNetworkAuth/qabstractoauth.h>
12
13#include <QtNetwork/qnetworkaccessmanager.h>
14
15QT_BEGIN_NAMESPACE
16
17// ### Qt 7 consider removing the support for OAuth1 (QTBUG-124329)
18class QOAuth1Private;
19class Q_OAUTH_EXPORT QOAuth1: public QAbstractOAuth
20{
21 Q_OBJECT
22
23public:
24 enum class SignatureMethod {
25 Hmac_Sha1,
26 Rsa_Sha1,
27 PlainText
28 };
29
30 Q_ENUM(SignatureMethod)
31
32 explicit QOAuth1(QObject *parent = nullptr);
33 explicit QOAuth1(QNetworkAccessManager *manager,
34 QObject *parent = nullptr);
35
36 QOAuth1(const QString &clientIdentifier,
37 const QString &clientSharedSecret,
38 QNetworkAccessManager *manager,
39 QObject *parent = nullptr);
40
41 QString clientSharedSecret() const;
42 void setClientSharedSecret(const QString &clientSharedSecret);
43 std::pair<QString, QString> clientCredentials() const;
44 void setClientCredentials(const std::pair<QString, QString> &clientCredentials);
45 void setClientCredentials(const QString &clientIdentifier, const QString &clientSharedSecret);
46
47 // Token credentials: https://tools.ietf.org/html/rfc5849#section-2.3
48 QString tokenSecret() const;
49 void setTokenSecret(const QString &tokenSecret);
50 std::pair<QString, QString> tokenCredentials() const;
51 void setTokenCredentials(const std::pair<QString, QString> &tokenCredentials);
52 void setTokenCredentials(const QString &token, const QString &tokenSecret);
53
54 // Temporary Credentials: https://tools.ietf.org/html/rfc5849#section-2.1
55 QUrl temporaryCredentialsUrl() const;
56 void setTemporaryCredentialsUrl(const QUrl &url);
57
58 // Token Credentials: https://tools.ietf.org/html/rfc5849#section-2.3
59 QUrl tokenCredentialsUrl() const;
60 void setTokenCredentialsUrl(const QUrl &url);
61
62 // Signature method: https://tools.ietf.org/html/rfc5849#section-3.4
63 SignatureMethod signatureMethod() const;
64 void setSignatureMethod(SignatureMethod value);
65
66 void prepareRequest(QNetworkRequest *request, const QByteArray &verb,
67 const QByteArray &body = QByteArray()) override;
68
69 QNetworkReply *head(const QUrl &url, const QVariantMap &parameters = QVariantMap()) override;
70 QNetworkReply *get(const QUrl &url, const QVariantMap &parameters = QVariantMap()) override;
71
72 QNetworkReply *post(const QUrl &url, const QVariantMap &parameters = QVariantMap()) override;
73 QNetworkReply *put(const QUrl &url, const QVariantMap &parameters = QVariantMap()) override;
74 QNetworkReply *deleteResource(const QUrl &url,
75 const QVariantMap &parameters = QVariantMap()) override;
76
77public Q_SLOTS:
78 void grant() override;
79 void continueGrantWithVerifier(const QString &verifier);
80
81Q_SIGNALS:
82 void signatureMethodChanged(QOAuth1::SignatureMethod method);
83 void clientSharedSecretChanged(const QString &credential);
84 void tokenSecretChanged(const QString &token);
85 void temporaryCredentialsUrlChanged(const QUrl &url);
86 void tokenCredentialsUrlChanged(const QUrl &url);
87
88protected:
89 QNetworkReply *requestTemporaryCredentials(QNetworkAccessManager::Operation operation,
90 const QUrl &url,
91 const QVariantMap &parameters = QVariantMap());
92
93 QNetworkReply *requestTokenCredentials(QNetworkAccessManager::Operation operation,
94 const QUrl &url,
95 const std::pair<QString, QString> &temporaryToken,
96 const QVariantMap &parameters = QVariantMap());
97
98 void setup(QNetworkRequest *request,
99 const QVariantMap &signingParameters,
100 QNetworkAccessManager::Operation operation);
101 void setup(QNetworkRequest *request,
102 const QVariantMap &signingParameters,
103 const QByteArray &operationVerb);
104
105 static QByteArray nonce();
106 static QByteArray generateAuthorizationHeader(const QVariantMap &oauthParams);
107
108private:
109 Q_DISABLE_COPY(QOAuth1)
110 Q_DECLARE_PRIVATE(QOAuth1)
111};
112
113QT_END_NAMESPACE
114
115#endif // QT_NO_HTTP
116
117#endif // QOAUTH1_H
118

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qtnetworkauth/src/oauth/qoauth1.h