summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2016-12-07 16:06:26 +0100
committerJan Holesovsky <kendy@collabora.com>2016-12-08 10:04:08 +0000
commit828e77009b5a7f3925cec37f0297208f7d38376f (patch)
treeeca209a9976d68e45a9e1bfe902038f7782a99b8 /desktop
parent4f92098da726ec7afbbda54f2b21c29099b622af (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>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/source/lib/lokinteractionhandler.cxx42
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);