diff options
Diffstat (limited to 'xmlsecurity/source')
-rw-r--r-- | xmlsecurity/source/dialogs/certificatechooser.cxx | 36 |
1 files changed, 36 insertions, 0 deletions
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(); |