dbaccess/source/core/dataaccess/ModelImpl.cxx |   24 ++++++++++--------------
 dbaccess/source/core/inc/ModelImpl.hxx        |    3 ++-
 include/sfx2/docmacromode.hxx                 |   10 +++++++++-
 sfx2/source/doc/docmacromode.cxx              |    2 +-
 sfx2/source/doc/objmisc.cxx                   |   26 ++++++++++----------------
 sfx2/source/inc/objshimp.hxx                  |    3 ++-
 6 files changed, 34 insertions(+), 34 deletions(-)

New commits:
commit 89780c208837973e21ddbf098d77f4369018ee9e
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Nov 7 16:05:07 2023 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Tue Nov 7 17:41:49 2023 +0100

    Pass XInteractionHandler to hasTrustedScriptingSignature instead of a bool
    
    This allows to use the same interaction handler there, as used in
    DocumentMacroMode::adjustMacroMode. hasTrustedScriptingSignature
    used to find its own interaction handler; and that would conflict
    with e.g. ODatabaseModelImpl::adjustMacroMode_AutoReject, which
    passes nullptr to adjustMacroMode, with intention to not show any
    UI; but with signed macros (see tdf#97694), the UI would still
    appear.
    
    Change-Id: Ia209f96bef67dccfe1da23c4d172ac47497f8eb1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159070
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/dbaccess/source/core/dataaccess/ModelImpl.cxx 
b/dbaccess/source/core/dataaccess/ModelImpl.cxx
index 66f8309ac657..98023c53c38b 100644
--- a/dbaccess/source/core/dataaccess/ModelImpl.cxx
+++ b/dbaccess/source/core/dataaccess/ModelImpl.cxx
@@ -1357,7 +1357,8 @@ SignatureState 
ODatabaseModelImpl::getScriptingSignatureState()
     return m_nScriptingSignatureState;
 }
 
-bool ODatabaseModelImpl::hasTrustedScriptingSignature(bool bAllowUIToAddAuthor)
+bool ODatabaseModelImpl::hasTrustedScriptingSignature(
+    const css::uno::Reference<css::task::XInteractionHandler>& _rxInteraction)
 {
     bool bResult = false;
 
@@ -1389,20 +1390,15 @@ bool 
ODatabaseModelImpl::hasTrustedScriptingSignature(bool bAllowUIToAddAuthor)
                                   });
         }
 
-        if (!bResult && bAllowUIToAddAuthor)
+        if (!bResult && _rxInteraction)
         {
-            Reference<XInteractionHandler> xInteraction;
-            xInteraction = 
m_aMediaDescriptor.getOrDefault("InteractionHandler", xInteraction);
-            if (xInteraction.is())
-            {
-                task::DocumentMacroConfirmationRequest aRequest;
-                aRequest.DocumentURL = m_sDocFileLocation;
-                aRequest.DocumentStorage = xStorage;
-                aRequest.DocumentSignatureInformation = aInfo;
-                aRequest.DocumentVersion = aODFVersion;
-                aRequest.Classification = 
task::InteractionClassification_QUERY;
-                bResult = SfxMedium::CallApproveHandler(xInteraction, 
uno::Any(aRequest), true);
-            }
+            task::DocumentMacroConfirmationRequest aRequest;
+            aRequest.DocumentURL = m_sDocFileLocation;
+            aRequest.DocumentStorage = xStorage;
+            aRequest.DocumentSignatureInformation = aInfo;
+            aRequest.DocumentVersion = aODFVersion;
+            aRequest.Classification = task::InteractionClassification_QUERY;
+            bResult = SfxMedium::CallApproveHandler(_rxInteraction, 
uno::Any(aRequest), true);
         }
     }
     catch (uno::Exception&)
diff --git a/dbaccess/source/core/inc/ModelImpl.hxx 
b/dbaccess/source/core/inc/ModelImpl.hxx
index a582ece2575f..2fc19830ca42 100644
--- a/dbaccess/source/core/inc/ModelImpl.hxx
+++ b/dbaccess/source/core/inc/ModelImpl.hxx
@@ -479,7 +479,8 @@ public:
     virtual bool macroCallsSeenWhileLoading() const override;
     virtual css::uno::Reference< css::document::XEmbeddedScripts > 
getEmbeddedDocumentScripts() const override;
     virtual SignatureState getScriptingSignatureState() override;
-    virtual bool hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) 
override;
+    virtual bool hasTrustedScriptingSignature(
+        const css::uno::Reference<css::task::XInteractionHandler>& 
_rxInteraction) override;
 
     // IModifiableDocument
     virtual void storageIsModified() override;
diff --git a/include/sfx2/docmacromode.hxx b/include/sfx2/docmacromode.hxx
index 2a0421aa0c90..f7213b709b87 100644
--- a/include/sfx2/docmacromode.hxx
+++ b/include/sfx2/docmacromode.hxx
@@ -152,10 +152,18 @@ namespace sfx2
             When this happens, this method here should be replaced by a method 
at this
             new class.
 
+            @param _rxInteraction
+                A handler for interactions which might become necessary to 
trust a correct
+                but not yet trusted signature, possibly also adding the author 
certificate to
+                trusted list.
+
+                If the user needs to be asked, and if this parameter is 
<NULL/>, the most
+                defensive assumptions will be made, i.e. false will be 
returned.
+
             @seealso <sfx2/signaturestate.hxx>
         */
         virtual bool
-                    hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) = 
0;
+                    hasTrustedScriptingSignature( const css::uno::Reference< 
css::task::XInteractionHandler >& _rxInteraction ) = 0;
 
     protected:
         ~IMacroDocumentAccess() {}
diff --git a/sfx2/source/doc/docmacromode.cxx b/sfx2/source/doc/docmacromode.cxx
index 637f137866ba..b1488b5dbe48 100644
--- a/sfx2/source/doc/docmacromode.cxx
+++ b/sfx2/source/doc/docmacromode.cxx
@@ -200,7 +200,7 @@ namespace sfx2
                 const bool bAllowUI = nMacroExecutionMode != 
MacroExecMode::FROM_LIST_AND_SIGNED_NO_WARN
                                                  && (nMacroExecutionMode == 
MacroExecMode::ALWAYS_EXECUTE
                                                      || 
!SvtSecurityOptions::IsReadOnly(SvtSecurityOptions::EOption::MacroTrustedAuthors));
-                const bool bHasTrustedMacroSignature = 
m_xData->m_rDocumentAccess.hasTrustedScriptingSignature(bAllowUI);
+                const bool bHasTrustedMacroSignature = 
m_xData->m_rDocumentAccess.hasTrustedScriptingSignature(bAllowUI ? 
rxInteraction : nullptr);
 
                 SignatureState nSignatureState = 
m_xData->m_rDocumentAccess.getScriptingSignatureState();
                 if ( nSignatureState == SignatureState::BROKEN )
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index a8f39d06f492..c6bd3b62ddd6 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -1847,7 +1847,8 @@ SignatureState 
SfxObjectShell_Impl::getScriptingSignatureState()
     return nSignatureState;
 }
 
-bool SfxObjectShell_Impl::hasTrustedScriptingSignature( bool 
bAllowUIToAddAuthor )
+bool SfxObjectShell_Impl::hasTrustedScriptingSignature(
+    const css::uno::Reference<css::task::XInteractionHandler>& _rxInteraction)
 {
     bool bResult = false;
 
@@ -1883,22 +1884,15 @@ bool SfxObjectShell_Impl::hasTrustedScriptingSignature( 
bool bAllowUIToAddAuthor
                         [&xSigner](const 
security::DocumentSignatureInformation& rInfo) {
                             return xSigner->isAuthorTrusted( rInfo.Signer ); 
});
 
-                    if ( !bResult && bAllowUIToAddAuthor )
+                    if (!bResult && _rxInteraction)
                     {
-                        uno::Reference< task::XInteractionHandler > 
xInteraction;
-                        if ( rDocShell.GetMedium() )
-                            xInteraction = 
rDocShell.GetMedium()->GetInteractionHandler();
-
-                        if ( xInteraction.is() )
-                        {
-                            task::DocumentMacroConfirmationRequest aRequest;
-                            aRequest.DocumentURL = getDocumentLocation();
-                            aRequest.DocumentStorage = 
rDocShell.GetMedium()->GetZipStorageToSign_Impl();
-                            aRequest.DocumentSignatureInformation = aInfo;
-                            aRequest.DocumentVersion = aVersion;
-                            aRequest.Classification = 
task::InteractionClassification_QUERY;
-                            bResult = SfxMedium::CallApproveHandler( 
xInteraction, uno::Any( aRequest ), true );
-                        }
+                        task::DocumentMacroConfirmationRequest aRequest;
+                        aRequest.DocumentURL = getDocumentLocation();
+                        aRequest.DocumentStorage = 
rDocShell.GetMedium()->GetZipStorageToSign_Impl();
+                        aRequest.DocumentSignatureInformation = aInfo;
+                        aRequest.DocumentVersion = aVersion;
+                        aRequest.Classification = 
task::InteractionClassification_QUERY;
+                        bResult = SfxMedium::CallApproveHandler( 
_rxInteraction, uno::Any( aRequest ), true );
                     }
                 }
             }
diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx
index 7f9624436a15..e7cf6e6ee062 100644
--- a/sfx2/source/inc/objshimp.hxx
+++ b/sfx2/source/inc/objshimp.hxx
@@ -149,7 +149,8 @@ struct SfxObjectShell_Impl final : public 
::sfx2::IMacroDocumentAccess
     virtual css::uno::Reference< css::document::XEmbeddedScripts > 
getEmbeddedDocumentScripts() const override;
     virtual SignatureState getScriptingSignatureState() override;
 
-    virtual bool hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) 
override;
+    virtual bool hasTrustedScriptingSignature(
+        const css::uno::Reference<css::task::XInteractionHandler>& 
_rxInteraction) override;
 };
 
 #endif

Reply via email to