diff options
author | Saturneric <[email protected]> | 2021-08-11 05:21:57 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-08-11 05:21:57 +0000 |
commit | a5cf56e93e4e6a856b2f21730c7bfbfa413410ff (patch) | |
tree | cdfd1bb9eaf5ba7bfce4a7e4512f371d9d75107d /src/server/ComUtils.cpp | |
parent | Split some source files that are too large. (diff) | |
download | GpgFrontend-a5cf56e93e4e6a856b2f21730c7bfbfa413410ff.tar.gz GpgFrontend-a5cf56e93e4e6a856b2f21730c7bfbfa413410ff.zip |
Continue to improve functions.
Split source files that are too long.
Diffstat (limited to '')
-rw-r--r-- | src/server/ComUtils.cpp | 82 |
1 files changed, 74 insertions, 8 deletions
diff --git a/src/server/ComUtils.cpp b/src/server/ComUtils.cpp index 637b5c12..25d471af 100644 --- a/src/server/ComUtils.cpp +++ b/src/server/ComUtils.cpp @@ -31,11 +31,14 @@ */ bool ComUtils::checkServerReply(const QByteArray &reply) { + qDebug() << "Reply" << reply; + /** * Server Reply Format(Except Timeout) * { * "status": 200, - * "message": "OK", + * "msg": "OK", + * "timestamp": 1628652783895 * "data" : { * ... * } @@ -49,21 +52,40 @@ bool ComUtils::checkServerReply(const QByteArray &reply) { } // check status(int) and message(string) - if (replyDoc.HasMember("status") && replyDoc.HasMember("message") - && replyDoc["status"].IsInt() && replyDoc["message"].IsString()) { + if (replyDoc.HasMember("status") && replyDoc.HasMember("msg") && replyDoc.HasMember("timestamp") && + replyDoc.HasMember("data") + && replyDoc["status"].IsNumber() && replyDoc["msg"].IsString() && replyDoc["timestamp"].IsNumber() && + replyDoc["data"].IsObject()) { int status = replyDoc["status"].GetInt(); - QString message = replyDoc["status"].GetString(); + QDateTime time; + time.setMSecsSinceEpoch(replyDoc["timestamp"].GetInt64()); + auto message = replyDoc["msg"].GetString(); + dataVal = replyDoc["data"].GetObjectA(); + + qDebug() << "Reply Date & Time" << time; + + // check reply timestamp + if (time < QDateTime::currentDateTime().addSecs(-10)) { + QMessageBox::critical(this, tr("Network Error"), tr("Outdated Reply")); + return false; + } // check status code if successful (200-299) // check data object - if (status / 10 == 2 && replyDoc.HasMember("data") && replyDoc["data"].IsObject()) { - dataVal = replyDoc["data"].GetObjectA(); + if (status / 100 == 2) { is_good = true; return true; - } else QMessageBox::critical(this, tr("Error"), message); + } else { + dataVal = replyDoc["data"].GetObjectA(); + if (dataVal.HasMember("exceptionMessage") && dataVal["exceptionMessage"].IsString()) + QMessageBox::critical(this, message, dataVal["exceptionMessage"].GetString()); + else QMessageBox::critical(this, message, tr("Unknown Reason")); + } + + } else QMessageBox::critical(this, tr("Network Error"), tr("Unknown Reply Format")); - } else QMessageBox::critical(this, tr("Error"), tr("Unknown Reply Format")); + return false; } /** @@ -79,3 +101,47 @@ QString ComUtils::getDataValue(const QString &key) { } else return {}; } else return {}; } + +/** + * Get eventually url by service type + * @param type service which server provides + * @return url + */ +QString ComUtils::getUrl(ComUtils::ServiceType type) { + auto host = settings.value("general/currentGpgfrontendServer", + "service.gpgfrontend.pub").toString(); + + auto protocol = QString(); + // Debug Server + if (host == "localhost") protocol = "http://"; + else protocol = "https://"; + + auto url = protocol + host + "/"; + + switch (type) { + case GetServiceToken: + url += "/user"; + break; + case ShortenCryptText: + url += "/text/new"; + break; + case GetFullCryptText: + url += "/text/get"; + break; + } + + qDebug() << "ComUtils getUrl" << url; + + return url; +} + +bool ComUtils::checkDataValue(const QString &key) { + auto key_byte_array_data = key.toUtf8().constData(); + if (is_good) { + return dataVal.HasMember(key_byte_array_data) && dataVal[key_byte_array_data].IsString(); + } else return false; +} + +bool ComUtils::checkServiceTokenFormat(const QString &uuid) { + return re_uuid.match(uuid).hasMatch(); +} |