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 "googleauthjob.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 GoogleAuthJob::GoogleAuthJob(QObject *parent) 0016 : RestApiAbstractJob(parent) 0017 { 0018 } 0019 0020 GoogleAuthJob::~GoogleAuthJob() = default; 0021 0022 bool GoogleAuthJob::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 (mIdToken.isEmpty()) { 0032 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "IdToken is empty"; 0033 return false; 0034 } 0035 if (mExpireTokenInSeconds <= 0) { 0036 qCWarning(ROCKETCHATQTRESTAPI_LOG) << "Expire token is not defined"; 0037 return false; 0038 } 0039 return true; 0040 } 0041 0042 bool GoogleAuthJob::start() 0043 { 0044 if (!canStart()) { 0045 deleteLater(); 0046 return false; 0047 } 0048 submitPostRequest(json()); 0049 return true; 0050 } 0051 0052 void GoogleAuthJob::onPostRequestResponse(const QString &replyErrorString, const QJsonDocument &replyJson) 0053 { 0054 const QJsonObject replyObject = replyJson.object(); 0055 if (replyObject[QLatin1String("status")].toString() == QLatin1String("success") && replyObject.contains(QLatin1String("data"))) { 0056 const QJsonObject dataObject = replyObject[QLatin1String("data")].toObject(); 0057 0058 if (dataObject.contains(QLatin1String("authToken")) && dataObject.contains(QLatin1String("userId"))) { 0059 const QString authToken = dataObject[QLatin1String("authToken")].toString(); 0060 const QString userId = dataObject[QLatin1String("userId")].toString(); 0061 Q_EMIT googleauthDone(authToken, userId); 0062 } 0063 } else { 0064 emitFailedMessage(replyErrorString, replyObject); 0065 addLoggerWarning("Error during login" + replyJson.toJson(QJsonDocument::Indented)); 0066 } 0067 } 0068 0069 QString GoogleAuthJob::idToken() const 0070 { 0071 return mIdToken; 0072 } 0073 0074 void GoogleAuthJob::setIdToken(const QString &idToken) 0075 { 0076 mIdToken = idToken; 0077 } 0078 0079 int GoogleAuthJob::expireTokenInSeconds() const 0080 { 0081 return mExpireTokenInSeconds; 0082 } 0083 0084 void GoogleAuthJob::setExpireTokenInSeconds(int expireTokenInSeconds) 0085 { 0086 mExpireTokenInSeconds = expireTokenInSeconds; 0087 } 0088 0089 QString GoogleAuthJob::accessToken() const 0090 { 0091 return mAccessToken; 0092 } 0093 0094 void GoogleAuthJob::setAccessToken(const QString &accessToken) 0095 { 0096 mAccessToken = accessToken; 0097 } 0098 0099 QJsonDocument GoogleAuthJob::json() const 0100 { 0101 QVariantMap loginMap; 0102 loginMap.insert(QStringLiteral("serviceName"), QStringLiteral("google")); 0103 loginMap.insert(QStringLiteral("accessToken"), mAccessToken); 0104 loginMap.insert(QStringLiteral("idToken"), mIdToken); 0105 loginMap.insert(QStringLiteral("expiresIn"), mExpireTokenInSeconds); 0106 const QJsonDocument postData = QJsonDocument::fromVariant(loginMap); 0107 return postData; 0108 } 0109 0110 QNetworkRequest GoogleAuthJob::request() const 0111 { 0112 const QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::Login); 0113 QNetworkRequest request(url); 0114 request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/json")); 0115 return request; 0116 } 0117 0118 bool GoogleAuthJob::requireHttpAuthentication() const 0119 { 0120 return false; 0121 } 0122 0123 #include "moc_googleauthjob.cpp"