diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,7 +105,7 @@ set(AKONADI_CONTACT_VERSION "5.2.80") set(KCONTACTS_LIB_VERSION "5.2.81") set(KCALENDARCORE_LIB_VERSION "5.2.80") - set(IDENTITYMANAGEMENT_LIB_VERSION "5.2.80") + set(IDENTITYMANAGEMENT_LIB_VERSION "5.3.41") set(KLDAP_LIB_VERSION "5.2.80") set(KMAILTRANSPORT_LIB_VERSION "5.2.80") set(CALENDARUTILS_LIB_VERSION "5.2.80") @@ -137,7 +137,7 @@ set(LIBMAILIMPORTER_VERSION_LIB "5.2.80") set(MAILCOMMON_LIB_VERSION_LIB "5.3.41") set(KDEPIM_APPS_LIB_VERSION_LIB "5.2.80") - set(MESSAGELIB_LIB_VERSION_LIB "5.3.41") + set(MESSAGELIB_LIB_VERSION_LIB "5.3.42") set(LIBKLEO_LIB_VERSION_LIB "5.2.80") set(LIBGRANTLEETHEME_LIB_VERSION_LIB "5.2.80") set(PIMCOMMON_LIB_VERSION_LIB "5.3.41") diff --git a/accountwizard/CMakeLists.txt b/accountwizard/CMakeLists.txt --- a/accountwizard/CMakeLists.txt +++ b/accountwizard/CMakeLists.txt @@ -42,7 +42,7 @@ set(AKONADI_MIMELIB_VERSION "5.2.80") set(AKONADI_CONTACT_VERSION "5.2.80") set(KCONTACTS_LIB_VERSION "5.2.81") - set(IDENTITYMANAGEMENT_LIB_VERSION "5.2.80") + set(IDENTITYMANAGEMENT_LIB_VERSION "5.3.41") set(KLDAP_LIB_VERSION "5.2.80") set(KMAILTRANSPORT_LIB_VERSION "5.2.80") set(KPIMTEXTEDIT_LIB_VERSION "5.2.80") diff --git a/accountwizard/src/identity.h b/accountwizard/src/identity.h --- a/accountwizard/src/identity.h +++ b/accountwizard/src/identity.h @@ -49,6 +49,8 @@ Q_SCRIPTABLE void setTransport(QObject *transport); Q_SCRIPTABLE void setPreferredCryptoMessageFormat(const QString &format); Q_SCRIPTABLE void setXFace(const QString &xface); + Q_SCRIPTABLE void setPgpAutoSign(bool autosign); + Q_SCRIPTABLE void setPgpAutoEncrypt(bool autoencrypt); protected: QString identityName() const; diff --git a/accountwizard/src/identity.cpp b/accountwizard/src/identity.cpp --- a/accountwizard/src/identity.cpp +++ b/accountwizard/src/identity.cpp @@ -143,3 +143,12 @@ m_identity->setXFace(xface); } +void Identity::setPgpAutoEncrypt(bool autoencrypt) +{ + m_identity->setPgpAutoEncrypt(autoencrypt); +} + +void Identity::setPgpAutoSign(bool autosign) +{ + m_identity->setPgpAutoSign(autosign); +} diff --git a/accountwizard/src/personaldatapage.cpp b/accountwizard/src/personaldatapage.cpp --- a/accountwizard/src/personaldatapage.cpp +++ b/accountwizard/src/personaldatapage.cpp @@ -118,6 +118,11 @@ mSetupManager->setName(ui.nameEdit->text()); mSetupManager->setPassword(ui.passwordEdit->text()); mSetupManager->setEmail(ui.emailEdit->text().trimmed()); + const int cryptoState = ui.comboBox->currentIndex(); + mSetupManager->setPgpAutoEncrypt(cryptoState == 0 || // sign + encrypt + cryptoState == 2); // encrypt only + mSetupManager->setPgpAutoSign(cryptoState == 0 || // sign + encrypt + cryptoState == 1); // sign only if (ui.checkOnlineGroupBox->isChecked()) { // since the user can go back and forth, explicitly disable the man page diff --git a/accountwizard/src/setupmanager.h b/accountwizard/src/setupmanager.h --- a/accountwizard/src/setupmanager.h +++ b/accountwizard/src/setupmanager.h @@ -42,6 +42,8 @@ void setEmail(const QString &); void setPassword(const QString &); void setPersonalDataAvailable(bool available); + void setPgpAutoSign(bool autosign); + void setPgpAutoEncrypt(bool autoencrypt); public Q_SLOTS: Q_SCRIPTABLE bool personalDataAvailable(); @@ -83,6 +85,8 @@ KWallet::Wallet *m_wallet; bool m_personalDataAvailable; bool m_rollbackRequested; + bool m_pgpAutoSign; + bool m_pgpAutoEncrypt; }; #endif diff --git a/accountwizard/src/setupmanager.cpp b/accountwizard/src/setupmanager.cpp --- a/accountwizard/src/setupmanager.cpp +++ b/accountwizard/src/setupmanager.cpp @@ -41,7 +41,9 @@ m_page(Q_NULLPTR), m_wallet(Q_NULLPTR), m_personalDataAvailable(false), - m_rollbackRequested(false) + m_rollbackRequested(false), + m_pgpAutoSign(false), + m_pgpAutoEncrypt(false) { KEMailSettings e; m_name = e.getSetting(KEMailSettings::RealName); @@ -80,7 +82,12 @@ QObject *SetupManager::createIdentity() { - return connectObject(new Identity(this)); + Identity *identity = new Identity(this); + identity->setEmail(m_email); + identity->setRealName(m_name); + identity->setPgpAutoSign(m_pgpAutoSign); + identity->setPgpAutoEncrypt(m_pgpAutoEncrypt); + return connectObject(identity); } static bool dependencyCompare(SetupObject *left, SetupObject *right) @@ -217,6 +224,16 @@ return QLocale::countryToString(QLocale().country()); } +void SetupManager::setPgpAutoEncrypt(bool autoencrypt) +{ + m_pgpAutoEncrypt = autoencrypt; +} + +void SetupManager::setPgpAutoSign(bool autosign) +{ + m_pgpAutoSign = autosign; +} + void SetupManager::openWallet() { using namespace KWallet; diff --git a/accountwizard/src/ui/personaldatapage.ui b/accountwizard/src/ui/personaldatapage.ui --- a/accountwizard/src/ui/personaldatapage.ui +++ b/accountwizard/src/ui/personaldatapage.ui @@ -95,6 +95,40 @@ + + + + Security: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Always sign and encrypt outgoing emails + + + + + Always sign outgoing emails + + + + + Always encrypt outgoing emails + + + + + Don't sign or encrypt outgoing emails + + + + diff --git a/kmail/CMakeLists.txt b/kmail/CMakeLists.txt --- a/kmail/CMakeLists.txt +++ b/kmail/CMakeLists.txt @@ -46,7 +46,7 @@ set(KCONTACTS_LIB_VERSION "5.2.81") set(KCALENDARCORE_LIB_VERSION "5.2.80") set(CALENDARUTILS_LIB_VERSION "5.2.80") - set(IDENTITYMANAGEMENT_LIB_VERSION "5.2.80") + set(IDENTITYMANAGEMENT_LIB_VERSION "5.3.41") set(KLDAP_LIB_VERSION "5.2.80") set(KMAILTRANSPORT_LIB_VERSION "5.2.80") set(GPGMEPP_LIB_VERSION "5.2.80") @@ -64,7 +64,7 @@ set(LIBGRAVATAR_VERSION_LIB "5.2.80") set(MAILCOMMON_LIB_VERSION_LIB "5.3.41") set(KDEPIM_APPS_LIB_VERSION_LIB "5.2.80") - set(MESSAGELIB_LIB_VERSION_LIB "5.3.41") + set(MESSAGELIB_LIB_VERSION_LIB "5.3.42") set(LIBKLEO_LIB_VERSION_LIB "5.2.80") set(PIMCOMMON_LIB_VERSION_LIB "5.3.41") set(LIBKDEPIM_LIB_VERSION_LIB "5.2.80") diff --git a/kmail/src/configuredialog/configuresecuritypage.cpp b/kmail/src/configuredialog/configuresecuritypage.cpp --- a/kmail/src/configuredialog/configuresecuritypage.cpp +++ b/kmail/src/configuredialog/configuresecuritypage.cpp @@ -212,7 +212,6 @@ mWidget->setupUi(this); connect(mWidget->mEncToSelf, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); connect(mWidget->mShowKeyApprovalDlg, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); - connect(mWidget->mAutoEncrypt, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); connect(mWidget->mNeverEncryptWhenSavingInDrafts, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); connect(mWidget->mStoreEncrypted, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); connect(mWidget->mShowEncSignIndicator, &QCheckBox::toggled, this, &SecurityPageComposerCryptoTab::slotEmitChanged); @@ -230,7 +229,6 @@ loadWidget(mWidget->mEncToSelf, MessageComposer::MessageComposerSettings::self()->cryptoEncryptToSelfItem()); loadWidget(mWidget->mShowKeyApprovalDlg, MessageComposer::MessageComposerSettings::self()->cryptoShowKeysForApprovalItem()); - loadWidget(mWidget->mAutoEncrypt, MessageComposer::MessageComposerSettings::self()->pgpAutoEncryptItem()); loadWidget(mWidget->mNeverEncryptWhenSavingInDrafts, KMailSettings::self()->neverEncryptDraftsItem()); loadWidget(mWidget->mStoreEncrypted, KMailSettings::self()->cryptoStoreEncryptedItem()); @@ -242,7 +240,6 @@ saveCheckBox(mWidget->mEncToSelf, MessageComposer::MessageComposerSettings::self()->cryptoEncryptToSelfItem()); saveCheckBox(mWidget->mShowKeyApprovalDlg, MessageComposer::MessageComposerSettings::self()->cryptoShowKeysForApprovalItem()); - saveCheckBox(mWidget->mAutoEncrypt, MessageComposer::MessageComposerSettings::self()->pgpAutoEncryptItem()); saveCheckBox(mWidget->mNeverEncryptWhenSavingInDrafts, KMailSettings::self()->neverEncryptDraftsItem()); saveCheckBox(mWidget->mStoreEncrypted, KMailSettings::self()->cryptoStoreEncryptedItem()); saveCheckBox(mWidget->mShowEncSignIndicator, KMailSettings::self()->showCryptoLabelIndicatorItem()); @@ -253,7 +250,6 @@ loadWidget(mWidget->mEncToSelf, MessageComposer::MessageComposerSettings::self()->cryptoEncryptToSelfItem()); loadWidget(mWidget->mShowKeyApprovalDlg, MessageComposer::MessageComposerSettings::self()->cryptoShowKeysForApprovalItem()); - loadWidget(mWidget->mAutoEncrypt, MessageComposer::MessageComposerSettings::self()->pgpAutoEncryptItem()); loadWidget(mWidget->mNeverEncryptWhenSavingInDrafts, KMailSettings::self()->neverEncryptDraftsItem()); loadWidget(mWidget->mStoreEncrypted, KMailSettings::self()->cryptoStoreEncryptedItem()); loadWidget(mWidget->mShowEncSignIndicator, KMailSettings::self()->showCryptoLabelIndicatorItem()); diff --git a/kmail/src/identity/identitydialog.h b/kmail/src/identity/identitydialog.h --- a/kmail/src/identity/identitydialog.h +++ b/kmail/src/identity/identitydialog.h @@ -129,6 +129,7 @@ Kleo::EncryptionKeyRequester *mSMIMEEncryptionKeyRequester; KComboBox *mPreferredCryptoMessageFormat; QCheckBox *mAutoSign; + QCheckBox *mAutoEncrypt; // "advanced" tab: KLineEdit *mReplyToEdit; KLineEdit *mBccEdit; diff --git a/kmail/src/identity/identitydialog.cpp b/kmail/src/identity/identitydialog.cpp --- a/kmail/src/identity/identitydialog.cpp +++ b/kmail/src/identity/identitydialog.cpp @@ -370,6 +370,10 @@ glay->addWidget(mAutoSign, row, 0); ++row; + mAutoEncrypt = new QCheckBox(i18n("Automatically encrypt messages when possible")); + glay->addWidget(mAutoEncrypt, row, 0); + + ++row; glay->setRowStretch(row, 1); // @@ -797,6 +801,7 @@ mPreferredCryptoMessageFormat->setCurrentIndex(format2cb( Kleo::stringToCryptoMessageFormat(ident.preferredCryptoMessageFormat()))); mAutoSign->setChecked(ident.pgpAutoSign()); + mAutoEncrypt->setChecked(ident.pgpAutoEncrypt()); // "Advanced" tab: mReplyToEdit->setText(ident.replyToAddr()); @@ -895,6 +900,7 @@ ident.setPreferredCryptoMessageFormat( QLatin1String(Kleo::cryptoMessageFormatToString(cb2format(mPreferredCryptoMessageFormat->currentIndex())))); ident.setPgpAutoSign(mAutoSign->isChecked()); + ident.setPgpAutoEncrypt(mAutoEncrypt->isChecked()); // "Advanced" tab: ident.setReplyToAddr(mReplyToEdit->text()); ident.setBcc(mBccEdit->text()); diff --git a/kmail/src/kmmigrateapplication.h b/kmail/src/kmmigrateapplication.h --- a/kmail/src/kmmigrateapplication.h +++ b/kmail/src/kmmigrateapplication.h @@ -30,6 +30,8 @@ void migrate(); private: void initializeMigrator(); + void migrateAlwaysEncrypt(); + PimCommon::MigrateApplicationFiles mMigrator; }; diff --git a/kmail/src/kmmigrateapplication.cpp b/kmail/src/kmmigrateapplication.cpp --- a/kmail/src/kmmigrateapplication.cpp +++ b/kmail/src/kmmigrateapplication.cpp @@ -18,7 +18,9 @@ */ #include "kmmigrateapplication.h" - +#include +#include +#include #include KMMigrateApplication::KMMigrateApplication() @@ -41,6 +43,9 @@ if (mMigrator.checkIfNecessary()) { mMigrator.start(); } + + // Migrate global "Always encrypt" option to per-identity options + migrateAlwaysEncrypt(); } void KMMigrateApplication::initializeMigrator() @@ -102,3 +107,28 @@ migrateInfoVCardFromIdentity.setVersion(initialVersion); mMigrator.insertMigrateInfo(migrateInfoVCardFromIdentity); } + +void KMMigrateApplication::migrateAlwaysEncrypt() +{ + KConfig cfg(QStringLiteral("kmail2rc")); + if (!cfg.hasGroup("Composer")) { + return; + } + + KConfigGroup grp = cfg.group("Composer"); + if (!grp.hasKey("pgp-auto-encrypt")) { + return; + } + + const bool pgpAutoEncrypt = grp.readEntry("pgp-auto-encrypt", false); + grp.deleteEntry("pgp-auto-encrypt"); + + // Only update the per-identity flag to true + if (pgpAutoEncrypt) { + KIdentityManagement::IdentityManager mgr; + for (auto iter = mgr.modifyBegin(), end = mgr.modifyEnd(); iter != end; ++iter) { + iter->setPgpAutoEncrypt(pgpAutoEncrypt); + } + mgr.commit(); + } +} diff --git a/kmail/src/ui/composercryptoconfiguration.ui b/kmail/src/ui/composercryptoconfiguration.ui --- a/kmail/src/ui/composercryptoconfiguration.ui +++ b/kmail/src/ui/composercryptoconfiguration.ui @@ -59,16 +59,6 @@ - - - When this option is enabled, every message you send will be encrypted whenever encryption is possible and desired; of course, it is still possible to disable the automatic encryption for each message individually. - - - Automatically encrypt &messages whenever possible - - - - Never sign/encrypt when sa&ving as draft