Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bc61258 authored by Vincent Breitmoser's avatar Vincent Breitmoser
Browse files

Encrypt subject only if setting is enabled

parent 82f6f881
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ public class ComposeCryptoStatus {
    private boolean enablePgpInline;
    private boolean preferEncryptMutual;
    private boolean isReplyToEncrypted;
    private boolean encryptSubject;
    private CryptoMode cryptoMode;
    private RecipientAutocryptStatus recipientAutocryptStatus;

@@ -166,6 +167,10 @@ public class ComposeCryptoStatus {
        return recipientAutocryptStatus.intent;
    }

    public boolean isEncryptSubject() {
        return encryptSubject;
    }

    public static class ComposeCryptoStatusBuilder {

        private OpenPgpProviderState openPgpProviderState;
@@ -175,6 +180,7 @@ public class ComposeCryptoStatus {
        private Boolean enablePgpInline;
        private Boolean preferEncryptMutual;
        private Boolean isReplyToEncrypted;
        private Boolean encryptSubject;

        public ComposeCryptoStatusBuilder setOpenPgpProviderState(OpenPgpProviderState openPgpProviderState) {
            this.openPgpProviderState = openPgpProviderState;
@@ -211,6 +217,11 @@ public class ComposeCryptoStatus {
            return this;
        }

        public ComposeCryptoStatusBuilder setEncryptSubject(boolean encryptSubject) {
            this.encryptSubject = encryptSubject;
            return this;
        }

        public ComposeCryptoStatus build() {
            if (openPgpProviderState == null) {
                throw new AssertionError("cryptoProviderState must be set!");
@@ -230,6 +241,9 @@ public class ComposeCryptoStatus {
            if (isReplyToEncrypted == null) {
                throw new AssertionError("isReplyToEncrypted must be set!");
            }
            if (encryptSubject == null) {
                throw new AssertionError("encryptSubject must be set!");
            }

            ArrayList<String> recipientAddresses = new ArrayList<>();
            for (Recipient recipient : recipients) {
@@ -244,6 +258,7 @@ public class ComposeCryptoStatus {
            result.isReplyToEncrypted = isReplyToEncrypted;
            result.enablePgpInline = enablePgpInline;
            result.preferEncryptMutual = preferEncryptMutual;
            result.encryptSubject = encryptSubject;
            return result;
        }
    }
@@ -257,6 +272,7 @@ public class ComposeCryptoStatus {
        result.openPgpKeyId = openPgpKeyId;
        result.enablePgpInline = enablePgpInline;
        result.preferEncryptMutual = preferEncryptMutual;
        result.encryptSubject = encryptSubject;
        result.recipientAutocryptStatus = recipientAutocryptStatusType;
        return result;
    }
+1 −0
Original line number Diff line number Diff line
@@ -394,6 +394,7 @@ public class RecipientPresenter {
                .setEnablePgpInline(cryptoEnablePgpInline)
                .setPreferEncryptMutual(account.getAutocryptPreferEncryptMutual())
                .setIsReplyToEncrypted(isReplyToEncryptedMessage)
                .setEncryptSubject(account.getOpenPgpEncryptSubject())
                .setRecipients(getAllRecipients())
                .setOpenPgpKeyId(accountCryptoKey)
                .build();
+17 −12
Original line number Diff line number Diff line
@@ -151,7 +151,12 @@ public class PgpMessageBuilder extends MessageBuilder {
            }

            if (messageContentBodyPart == null) {
                messageContentBodyPart = createBodyPartFromMessageContent(shouldEncrypt);
                messageContentBodyPart = createBodyPartFromMessageContent();

                if (cryptoStatus.isEncryptSubject()) {
                    encryptMessageSubject();
                }
                maybeAddGossipHeadersToBodyPart();
            }

            if (pgpApiIntent == null) {
@@ -171,34 +176,34 @@ public class PgpMessageBuilder extends MessageBuilder {
        }
    }

    private MimeBodyPart createBodyPartFromMessageContent(boolean shouldEncrypt) throws MessagingException {
    private MimeBodyPart createBodyPartFromMessageContent() throws MessagingException {
        MimeBodyPart bodyPart = currentProcessedMimeMessage.toBodyPart();
        String[] contentType = currentProcessedMimeMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE);
        if (contentType.length > 0) {
            bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, contentType[0]);
        }

        return bodyPart;
    }

    private void encryptMessageSubject() {
        String[] subjects = currentProcessedMimeMessage.getHeader(MimeHeader.SUBJECT);
        if (subjects.length > 0) {
            bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, bodyPart.getContentType() + "; protected-headers=\"v1\"");
            bodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]);
            messageContentBodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE,
                    messageContentBodyPart.getContentType() + "; protected-headers=\"v1\"");
            messageContentBodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]);
            currentProcessedMimeMessage.setHeader(MimeHeader.SUBJECT, context.getString(R.string.encrypted_subject));
        }

        addGossipHeadersToBodyPart(shouldEncrypt, bodyPart);

        return bodyPart;
    }

    private void addGossipHeadersToBodyPart(boolean shouldEncrypt, MimeBodyPart bodyPart) {
        if (!shouldEncrypt) {
    private void maybeAddGossipHeadersToBodyPart() {
        if (!cryptoStatus.isEncryptionEnabled()) {
            return;
        }

        String[] recipientAddresses = getCryptoRecipientsWithoutBcc();
        boolean hasMultipleOvertRecipients = recipientAddresses.length >= 2;
        if (hasMultipleOvertRecipients) {
            addAutocryptGossipHeadersToPart(bodyPart, recipientAddresses);
            addAutocryptGossipHeadersToPart(messageContentBodyPart, recipientAddresses);
        }
    }

+1 −0
Original line number Diff line number Diff line
@@ -592,6 +592,7 @@ public class PgpMessageBuilderTest extends K9RobolectricTest {
                .setEnablePgpInline(false)
                .setPreferEncryptMutual(false)
                .setIsReplyToEncrypted(false)
                .setEncryptSubject(true)
                .setOpenPgpKeyId(TEST_KEY_ID)
                .setRecipients(new ArrayList<Recipient>())
                .setOpenPgpProviderState(OpenPgpProviderState.OK);