Kaydet (Commit) ecba1280 authored tarafından Giuseppe Castagno's avatar Giuseppe Castagno

Fix certificate validation interaction

This enables the certificate validation when
StillReadWriteInteraction::StillReadWriteInteraction interaction
handler is used.

Certificate validation is needed for Web/WebDAV files.

Change-Id: I38cba9fc8b586953477d7df02acfcc8347603220
Reviewed-on: https://gerrit.libreoffice.org/27914Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarGiuseppe Castagno <giuseppe.castagno@acca-esse.eu>
üst 91cad2de
...@@ -29,14 +29,16 @@ ...@@ -29,14 +29,16 @@
#include <com/sun/star/ucb/AuthenticationRequest.hpp> #include <com/sun/star/ucb/AuthenticationRequest.hpp>
#include <com/sun/star/ucb/CertificateValidationRequest.hpp>
namespace comphelper{ namespace comphelper{
StillReadWriteInteraction::StillReadWriteInteraction(const css::uno::Reference< css::task::XInteractionHandler >& xHandler, StillReadWriteInteraction::StillReadWriteInteraction(const css::uno::Reference< css::task::XInteractionHandler >& xHandler,
const css::uno::Reference< css::task::XInteractionHandler >& xAuthenticationHandler) const css::uno::Reference< css::task::XInteractionHandler >& xAuxiliaryHandler)
: m_bUsed (false) : m_bUsed (false)
, m_bHandledByMySelf (false) , m_bHandledByMySelf (false)
, m_bHandledByInternalHandler(false) , m_bHandledByInternalHandler(false)
, m_xAuthenticationHandler(xAuthenticationHandler) , m_xAuxiliaryHandler(xAuxiliaryHandler)
{ {
::std::vector< ::ucbhelper::InterceptedInteraction::InterceptedRequest > lInterceptions; ::std::vector< ::ucbhelper::InterceptedInteraction::InterceptedRequest > lInterceptions;
::ucbhelper::InterceptedInteraction::InterceptedRequest aInterceptedRequest; ::ucbhelper::InterceptedInteraction::InterceptedRequest aInterceptedRequest;
...@@ -56,6 +58,11 @@ StillReadWriteInteraction::StillReadWriteInteraction(const css::uno::Reference< ...@@ -56,6 +58,11 @@ StillReadWriteInteraction::StillReadWriteInteraction(const css::uno::Reference<
aInterceptedRequest.Continuation = cppu::UnoType<css::task::XInteractionApprove>::get(); aInterceptedRequest.Continuation = cppu::UnoType<css::task::XInteractionApprove>::get();
lInterceptions.push_back(aInterceptedRequest); lInterceptions.push_back(aInterceptedRequest);
aInterceptedRequest.Handle = HANDLE_CERTIFICATEVALIDATIONREQUESTEXCEPTION;
aInterceptedRequest.Request <<= css::ucb::CertificateValidationRequest();
aInterceptedRequest.Continuation = cppu::UnoType<css::task::XInteractionApprove>::get();
lInterceptions.push_back(aInterceptedRequest);
setInterceptedHandler(xHandler); setInterceptedHandler(xHandler);
setInterceptions(lInterceptions); setInterceptions(lInterceptions);
} }
...@@ -105,12 +112,13 @@ ucbhelper::InterceptedInteraction::EInterceptionState StillReadWriteInteraction: ...@@ -105,12 +112,13 @@ ucbhelper::InterceptedInteraction::EInterceptionState StillReadWriteInteraction:
bAbort = true; bAbort = true;
} }
break; break;
case HANDLE_CERTIFICATEVALIDATIONREQUESTEXCEPTION:
case HANDLE_AUTHENTICATIONREQUESTEXCEPTION: case HANDLE_AUTHENTICATIONREQUESTEXCEPTION:
{ {
//use internal authentication dedicated handler and return //use internal auxiliary handler and return
if (m_xAuthenticationHandler.is()) if (m_xAuxiliaryHandler.is())
{ {
m_xAuthenticationHandler->handle(xRequest); m_xAuxiliaryHandler->handle(xRequest);
return ::ucbhelper::InterceptedInteraction::E_INTERCEPTED; return ::ucbhelper::InterceptedInteraction::E_INTERCEPTED;
} }
else //simply abort else //simply abort
......
...@@ -34,6 +34,7 @@ private: ...@@ -34,6 +34,7 @@ private:
static const sal_Int32 HANDLE_INTERACTIVEIOEXCEPTION = 0; static const sal_Int32 HANDLE_INTERACTIVEIOEXCEPTION = 0;
static const sal_Int32 HANDLE_UNSUPPORTEDDATASINKEXCEPTION = 1; static const sal_Int32 HANDLE_UNSUPPORTEDDATASINKEXCEPTION = 1;
static const sal_Int32 HANDLE_AUTHENTICATIONREQUESTEXCEPTION = 2; static const sal_Int32 HANDLE_AUTHENTICATIONREQUESTEXCEPTION = 2;
static const sal_Int32 HANDLE_CERTIFICATEVALIDATIONREQUESTEXCEPTION = 3;
bool m_bUsed; bool m_bUsed;
bool m_bHandledByMySelf; bool m_bHandledByMySelf;
...@@ -41,14 +42,14 @@ private: ...@@ -41,14 +42,14 @@ private:
public: public:
StillReadWriteInteraction(const css::uno::Reference< css::task::XInteractionHandler >& xHandler, StillReadWriteInteraction(const css::uno::Reference< css::task::XInteractionHandler >& xHandler,
const css::uno::Reference< css::task::XInteractionHandler >& xAuthenticationHandler); const css::uno::Reference< css::task::XInteractionHandler >& xAuxiliaryHandler);
void resetInterceptions(); void resetInterceptions();
void resetErrorStates(); void resetErrorStates();
bool wasWriteError() { return (m_bUsed && m_bHandledByMySelf);} bool wasWriteError() { return (m_bUsed && m_bHandledByMySelf);}
private: private:
css::uno::Reference< css::task::XInteractionHandler > m_xAuthenticationHandler; css::uno::Reference< css::task::XInteractionHandler > m_xAuxiliaryHandler;
virtual ucbhelper::InterceptedInteraction::EInterceptionState intercepted(const ::ucbhelper::InterceptedInteraction::InterceptedRequest& aRequest, virtual ucbhelper::InterceptedInteraction::EInterceptionState intercepted(const ::ucbhelper::InterceptedInteraction::InterceptedRequest& aRequest,
const css::uno::Reference< css::task::XInteractionRequest >& xRequest) override; const css::uno::Reference< css::task::XInteractionRequest >& xRequest) override;
......
...@@ -46,7 +46,6 @@ ...@@ -46,7 +46,6 @@
#include <comphelper/fileurl.hxx> #include <comphelper/fileurl.hxx>
#include <comphelper/processfactory.hxx> #include <comphelper/processfactory.hxx>
#include <comphelper/sequenceashashmap.hxx> #include <comphelper/sequenceashashmap.hxx>
#include <comphelper/stillreadwriteinteraction.hxx>
#include <comphelper/string.hxx> #include <comphelper/string.hxx>
#include <comphelper/types.hxx> #include <comphelper/types.hxx>
#include <tools/urlobj.hxx> #include <tools/urlobj.hxx>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment