diff options
Diffstat (limited to 'xmlsecurity')
-rw-r--r-- | xmlsecurity/inc/certificatechooser.hxx | 1 | ||||
-rw-r--r-- | xmlsecurity/inc/strings.hrc | 5 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/certificatechooser.cxx | 36 | ||||
-rw-r--r-- | xmlsecurity/uiconfig/ui/selectcertificatedialog.ui | 24 |
4 files changed, 61 insertions, 5 deletions
diff --git a/xmlsecurity/inc/certificatechooser.hxx b/xmlsecurity/inc/certificatechooser.hxx index 494ea40de1e4..9f7b2e2407d5 100644 --- a/xmlsecurity/inc/certificatechooser.hxx +++ b/xmlsecurity/inc/certificatechooser.hxx @@ -60,6 +60,7 @@ private: std::unique_ptr<weld::Label> m_xFTSign; std::unique_ptr<weld::Label> m_xFTEncrypt; + std::unique_ptr<weld::Label> m_xFTLoadedCerts; std::unique_ptr<weld::TreeView> m_xCertLB; std::unique_ptr<weld::Button> m_xViewBtn; std::unique_ptr<weld::Button> m_xOKBtn; diff --git a/xmlsecurity/inc/strings.hrc b/xmlsecurity/inc/strings.hrc index 7ed55690f97b..72437187c5b8 100644 --- a/xmlsecurity/inc/strings.hrc +++ b/xmlsecurity/inc/strings.hrc @@ -63,6 +63,11 @@ #define STR_SELECTSIGN NC_("selectcertificatedialog|str_selectsign", "Select") #define STR_ENCRYPT NC_("selectcertificatedialog|str_encrypt", "Encrypt") +#define STR_LOADED_CERTS_BASE NC_("selectcertificatedialog|str_loaded_certs_base", "Certificates are loaded from:\n") +#define STR_LOADED_CERTS_OPENPGP_GPG NC_("selectcertificatedialog|str_loaded_certs_openpgp_gpg", "GPG/GnuPG (OpenPGP)") +#define STR_LOADED_CERTS_X509_MSCRYPT NC_("selectcertificatedialog|str_loaded_certs_x509_mscrypt", "Windows Certificate Manager / CertMgr (X.509)") +#define STR_LOADED_CERTS_X509_NSS_NEWLINE NC_("selectcertificatedialog|str_loaded_certs_x509_nss", "NSS Certificate DB in the Mozilla Profile (X.509) at:\n") + #define STR_BROKEN_MACRO_CERTIFICATE_DATA NC_("STR_BROKEN_MACRO_CERTIFICATE_DATA", "Macro security problem!\n\nBroken certificate data: %{data}") #define STR_RELOAD_FILE_WARNING NC_("STR_RELOAD_FILE_WARNING", "Reload the file to apply the new macro security level") #define STR_TRUST_UNTRUSTED_PUBKEY NC_("STR_TRUST_UNTRUSTED_PUBKEY", "Security warning: the following OpenPGP public key is untrusted:\n\n%{data}\n\nEncrypting with an untrusted public key increases the risk of a \"man-in-the-middle\" attack. A successful \"man-in-the-middle\" attack gives malicious third parties the ability to decrypt your document.\n\nDo you really want to encrypt your document with this untrusted public key?") diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx index b74389d92304..e612027ba759 100644 --- a/xmlsecurity/source/dialogs/certificatechooser.cxx +++ b/xmlsecurity/source/dialogs/certificatechooser.cxx @@ -20,13 +20,16 @@ #include <config_gpgme.h> #include <certificatechooser.hxx> #include <certificateviewer.hxx> +#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp> #include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp> +#include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> #include <comphelper/xmlsechelper.hxx> #include <com/sun/star/security/NoPasswordException.hpp> #include <com/sun/star/security/CertificateCharacters.hpp> +#include <com/sun/star/xml/crypto/NSSInitializer.hpp> // tdf#161909 - maybe not needed #include <unotools/datetime.hxx> #include <unotools/charclass.hxx> @@ -45,6 +48,7 @@ CertificateChooser::CertificateChooser(weld::Window* _pParent, , meAction(eAction) , m_xFTSign(m_xBuilder->weld_label(u"sign"_ustr)) , m_xFTEncrypt(m_xBuilder->weld_label(u"encrypt"_ustr)) + , m_xFTLoadedCerts(m_xBuilder->weld_label(u"loaded-certs"_ustr)) , m_xCertLB(m_xBuilder->weld_tree_view(u"signatures"_ustr)) , m_xViewBtn(m_xBuilder->weld_button(u"viewcert"_ustr)) , m_xOKBtn(m_xBuilder->weld_button(u"ok"_ustr)) @@ -176,6 +180,8 @@ void CertificateChooser::ImplInitialize(bool mbSearch) } + bool has_x509 = false; + bool has_openpgp_gpg = false; ::std::optional<int> oSelectRow; uno::Sequence<uno::Reference< security::XCertificate>> xCerts; for (auto& secContext : mxSecurityContexts) @@ -186,6 +192,11 @@ void CertificateChooser::ImplInitialize(bool mbSearch) if (!secEnvironment.is()) continue; + uno::Reference<lang::XServiceInfo> secContextServiceInfo(secContext, uno::UNO_QUERY); + OUString secContextType = secContextServiceInfo->getImplementationName(); + if (secContextType == "com.sun.star.xml.crypto.XMLSecurityContext") has_x509 = true; + else if (secContextType == "com.sun.star.xml.security.gpg.XMLSecurityContext_GpgImpl") has_openpgp_gpg = true; + try { if (xMemCerts.count(secContext)) @@ -265,6 +276,31 @@ void CertificateChooser::ImplInitialize(bool mbSearch) } } + std::vector<OUString> seqLoadedCertsLabels; + if (has_openpgp_gpg) + seqLoadedCertsLabels.push_back(XsResId(STR_LOADED_CERTS_OPENPGP_GPG)); + if (has_x509) + { +#ifdef _WIN32 + seqLoadedCertsLabels.push_back(XsResId(STR_LOADED_CERTS_X509_MSCRYPT)); +#else // _WIN32 + // Should be the last one for optimal formatting, because of the appended path. + uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() ); + OUString nssPath = xml::crypto::NSSInitializer::create(xContext)->getNSSPath(); + seqLoadedCertsLabels.push_back(XsResId(STR_LOADED_CERTS_X509_NSS_NEWLINE) + nssPath); +#endif // _WIN32 + } + OUString loadedCertsLabel = XsResId(STR_LOADED_CERTS_BASE + ); + for (size_t label_i=0; label_i<seqLoadedCertsLabels.size(); label_i++) + { + if (label_i > 0) + loadedCertsLabel += ", "; + loadedCertsLabel += seqLoadedCertsLabels[label_i]; + } + m_xFTLoadedCerts->set_label(loadedCertsLabel); + m_xFTLoadedCerts->set_visible(true); + m_xCertLB->thaw(); m_xCertLB->unselect_all(); m_xCertLB->make_sorted(); diff --git a/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui b/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui index 12e7754121a9..957eccc285cb 100644 --- a/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui +++ b/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui @@ -97,7 +97,7 @@ <child> <object class="GtkLabel" id="sign"> <property name="can-focus">False</property> - <property name="label" translatable="yes" context="selectcertificatedialog|sign">Select the certificate you want to use for signing:</property> + <property name="label" translatable="yes" context="selectcertificatedialog|sign">Select the certificate you want to use for signing.</property> <property name="wrap">True</property> <property name="width-chars">56</property> <property name="max-width-chars">56</property> @@ -125,6 +125,20 @@ </packing> </child> <child> + <object class="GtkLabel" id="loaded-certs"> + <property name="can-focus">False</property> + <property name="wrap">True</property> + <property name="width-chars">56</property> + <property name="max-width-chars">56</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can-focus">True</property> @@ -230,7 +244,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> <child> @@ -249,7 +263,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">3</property> + <property name="position">4</property> </packing> </child> <child> @@ -291,7 +305,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">4</property> + <property name="position">5</property> </packing> </child> <child> @@ -342,7 +356,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">5</property> + <property name="position">6</property> </packing> </child> </object> |