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

Unverified Commit 0c620944 authored by Vincent Breitmoser's avatar Vincent Breitmoser Committed by GitHub
Browse files

Merge pull request #3319 from k9mail/encrypted-subject-setting

Encrypted subject setting
parents 1a8aa0e4 5bc61258
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ public class Account implements BaseAccount, StoreConfig {
    private long openPgpKey;
    private boolean autocryptPreferEncryptMutual;
    private boolean openPgpHideSignOnly;
    private boolean openPgpEncryptSubject;
    private boolean markMessageAsReadOnView;
    private boolean alwaysShowCcBcc;
    private boolean allowRemoteSearch;
@@ -435,6 +436,7 @@ public class Account implements BaseAccount, StoreConfig {
        openPgpProvider = storage.getString(accountUuid + ".openPgpProvider", "");
        openPgpKey = storage.getLong(accountUuid + ".cryptoKey", NO_OPENPGP_KEY);
        openPgpHideSignOnly = storage.getBoolean(accountUuid + ".openPgpHideSignOnly", true);
        openPgpEncryptSubject = storage.getBoolean(accountUuid + ".openPgpEncryptSubject", true);
        autocryptPreferEncryptMutual = storage.getBoolean(accountUuid + ".autocryptMutualMode", false);
        allowRemoteSearch = storage.getBoolean(accountUuid + ".allowRemoteSearch", false);
        remoteSearchFullText = storage.getBoolean(accountUuid + ".remoteSearchFullText", false);
@@ -703,6 +705,7 @@ public class Account implements BaseAccount, StoreConfig {
        editor.putBoolean(accountUuid + ".stripSignature", stripSignature);
        editor.putLong(accountUuid + ".cryptoKey", openPgpKey);
        editor.putBoolean(accountUuid + ".openPgpHideSignOnly", openPgpHideSignOnly);
        editor.putBoolean(accountUuid + ".openPgpEncryptSubject", openPgpEncryptSubject);
        editor.putString(accountUuid + ".openPgpProvider", openPgpProvider);
        editor.putBoolean(accountUuid + ".autocryptMutualMode", autocryptPreferEncryptMutual);
        editor.putBoolean(accountUuid + ".allowRemoteSearch", allowRemoteSearch);
@@ -1555,6 +1558,14 @@ public class Account implements BaseAccount, StoreConfig {
        this.openPgpHideSignOnly = openPgpHideSignOnly;
    }

    public boolean getOpenPgpEncryptSubject() {
        return openPgpEncryptSubject;
    }

    public void setOpenPgpEncryptSubject(boolean openPgpEncryptSubject) {
        this.openPgpEncryptSubject = openPgpEncryptSubject;
    }

    public boolean allowRemoteSearch() {
        return allowRemoteSearch;
    }
+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();
+7 −1
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ public class AccountSettings extends K9PreferenceActivity {
    private static final String PREFERENCE_CRYPTO_KEY = "openpgp_key";
    private static final String PREFERENCE_CRYPTO_HIDE_SIGN_ONLY = "openpgp_hide_sign_only";
    private static final String PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT = "autocrypt_prefer_encrypt";
    private static final String PREFERENCE_CRYPTO_ENCRYPT_SUBJECT = "openpgp_encrypt_subject";
    private static final String PREFERENCE_CLOUD_SEARCH_ENABLED = "remote_search_enabled";
    private static final String PREFERENCE_REMOTE_SEARCH_NUM_RESULTS = "account_remote_search_num_results";
    private static final String PREFERENCE_REMOTE_SEARCH_FULL_TEXT = "account_remote_search_full_text";
@@ -187,6 +188,7 @@ public class AccountSettings extends K9PreferenceActivity {
    private OpenPgpKeyPreference pgpCryptoKey;
    private Preference autocryptPreferEncryptMutual;
    private SwitchPreference pgpHideSignOnly;
    private SwitchPreference pgpEncryptSubject;

    private PreferenceScreen searchScreen;
    private CheckBoxPreference cloudSearchEnabled;
@@ -734,6 +736,7 @@ public class AccountSettings extends K9PreferenceActivity {
        pgpCryptoKey = (OpenPgpKeyPreference) findPreference(PREFERENCE_CRYPTO_KEY);
        autocryptPreferEncryptMutual = findPreference(PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT);
        pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY);
        pgpEncryptSubject = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_ENCRYPT_SUBJECT);

        String pgpProvider = account.getOpenPgpProvider();
        String pgpProviderName = null;
@@ -806,8 +809,10 @@ public class AccountSettings extends K9PreferenceActivity {
        });

        pgpHideSignOnly.setEnabled(isPgpConfigured && isKeyConfigured);
        pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY);
        pgpHideSignOnly.setChecked(account.getOpenPgpHideSignOnly());

        pgpEncryptSubject.setEnabled(isPgpConfigured && isKeyConfigured);
        pgpEncryptSubject.setChecked(account.getOpenPgpEncryptSubject());
    }

    private void removeListEntry(ListPreference listPreference, String remove) {
@@ -872,6 +877,7 @@ public class AccountSettings extends K9PreferenceActivity {
            account.setOpenPgpKey(pgpCryptoKey.getValue());
        }
        account.setOpenPgpHideSignOnly(pgpHideSignOnly.isChecked());
        account.setOpenPgpEncryptSubject(pgpEncryptSubject.isChecked());

        account.setAutoExpandFolder(autoExpandFolder.getValue());

+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);
        }
    }

Loading