diff options
author | Saturneric <[email protected]> | 2021-12-01 17:25:46 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-12-01 17:53:09 +0000 |
commit | 1ae8663decb3163b92d32b80cefb46eb678a5af6 (patch) | |
tree | 8e8cb58cacfe12827438b0524917cb0926f926cb /src/server | |
parent | Add & Modified (diff) | |
download | GpgFrontend-1ae8663decb3163b92d32b80cefb46eb678a5af6.tar.gz GpgFrontend-1ae8663decb3163b92d32b80cefb46eb678a5af6.zip |
Add i18n Support
1. Remove Qt Linguist.
2. Add GNU gettext libraries.
3. Modified source codes to meet with i18n support.
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/BaseAPI.cpp | 55 | ||||
-rw-r--r-- | src/server/BaseAPI.h | 51 | ||||
-rw-r--r-- | src/server/ComUtils.cpp | 274 | ||||
-rw-r--r-- | src/server/ComUtils.h | 77 | ||||
-rw-r--r-- | src/server/api/PubkeyGetter.cpp | 117 | ||||
-rw-r--r-- | src/server/api/PubkeyGetter.h | 29 | ||||
-rw-r--r-- | src/server/api/PubkeyUploader.cpp | 148 | ||||
-rw-r--r-- | src/server/api/PubkeyUploader.h | 31 |
8 files changed, 391 insertions, 391 deletions
diff --git a/src/server/BaseAPI.cpp b/src/server/BaseAPI.cpp index be388df9..aa4c3f98 100644 --- a/src/server/BaseAPI.cpp +++ b/src/server/BaseAPI.cpp @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -23,48 +23,47 @@ */ #include "server/BaseAPI.h" + #include "rapidjson/writer.h" -BaseAPI::BaseAPI(ComUtils::ServiceType serviceType) : utils(new ComUtils(nullptr)), - reqUrl(utils->getUrl(serviceType)), request(reqUrl) { - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); +BaseAPI::BaseAPI(ComUtils::ServiceType serviceType) + : utils(new ComUtils(nullptr)), + reqUrl(utils->getUrl(serviceType)), + request(reqUrl) { + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); } -BaseAPI::~BaseAPI() { - utils->deleteLater(); -} +BaseAPI::~BaseAPI() { utils->deleteLater(); } QNetworkReply *BaseAPI::send_json_data() { - rapidjson::StringBuffer sb; - rapidjson::Writer<rapidjson::StringBuffer> writer(sb); - document.Accept(writer); + rapidjson::StringBuffer sb; + rapidjson::Writer<rapidjson::StringBuffer> writer(sb); + document.Accept(writer); - QByteArray postData(sb.GetString()); - qDebug() << "postData" << QString::fromUtf8(postData); + QByteArray postData(sb.GetString()); + qDebug() << "postData" << QString::fromUtf8(postData); - auto reply = utils->getNetworkManager().post(request, postData); + auto reply = utils->getNetworkManager().post(request, postData); - while (reply->isRunning()) QApplication::processEvents(); + while (reply->isRunning()) QApplication::processEvents(); - QByteArray replyData = reply->readAll().constData(); - if (utils->checkServerReply(replyData)) { - good = true, deal_reply(); - } + QByteArray replyData = reply->readAll().constData(); + if (utils->checkServerReply(replyData)) { + good = true, deal_reply(); + } - return reply; + return reply; } void BaseAPI::start() { - construct_json(); - send_json_data()->deleteLater(); + construct_json(); + send_json_data()->deleteLater(); } void BaseAPI::refresh() { - document.Clear(); - utils->clear(); - good = false; + document.Clear(); + utils->clear(); + good = false; } -bool BaseAPI::result() const { - return good; -} +bool BaseAPI::result() const { return good; } diff --git a/src/server/BaseAPI.h b/src/server/BaseAPI.h index 0b724bbc..46766fed 100644 --- a/src/server/BaseAPI.h +++ b/src/server/BaseAPI.h @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -25,49 +25,42 @@ #ifndef GPGFRONTEND_ZH_CN_TS_BASEAPI_H #define GPGFRONTEND_ZH_CN_TS_BASEAPI_H -#include "GpgFrontend.h" #include "ComUtils.h" - +#include "GpgFrontend.h" #include "rapidjson/document.h" class BaseAPI : public QObject { -Q_OBJECT -public: - - explicit BaseAPI(ComUtils::ServiceType serviceType); - - ~BaseAPI() override; + Q_OBJECT + public: + explicit BaseAPI(ComUtils::ServiceType serviceType); - void start(); + ~BaseAPI() override; - void refresh(); + void start(); - [[nodiscard]] bool result() const; + void refresh(); -private: + [[nodiscard]] bool result() const; - ComUtils *utils; + private: + ComUtils *utils; - QUrl reqUrl; + QUrl reqUrl; - QNetworkRequest request; + QNetworkRequest request; - QNetworkReply *send_json_data(); + QNetworkReply *send_json_data(); -protected: + protected: + bool good = false; - bool good = false; + rapidjson::Document document; - rapidjson::Document document; - - const ComUtils &getUtils() { return *utils; }; - - virtual void construct_json() = 0; - - virtual void deal_reply() = 0; + const ComUtils &getUtils() { return *utils; }; + virtual void construct_json() = 0; + virtual void deal_reply() = 0; }; - -#endif //GPGFRONTEND_ZH_CN_TS_BASEAPI_H +#endif // GPGFRONTEND_ZH_CN_TS_BASEAPI_H diff --git a/src/server/ComUtils.cpp b/src/server/ComUtils.cpp index bbcc873c..6a5ce7b0 100644 --- a/src/server/ComUtils.cpp +++ b/src/server/ComUtils.cpp @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -30,66 +30,70 @@ * @return if successful */ bool GpgFrontend::ComUtils::checkServerReply(const QByteArray &reply) { - - if(reply.isEmpty()) { - QMessageBox::critical(this, tr("Error"), tr("Nothing Reply. Please check the Internet connection.")); - return false; + if (reply.isEmpty()) { + QMessageBox::critical( + this, _("Error"), + _("Nothing Reply. Please check the Internet connection.")); + return false; + } + + qDebug() << "Reply" << reply; + + /** + * Server Reply Format(Except Timeout) + * { + * "status": 200, + * "msg": "OK", + * "timestamp": 1628652783895 + * "data" : { + * ... + * } + * } + */ + + // check if reply is a json object + if (replyDoc.Parse(reply).HasParseError() || !replyDoc.IsObject()) { + QMessageBox::critical(this, _("Error"), _("Unknown Error")); + return false; + } + + // check status(int) and message(string) + 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(); + QDateTime time; + time.setMSecsSinceEpoch(replyDoc["timestamp"].GetInt64()); + auto message = replyDoc["msg"].GetString(); + dataVal = replyDoc["data"].GetObject(); + + qDebug() << "Reply Date & Time" << time; + + // check reply timestamp + if (time < QDateTime::currentDateTime().addSecs(-10)) { + QMessageBox::critical(this, _("Network Error"), _("Outdated Reply")); + return false; } - qDebug() << "Reply" << reply; - - /** - * Server Reply Format(Except Timeout) - * { - * "status": 200, - * "msg": "OK", - * "timestamp": 1628652783895 - * "data" : { - * ... - * } - * } - */ - - // check if reply is a json object - if (replyDoc.Parse(reply).HasParseError() || !replyDoc.IsObject()) { - QMessageBox::critical(this, tr("Error"), tr("Unknown Error")); - return false; + // check status code if successful (200-299) + // check data object + if (status / 100 == 2) { + is_good = true; + return true; + } else { + if (dataVal.HasMember("exceptionMessage") && + dataVal["exceptionMessage"].IsString()) + QMessageBox::critical(this, message, + dataVal["exceptionMessage"].GetString()); + else + QMessageBox::critical(this, message, _("Unknown Reason")); } - // check status(int) and message(string) - 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(); - QDateTime time; - time.setMSecsSinceEpoch(replyDoc["timestamp"].GetInt64()); - auto message = replyDoc["msg"].GetString(); - dataVal = replyDoc["data"].GetObject(); - - 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 / 100 == 2) { - is_good = true; - return true; - } else { - 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, _("Network Error"), _("Unknown Reply Format")); - return false; + return false; } /** @@ -98,12 +102,14 @@ bool GpgFrontend::ComUtils::checkServerReply(const QByteArray &reply) { * @return value in string format */ QString GpgFrontend::ComUtils::getDataValueStr(const QString &key) const { - if (is_good) { - auto k_byte_array = key.toUtf8(); - if (dataVal.HasMember(k_byte_array.data())) { - return dataVal[k_byte_array.data()].GetString(); - } else return {}; - } else return {}; + if (is_good) { + auto k_byte_array = key.toUtf8(); + if (dataVal.HasMember(k_byte_array.data())) { + return dataVal[k_byte_array.data()].GetString(); + } else + return {}; + } else + return {}; } /** @@ -112,86 +118,96 @@ QString GpgFrontend::ComUtils::getDataValueStr(const QString &key) const { * @return url */ QString GpgFrontend::ComUtils::getUrl(ComUtils::ServiceType type) const { - auto host = settings.value("general/currentGpgfrontendServer", - "service.gpgfrontend.pub").toString(); - - auto protocol = QString(); - // Localhost Debug Server - if (host == "localhost") protocol = "http://"; - else protocol = "https://"; - - auto url = protocol + host + ":9049/"; - - switch (type) { - case GetServiceToken: - url += "/user"; - break; - case ShortenCryptText: - url += "/text/new"; - break; - case GetFullCryptText: - url += "/text/get"; - break; - case UploadPubkey: - url += "/key/upload"; - break; - case GetPubkey: - url += "/key/get"; - break; - } - - qDebug() << "ComUtils getUrl" << url; - - return url; + auto host = + settings + .value("general/currentGpgfrontendServer", "service.gpgfrontend.pub") + .toString(); + + auto protocol = QString(); + // Localhost Debug Server + if (host == "localhost") + protocol = "http://"; + else + protocol = "https://"; + + auto url = protocol + host + ":9049/"; + + switch (type) { + case GetServiceToken: + url += "/user"; + break; + case ShortenCryptText: + url += "/text/new"; + break; + case GetFullCryptText: + url += "/text/get"; + break; + case UploadPubkey: + url += "/key/upload"; + break; + case GetPubkey: + url += "/key/get"; + break; + } + + qDebug() << "ComUtils getUrl" << url; + + return url; } bool GpgFrontend::ComUtils::checkDataValueStr(const QString &key) const { - 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; + 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 GpgFrontend::ComUtils::checkServiceTokenFormat(const QString &uuid) const { - return re_uuid.match(uuid).hasMatch(); + return re_uuid.match(uuid).hasMatch(); } -QByteArray GpgFrontend::ComUtils::getSignStringBase64(GpgFrontend::GpgContext *ctx, const QString &str, const GpgKey &key) { - std::vector<GpgKey> keys{key}; - QByteArray outSignText; - auto signData = str.toUtf8(); - - // The use of multi-threading brings an improvement in UI smoothness - gpgme_error_t error; - auto thread = QThread::create([&]() { - error = ctx->sign(keys, signData, &outSignText, GPGME_SIG_MODE_NORMAL, nullptr, false); - }); - thread->start(); - while (thread->isRunning()) QApplication::processEvents(); - thread->deleteLater(); - - return outSignText.toBase64(); +QByteArray GpgFrontend::ComUtils::getSignStringBase64( + GpgFrontend::GpgContext *ctx, const QString &str, const GpgKey &key) { + std::vector<GpgKey> keys{key}; + QByteArray outSignText; + auto signData = str.toUtf8(); + + // The use of multi-threading brings an improvement in UI smoothness + gpgme_error_t error; + auto thread = QThread::create([&]() { + error = ctx->sign(keys, signData, &outSignText, GPGME_SIG_MODE_NORMAL, + nullptr, false); + }); + thread->start(); + while (thread->isRunning()) QApplication::processEvents(); + thread->deleteLater(); + + return outSignText.toBase64(); } -const rapidjson::Value &GpgFrontend::ComUtils::getDataValue(const QString &key) const { - if (is_good) { - auto k_byte_array = key.toUtf8(); - if (dataVal.HasMember(k_byte_array.data())) { - return dataVal[k_byte_array.data()]; - } +const rapidjson::Value &GpgFrontend::ComUtils::getDataValue( + const QString &key) const { + if (is_good) { + auto k_byte_array = key.toUtf8(); + if (dataVal.HasMember(k_byte_array.data())) { + return dataVal[k_byte_array.data()]; } - throw std::runtime_error("Inner Error"); + } + throw std::runtime_error("Inner Error"); } -bool GpgFrontend::ComUtils::checkDataValue(const QString &key) const{ - auto key_byte_array_data = key.toUtf8().constData(); - if (is_good) { - return dataVal.HasMember(key_byte_array_data); - } else return false; +bool GpgFrontend::ComUtils::checkDataValue(const QString &key) const { + auto key_byte_array_data = key.toUtf8().constData(); + if (is_good) { + return dataVal.HasMember(key_byte_array_data); + } else + return false; } void GpgFrontend::ComUtils::clear() { - this->dataVal.Clear(); - this->replyDoc.Clear(); - is_good = false; + this->dataVal.Clear(); + this->replyDoc.Clear(); + is_good = false; }
\ No newline at end of file diff --git a/src/server/ComUtils.h b/src/server/ComUtils.h index 1f71f2e6..f281f256 100644 --- a/src/server/ComUtils.h +++ b/src/server/ComUtils.h @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -31,53 +31,58 @@ namespace GpgFrontend { - class ComUtils : public QWidget { - Q_OBJECT - public: - - enum ServiceType { GetServiceToken, ShortenCryptText, GetFullCryptText, UploadPubkey, GetPubkey }; - - explicit ComUtils(QWidget *parent) : QWidget(parent), appPath(qApp->applicationDirPath()), +class ComUtils : public QWidget { + Q_OBJECT + public: + enum ServiceType { + GetServiceToken, + ShortenCryptText, + GetFullCryptText, + UploadPubkey, + GetPubkey + }; + + explicit ComUtils(QWidget *parent) + : QWidget(parent), + appPath(qApp->applicationDirPath()), settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", - QSettings::IniFormat) { - - } - - [[nodiscard]] QString getUrl(ServiceType type) const; - - bool checkServerReply(const QByteArray &reply); + QSettings::IniFormat) {} - [[nodiscard]] QString getDataValueStr(const QString &key) const; + [[nodiscard]] QString getUrl(ServiceType type) const; - [[nodiscard]] bool checkDataValueStr(const QString &key) const; + bool checkServerReply(const QByteArray &reply); - [[nodiscard]] const rapidjson::Value &getDataValue(const QString &key) const; + [[nodiscard]] QString getDataValueStr(const QString &key) const; - [[nodiscard]] bool checkDataValue(const QString &key) const; + [[nodiscard]] bool checkDataValueStr(const QString &key) const; - [[nodiscard]] bool checkServiceTokenFormat(const QString& serviceToken) const; + [[nodiscard]] const rapidjson::Value &getDataValue(const QString &key) const; - static QByteArray getSignStringBase64(GpgFrontend::GpgContext *ctx, const QString &str, const GpgKey& key); + [[nodiscard]] bool checkDataValue(const QString &key) const; - [[nodiscard]] bool good() const { return is_good; } + [[nodiscard]] bool checkServiceTokenFormat(const QString &serviceToken) const; - QNetworkAccessManager &getNetworkManager() {return networkMgr;} + static QByteArray getSignStringBase64(GpgFrontend::GpgContext *ctx, + const QString &str, const GpgKey &key); - void clear(); + [[nodiscard]] bool good() const { return is_good; } - private: + QNetworkAccessManager &getNetworkManager() { return networkMgr; } - QString appPath; - QSettings settings; - rapidjson::Document replyDoc; - rapidjson::Value dataVal; - QNetworkAccessManager networkMgr; - QRegularExpression re_uuid{R"(\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b)"}; + void clear(); - bool is_good = false; - }; + private: + QString appPath; + QSettings settings; + rapidjson::Document replyDoc; + rapidjson::Value dataVal; + QNetworkAccessManager networkMgr; + QRegularExpression re_uuid{ + R"(\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b)"}; -} + bool is_good = false; +}; +} // namespace GpgFrontend -#endif //GPGFRONTEND_ZH_CN_TS_COMUTILS_H +#endif // GPGFRONTEND_ZH_CN_TS_COMUTILS_H diff --git a/src/server/api/PubkeyGetter.cpp b/src/server/api/PubkeyGetter.cpp index 6505cb3e..e2cb8708 100644 --- a/src/server/api/PubkeyGetter.cpp +++ b/src/server/api/PubkeyGetter.cpp @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -24,73 +24,72 @@ #include "server/api/PubkeyGetter.h" -PubkeyGetter::PubkeyGetter(GpgFrontend::GpgContext *ctx, const QVector<QString> &fprs) : BaseAPI(ComUtils::GetPubkey), - mCtx(ctx), mFprs(fprs) { -} +PubkeyGetter::PubkeyGetter(GpgFrontend::GpgContext *ctx, + const QVector<QString> &fprs) + : BaseAPI(ComUtils::GetPubkey), mCtx(ctx), mFprs(fprs) {} void PubkeyGetter::construct_json() { - document.SetArray(); - QStringList keyIds; + document.SetArray(); + QStringList keyIds; - rapidjson::Document::AllocatorType &allocator = document.GetAllocator(); + rapidjson::Document::AllocatorType &allocator = document.GetAllocator(); - for (const auto &fprStr : mFprs) { - rapidjson::Value fpr; + for (const auto &fprStr : mFprs) { + rapidjson::Value fpr; - auto fprByteArray = fprStr.toUtf8(); - fpr.SetString(fprByteArray.constData(), fprByteArray.count()); + auto fprByteArray = fprStr.toUtf8(); + fpr.SetString(fprByteArray.constData(), fprByteArray.count()); - document.PushBack(fpr, allocator); - keyIds.clear(); - } + document.PushBack(fpr, allocator); + keyIds.clear(); + } } void PubkeyGetter::deal_reply() { + const auto &utils = getUtils(); + + /** + * { + * "pubkeys" : [ + * { + * "publicKey" : ..., + * "fpr" : ..., + * "sha" : ... + * }, + * ... + * ] + * } + */ + + if (!utils.checkDataValue("pubkeys")) { + QMessageBox::critical(nullptr, _("Error"), + _("The communication content with the server does " + "not meet the requirements")); + } else { + auto &pubkeys = utils.getDataValue("pubkeys"); + qDebug() << "Pubkey Getter" << pubkeys.IsArray() + << pubkeys.GetArray().Size(); + if (pubkeys.IsArray()) { + for (const auto &pubkey : pubkeys.GetArray()) { + if (pubkey.IsObject() && pubkey.HasMember("publicKey") && + pubkey.HasMember("fpr") && pubkey.HasMember("sha") && + pubkey["publicKey"].IsString() && pubkey["fpr"].IsString() && + pubkey["sha"].IsString()) { + auto pubkeyData = QString(pubkey["publicKey"].GetString()); + + QCryptographicHash shaGen(QCryptographicHash::Sha256); + shaGen.addData(pubkeyData.toUtf8()); + + if (shaGen.result().toHex() == pubkey["sha"].GetString()) { + mCtx->importKey(pubkeyData.toUtf8()); + } + } + } - const auto &utils = getUtils(); - - /** - * { - * "pubkeys" : [ - * { - * "publicKey" : ..., - * "fpr" : ..., - * "sha" : ... - * }, - * ... - * ] - * } - */ - - if (!utils.checkDataValue("pubkeys")) { - QMessageBox::critical(nullptr, tr("Error"), - tr("The communication content with the server does not meet the requirements")); } else { - auto &pubkeys = utils.getDataValue("pubkeys"); - qDebug() << "Pubkey Getter" << pubkeys.IsArray() << pubkeys.GetArray().Size(); - if (pubkeys.IsArray()) { - for (const auto &pubkey : pubkeys.GetArray()) { - if (pubkey.IsObject() - && pubkey.HasMember("publicKey") && pubkey.HasMember("fpr") && pubkey.HasMember("sha") - && pubkey["publicKey"].IsString() && pubkey["fpr"].IsString() && pubkey["sha"].IsString()) { - - auto pubkeyData = QString(pubkey["publicKey"].GetString()); - - QCryptographicHash shaGen(QCryptographicHash::Sha256); - shaGen.addData(pubkeyData.toUtf8()); - - if (shaGen.result().toHex() == pubkey["sha"].GetString()) { - mCtx->importKey(pubkeyData.toUtf8()); - } - - } - } - - } else { - QMessageBox::critical(nullptr, tr("Error"), - tr("The communication content with the server does not meet the requirements")); - } + QMessageBox::critical(nullptr, _("Error"), + _("The communication content with the server does " + "not meet the requirements")); } + } } - - diff --git a/src/server/api/PubkeyGetter.h b/src/server/api/PubkeyGetter.h index 216b1ef2..6a3d50e9 100644 --- a/src/server/api/PubkeyGetter.h +++ b/src/server/api/PubkeyGetter.h @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -26,8 +26,8 @@ #define GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H #include "GpgFrontend.h" -#include "server/BaseAPI.h" #include "gpg/GpgContext.h" +#include "server/BaseAPI.h" class ComUtils; @@ -35,23 +35,18 @@ class ComUtils; * Get and Import Pubkey from server */ class PubkeyGetter : public BaseAPI { -public: - - PubkeyGetter(GpgFrontend::GpgContext *ctx, const QVector<QString> &fprs); - -private: + public: + PubkeyGetter(GpgFrontend::GpgContext *ctx, const QVector<QString> &fprs); - GpgFrontend::GpgContext *mCtx; + private: + GpgFrontend::GpgContext *mCtx; - const QVector<QString> &mFprs; + const QVector<QString> &mFprs; -protected: - - void construct_json() final; - - void deal_reply() final; + protected: + void construct_json() final; + void deal_reply() final; }; - -#endif //GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H +#endif // GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H diff --git a/src/server/api/PubkeyUploader.cpp b/src/server/api/PubkeyUploader.cpp index 2842c2d7..35f764d8 100644 --- a/src/server/api/PubkeyUploader.cpp +++ b/src/server/api/PubkeyUploader.cpp @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -24,83 +24,83 @@ #include "server/api/PubkeyUploader.h" -PubkeyUploader::PubkeyUploader(GpgFrontend::GpgContext *ctx, const QVector<GpgKey> &keys) : BaseAPI(ComUtils::UploadPubkey), - mCtx(ctx), - mKeys(keys) { -} +PubkeyUploader::PubkeyUploader(GpgFrontend::GpgContext *ctx, + const QVector<GpgKey> &keys) + : BaseAPI(ComUtils::UploadPubkey), mCtx(ctx), mKeys(keys) {} void PubkeyUploader::construct_json() { - document.SetArray(); - QStringList keyIds; - QCryptographicHash shaGen(QCryptographicHash::Sha256); - - auto &allocator = document.GetAllocator(); - - QVector<QByteArray> keysData; - for (const auto &key : mKeys) { - QByteArray keyDataBuf; - keyIds << key.id; - - // The use of multi-threading brings an improvement in UI smoothness - gpgme_error_t error; - auto thread = QThread::create([&]() { - error = mCtx->exportKeys(&keyIds, &keyDataBuf); - }); - thread->start(); - while (thread->isRunning()) QApplication::processEvents(); - thread->deleteLater(); - keysData.push_back(keyDataBuf); - keyIds.clear(); - } - - int index = 0; - for (const auto &keyData : keysData) { - rapidjson::Value publicKeyObj, pubkey, sha, signedFpr; - - shaGen.addData(keyData); - auto shaStr = shaGen.result().toHex(); - shaGen.reset(); - - auto signFprStr = ComUtils::getSignStringBase64(mCtx, mKeys[index].fpr, mKeys[index]); - qDebug() << "signFprStr" << signFprStr; - - pubkey.SetString(keyData.data(), keyData.count(), allocator); - sha.SetString(shaStr.data(), shaStr.count(), allocator); - signedFpr.SetString(signFprStr.data(), signFprStr.count(), allocator); - - publicKeyObj.SetObject(); - publicKeyObj.AddMember("publicKey", pubkey, allocator); - publicKeyObj.AddMember("sha", sha, allocator); - publicKeyObj.AddMember("signedFpr", signedFpr, allocator); - - document.PushBack(publicKeyObj, allocator); - index++; - } + document.SetArray(); + QStringList keyIds; + QCryptographicHash shaGen(QCryptographicHash::Sha256); + + auto &allocator = document.GetAllocator(); + + QVector<QByteArray> keysData; + for (const auto &key : mKeys) { + QByteArray keyDataBuf; + keyIds << key.id; + + // The use of multi-threading brings an improvement in UI smoothness + gpgme_error_t error; + auto thread = QThread::create( + [&]() { error = mCtx->exportKeys(&keyIds, &keyDataBuf); }); + thread->start(); + while (thread->isRunning()) QApplication::processEvents(); + thread->deleteLater(); + keysData.push_back(keyDataBuf); + keyIds.clear(); + } + + int index = 0; + for (const auto &keyData : keysData) { + rapidjson::Value publicKeyObj, pubkey, sha, signedFpr; + + shaGen.addData(keyData); + auto shaStr = shaGen.result().toHex(); + shaGen.reset(); + + auto signFprStr = + ComUtils::getSignStringBase64(mCtx, mKeys[index].fpr, mKeys[index]); + qDebug() << "signFprStr" << signFprStr; + + pubkey.SetString(keyData.data(), keyData.count(), allocator); + sha.SetString(shaStr.data(), shaStr.count(), allocator); + signedFpr.SetString(signFprStr.data(), signFprStr.count(), allocator); + + publicKeyObj.SetObject(); + publicKeyObj.AddMember("publicKey", pubkey, allocator); + publicKeyObj.AddMember("sha", sha, allocator); + publicKeyObj.AddMember("signedFpr", signedFpr, allocator); + + document.PushBack(publicKeyObj, allocator); + index++; + } } void PubkeyUploader::deal_reply() { - - const auto &utils = getUtils(); - - /** - * { - * "strings" : [ - * "...", - * "..." - * ] - * } - */ - - if (!utils.checkDataValue("strings")) { - QMessageBox::critical(nullptr, tr("Error"), - tr("The communication content with the server does not meet the requirements")); + const auto &utils = getUtils(); + + /** + * { + * "strings" : [ + * "...", + * "..." + * ] + * } + */ + + if (!utils.checkDataValue("strings")) { + QMessageBox::critical(nullptr, _("Error"), + _("The communication content with the server does " + "not meet the requirements")); + } else { + auto &strings = utils.getDataValue("strings"); + qDebug() << "Pubkey Uploader" << strings.IsArray() + << strings.GetArray().Size(); + if (strings.IsArray() && strings.GetArray().Size() == mKeys.size()) { + good = true; } else { - auto &strings = utils.getDataValue("strings"); - qDebug() << "Pubkey Uploader" << strings.IsArray() << strings.GetArray().Size(); - if (strings.IsArray() && strings.GetArray().Size() == mKeys.size()) { - good = true; - } else { - good = false; - } + good = false; } + } } diff --git a/src/server/api/PubkeyUploader.h b/src/server/api/PubkeyUploader.h index 61096d46..efad27ac 100644 --- a/src/server/api/PubkeyUploader.h +++ b/src/server/api/PubkeyUploader.h @@ -1,7 +1,7 @@ /** - * This file is part of GPGFrontend. + * This file is part of GpgFrontend. * - * GPGFrontend is free software: you can redistribute it and/or modify + * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -26,33 +26,26 @@ #define GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H #include "GpgFrontend.h" -#include "server/BaseAPI.h" #include "gpg/GpgContext.h" - #include "rapidjson/document.h" +#include "server/BaseAPI.h" /** * Upload pubkey into server */ class PubkeyUploader : public BaseAPI { -public: - - PubkeyUploader(GpgFrontend::GpgContext *ctx, const QVector<GpgKey> &keys); - -private: + public: + PubkeyUploader(GpgFrontend::GpgContext *ctx, const QVector<GpgKey> &keys); - const QVector<GpgKey> &mKeys; + private: + const QVector<GpgKey> &mKeys; - GpgFrontend::GpgContext *mCtx; - -protected: - - void construct_json() final; - - void deal_reply() final; + GpgFrontend::GpgContext *mCtx; + protected: + void construct_json() final; + void deal_reply() final; }; - -#endif //GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H +#endif // GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H |