File indexing completed on 2024-06-02 05:06:50
0001 /* 0002 SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "twitterauthjob.h" 0008 #include "restapimethod.h" 0009 #include "rocketchatqtrestapi_debug.h" 0010 0011 #include <QJsonDocument> 0012 #include <QJsonObject> 0013 #include <QNetworkReply> 0014 using namespace RocketChatRestApi; 0015 TwitterAuthJob::TwitterAuthJob(QObject *parent) 0016 : RestApiAbstractJob(parent) 0017 { 0018 } 0019 0020 TwitterAuthJob::~TwitterAuthJob() = default; 0021 0022 bool TwitterAuthJob::canStart() const 0023 { 0024 if (!RestApiAbstractJob::canStart()) { 0025 return false; 0026 } 0027 if (mAccessToken.isEmpty()) { 0028 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Access Token is empty"; 0029 return false; 0030 } 0031 if (mSecret.isEmpty()) { 0032 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Secret is empty"; 0033 return false; 0034 } 0035 if (mAppId.isEmpty()) { 0036 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Appid is empty"; 0037 return false; 0038 } 0039 if (mAppSecret.isEmpty()) { 0040 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "App secret is empty"; 0041 return false; 0042 } 0043 if (mExpireTokenInSeconds <= 0) { 0044 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Expire token is not defined"; 0045 return false; 0046 } 0047 return true; 0048 } 0049 0050 bool TwitterAuthJob::start() 0051 { 0052 if (!canStart()) { 0053 deleteLater(); 0054 return false; 0055 } 0056 submitPostRequest(json()); 0057 return true; 0058 } 0059 0060 void TwitterAuthJob::onPostRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0061 { 0062 const QJsonObject replyObject = replyJson.object(); 0063 if (replyObject[QLatin1String("status")].toString() == QLatin1String("success") && replyObject.contains(QLatin1String("data"))) { 0064 const QJsonObject dataObject = replyObject[QLatin1String("data")].toObject(); 0065 0066 if (dataObject.contains(QLatin1String("authToken")) && dataObject.contains(QLatin1String("userId"))) { 0067 const QString authToken = dataObject[QLatin1String("authToken")].toString(); 0068 const QString userId = dataObject[QLatin1String("userId")].toString(); 0069 Q_EMIT twitterDone(authToken, userId); 0070 } 0071 } else { 0072 emitFailedMessage(replyErrorString, replyObject); 0073 addLoggerWarning("Error during login" + replyJson.toJson(QJsonDocument::Indented)); 0074 } 0075 } 0076 0077 QString TwitterAuthJob::appId() const 0078 { 0079 return mAppId; 0080 } 0081 0082 void TwitterAuthJob::setAppId(const QString &appId) 0083 { 0084 mAppId = appId; 0085 } 0086 0087 QString TwitterAuthJob::appSecret() const 0088 { 0089 return mAppSecret; 0090 } 0091 0092 void TwitterAuthJob::setAppSecret(const QString &appSecret) 0093 { 0094 mAppSecret = appSecret; 0095 } 0096 0097 int TwitterAuthJob::expireTokenInSeconds() const 0098 { 0099 return mExpireTokenInSeconds; 0100 } 0101 0102 void TwitterAuthJob::setExpireTokenInSeconds(int expireTokenInSeconds) 0103 { 0104 mExpireTokenInSeconds = expireTokenInSeconds; 0105 } 0106 0107 QString TwitterAuthJob::secret() const 0108 { 0109 return mSecret; 0110 } 0111 0112 void TwitterAuthJob::setSecret(const QString &secret) 0113 { 0114 mSecret = secret; 0115 } 0116 0117 QString TwitterAuthJob::accessToken() const 0118 { 0119 return mAccessToken; 0120 } 0121 0122 void TwitterAuthJob::setAccessToken(const QString &accessToken) 0123 { 0124 mAccessToken = accessToken; 0125 } 0126 0127 QJsonDocument TwitterAuthJob::json() const 0128 { 0129 QVariantMap loginMap; 0130 loginMap.insert(QStringLiteral("serviceName"), QStringLiteral("twitter")); 0131 loginMap.insert(QStringLiteral("accessToken"), mAccessToken); 0132 loginMap.insert(QStringLiteral("accessTokenSecret"), mSecret); 0133 loginMap.insert(QStringLiteral("appSecret"), mAppSecret); 0134 loginMap.insert(QStringLiteral("appId"), mAppId); 0135 loginMap.insert(QStringLiteral("expiresIn"), mExpireTokenInSeconds); 0136 const QJsonDocument postData = QJsonDocument::fromVariant(loginMap); 0137 return postData; 0138 } 0139 0140 QNetworkRequest TwitterAuthJob::request() const 0141 { 0142 const QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::Login); 0143 QNetworkRequest request(url); 0144 request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/json")); 0145 return request; 0146 } 0147 0148 bool TwitterAuthJob::requireHttpAuthentication() const 0149 { 0150 return false; 0151 } 0152 0153 #include "moc_twitterauthjob.cpp"