aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Matrix.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-11-30 01:07:42 +0100
committerdec05eba <dec05eba@protonmail.com>2022-11-30 01:07:42 +0100
commitb89e704fdf28cdd02bea0b4cd12333bd99c0f3b5 (patch)
treeb7c204c048e231c8ec39e1fd3204e8782a0951bf /src/plugins/Matrix.cpp
parent5303ca008e760e4e4707c0816449fb83f278426b (diff)
Matrix: ignore gpg keys with expired/revoked subkey as well
Diffstat (limited to 'src/plugins/Matrix.cpp')
-rw-r--r--src/plugins/Matrix.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index 38ab6d0..2452548 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -80,6 +80,7 @@ namespace QuickMedia {
enum class GpgLineType {
UID,
FPR,
+ SUB,
UNKNOWN
};
@@ -120,6 +121,7 @@ namespace QuickMedia {
}
std::string_view fpr;
+ std::string_view name_and_email;
string_split(output, '\n', [&](const char *str, size_t size) {
GpgLineType line_type = GpgLineType::UNKNOWN;
int column = 0;
@@ -132,20 +134,24 @@ namespace QuickMedia {
line_type = GpgLineType::UID;
else if(section == "fpr")
line_type = GpgLineType::FPR;
+ else if(section == "sub")
+ line_type = GpgLineType::SUB;
} else if(column == 1) {
- if(line_type == GpgLineType::UID)
- invalid_signature = (section == "e" || section == "r"); // Expired or revoked
- } else if(column == 9) {
- if(line_type == GpgLineType::UID && !invalid_signature) {
- // Assumes that each uid is preceeded with fpr
- const std::string user_email = std::string(gpg_display_name_extract_email(section));
+ if(line_type == GpgLineType::UID || line_type == GpgLineType::SUB)
+ invalid_signature |= (section == "e" || section == "r"); // Expired or revoked
+
+ if(line_type == GpgLineType::SUB && !invalid_signature) {
+ const std::string user_email = std::string(gpg_display_name_extract_email(name_and_email));
if(!user_email.empty() && users_by_email.find(user_email) != users_by_email.end()) {
fprintf(stderr, "found public key %.*s for user %s\n", (int)fpr.size(), fpr.data(), user_email.c_str());
callback(fpr);
}
- } else if(line_type == GpgLineType::FPR) {
- fpr = section;
}
+ } else if(column == 9) {
+ if(line_type == GpgLineType::UID)
+ name_and_email = section;
+ else if(line_type == GpgLineType::FPR)
+ fpr = section;
}
++column;