Commit 7c06c1a0 authored by Jesus Fernandez's avatar Jesus Fernandez

Removed Credetial structs

parent 742d3fb9
......@@ -77,8 +77,8 @@ public:
static QString generateRandomState();
QAbstractOAuth2::Credential consumer;
QAbstractOAuth2::Credential token;
QPair<QString, QString> clientCredentials;
QString token;
QString scope;
QString userAgent = "qoauth/0.1";
const QString bearerFormat = QStringLiteral("Bearer %1");
......
......@@ -72,11 +72,11 @@ class OAUTH_EXPORT QOAuth1Private : public QAbstractOAuthPrivate
public:
QOAuth1Private(QNetworkAccessManager *networkAccessManager);
QPair<QString, QString> clientCredentials;
QPair<QString, QString> tokenCredentials;
QString verifier;
QUrl temporaryCredentialsUrl;
QUrl tokenCredentialsUrl;
QOAuth1::Credential clientCredentials;
QOAuth1::Credential token;
QOAuth1::SignatureMethod signatureMethod = QOAuth1::SignatureMethod::Hmac_Sha1;
const QString oauthVersion = QStringLiteral("1.0");
......@@ -96,7 +96,7 @@ public:
QNetworkReply *requestToken(QNetworkAccessManager::Operation operation,
const QUrl &url,
const QOAuth1::Credential &token,
const QPair<QString, QString> &token,
const QVariantMap &additionalParameters);
QString signatureMethodString() const;
......
......@@ -95,13 +95,6 @@ QUrlQuery QAbstractOAuthPrivate::createQuery(const QVariantMap &parameters)
return query;
}
QAbstractOAuth::Credential::Credential()
{}
QAbstractOAuth::Credential::Credential(const QString &credentialKey)
: key(credentialKey)
{}
QAbstractOAuth::QAbstractOAuth(QAbstractOAuthPrivate &dd, QObject *parent)
: QObject(dd, parent)
{
......@@ -198,4 +191,3 @@ QString QAbstractOAuth::callback() const
QT_END_NAMESPACE
#endif // QT_NO_HTTP
......@@ -73,13 +73,6 @@ class OAUTH_EXPORT QAbstractOAuth : public QObject
Q_PROPERTY(QVariantMap extraTokens READ extraTokens NOTIFY extraTokensChanged)
public:
struct OAUTH_EXPORT Credential {
QString key;
Credential();
Credential(const QString &credentialKey);
};
enum class Status {
NotAuthenticated,
TemporaryTokenReceived,
......@@ -106,6 +99,12 @@ public:
virtual ~QAbstractOAuth();
virtual QString clientIdentifier() const = 0;
virtual void setClientIdentifier(const QString &clientIdentifier) = 0;
virtual QString token() const = 0;
virtual void setToken(const QString &token) = 0;
QNetworkAccessManager *networkAccessManager() const;
void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager);
......@@ -132,12 +131,15 @@ public Q_SLOTS:
virtual void grant() = 0;
Q_SIGNALS:
void granted();
void requestFailed(const Error error);
void clientIdentifierChanged(const QString &clientIdentifier);
void tokenChanged(const QString &token);
void statusChanged(Status status);
void authorizationUrlChanged(const QUrl &url);
void extraTokensChanged(const QVariantMap &tokens);
void requestFailed(const Error error);
void authorizationRequested(const QUrl &url);
void granted();
protected:
explicit QAbstractOAuth(QAbstractOAuthPrivate &, QObject *parent = nullptr);
......
......@@ -74,9 +74,7 @@ const QString Key::tokenType = QStringLiteral("token_type");
QAbstractOAuth2Private::QAbstractOAuth2Private(QNetworkAccessManager *manager)
: QAbstractOAuthPrivate(manager)
{
qRegisterMetaType<QAbstractOAuth2::Credential>("QAbstractOAuth2::Credential");
}
{}
QAbstractOAuth2Private::~QAbstractOAuth2Private()
{}
......@@ -122,7 +120,7 @@ QNetworkReply *QAbstractOAuth2::get(const QNetworkRequest &req, const QVariantMa
QNetworkRequest request(req);
request.setUrl(url);
request.setHeader(QNetworkRequest::UserAgentHeader, d->userAgent);
const QString bearer = d->bearerFormat.arg(d->token.key);
const QString bearer = d->bearerFormat.arg(d->token);
request.setRawHeader("Authorization", bearer.toUtf8());
return d->networkAccessManager()->get(request);
......@@ -143,7 +141,7 @@ QNetworkReply *QAbstractOAuth2::post(const QNetworkRequest &req, const QVariantM
QNetworkRequest request(req);
request.setUrl(url);
request.setHeader(QNetworkRequest::UserAgentHeader, d->userAgent);
const QString bearer = d->bearerFormat.arg(d->token.key);
const QString bearer = d->bearerFormat.arg(d->token);
request.setRawHeader("Authorization", bearer.toUtf8());
return d->networkAccessManager()->post(request, QByteArray());
......@@ -179,31 +177,46 @@ void QAbstractOAuth2::setUserAgent(const QString &userAgent)
}
}
QAbstractOAuth2::Credential QAbstractOAuth2::consumerToken() const
QString QAbstractOAuth2::clientIdentifier() const
{
Q_D(const QAbstractOAuth2);
return d->consumer;
return d->clientCredentials.first;
}
void QAbstractOAuth2::setClientIdentifier(const QString &clientIdentifier)
{
Q_D(QAbstractOAuth2);
if (d->clientCredentials.first != clientIdentifier) {
d->clientCredentials.first = clientIdentifier;
Q_EMIT clientIdentifierChanged(clientIdentifier);
}
}
QAbstractOAuth2::Credential QAbstractOAuth2::token() const
QString QAbstractOAuth2::clientIdentifierSharedKey() const
{
Q_D(const QAbstractOAuth2);
return d->token;
return d->clientCredentials.second;
}
void QAbstractOAuth2::setConsumerToken(const QAbstractOAuth2::Credential consumerToken)
void QAbstractOAuth2::setClientIdentifierSharedKey(const QString &clientIdentifierSharedKey)
{
Q_D(QAbstractOAuth2);
if (d->consumer.key != consumerToken.key) {
d->consumer.key = consumerToken.key;
Q_EMIT consumerTokenChanged(consumerToken);
if (d->clientCredentials.second != clientIdentifierSharedKey) {
d->clientCredentials.second = clientIdentifierSharedKey;
Q_EMIT clientIdentifierSharedKeyChanged(clientIdentifierSharedKey);
}
}
void QAbstractOAuth2::setToken(const QAbstractOAuth2::Credential &token)
QString QAbstractOAuth2::token() const
{
Q_D(const QAbstractOAuth2);
return d->token;
}
void QAbstractOAuth2::setToken(const QString &token)
{
Q_D(QAbstractOAuth2);
if (d->token.key != token.key) {
if (d->token != token) {
d->token = token;
Q_EMIT tokenChanged(token);
}
......
......@@ -50,8 +50,13 @@ class QAbstractOAuth2Private;
class OAUTH_EXPORT QAbstractOAuth2 : public QAbstractOAuth
{
Q_OBJECT
Q_PROPERTY(QString clientIdentifier
READ clientIdentifier
WRITE setClientIdentifier
NOTIFY clientIdentifierChanged)
public:
explicit QAbstractOAuth2(QObject *parent = nullptr);
explicit QAbstractOAuth2(QNetworkAccessManager *manager, QObject *parent = nullptr);
virtual ~QAbstractOAuth2();
......@@ -69,20 +74,24 @@ public:
virtual QString responseType() const = 0;
virtual QString grantType() const = 0;
Credential consumerToken() const;
Credential token() const;
virtual QString clientIdentifier() const override;
void setClientIdentifier(const QString &clientIdentifier);
QString clientIdentifierSharedKey() const;
void setClientIdentifierSharedKey(const QString &clientIdentifierSharedKey);
QString token() const;
void setToken(const QString &token);
Q_SIGNALS:
void scopeChanged(const QString &scope);
void userAgentChanged(const QString &userAgent);
void apiKeyChanged(const QString &apiKey);
void consumerTokenChanged(const Credential &token);
void tokenChanged(const Credential &token);
void clientIdentifierChanged(const QString &clientIdentifier);
void clientIdentifierSharedKeyChanged(const QString &clientIdentifierSharedKey);
void consumerTokenKeyChanged(const QString &key);
void tokenChanged(const QString &token);
public Q_SLOTS:
void setConsumerToken(const QAbstractOAuth2::Credential consumerToken);
void setToken(const QAbstractOAuth2::Credential &token);
protected:
explicit QAbstractOAuth2(QAbstractOAuth2Private &, QObject *parent = nullptr);
......
This diff is collapsed.
......@@ -52,16 +52,6 @@ class OAUTH_EXPORT QOAuth1: public QAbstractOAuth
Q_OBJECT
public:
struct OAUTH_EXPORT Credential : QAbstractOAuth::Credential
{
QString secret;
Credential();
Credential(const QString &credentialKey, const QString &credentialSecret);
bool operator ==(const Credential &other);
bool operator !=(const Credential &other);
};
enum class SignatureMethod {
Hmac_Sha1,
Rsa_Sha1,
......@@ -73,15 +63,30 @@ public:
explicit QOAuth1(QNetworkAccessManager *manager,
QObject *parent = nullptr);
QOAuth1(const Credential &clientCredentials,
QOAuth1(const QString &clientIdentifier,
const QString &clientSharedSecret,
QNetworkAccessManager *manager,
QObject *parent = nullptr);
virtual ~QOAuth1();
// Client credentials
QOAuth1::Credential clientCredentials() const;
void setClientCredentials(const QOAuth1::Credential &clientCredentials);
QString clientIdentifier() const override;
void setClientIdentifier(const QString &clientIdentifier) override;
QString clientSharedSecret() const;
void setClientSharedSecret(const QString &clientSharedSecret);
QPair<QString, QString> clientCredentials() const;
void setClientCredentials(const QPair<QString, QString> &clientCredentials);
void setClientCredentials(const QString &clientIdentifier, const QString &clientSharedSecret);
// Token credentials: https://tools.ietf.org/html/rfc5849#section-2.3
QString token() const override;
void setToken(const QString &token) override;
QString tokenSecret() const;
void setTokenSecret(const QString &tokenSecret);
QPair<QString, QString> tokenCredentials() const;
void setTokenCredentials(const QPair<QString, QString> &tokenCredentials);
void setTokenCredentials(const QString &token, const QString &tokenSecret);
// Temporary Credentials: https://tools.ietf.org/html/rfc5849#section-2.1
QUrl temporaryCredentialsUrl() const;
......@@ -95,10 +100,6 @@ public:
SignatureMethod signatureMethod() const;
void setSignatureMethod(SignatureMethod value);
// Token credentials: https://tools.ietf.org/html/rfc5849#section-2.3
QOAuth1::Credential token() const;
void setToken(const QOAuth1::Credential &token);
public:
virtual QNetworkReply *get(const QNetworkRequest &req,
const QVariantMap &parameters = QVariantMap()) override;
......@@ -112,8 +113,8 @@ public Q_SLOTS:
Q_SIGNALS:
void signatureMethodChanged(SignatureMethod method);
void clientCredentialsChanged(const QOAuth1::Credential &credential);
void tokenChanged(const QOAuth1::Credential &token);
void clientSharedSecretChanged(const QString &credential);
void tokenSecretChanged(const QString &token);
void temporaryCredentialsUrlChanged(const QUrl &url);
void tokenCredentialsUrlChanged(const QUrl &url);
......@@ -124,7 +125,7 @@ protected:
QNetworkReply *requestTokenCredentials(QNetworkAccessManager::Operation operation,
const QUrl &url,
const Credential &temporaryCredentials,
const QPair<QString, QString> &temporaryToken,
const QVariantMap &parameters = QVariantMap());
QByteArray generateSignature(const QVariantMap &parameters,
......@@ -157,8 +158,6 @@ private:
Q_DECLARE_PRIVATE(QOAuth1)
};
Q_DECLARE_METATYPE(QOAuth1::Credential)
QT_END_NAMESPACE
#endif // QT_NO_HTTP
......
......@@ -149,8 +149,8 @@ void QOAuth2AuthorizationCodeFlowPrivate::authenticate(QNetworkReply *reply,
if (reply == accessTokenReply){
const auto url = reply->url();
if (url == accessTokenUrl) {
authenticator->setUser(consumer.key);
authenticator->setPassword("");
authenticator->setUser(clientCredentials.first);
authenticator->setPassword(QString());
}
}
}
......@@ -159,17 +159,16 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(QNetworkAccessManager
quint16 port,
QObject *parent)
: QAbstractOAuth2(*new QOAuth2AuthorizationCodeFlowPrivate(manager, port), parent)
{
}
{}
QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consumerKey,
QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
QNetworkAccessManager *manager,
quint16 port,
QObject *parent)
: QAbstractOAuth2(*new QOAuth2AuthorizationCodeFlowPrivate(manager, port), parent)
{
Q_D(QOAuth2AuthorizationCodeFlow);
d->consumer = consumerKey;
d->clientCredentials.first = clientIdentifier;
}
QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QUrl &authenticateUrl,
......@@ -184,7 +183,7 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QUrl &authentic
d->accessTokenUrl = accessTokenUrl;
}
QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consumerKey,
QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
const QUrl &authenticateUrl,
const QUrl &accessTokenUrl,
QNetworkAccessManager *manager,
......@@ -195,7 +194,7 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consum
Q_D(QOAuth2AuthorizationCodeFlow);
d->authorizationUrl = authenticateUrl;
d->accessTokenUrl = accessTokenUrl;
d->consumer = consumerKey;
d->clientCredentials.first = clientIdentifier;
}
QOAuth2AuthorizationCodeFlow::~QOAuth2AuthorizationCodeFlow()
......@@ -222,7 +221,7 @@ void QOAuth2AuthorizationCodeFlow::setAccessTokenUrl(const QUrl &accessTokenUrl)
Q_D(QOAuth2AuthorizationCodeFlow);
if (d->accessTokenUrl != accessTokenUrl) {
d->accessTokenUrl = accessTokenUrl;
Q_EMIT accessTokenUrlChanged();
Q_EMIT accessTokenUrlChanged(accessTokenUrl);
}
}
......@@ -250,7 +249,7 @@ QUrl QOAuth2AuthorizationCodeFlow::buildAuthenticateUrl(const QVariantMap &param
QVariantMap p(parameters);
QUrl url(d->authorizationUrl);
p.insert(Key::responseType, responseType());
p.insert(Key::clientId, d->consumer.key);
p.insert(Key::clientId, d->clientCredentials.first);
p.insert(Key::redirectUri, callback());
p.insert(Key::scope, d->scope);
p.insert(Key::state, state);
......@@ -277,7 +276,7 @@ void QOAuth2AuthorizationCodeFlow::requestAccessToken(const QString &code)
parameters.insert(Key::grantType, grantType());
parameters.insert(Key::code, QUrl::toPercentEncoding(code));
parameters.insert(Key::redirectUri, QUrl::toPercentEncoding(callback()));
parameters.insert(Key::clientId, QUrl::toPercentEncoding(d->consumer.key));
parameters.insert(Key::clientId, QUrl::toPercentEncoding(d->clientCredentials.first));
if (d->modifyParametersFunction)
d->modifyParametersFunction(Stage::RequestingAccessToken, &parameters);
query = QAbstractOAuthPrivate::createQuery(parameters);
......
......@@ -60,7 +60,7 @@ public:
quint16 port = 0,
QObject *parent = nullptr);
QOAuth2AuthorizationCodeFlow(const QString &consumerToken,
QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
QNetworkAccessManager *manager,
quint16 port = 0,
QObject *parent = nullptr);
......@@ -71,7 +71,7 @@ public:
quint16 port = 0,
QObject *parent = nullptr);
QOAuth2AuthorizationCodeFlow(const QString &consumerToken,
QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier,
const QUrl &authorizationUrl,
const QUrl &accessTokenUrl,
QNetworkAccessManager *manager,
......@@ -94,7 +94,7 @@ protected:
void requestAccessToken(const QString &code);
Q_SIGNALS:
void accessTokenUrlChanged();
void accessTokenUrlChanged(const QUrl &accessTokenUrl);
private:
Q_DISABLE_COPY(QOAuth2AuthorizationCodeFlow)
......
......@@ -65,13 +65,13 @@ QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(QNetworkAccessManager *manage
{
}
QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(const QString &consumerToken,
QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(const QString &clientIdentifier,
QNetworkAccessManager *manager,
QObject *parent)
: QAbstractOAuth2(*new QOAuth2ImplicitGrantFlowPrivate(manager), parent)
{
Q_D(QOAuth2ImplicitGrantFlow);
d->consumer = consumerToken;
d->clientCredentials.first = clientIdentifier;
}
QOAuth2ImplicitGrantFlow::~QOAuth2ImplicitGrantFlow()
......@@ -102,7 +102,7 @@ QUrl QOAuth2ImplicitGrantFlow::authorizationRequestUrl(const QString &state) con
QVariantMap parameters;
QUrl url(d->authorizationUrl);
parameters.insert(Key::responseType, responseType());
parameters.insert(Key::clientId, d->consumer.key);
parameters.insert(Key::clientId, d->clientCredentials.first);
parameters.insert(Key::redirectUri, callback());
parameters.insert(Key::scope, d->scope);
parameters.insert(Key::state, state);
......
......@@ -54,7 +54,7 @@ class OAUTH_EXPORT QOAuth2ImplicitGrantFlow : public QAbstractOAuth2
public:
explicit QOAuth2ImplicitGrantFlow(QNetworkAccessManager *manager,
QObject *parent = nullptr);
QOAuth2ImplicitGrantFlow(const QString &consumerToken,
QOAuth2ImplicitGrantFlow(const QString &clientIdentifier,
QNetworkAccessManager *manager,
QObject *parent = nullptr);
......@@ -63,9 +63,6 @@ public:
virtual QString responseType() const override;
virtual QString grantType() const override;
// virtual QNetworkReply *getAuthorizationGrant(const QVariantMap &parameters = QVariantMap());
// virtual QNetworkReply *postAuthorizationGrant(const QVariantMap &parameters = QVariantMap());
virtual void grant() override;
protected:
......
......@@ -93,7 +93,7 @@ int main(int argc, char **argv)
QNetworkAccessManager manager;
QOAuth2AuthorizationCodeFlow o2(&manager, QUrl(clientInfo[redirectUriString]).port());
o2.setConsumerToken(clientInfo[clientIdString]);
o2.setClientIdentifier(clientInfo[clientIdString]);
o2.setAuthorizationUrl(clientInfo[authUriString]);
o2.setAccessTokenUrl(clientInfo[tokenUriString]);
o2.setScope("https://www.googleapis.com/auth/calendar.readonly");
......
......@@ -89,11 +89,6 @@ void RedditModel::grant()
connect(&redditWrapper, &RedditWrapper::authenticated, this, &RedditModel::update);
}
QString RedditModel::clientId() const
{
return redditWrapper.clientId();
}
void RedditModel::update()
{
auto reply = redditWrapper.requestHotThreads();
......@@ -132,6 +127,4 @@ void RedditModel::update()
}
void RedditModel::updateReceived()
{
}
{}
......@@ -60,9 +60,6 @@ public:
void grant();
QString clientId() const;
void setClientId(const QString &clientId);
signals:
void error(const QString &errorString);
......
......@@ -53,24 +53,14 @@ RedditWrapper::RedditWrapper(QObject *parent)
init();
}
RedditWrapper::RedditWrapper(const QAbstractOAuth2::Credential &clientId, QObject *parent)
RedditWrapper::RedditWrapper(const QString &clientIdentifier, QObject *parent)
: QObject(parent)
, oauth2(&manager)
{
oauth2.setConsumerToken(clientId);
oauth2.setClientIdentifier(clientIdentifier);
init();
}
QString RedditWrapper::clientId() const
{
return oauth2.consumerToken().key;
}
void RedditWrapper::setClientId(const QString &clientId)
{
oauth2.setConsumerToken(clientId);
}
QNetworkReply *RedditWrapper::requestHotThreads()
{
qDebug() << "Getting hot threads...";
......
......@@ -51,10 +51,7 @@ class RedditWrapper : public QObject
public:
RedditWrapper(QObject *parent = nullptr);
RedditWrapper(const QAbstractOAuth2::Credential &clientId, QObject *parent = nullptr);
QString clientId() const;
void setClientId(const QString &clientId);
RedditWrapper(const QString &clientIdentifier, QObject *parent = nullptr);
QNetworkReply *requestHotThreads();
......
......@@ -84,9 +84,9 @@ int main(int argc, char **argv)
} twitterDialog;
const auto authenticate = [&]() {
const auto clientId = twitterDialog.clientIdLineEdit->text();
const auto clientSecret = twitterDialog.clientSecretLineEdit->text();
twitterDialog.model.authenticate(QOAuth1::Credential(clientId, clientSecret));
const auto clientIdentifier = twitterDialog.clientIdLineEdit->text();
const auto clientSharedSecret = twitterDialog.clientSecretLineEdit->text();
twitterDialog.model.authenticate(qMakePair(clientIdentifier, clientSharedSecret));
};
const auto buttonSlot = [&]() {
if (twitterDialog.model.status() != Twitter::Status::Granted)
......
......@@ -49,20 +49,22 @@ Twitter::Twitter(QObject *parent)
init();
}
Twitter::Twitter(const Credential &consumerToken, QObject *parent)
Twitter::Twitter(const QPair<QString, QString> &clientCredentials, QObject *parent)
: QOAuth1(&manager, parent)
{
init();
setClientCredentials(consumerToken);
setClientCredentials(clientCredentials);
grant();
}
Twitter::Twitter(const QString &screenName, const Credential &consumerToken, QObject *parent)
Twitter::Twitter(const QString &screenName,
const QPair<QString, QString> &clientCredentials,
QObject *parent)
: QOAuth1(&manager, parent)
{
Twitter::screenName = screenName;
init();
setClientCredentials(consumerToken);
setClientCredentials(clientCredentials);
grant();
}
......@@ -78,9 +80,9 @@ void Twitter::init()
QUrlQuery query(url);
query.addQueryItem("force_login", "true"); // Forces the user to enter their credentials to
// ensure the correct users account is authorized.
if (!screenName.isEmpty())
query.addQueryItem("screen_name", screenName);
// ensure the correct users account is authorized.
url.setQuery(query);
QDesktopServices::openUrl(url);
});
......
......@@ -49,8 +49,10 @@ class Twitter : public QOAuth1
public:
Twitter(QObject *parent = nullptr);
Twitter(const QOAuth1::Credential &client, QObject *parent = nullptr);
Twitter(const QString &screenName, const QOAuth1::Credential &clientCredentials, QObject *parent = nullptr);
Twitter(const QPair<QString, QString> &clientCredentials, QObject *parent = nullptr);
Twitter(const QString &screenName,
const QPair<QString, QString> &clientCredentials,
QObject *parent = nullptr);
signals:
void authenticated();
......
......@@ -100,9 +100,9 @@ QVariant TwitterTimelineModel::headerData(int section, Qt::Orientation orientati
return section;
}
void TwitterTimelineModel::authenticate(const QOAuth1::Credential &consumerToken)
void TwitterTimelineModel::authenticate(const QPair<QString, QString> &clientCredentials)
{
twitter.setClientCredentials(consumerToken);
twitter.setClientCredentials(clientCredentials);
twitter.grant();
}
......
......@@ -54,7 +54,7 @@ public:
virtual int columnCount(const QModelIndex &parent) const override;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
void authenticate(const QOAuth1::Credential &consumerToken);
void authenticate(const QPair<QString, QString> &clientCredentials);
QAbstractOAuth::Status status() const;
public slots:
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment