From 2dff5e856ab343b1296f63d645c47382493fe2fe Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Tue, 31 Jan 2017 09:07:14 +0100 Subject: tdf#105566 Show InfoBar when signature is invalid gpg4libre Change-Id: I272ac155889e25b9af91ff723a014588a65b045a Reviewed-on: https://gerrit.libreoffice.org/33737 Reviewed-by: Samuel Mehrbrodt Tested-by: Samuel Mehrbrodt --- dbaccess/source/core/dataaccess/ModelImpl.cxx | 5 ----- dbaccess/source/core/dataaccess/ModelImpl.hxx | 1 - include/sfx2/docmacromode.hxx | 18 ------------------ include/sfx2/objsh.hxx | 2 +- include/sfx2/sfx.hrc | 2 ++ include/svtools/sfxecode.hxx | 1 - sfx2/source/doc/docmacromode.cxx | 4 ---- sfx2/source/doc/objmisc.cxx | 17 +++-------------- sfx2/source/inc/objshimp.hxx | 1 - sfx2/source/view/view.src | 10 ++++++++++ sfx2/source/view/viewfrm.cxx | 12 ++++++++++++ svx/source/src/errtxt.src | 4 ---- uui/source/iahndl.cxx | 10 +++------- 13 files changed, 31 insertions(+), 56 deletions(-) diff --git a/dbaccess/source/core/dataaccess/ModelImpl.cxx b/dbaccess/source/core/dataaccess/ModelImpl.cxx index 545b1c9e232b..8c94d9a711c4 100644 --- a/dbaccess/source/core/dataaccess/ModelImpl.cxx +++ b/dbaccess/source/core/dataaccess/ModelImpl.cxx @@ -1335,11 +1335,6 @@ bool ODatabaseModelImpl::hasTrustedScriptingSignature( bool /*bAllowUIToAddAutho return false; } -void ODatabaseModelImpl::showBrokenSignatureWarning( const Reference< XInteractionHandler >& /*_rxInteraction*/ ) const -{ - OSL_FAIL( "ODatabaseModelImpl::showBrokenSignatureWarning: signatures can't be broken - we do not support them!" ); -} - void ODatabaseModelImpl::storageIsModified() { setModified( true ); diff --git a/dbaccess/source/core/dataaccess/ModelImpl.hxx b/dbaccess/source/core/dataaccess/ModelImpl.hxx index 71ecca9ed1c0..fb02e0ed6fcb 100644 --- a/dbaccess/source/core/dataaccess/ModelImpl.hxx +++ b/dbaccess/source/core/dataaccess/ModelImpl.hxx @@ -467,7 +467,6 @@ public: virtual css::uno::Reference< css::document::XEmbeddedScripts > getEmbeddedDocumentScripts() const override; virtual SignatureState getScriptingSignatureState() override; virtual bool hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) override; - virtual void showBrokenSignatureWarning( const css::uno::Reference< css::task::XInteractionHandler >& _rxInteraction ) const override; // IModifiableDocument virtual void storageIsModified() override; diff --git a/include/sfx2/docmacromode.hxx b/include/sfx2/docmacromode.hxx index 01a1d7a3a593..e2ffeab68c43 100644 --- a/include/sfx2/docmacromode.hxx +++ b/include/sfx2/docmacromode.hxx @@ -149,24 +149,6 @@ namespace sfx2 virtual bool hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) = 0; - /** shows a warning that the document's signature is broken - - Here, a similar note applies as to getScriptingSignatureState: This method doesn't - really belong here. It's just there because SfxObjectShell_Impl::bSignatureErrorIsShown - is not accessible where the method is called. - So, once the signature handling has been oursourced from SfxObjectShell/_Impl, so it - is re-usable in non-SFX contexts as well, this method here is also unneeded, probably. - - @param _rxInteraction - the interaction handler to use for showing the warning. It is exactly the same - as passed to DocumentMacroMode::adjustMacroMode, so it is if and - only if the instance passed to that method was . - */ - virtual void - showBrokenSignatureWarning( - const css::uno::Reference< css::task::XInteractionHandler >& _rxInteraction - ) const = 0; - protected: ~IMacroDocumentAccess() {} }; diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx index 7a2e133c83fa..bd9640934714 100644 --- a/include/sfx2/objsh.hxx +++ b/include/sfx2/objsh.hxx @@ -684,7 +684,7 @@ public: SAL_DLLPRIVATE void InitOwnModel_Impl(); SAL_DLLPRIVATE void BreakMacroSign_Impl( bool bBreakMacroSing ); SAL_DLLPRIVATE void CheckSecurityOnLoading_Impl(); - SAL_DLLPRIVATE void CheckForBrokenDocSignatures_Impl( const css::uno::Reference< css::task::XInteractionHandler >& xHandler ); + SAL_DLLPRIVATE void CheckForBrokenDocSignatures_Impl(); SAL_DLLPRIVATE static SignatureState ImplCheckSignaturesInformation( const css::uno::Sequence< css::security::DocumentSignatureInformation >& aInfos ); SAL_DLLPRIVATE void CheckEncryption_Impl( const css::uno::Reference< css::task::XInteractionHandler >& xHandler ); diff --git a/include/sfx2/sfx.hrc b/include/sfx2/sfx.hrc index 5e2c759dab35..25e8355829f6 100644 --- a/include/sfx2/sfx.hrc +++ b/include/sfx2/sfx.hrc @@ -120,6 +120,8 @@ #define STR_CLASSIFIED_EXPORT_CONTROL (RID_SFX_START+136) #define STR_READONLY_SIGN (RID_SFX_START+137) #define STR_READONLY_PDF (RID_SFX_START+138) +#define STR_SIGNATURE_BROKEN (RID_SFX_START+139) +#define STR_SIGNATURE_SHOW (RID_SFX_START+140) #define STR_ACCTITLE_PRODUCTIVITYTOOLS (RID_SFX_START+157) #define SFX_THUMBNAIL_TEXT (RID_SFX_START+158) diff --git a/include/svtools/sfxecode.hxx b/include/svtools/sfxecode.hxx index 723bf7ee2e11..99083f298ec3 100644 --- a/include/svtools/sfxecode.hxx +++ b/include/svtools/sfxecode.hxx @@ -72,7 +72,6 @@ #define ERRCODE_SFX_CANTCREATEBACKUP (ERRCODE_AREA_SFX | ERRCODE_CLASS_CREATE | 50) #define ERRCODE_SFX_MACROS_SUPPORT_DISABLED (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 51) #define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 52) -#define ERRCODE_SFX_BROKENSIGNATURE (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 53) #define ERRCODE_SFX_SHARED_NOPASSWORDCHANGE (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 54) #define ERRCODE_SFX_INCOMPLETE_ENCRYPTION (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 55) #define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 56) diff --git a/sfx2/source/doc/docmacromode.cxx b/sfx2/source/doc/docmacromode.cxx index a67a455284e0..4df381c8e1fe 100644 --- a/sfx2/source/doc/docmacromode.cxx +++ b/sfx2/source/doc/docmacromode.cxx @@ -230,10 +230,6 @@ namespace sfx2 SignatureState nSignatureState = m_xData->m_rDocumentAccess.getScriptingSignatureState(); if ( nSignatureState == SignatureState::BROKEN ) { - // the signature is broken, no macro execution - if ( nMacroExecutionMode != MacroExecMode::FROM_LIST_AND_SIGNED_NO_WARN ) - m_xData->m_rDocumentAccess.showBrokenSignatureWarning( rxInteraction ); - return disallowMacroExecution(); } else if ( bHasTrustedMacroSignature ) diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx index 36d8fac7098e..8a568240bdbf 100644 --- a/sfx2/source/doc/objmisc.cxx +++ b/sfx2/source/doc/objmisc.cxx @@ -964,7 +964,7 @@ void SfxObjectShell::CheckSecurityOnLoading_Impl() xInteraction = GetMedium()->GetInteractionHandler(); // check if there is a broken signature... - CheckForBrokenDocSignatures_Impl( xInteraction ); + CheckForBrokenDocSignatures_Impl(); CheckEncryption_Impl( xInteraction ); @@ -1012,15 +1012,13 @@ void SfxObjectShell::CheckEncryption_Impl( const uno::Reference< task::XInteract } -void SfxObjectShell::CheckForBrokenDocSignatures_Impl( const uno::Reference< task::XInteractionHandler >& xHandler ) +void SfxObjectShell::CheckForBrokenDocSignatures_Impl() { SignatureState nSignatureState = GetDocumentSignatureState(); bool bSignatureBroken = ( nSignatureState == SignatureState::BROKEN ); if ( !bSignatureBroken ) return; - pImpl->showBrokenSignatureWarning( xHandler ); - // broken signatures imply no macro execution at all pImpl->aMacroMode.disallowMacroExecution(); } @@ -1610,7 +1608,7 @@ bool SfxObjectShell::AdjustMacroMode() if ( pMedium ) xInteraction = pMedium->GetInteractionHandler(); - CheckForBrokenDocSignatures_Impl( xInteraction ); + CheckForBrokenDocSignatures_Impl(); CheckEncryption_Impl( xInteraction ); @@ -1852,15 +1850,6 @@ bool SfxObjectShell_Impl::hasTrustedScriptingSignature( bool bAllowUIToAddAuthor return bResult; } -void SfxObjectShell_Impl::showBrokenSignatureWarning( const uno::Reference< task::XInteractionHandler >& _rxInteraction ) const -{ - if ( !bSignatureErrorIsShown ) - { - SfxObjectShell::UseInteractionToHandleError( _rxInteraction, ERRCODE_SFX_BROKENSIGNATURE ); - const_cast< SfxObjectShell_Impl* >( this )->bSignatureErrorIsShown = true; - } -} - void SfxObjectShell::AddLog( const OUString& aMessage ) { if ( !pImpl->m_xLogRing.is() ) diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx index 52fbb448ceec..916d306caaf2 100644 --- a/sfx2/source/inc/objshimp.hxx +++ b/sfx2/source/inc/objshimp.hxx @@ -152,7 +152,6 @@ struct SfxObjectShell_Impl : public ::sfx2::IMacroDocumentAccess virtual SignatureState getScriptingSignatureState() override; virtual bool hasTrustedScriptingSignature( bool bAllowUIToAddAuthor ) override; - virtual void showBrokenSignatureWarning( const css::uno::Reference< css::task::XInteractionHandler >& _rxInteraction ) const override; }; #endif diff --git a/sfx2/source/view/view.src b/sfx2/source/view/view.src index 0826609e5339..56b7fbaf91fc 100644 --- a/sfx2/source/view/view.src +++ b/sfx2/source/view/view.src @@ -140,4 +140,14 @@ String STR_READONLY_SIGN Text[ en-US ] = "Sign Document"; }; +String STR_SIGNATURE_BROKEN +{ + Text[ en-US ] = "Document has an invalid signature."; +}; + +String STR_SIGNATURE_SHOW +{ + Text[ en-US ] = "Show signatures"; +}; + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index 42a259abaa95..ffa0d419e6aa 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -1178,6 +1178,18 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) SfxBindings& rBind = GetBindings(); rBind.Invalidate( SID_RELOAD ); rBind.Invalidate( SID_EDITDOC ); + + SignatureState nSignatureState = GetObjectShell()->GetDocumentSignatureState(); + if (nSignatureState == SignatureState::BROKEN) { + basegfx::BColor aBackgroundColor = basegfx::BColor(0.5, 0.0, 0.0); + auto pInfoBar = AppendInfoBar("signature", SfxResId(STR_SIGNATURE_BROKEN), &aBackgroundColor); + VclPtrInstance xBtn(&GetWindow()); + xBtn->SetText(SfxResId(STR_SIGNATURE_SHOW)); + xBtn->SetSizePixel(xBtn->GetOptimalSize()); + xBtn->SetClickHdl(LINK(this, SfxViewFrame, SignDocumentHandler)); + pInfoBar->addButton(xBtn); + } + const SfxViewShell *pVSh; const SfxShell *pFSh; if ( !m_xObjSh->IsReadOnly() || diff --git a/svx/source/src/errtxt.src b/svx/source/src/errtxt.src index ab00f1b94a5a..40ff54676a95 100644 --- a/svx/source/src/errtxt.src +++ b/svx/source/src/errtxt.src @@ -467,10 +467,6 @@ Resource RID_ERRHDL { Text [ en-US ] = "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in Tools - Options - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available." ; }; - String ERRCODE_SFX_BROKENSIGNATURE - { - Text [ en-US ] = "The digitally signed document content and/or macros do not match the current document signature.\n\nThis could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ; - }; String ERRCODE_SFX_INCOMPLETE_ENCRYPTION { Text [ en-US ] = "The encrypted document contains unexpected non-encrypted streams.\n\nThis could be the result of document manipulation.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ; diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx index e587a831e457..31074fb015c2 100644 --- a/uui/source/iahndl.cxx +++ b/uui/source/iahndl.cxx @@ -1126,8 +1126,7 @@ UUIInteractionHelper::handleGenericErrorRequest( ErrCode nError = static_cast< ErrCode >(nErrorCode); bool bWarning = !ERRCODE_TOERROR(nError); - if ( nError == ERRCODE_SFX_BROKENSIGNATURE - || nError == ERRCODE_SFX_INCOMPLETE_ENCRYPTION ) + if ( nError == ERRCODE_SFX_INCOMPLETE_ENCRYPTION ) { // the security warning box needs a special title OUString aErrorString; @@ -1137,11 +1136,8 @@ UUIInteractionHelper::handleGenericErrorRequest( ResMgr::CreateResMgr( "uui" ) ); OUString aTitle( utl::ConfigManager::getProductName() ); - OUString aErrTitle - = ResId( nError == ERRCODE_SFX_BROKENSIGNATURE - ? STR_WARNING_BROKENSIGNATURE_TITLE - : STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE, - *xManager.get() ).toString(); + OUString aErrTitle = ResId( STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE, + *xManager.get() ).toString(); if ( !aTitle.isEmpty() && !aErrTitle.isEmpty() ) aTitle += " - " ; -- cgit