aboutsummaryrefslogtreecommitdiffstats
path: root/src/m_email/EMailModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/m_email/EMailModule.cpp')
-rw-r--r--src/m_email/EMailModule.cpp148
1 files changed, 132 insertions, 16 deletions
diff --git a/src/m_email/EMailModule.cpp b/src/m_email/EMailModule.cpp
index 9e76689..e00e276 100644
--- a/src/m_email/EMailModule.cpp
+++ b/src/m_email/EMailModule.cpp
@@ -430,6 +430,29 @@ REGISTER_EVENT_HANDLER(EMAIL_SIGN_EML_DATA, [](const MEvent& event) -> int {
r_dialog->SetKeys({sign_key});
r_dialog->SetBodyData({body_data});
+ vmime::shared_ptr<vmime::message> message;
+ if (CheckIfEMLMessage(body_data, message)) {
+ EMailMetaData meta_data;
+ auto ret = GetEMLMetaData(message, meta_data);
+
+ if (ret != 0) {
+ CB_ERR(event, -1, "Get MetaData From EML Data Failed");
+ }
+
+ QString eml_data;
+ ret = AppendSignToEMLData(channel, sign_key, message, eml_data);
+ if (ret != 0) {
+ CB_ERR(event, -2, eml_data);
+ }
+
+ CB(event, GFGetModuleID(),
+ {
+ {"ret", QString::number(0)},
+ {"eml_data", eml_data},
+ });
+ return 0;
+ }
+
GFUIShowDialog(dialog, nullptr);
QObject::connect(r_dialog, &EMailMetaDataDialog::SignalEMLMetaData, r_dialog,
[=](const EMailMetaData& meta_data) {
@@ -469,6 +492,29 @@ REGISTER_EVENT_HANDLER(EMAIL_ENCRYPT_EML_DATA, [](const MEvent& event) -> int {
auto body_data =
QByteArray::fromBase64(QString(event["body_data"]).toLatin1());
+ vmime::shared_ptr<vmime::message> message;
+ if (CheckIfEMLMessage(body_data, message)) {
+ EMailMetaData meta_data;
+ auto ret = GetEMLMetaData(message, meta_data);
+
+ if (ret != 0) {
+ CB_ERR(event, -1, "Get MetaData From EML Data Failed");
+ }
+
+ QString eml_data;
+ ret = EncryptEMLData(channel, encrypt_keys, meta_data, body_data, eml_data);
+ if (ret != 0) {
+ CB_ERR(event, -2, eml_data);
+ }
+
+ CB(event, GFGetModuleID(),
+ {
+ {"ret", QString::number(0)},
+ {"eml_data", eml_data},
+ });
+ return 0;
+ }
+
auto* dialog = GUI_OBJECT(CreateEMailMetaDataDialog, 1);
auto* r_dialog =
qobject_cast<EMailMetaDataDialog*>(static_cast<QObject*>(dialog));
@@ -481,22 +527,31 @@ REGISTER_EVENT_HANDLER(EMAIL_ENCRYPT_EML_DATA, [](const MEvent& event) -> int {
GFUIShowDialog(dialog, nullptr);
- QObject::connect(r_dialog, &EMailMetaDataDialog::SignalEMLMetaData, r_dialog,
- [=](const EMailMetaData& meta_data) {
- QString eml_data;
- auto ret = EncryptEMLData(channel, encrypt_keys, meta_data,
- body_data, eml_data);
- if (ret != 0) {
- CB_ERR(event, -2, eml_data);
- }
-
- CB(event, GFGetModuleID(),
- {
- {"ret", QString::number(0)},
- {"eml_data", eml_data},
- });
- return 0;
- });
+ QObject::connect(
+ r_dialog, &EMailMetaDataDialog::SignalEMLMetaData, r_dialog,
+ [=](const EMailMetaData& meta_data) {
+ QString eml_data;
+ QString plain_text_eml_data;
+
+ auto ret = BuildPlainTextEML(meta_data, body_data, plain_text_eml_data);
+
+ if (ret != 0) {
+ CB_ERR(event, -1, "Build PlainText EML Data Failed");
+ }
+
+ ret = EncryptEMLData(channel, encrypt_keys, meta_data,
+ plain_text_eml_data.toLatin1(), eml_data);
+ if (ret != 0) {
+ CB_ERR(event, -2, eml_data);
+ }
+
+ CB(event, GFGetModuleID(),
+ {
+ {"ret", QString::number(0)},
+ {"eml_data", eml_data},
+ });
+ return 0;
+ });
QObject::connect(
r_dialog, &EMailMetaDataDialog::SignalNoEMLMetaData, r_dialog,
@@ -505,6 +560,67 @@ REGISTER_EVENT_HANDLER(EMAIL_ENCRYPT_EML_DATA, [](const MEvent& event) -> int {
return 0;
});
+REGISTER_EVENT_HANDLER(
+ EMAIL_ENCRYPT_SIGN_EML_DATA, [](const MEvent& event) -> int {
+ if (event["body_data"].isEmpty()) CB_ERR(event, -1, "body_data is empty");
+ if (event["channel"].isEmpty()) CB_ERR(event, -1, "channel is empty");
+ if (event["encrypt_keys"].isEmpty())
+ CB_ERR(event, -1, "encrypt_keys is empty");
+ if (event["sign_key"].isEmpty()) CB_ERR(event, -1, "sign_key is empty");
+
+ auto channel = event.value("channel", "0").toInt();
+ auto sign_key = event.value("sign_key", "");
+ auto encrypt_keys = event.value("encrypt_keys", "").split(';');
+
+ FLOG_DEBUG("eml encrypt keys: %1", encrypt_keys.join(';'));
+ FLOG_DEBUG("eml sign key: %1", sign_key);
+
+ auto body_data =
+ QByteArray::fromBase64(QString(event["body_data"]).toLatin1());
+
+ auto* dialog = GUI_OBJECT(CreateEMailMetaDataDialog, 1);
+ auto* r_dialog =
+ qobject_cast<EMailMetaDataDialog*>(static_cast<QObject*>(dialog));
+ if (r_dialog == nullptr)
+ CB_ERR(event, -1, "convert dialog to r_dialog failed");
+
+ r_dialog->SetChannel(channel);
+ r_dialog->SetKeys(encrypt_keys);
+ r_dialog->SetBodyData({body_data});
+
+ GFUIShowDialog(dialog, nullptr);
+
+ QObject::connect(r_dialog, &EMailMetaDataDialog::SignalEMLMetaData,
+ r_dialog, [=](const EMailMetaData& meta_data) {
+ QString eml_data;
+ auto ret = SignEMLData(channel, sign_key, meta_data,
+ body_data, eml_data);
+ if (ret != 0) {
+ CB_ERR(event, -2, eml_data);
+ }
+
+ ret = EncryptEMLData(channel, encrypt_keys, meta_data,
+ body_data, eml_data);
+ if (ret != 0) {
+ CB_ERR(event, -2, eml_data);
+ }
+
+ CB(event, GFGetModuleID(),
+ {
+ {"ret", QString::number(0)},
+ {"eml_data", eml_data},
+ });
+ return 0;
+ });
+
+ QObject::connect(r_dialog, &EMailMetaDataDialog::SignalNoEMLMetaData,
+ r_dialog, [=](const QString& error_string) {
+ CB_ERR(event, -1, error_string);
+ });
+
+ return 0;
+ });
+
auto GFDeactivateModule() -> int { return 0; }
auto GFUnregisterModule() -> int {