1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QOAUTH2AUTHORIZATIONCODEFLOW_H
5#define QOAUTH2AUTHORIZATIONCODEFLOW_H
6
7#include <QtNetworkAuth/qoauthglobal.h>
8
9#ifndef QT_NO_HTTP
10
11#include <QtNetworkAuth/qabstractoauth2.h>
12
13QT_BEGIN_NAMESPACE
14
15class QUrl;
16class QString;
17class QNetworkAccessManager;
18
19class QOAuth2AuthorizationCodeFlowPrivate;
20class Q_OAUTH_EXPORT QOAuth2AuthorizationCodeFlow : public QAbstractOAuth2
21{
22 Q_OBJECT
23#if QT_DEPRECATED_SINCE(6, 13)
24 Q_PROPERTY(QUrl accessTokenUrl
25 READ accessTokenUrl
26 WRITE setAccessTokenUrl
27 NOTIFY accessTokenUrlChanged)
28#endif
29 Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
30
31public:
32 explicit QOAuth2AuthorizationCodeFlow(QObject *parent = nullptr);
33 explicit QOAuth2AuthorizationCodeFlow(QNetworkAccessManager *manager,
34 QObject *parent = nullptr);
35
36 QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
37 QNetworkAccessManager *manager,
38 QObject *parent = nullptr);
39
40 QOAuth2AuthorizationCodeFlow(const QUrl &authorizationUrl,
41 const QUrl &accessTokenUrl,
42 QNetworkAccessManager *manager,
43 QObject *parent = nullptr);
44
45 QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
46 const QUrl &authorizationUrl,
47 const QUrl &accessTokenUrl,
48 QNetworkAccessManager *manager,
49 QObject *parent = nullptr);
50
51 ~QOAuth2AuthorizationCodeFlow();
52
53#if QT_DEPRECATED_SINCE(6, 13)
54 QT_DEPRECATED_VERSION_X_6_13("Use QAbstractOAuth2::tokenUrl() instead.")
55 QUrl accessTokenUrl() const;
56 QT_DEPRECATED_VERSION_X_6_13("Use QAbstractOAuth2::setTokenUrl() instead.")
57 void setAccessTokenUrl(const QUrl &accessTokenUrl);
58#endif
59
60 enum class PkceMethod : quint8 {
61 S256,
62 Plain,
63 None = 255,
64 };
65 Q_ENUM(PkceMethod)
66
67 void setPkceMethod(PkceMethod method, qsizetype length = 43) ;
68 PkceMethod pkceMethod() const noexcept;
69
70public Q_SLOTS:
71 void grant() override;
72#if QT_DEPRECATED_SINCE(6, 13)
73 QT_DEPRECATED_VERSION_X_6_13("Use QAbstractOAuth2::refreshTokens() instead")
74 void refreshAccessToken();
75#endif
76
77protected Q_SLOTS:
78 void refreshTokensImplementation() QT7_ONLY(override);
79
80protected:
81 QUrl buildAuthenticateUrl(const QMultiMap<QString, QVariant> &parameters = {});
82 void requestAccessToken(const QString &code);
83 void resourceOwnerAuthorization(const QUrl &url,
84 const QMultiMap<QString, QVariant> &parameters = {}) override;
85
86Q_SIGNALS:
87#if QT_DEPRECATED_SINCE(6, 13)
88 QT_MOC_COMPAT
89 QT_DEPRECATED_VERSION_X_6_13("Use QAbstractOAuth2::tokenUrlChanged() instead.")
90 void accessTokenUrlChanged(const QUrl &accessTokenUrl);
91#endif
92
93private:
94 Q_DISABLE_COPY(QOAuth2AuthorizationCodeFlow)
95 Q_DECLARE_PRIVATE(QOAuth2AuthorizationCodeFlow)
96};
97
98QT_END_NAMESPACE
99
100#endif // QT_NO_HTTP
101
102#endif // QOAUTH2AUTHORIZATIONCODEFLOW_H
103

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