[Libreoffice-commits] core.git: cui/source officecfg/registry

Jan-Marek Glogowski (via logerrit) logerrit at kemper.freedesktop.org
Wed Oct 23 08:59:06 UTC 2019


 cui/source/options/certpath.cxx                            |   61 +++++++------
 cui/source/options/certpath.hxx                            |    2 
 officecfg/registry/schema/org/openoffice/Office/Common.xcs |    5 +
 3 files changed, 44 insertions(+), 24 deletions(-)

New commits:
commit eca31344795f7dca5b3407c56ab240c11a97c58f
Author:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Tue Oct 1 15:24:26 2019 +0000
Commit:     Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Wed Oct 23 10:57:59 2019 +0200

    tdf#127909 save manually selected certificate path
    
    Saves the value of the manual selection, independent from the real
    active certificate path, to restore the setting for the dialog.
    
    Change-Id: I5c423c594f38b1e2b25caa650b3ca2862cf49d82
    Reviewed-on: https://gerrit.libreoffice.org/79979
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>

diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx
index 0d8366fb6c40..6f52fcbf1926 100644
--- a/cui/source/options/certpath.cxx
+++ b/cui/source/options/certpath.cxx
@@ -88,27 +88,9 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
 
     try
     {
-        OUString sUserSetCertPath =
-            officecfg::Office::Common::Security::Scripting::CertDir::get().get_value_or(OUString());
-
-        if (!sUserSetCertPath.isEmpty())
-        {
-            // check existence
-            ::osl::DirectoryItem aUserPathItem;
-            OUString sUserSetCertURLPath;
-            osl::FileBase::getFileURLFromSystemPath(sUserSetCertPath, sUserSetCertURLPath);
-            ::osl::FileBase::RC result = ::osl::DirectoryItem::get( sUserSetCertURLPath, aUserPathItem );
-            if ( result == ::osl::FileBase::E_None  )
-            {
-                ::osl::FileStatus aStatus( osl_FileStatus_Mask_Validate );
-                result = aUserPathItem.getFileStatus( aStatus );
-                if ( result == ::osl::FileBase::E_None  )
-                {
-                    // the cert path exists
-                    AddCertPath(m_sManualLabel, sUserSetCertPath);
-                }
-            }
-        }
+        AddManualCertPath(officecfg::Office::Common::Security::Scripting::CertDir::get().get_value_or(OUString()));
+        if (m_sManualPath.isEmpty())
+            AddManualCertPath(officecfg::Office::Common::Security::Scripting::ManualCertDir::get(), false);
     }
     catch (const uno::Exception &)
     {
@@ -120,6 +102,24 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
         AddCertPath("$MOZILLA_CERTIFICATE_FOLDER", OUString(pEnv, strlen(pEnv), osl_getThreadTextEncoding()));
 }
 
+void CertPathDialog::AddManualCertPath(const OUString& sUserSetCertPath, bool bSelect)
+{
+    if (sUserSetCertPath.isEmpty())
+        return;
+
+    // check existence
+    ::osl::DirectoryItem aUserPathItem;
+    OUString sUserSetCertURLPath;
+    osl::FileBase::getFileURLFromSystemPath(sUserSetCertPath, sUserSetCertURLPath);
+    if (::osl::FileBase::E_None == ::osl::DirectoryItem::get(sUserSetCertURLPath, aUserPathItem))
+    {
+        ::osl::FileStatus aStatus( osl_FileStatus_Mask_Validate );
+        if (::osl::FileBase::E_None == aUserPathItem.getFileStatus(aStatus))
+            // the cert path exists
+            AddCertPath(m_sManualLabel, sUserSetCertPath, bSelect);
+    }
+}
+
 IMPL_LINK_NOARG(CertPathDialog, OKHdl_Impl, weld::Button&, void)
 {
     try
@@ -128,6 +128,7 @@ IMPL_LINK_NOARG(CertPathDialog, OKHdl_Impl, weld::Button&, void)
             comphelper::ConfigurationChanges::create());
         officecfg::Office::Common::Security::Scripting::CertDir::set(
             getDirectory(), batch);
+        officecfg::Office::Common::Security::Scripting::ManualCertDir::set(m_sManualPath, batch);
         batch->commit();
     }
     catch (const uno::Exception &)
@@ -173,6 +174,7 @@ void CertPathDialog::HandleEntryChecked(int nRow)
 
 void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath, const bool bSelect)
 {
+    int nRow = -1;
     for (int i = 0, nCount = m_xCertPathList->n_children(); i < nCount; ++i)
     {
         OUString sCertPath = m_xCertPathList->get_id(i);
@@ -184,10 +186,18 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
             HandleEntryChecked(i);
             return;
         }
+        else if (m_xCertPathList->get_text(i, 1) == rProfile)
+            nRow = i;
     }
 
-    m_xCertPathList->append();
-    const int nRow = m_xCertPathList->n_children() - 1;
+    if (m_sManualLabel == rProfile)
+        m_sManualPath = rPath;
+
+    if (nRow < 0)
+    {
+        m_xCertPathList->append();
+        nRow = m_xCertPathList->n_children() - 1;
+    }
     m_xCertPathList->set_toggle(nRow, bSelect ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
     m_xCertPathList->set_text(nRow, rProfile, 1);
     m_xCertPathList->set_text(nRow, rPath, 2);
@@ -202,7 +212,10 @@ IMPL_LINK_NOARG(CertPathDialog, ManualHdl_Impl, weld::Button&, void)
         uno::Reference<ui::dialogs::XFolderPicker2> xFolderPicker = ui::dialogs::FolderPicker::create(comphelper::getProcessComponentContext());
 
         OUString sURL;
-        osl::Security().getHomeDir(sURL);
+        if (!m_sManualPath.isEmpty())
+            osl::FileBase::getFileURLFromSystemPath(m_sManualPath, sURL);
+        if (sURL.isEmpty())
+            osl::Security().getHomeDir(sURL);
         xFolderPicker->setDisplayDirectory(sURL);
         xFolderPicker->setDescription(m_sAddDialogText);
 
diff --git a/cui/source/options/certpath.hxx b/cui/source/options/certpath.hxx
index 70bf5e25d2a1..c23812eefed3 100644
--- a/cui/source/options/certpath.hxx
+++ b/cui/source/options/certpath.hxx
@@ -19,6 +19,7 @@ class CertPathDialog : public weld::GenericDialogController
     std::unique_ptr<weld::TreeView> m_xCertPathList;
     OUString m_sAddDialogText;
     OUString m_sManualLabel;
+    OUString m_sManualPath;
 
     typedef std::pair<int, int> row_col;
     DECL_LINK(CheckHdl_Impl, const row_col&, void);
@@ -27,6 +28,7 @@ class CertPathDialog : public weld::GenericDialogController
 
     void HandleEntryChecked(int nRow);
     void AddCertPath(const OUString &rProfile, const OUString &rPath, bool bSelect = true);
+    void AddManualCertPath(const OUString& sUserSetCertPath, bool bSelect = true);
 
 public:
     explicit CertPathDialog(weld::Window* pParent);
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 0c6b90fea58d..5eeb6c570331 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -2640,6 +2640,11 @@
             <desc>Contains the path to the users NSS certificate directory.</desc>
           </info>
         </prop>
+        <prop oor:name="ManualCertDir" oor:type="xs:string" oor:nillable="false">
+          <info>
+            <desc>Contains the last path manually selected by the user for the CertDir property.</desc>
+          </info>
+        </prop>
         <prop oor:name="TSAURLs" oor:type="oor:string-list">
           <info>
             <desc>Contains the URLs or Time Stamping Authority servers.</desc>


More information about the Libreoffice-commits mailing list