aboutsummaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2021-12-01 17:25:46 +0000
committerSaturneric <[email protected]>2021-12-01 17:53:09 +0000
commit1ae8663decb3163b92d32b80cefb46eb678a5af6 (patch)
tree8e8cb58cacfe12827438b0524917cb0926f926cb /src/server
parentAdd & Modified (diff)
downloadGpgFrontend-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.cpp55
-rw-r--r--src/server/BaseAPI.h51
-rw-r--r--src/server/ComUtils.cpp274
-rw-r--r--src/server/ComUtils.h77
-rw-r--r--src/server/api/PubkeyGetter.cpp117
-rw-r--r--src/server/api/PubkeyGetter.h29
-rw-r--r--src/server/api/PubkeyUploader.cpp148
-rw-r--r--src/server/api/PubkeyUploader.h31
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