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"