diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2016-12-07 16:06:26 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2016-12-08 10:04:08 +0000 |
commit | 828e77009b5a7f3925cec37f0297208f7d38376f (patch) | |
tree | eca209a9976d68e45a9e1bfe902038f7782a99b8 | |
parent | 4f92098da726ec7afbbda54f2b21c29099b622af (diff) |
lokit: support password protected binary MS and OOXML documents
Change-Id: Id7fa1f428d07271e71f3df962bd6718a35372389
Reviewed-on: https://gerrit.libreoffice.org/31730
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
-rw-r--r-- | desktop/source/lib/lokinteractionhandler.cxx | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/desktop/source/lib/lokinteractionhandler.cxx b/desktop/source/lib/lokinteractionhandler.cxx index eaf96ab1ad5d..58d4052324d7 100644 --- a/desktop/source/lib/lokinteractionhandler.cxx +++ b/desktop/source/lib/lokinteractionhandler.cxx @@ -35,6 +35,9 @@ #include <com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp> #include <com/sun/star/ucb/InteractiveNetworkWriteException.hpp> +#include <com/sun/star/task/DocumentPasswordRequest2.hpp> +#include <com/sun/star/task/DocumentMSPasswordRequest2.hpp> + #include <../../inc/lib/init.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> @@ -242,20 +245,37 @@ bool LOKInteractionHandler::handleNetworkException(const uno::Sequence<uno::Refe bool LOKInteractionHandler::handlePasswordRequest(const uno::Sequence<uno::Reference<task::XInteractionContinuation>> &rContinuations, const uno::Any &rRequest) { + bool bPasswordRequestFound = false; + bool bIsRequestPasswordToModify = false; + + OString sUrl; + task::DocumentPasswordRequest2 passwordRequest; - if (!(rRequest >>= passwordRequest)) + if (rRequest >>= passwordRequest) + { + bIsRequestPasswordToModify = passwordRequest.IsRequestPasswordToModify; + sUrl = passwordRequest.Name.toUtf8(); + bPasswordRequestFound = true; + } + + task::DocumentMSPasswordRequest2 passwordMSRequest; + if (rRequest >>= passwordMSRequest) + { + bIsRequestPasswordToModify = passwordMSRequest.IsRequestPasswordToModify; + sUrl = passwordMSRequest.Name.toUtf8(); + bPasswordRequestFound = true; + } + + if (!bPasswordRequestFound) return false; if (m_pLOKit->mpCallback && - m_pLOKit->hasOptionalFeature((passwordRequest.IsRequestPasswordToModify) - ? LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY - : LOK_FEATURE_DOCUMENT_PASSWORD)) + m_pLOKit->hasOptionalFeature(bIsRequestPasswordToModify ? LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY + : LOK_FEATURE_DOCUMENT_PASSWORD)) { - OString const url(passwordRequest.Name.toUtf8()); - m_pLOKit->mpCallback(passwordRequest.IsRequestPasswordToModify - ? LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY - : LOK_CALLBACK_DOCUMENT_PASSWORD, - url.getStr(), + m_pLOKit->mpCallback(bIsRequestPasswordToModify ? LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY + : LOK_CALLBACK_DOCUMENT_PASSWORD, + sUrl.getStr(), m_pLOKit->mpCallbackData); // block until SetPassword is called @@ -267,7 +287,7 @@ bool LOKInteractionHandler::handlePasswordRequest(const uno::Sequence<uno::Refer { if (m_usePassword) { - if (passwordRequest.IsRequestPasswordToModify) + if (bIsRequestPasswordToModify) { uno::Reference<task::XInteractionPassword2> const xIPW2(rContinuations[i], uno::UNO_QUERY); xIPW2->setPasswordToModify(m_Password); @@ -285,7 +305,7 @@ bool LOKInteractionHandler::handlePasswordRequest(const uno::Sequence<uno::Refer } else { - if (passwordRequest.IsRequestPasswordToModify) + if (bIsRequestPasswordToModify) { uno::Reference<task::XInteractionPassword2> const xIPW2(rContinuations[i], uno::UNO_QUERY); xIPW2->setRecommendReadOnly(true); |