From 295143fe58ee3215b9567de720fdfdeae01627c6 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 5 Aug 2025 15:15:34 +0200 Subject: [PATCH] Auto store public key after decryption --- .../eu/faircode/email/FragmentMessages.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index e8776db62d..4cfc362774 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -10701,6 +10701,41 @@ public class FragmentMessages extends FragmentBase Helper.setSnackbarOptions( Snackbar.make(view, algo, Snackbar.LENGTH_LONG)) .show(); + if (cert != null) + try { + args.putByteArray("encoded", cert.getEncoded()); + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) throws Throwable { + byte[] encoded = args.getByteArray("encoded"); + + X509Certificate cert = (X509Certificate) CertificateFactory.getInstance("X.509") + .generateCertificate(new ByteArrayInputStream(encoded)); + + DB db = DB.getInstance(context); + + String fingerprint = EntityCertificate.getFingerprintSha256(cert); + List emails = EntityCertificate.getEmailAddresses(cert); + for (String email : emails) { + EntityCertificate record = db.certificate().getCertificate(fingerprint, email); + if (record == null) { + record = EntityCertificate.from(cert, email); + record.id = db.certificate().insertCertificate(record); + } + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(FragmentMessages.this, args, "certificate:store"); + } catch (Throwable ex) { + Log.unexpectedError(FragmentMessages.this, ex); + } } }