File indexing completed on 2024-04-28 04:55:38
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2017 Andrea Scarpino <scarpino@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "twitterapioauth.h" 0010 0011 #include <QEventLoop> 0012 #include <QNetworkReply> 0013 #include <QOAuth1Signature> 0014 0015 #include <KIO/AccessManager> 0016 0017 #include "twitterapiaccount.h" 0018 #include "twitterapidebug.h" 0019 #include "twitterapioauthreplyhandler.h" 0020 0021 TwitterApiOAuth::TwitterApiOAuth(TwitterApiAccount *account) 0022 : QOAuth1(account), m_replyHandler(nullptr), m_networkAccessManager(nullptr) 0023 { 0024 qCDebug(CHOQOK); 0025 0026 m_replyHandler = new TwitterApiOAuthReplyHandler(this); 0027 setReplyHandler(m_replyHandler); 0028 0029 m_networkAccessManager = new KIO::AccessManager(this); 0030 setNetworkAccessManager(m_networkAccessManager); 0031 0032 setClientIdentifier(QLatin1String(account->oauthConsumerKey())); 0033 setClientSharedSecret(QLatin1String(account->oauthConsumerSecret())); 0034 0035 setSignatureMethod(SignatureMethod::Hmac_Sha1); 0036 0037 setTemporaryCredentialsUrl(QUrl(account->host() + QLatin1String("/oauth/request_token"))); 0038 setAuthorizationUrl(QUrl(account->host() + QLatin1String("/oauth/authorize"))); 0039 setTokenCredentialsUrl(QUrl(account->host() + QLatin1String("/oauth/access_token"))); 0040 } 0041 0042 TwitterApiOAuth::~TwitterApiOAuth() 0043 { 0044 m_replyHandler->deleteLater(); 0045 m_networkAccessManager->deleteLater(); 0046 } 0047 0048 QByteArray TwitterApiOAuth::authorizationHeader(const QUrl &requestUrl, QNetworkAccessManager::Operation operation, 0049 const QVariantMap &signingParameters) 0050 { 0051 QVariantMap oauthParams; 0052 0053 const auto currentDateTime = QDateTime::currentDateTimeUtc(); 0054 0055 oauthParams.insert(QStringLiteral("oauth_consumer_key"), clientIdentifier()); 0056 oauthParams.insert(QStringLiteral("oauth_version"), QStringLiteral("1.0")); 0057 oauthParams.insert(QStringLiteral("oauth_token"), token()); 0058 oauthParams.insert(QStringLiteral("oauth_signature_method"), QStringLiteral("HMAC-SHA1")); 0059 oauthParams.insert(QStringLiteral("oauth_nonce"), QOAuth1::nonce()); 0060 oauthParams.insert(QStringLiteral("oauth_timestamp"), QString::number(currentDateTime.toTime_t())); 0061 0062 // Add signature parameter 0063 { 0064 const auto parameters = QVariantMap(oauthParams).unite(signingParameters); 0065 0066 const QOAuth1Signature signature(requestUrl, clientSharedSecret(), tokenSecret(), 0067 static_cast<QOAuth1Signature::HttpRequestMethod>(operation), 0068 parameters); 0069 0070 oauthParams.insert(QStringLiteral("oauth_signature"), signature.hmacSha1().toBase64()); 0071 } 0072 0073 return generateAuthorizationHeader(oauthParams); 0074 } 0075 0076 #include "moc_twitterapioauth.cpp"