[Libreoffice-commits] core.git: 3 commits - cui/source include/unotools unotools/source xmlsecurity/inc xmlsecurity/source
Katarina Behrens
Katarina.Behrens at cib.de
Tue Dec 19 00:30:40 UTC 2017
cui/source/options/optgenrl.cxx | 38 ++++++++++++++-
include/unotools/useroptions.hxx | 9 +++
unotools/source/config/useroptions.cxx | 54 ++++++++++++++++++++--
xmlsecurity/inc/certificatechooser.hxx | 2
xmlsecurity/source/dialogs/certificatechooser.cxx | 29 +++++++++++
5 files changed, 123 insertions(+), 9 deletions(-)
New commits:
commit 5c66c0711286bcfa9d3ab4a87777c2af9e1c25d9
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date: Thu Dec 14 13:14:02 2017 +0100
Read/write 'encrypt to self' bit
use some template functions to avoid duplicate code
Change-Id: Ia178ea3a0561e34e0431749262f5f8f1f49b4fe7
Reviewed-on: https://gerrit.libreoffice.org/46693
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
diff --git a/cui/source/options/optgenrl.cxx b/cui/source/options/optgenrl.cxx
index 83a98e60c7b0..c25144f04266 100644
--- a/cui/source/options/optgenrl.cxx
+++ b/cui/source/options/optgenrl.cxx
@@ -443,11 +443,14 @@ bool SvxGeneralTabPage::GetData_Impl()
: m_pSigningKeyLB->GetSelectedEntry();
OUString aEK = m_pEncryptionKeyLB->GetSelectedEntryPos() == 0 ? OUString()
: m_pEncryptionKeyLB->GetSelectedEntry();
+
aUserOpt.SetToken( UserOptToken::SigningKey, aSK );
aUserOpt.SetToken( UserOptToken::EncryptionKey, aEK );
+ aUserOpt.SetBoolValue( UserOptToken::EncryptToSelf, m_pEncryptToSelfCB->IsChecked() );
- bModified |= m_pSigningKeyLB->IsValueChangedFromSaved();
- bModified |= m_pEncryptionKeyLB->IsValueChangedFromSaved();
+ bModified |= m_pSigningKeyLB->IsValueChangedFromSaved() ||
+ m_pEncryptionKeyLB->IsValueChangedFromSaved() ||
+ m_pEncryptToSelfCB->IsValueChangedFromSaved();
#endif
return bModified;
@@ -489,6 +492,8 @@ void SvxGeneralTabPage::SetData_Impl()
OUString aEK = aUserOpt.GetToken(UserOptToken::EncryptionKey);
aEK.isEmpty() ? m_pEncryptionKeyLB->SelectEntryPos( 0 ) //i.e. 'No Key'
: m_pEncryptionKeyLB->SelectEntry( aEK );
+
+ m_pEncryptToSelfCB->Check( aUserOpt.GetEncryptToSelf() );
#endif
}
diff --git a/include/unotools/useroptions.hxx b/include/unotools/useroptions.hxx
index 946ba8d34c10..60c18df65ae2 100644
--- a/include/unotools/useroptions.hxx
+++ b/include/unotools/useroptions.hxx
@@ -47,7 +47,8 @@ enum class UserOptToken
Apartment = 16,
SigningKey = 17,
EncryptionKey = 18,
- LAST = EncryptionKey,
+ EncryptToSelf = 19,
+ LAST = EncryptToSelf,
};
// class SvtUserOptions --------------------------------------------------
@@ -78,12 +79,14 @@ public:
OUString GetEmail () const;
OUString GetSigningKey () const;
OUString GetEncryptionKey () const;
+ bool GetEncryptToSelf () const;
OUString GetFullName () const;
bool IsTokenReadonly (UserOptToken nToken) const;
OUString GetToken (UserOptToken nToken) const;
void SetToken (UserOptToken nToken, OUString const& rNewToken);
+ void SetBoolValue (UserOptToken nToken, bool bNewValue);
private:
class Impl;
diff --git a/unotools/source/config/useroptions.cxx b/unotools/source/config/useroptions.cxx
index e19168da2885..adf58180204a 100644
--- a/unotools/source/config/useroptions.cxx
+++ b/unotools/source/config/useroptions.cxx
@@ -67,7 +67,8 @@ static o3tl::enumarray<UserOptToken, char const *> vOptionNames = {
"fathersname", // UserOptToken::FathersName
"apartment", // UserOptToken::Apartment
"signingkey", // UserOptToken::SigningKey
- "encryptionkey" // UserOptToken::EncryptionKey
+ "encryptionkey", // UserOptToken::EncryptionKey
+ "encrypttoself" // UserOptToken::EncryptToSelf
};
std::weak_ptr<SvtUserOptions::Impl> SvtUserOptions::xSharedImpl;
@@ -96,12 +97,19 @@ public:
bool IsTokenReadonly (UserOptToken nToken) const;
OUString GetToken (UserOptToken nToken) const;
void SetToken (UserOptToken nToken, OUString const& rNewToken);
+ bool GetBoolValue (UserOptToken nToken) const;
+ void SetBoolValue (UserOptToken nToken, bool& bNewValue);
void Notify ();
private:
uno::Reference<util::XChangesListener> m_xChangeListener;
uno::Reference<container::XNameAccess> m_xCfg;
uno::Reference<beans::XPropertySet> m_xData;
+
+ template < typename ValueType >
+ ValueType GetValue_Impl( UserOptToken nToken ) const;
+ template < typename ValueType >
+ void SetValue_Impl( UserOptToken nToken, ValueType const& rNewValue );
};
void SvtUserOptions::ChangeListener::changesOccurred (util::ChangesEvent const& rEvent)
@@ -153,9 +161,10 @@ SvtUserOptions::Impl::Impl() :
}
}
-OUString SvtUserOptions::Impl::GetToken (UserOptToken nToken) const
+template < typename ValueType >
+ValueType SvtUserOptions::Impl::GetValue_Impl (UserOptToken nToken) const
{
- OUString sToken;
+ ValueType sToken = ValueType();
try
{
if (m_xData.is())
@@ -168,7 +177,8 @@ OUString SvtUserOptions::Impl::GetToken (UserOptToken nToken) const
return sToken;
}
-void SvtUserOptions::Impl::SetToken (UserOptToken nToken, OUString const& sToken)
+template < typename ValueType >
+void SvtUserOptions::Impl::SetValue_Impl (UserOptToken nToken, ValueType const& sToken)
{
try
{
@@ -182,6 +192,26 @@ void SvtUserOptions::Impl::SetToken (UserOptToken nToken, OUString const& sToken
}
}
+OUString SvtUserOptions::Impl::GetToken (UserOptToken nToken) const
+{
+ return GetValue_Impl<OUString>( nToken );
+}
+
+void SvtUserOptions::Impl::SetToken (UserOptToken nToken, OUString const& sToken)
+{
+ SetValue_Impl<OUString>( nToken, sToken );
+}
+
+bool SvtUserOptions::Impl::GetBoolValue (UserOptToken nToken) const
+{
+ return GetValue_Impl<bool>( nToken );
+}
+
+void SvtUserOptions::Impl::SetBoolValue (UserOptToken nToken, bool& bNewValue)
+{
+ SetValue_Impl<bool>( nToken, bNewValue );
+}
+
OUString SvtUserOptions::Impl::GetFullName () const
{
OUString sFullName;
@@ -299,6 +329,18 @@ void SvtUserOptions::SetToken (UserOptToken nToken, OUString const& rNewToken)
xImpl->SetToken(nToken, rNewToken);
}
+void SvtUserOptions::SetBoolValue (UserOptToken nToken, bool bNewValue)
+{
+ osl::MutexGuard aGuard(GetInitMutex());
+ xImpl->SetBoolValue(nToken, bNewValue);
+}
+
+bool SvtUserOptions::GetEncryptToSelf() const
+{
+ osl::MutexGuard aGuard(GetInitMutex());
+ return xImpl->GetBoolValue(UserOptToken::EncryptToSelf);
+}
+
OUString SvtUserOptions::GetFullName () const
{
osl::MutexGuard aGuard(GetInitMutex());
commit df4fac1dbce087bbd01bbec242b93c72edcef74b
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date: Wed Dec 13 18:39:10 2017 +0100
Read/write preferred GPG signing/encryption keys
Change-Id: I3e21469c5f4c4f199407bbe9faba2e2ddca531b3
Reviewed-on: https://gerrit.libreoffice.org/46692
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
diff --git a/cui/source/options/optgenrl.cxx b/cui/source/options/optgenrl.cxx
index b63fbf580b69..83a98e60c7b0 100644
--- a/cui/source/options/optgenrl.cxx
+++ b/cui/source/options/optgenrl.cxx
@@ -428,10 +428,29 @@ bool SvxGeneralTabPage::GetData_Impl()
);
// modified?
+ bool bModified = false;
for (auto const & i: vFields)
+ {
if (i->pEdit->IsValueChangedFromSaved())
- return true;
- return false;
+ {
+ bModified = true;
+ break;
+ }
+ }
+
+#if HAVE_FEATURE_GPGME
+ OUString aSK = m_pSigningKeyLB->GetSelectedEntryPos() == 0 ? OUString() //i.e. no key
+ : m_pSigningKeyLB->GetSelectedEntry();
+ OUString aEK = m_pEncryptionKeyLB->GetSelectedEntryPos() == 0 ? OUString()
+ : m_pEncryptionKeyLB->GetSelectedEntry();
+ aUserOpt.SetToken( UserOptToken::SigningKey, aSK );
+ aUserOpt.SetToken( UserOptToken::EncryptionKey, aEK );
+
+ bModified |= m_pSigningKeyLB->IsValueChangedFromSaved();
+ bModified |= m_pEncryptionKeyLB->IsValueChangedFromSaved();
+#endif
+
+ return bModified;
}
@@ -461,6 +480,16 @@ void SvxGeneralTabPage::SetData_Impl()
// saving
for (auto const & i: vFields)
i->pEdit->SaveValue();
+
+#if HAVE_FEATURE_GPGME
+ OUString aSK = aUserOpt.GetToken(UserOptToken::SigningKey);
+ aSK.isEmpty() ? m_pSigningKeyLB->SelectEntryPos( 0 ) //i.e. 'No Key'
+ : m_pSigningKeyLB->SelectEntry( aSK );
+
+ OUString aEK = aUserOpt.GetToken(UserOptToken::EncryptionKey);
+ aEK.isEmpty() ? m_pEncryptionKeyLB->SelectEntryPos( 0 ) //i.e. 'No Key'
+ : m_pEncryptionKeyLB->SelectEntry( aEK );
+#endif
}
diff --git a/include/unotools/useroptions.hxx b/include/unotools/useroptions.hxx
index f82201fdd28a..946ba8d34c10 100644
--- a/include/unotools/useroptions.hxx
+++ b/include/unotools/useroptions.hxx
@@ -45,7 +45,9 @@ enum class UserOptToken
Zip = 14,
FathersName = 15,
Apartment = 16,
- LAST = Apartment,
+ SigningKey = 17,
+ EncryptionKey = 18,
+ LAST = EncryptionKey,
};
// class SvtUserOptions --------------------------------------------------
@@ -74,6 +76,8 @@ public:
OUString GetTelephoneWork () const;
OUString GetFax () const;
OUString GetEmail () const;
+ OUString GetSigningKey () const;
+ OUString GetEncryptionKey () const;
OUString GetFullName () const;
diff --git a/unotools/source/config/useroptions.cxx b/unotools/source/config/useroptions.cxx
index 31ce8c9893d0..e19168da2885 100644
--- a/unotools/source/config/useroptions.cxx
+++ b/unotools/source/config/useroptions.cxx
@@ -65,7 +65,9 @@ static o3tl::enumarray<UserOptToken, char const *> vOptionNames = {
"initials", // UserOptToken::ID
"postalcode", // UserOptToken::Zip
"fathersname", // UserOptToken::FathersName
- "apartment" // UserOptToken::Apartment
+ "apartment", // UserOptToken::Apartment
+ "signingkey", // UserOptToken::SigningKey
+ "encryptionkey" // UserOptToken::EncryptionKey
};
std::weak_ptr<SvtUserOptions::Impl> SvtUserOptions::xSharedImpl;
@@ -276,6 +278,8 @@ OUString SvtUserOptions::GetTelephoneHome () const { return GetToken(UserOptTok
OUString SvtUserOptions::GetTelephoneWork () const { return GetToken(UserOptToken::TelephoneWork); }
OUString SvtUserOptions::GetFax () const { return GetToken(UserOptToken::Fax); }
OUString SvtUserOptions::GetEmail () const { return GetToken(UserOptToken::Email); }
+OUString SvtUserOptions::GetSigningKey () const { return GetToken(UserOptToken::SigningKey); }
+OUString SvtUserOptions::GetEncryptionKey () const { return GetToken(UserOptToken::EncryptionKey); }
bool SvtUserOptions::IsTokenReadonly (UserOptToken nToken) const
{
commit ee40674b4c9343db5e69cd5118bdbcf8e6edad6d
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date: Thu Dec 14 18:12:56 2017 +0100
Do things with preferred GPG keys
For signing, preselect the key in the list of available keys.
For encryption, when 'encrypt to self' bit is set, add user's key
to the list of keys to encryption.
Change-Id: I5bbfd0e2cc97b76c1304a2a345a51cf83bc5949e
Reviewed-on: https://gerrit.libreoffice.org/46694
Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
diff --git a/xmlsecurity/inc/certificatechooser.hxx b/xmlsecurity/inc/certificatechooser.hxx
index be3828b5c5e9..6049eb4a3869 100644
--- a/xmlsecurity/inc/certificatechooser.hxx
+++ b/xmlsecurity/inc/certificatechooser.hxx
@@ -73,6 +73,8 @@ private:
bool mbInitialized;
UserAction meAction;
+ OUString msPreferredKey;
+ css::uno::Reference<css::security::XCertificate> mxEncryptToSelf;
DECL_LINK(ViewButtonHdl, Button*, void);
DECL_LINK(CertificateHighlightHdl, SvTreeListBox*, void );
diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx
index bf100c6d0401..5a1edcae872d 100644
--- a/xmlsecurity/source/dialogs/certificatechooser.cxx
+++ b/xmlsecurity/source/dialogs/certificatechooser.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-
+#include <config_gpgme.h>
#include <certificatechooser.hxx>
#include <certificateviewer.hxx>
#include <biginteger.hxx>
@@ -31,6 +31,7 @@
#include <resourcemanager.hxx>
#include <vcl/msgbox.hxx>
#include <svtools/treelistentry.hxx>
+#include <unotools/useroptions.hxx>
using namespace css;
@@ -159,11 +160,14 @@ void CertificateChooser::ImplInitialize()
if ( mbInitialized )
return;
+ SvtUserOptions aUserOpts;
+
switch (meAction)
{
case UserAction::Sign:
m_pFTSign->Show();
m_pOKBtn->SetText( get<FixedText>("str_sign")->GetText() );
+ msPreferredKey = aUserOpts.GetSigningKey();
break;
case UserAction::Encrypt:
@@ -172,6 +176,7 @@ void CertificateChooser::ImplInitialize()
m_pDescriptionED->Hide();
m_pCertLB->SetSelectionMode( SelectionMode::Multiple );
m_pOKBtn->SetText( get<FixedText>("str_encrypt")->GetText() );
+ msPreferredKey = aUserOpts.GetEncryptionKey();
break;
}
@@ -210,6 +215,7 @@ void CertificateChooser::ImplInitialize()
}
}
+
// fill list of certificates; the first entry will be selected
for ( sal_Int32 nC = 0; nC < nCertificates; ++nC )
{
@@ -218,12 +224,26 @@ void CertificateChooser::ImplInitialize()
userData->xSecurityContext = secContext;
userData->xSecurityEnvironment = secEnvironment;
mvUserData.push_back(userData);
+
+ OUString sIssuer = XmlSec::GetContentPart( xCerts[ nC ]->getIssuerName() );
SvTreeListEntry* pEntry = m_pCertLB->InsertEntry( XmlSec::GetContentPart( xCerts[ nC ]->getSubjectName() )
- + "\t" + XmlSec::GetContentPart( xCerts[ nC ]->getIssuerName() )
+ + "\t" + sIssuer
+ "\t" + XmlSec::GetCertificateKind( xCerts[ nC ]->getCertificateKind() )
+ "\t" + XmlSec::GetDateString( xCerts[ nC ]->getNotValidAfter() )
+ "\t" + UsageInClearText( xCerts[ nC ]->getCertificateUsage() ) );
pEntry->SetUserData( userData.get() );
+
+#if HAVE_FEATURE_GPGME
+ // only GPG has preferred keys
+ if ( sIssuer == msPreferredKey )
+ {
+ if ( meAction == UserAction::Sign )
+ m_pCertLB->Select( pEntry );
+ else if ( meAction == UserAction::Encrypt &&
+ aUserOpts.GetEncryptToSelf() )
+ mxEncryptToSelf = xCerts[nC];
+ }
+#endif
}
}
@@ -259,6 +279,11 @@ uno::Sequence<uno::Reference< css::security::XCertificate > > CertificateChooser
aRet.push_back( xCert );
}
+#if HAVE_FEATURE_GPGME
+ if ( mxEncryptToSelf.is())
+ aRet.push_back( mxEncryptToSelf );
+#endif
+
return comphelper::containerToSequence(aRet);
}
More information about the Libreoffice-commits
mailing list