30 #include <com/sun/star/io/IOException.hpp>
31 #include <com/sun/star/lang/IllegalArgumentException.hpp>
32 #include <com/sun/star/task/XInteractionAbort.hpp>
33 #include <com/sun/star/ucb/XWebDAVCommandEnvironment.hpp>
51 const OUString & inRealm,
52 const OUString & inHostName,
53 OUString & inoutUserName,
54 OUString & outPassWord,
55 bool bCanUseSystemCredentials )
59 uno::Reference< task::XInteractionHandler > xIH
60 = m_xEnv->getInteractionHandler();
66 if ( inoutUserName.isEmpty() )
67 inoutUserName = m_aPrevUsername;
69 if ( outPassWord.isEmpty() )
70 outPassWord = m_aPrevPassword;
74 m_aURL, inHostName, inRealm, inoutUserName,
75 outPassWord, bCanUseSystemCredentials );
76 xIH->handle( xRequest );
79 = xRequest->getSelection();
81 if ( xSelection.is() )
84 uno::Reference< task::XInteractionAbort > xAbort(
85 xSelection.get(), uno::UNO_QUERY );
89 ucbhelper::InteractionSupplyAuthentication > & xSupp
90 = xRequest->getAuthenticationSupplier();
92 bool bUseSystemCredentials =
false;
94 if ( bCanUseSystemCredentials )
96 = xSupp->getUseSystemCredentials();
98 if ( bUseSystemCredentials )
102 inoutUserName.clear();
107 inoutUserName = xSupp->getUserName();
108 outPassWord = xSupp->getPassword();
112 m_aPrevUsername = inoutUserName;
113 m_aPrevPassword = outPassWord;
130 const uno::Reference< uno::XComponentContext > & rxContext,
132 const OUString & rURL )
134 m_xSessionFactory( rSessionFactory ),
142 m_aPath( rOther.m_aPath ),
143 m_aFlags( rOther.m_aFlags ),
144 m_xSession( rOther.m_xSession ),
145 m_xSessionFactory( rOther.m_xSessionFactory ),
147 m_aRedirectURIs( rOther.m_aRedirectURIs )
168 const css::uno::Reference<
169 css::ucb::XCommandEnvironment > & xEnv )
184 css::ucb::WebDAVHTTPMethod_OPTIONS,
207 const std::vector< OUString > & rPropertyNames,
208 std::vector< DAVResource > & rResources,
209 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
224 ucb::WebDAVHTTPMethod_PROPFIND,
250 std::vector< DAVResourceInfo > & rResInfo,
251 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
265 ucb::WebDAVHTTPMethod_PROPFIND,
289 const std::vector< ProppatchValue >& rValues,
290 const uno::Reference< ucb::XCommandEnvironment >& xEnv )
304 ucb::WebDAVHTTPMethod_PROPPATCH,
327 const std::vector< OUString > & rHeaderNames,
329 const uno::Reference< ucb::XCommandEnvironment >& xEnv )
343 ucb::WebDAVHTTPMethod_HEAD,
367 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
371 uno::Reference< io::XInputStream >
xStream;
382 ucb::WebDAVHTTPMethod_GET,
407 uno::Reference< io::XOutputStream > & rStream,
408 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
422 ucb::WebDAVHTTPMethod_GET,
444 const std::vector< OUString > & rHeaderNames,
446 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
450 uno::Reference< io::XInputStream > xStream;
461 ucb::WebDAVHTTPMethod_GET,
489 const std::vector< OUString > & rHeaderNames,
491 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
504 ucb::WebDAVHTTPMethod_GET,
514 rRequestHeaders, xEnv ) );
529 uno::Reference< io::XOutputStream > & rStream,
530 const std::vector< OUString > & rHeaderNames,
532 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
546 ucb::WebDAVHTTPMethod_GET,
580 void resetInputStream(
const uno::Reference< io::XInputStream > & rStream )
584 uno::Reference< io::XSeekable > xSeekable(
585 rStream, uno::UNO_QUERY );
586 if ( xSeekable.is() )
588 xSeekable->seek( 0 );
592 catch ( lang::IllegalArgumentException
const & )
595 catch ( io::IOException
const & )
606 const uno::Reference< io::XInputStream > & rStream,
607 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
612 uno::Reference< io::XInputStream > xSeekableStream
621 resetInputStream( xSeekableStream );
629 ucb::WebDAVHTTPMethod_PUT,
652 const OUString & rContentType,
653 const OUString & rReferer,
654 const uno::Reference< io::XInputStream > & rInputStream,
655 const uno::Reference< ucb::XCommandEnvironment >& xEnv )
660 uno::Reference< io::XInputStream > xSeekableStream
664 uno::Reference< io::XInputStream > xStream;
671 resetInputStream( xSeekableStream );
680 ucb::WebDAVHTTPMethod_POST,
714 const OUString & rContentType,
715 const OUString & rReferer,
716 const uno::Reference< io::XInputStream > & rInputStream,
717 uno::Reference< io::XOutputStream > & rOutputStream,
718 const uno::Reference< ucb::XCommandEnvironment >& xEnv )
723 uno::Reference< io::XInputStream > xSeekableStream
733 resetInputStream( xSeekableStream );
742 ucb::WebDAVHTTPMethod_POST,
765 GET( rOutputStream, xEnv );
775 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
789 ucb::WebDAVHTTPMethod_MKCOL,
811 const OUString & rSourcePath,
812 const OUString & rDestinationURI,
814 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
828 ucb::WebDAVHTTPMethod_COPY,
852 const OUString & rSourcePath,
853 const OUString & rDestinationURI,
855 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
869 ucb::WebDAVHTTPMethod_MOVE,
893 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
907 ucb::WebDAVHTTPMethod_DELETE,
931 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
945 ucb::WebDAVHTTPMethod_LOCK,
967 const uno::Reference< ucb::XCommandEnvironment > & xEnv )
981 ucb::WebDAVHTTPMethod_UNLOCK,
1004 osl::Guard< osl::Mutex > aGuard(
m_aMutex );
1011 osl::Guard< osl::Mutex > aGuard(
m_aMutex );
1020 osl::Guard< osl::Mutex > aGuard(
m_aMutex );
1025 const OUString& aPath( aURI.
GetPath() );
1028 if ( aPath.isEmpty() )
1032 if ( aURI.
GetHost().isEmpty() )
1060 assert(
m_xSession.is() &&
"DAVResourceAccess::getRequestURI - Not initialized!" );
1072 const uno::Reference< ucb::XCommandEnvironment > & xEnv,
1073 const OUString & rURI,
1074 ucb::WebDAVHTTPMethod eMethod,
1079 uno::Reference< ucb::XWebDAVCommandEnvironment > xDAVEnv(
1080 xEnv, uno::UNO_QUERY );
1084 const uno::Sequence< beans::StringPair > aRequestHeaders
1085 = xDAVEnv->getUserRequestHeaders( rURI, eMethod );
1087 for (
const auto& rRequestHeader : aRequestHeaders )
1089 rRequestHeaders.emplace_back(
1090 rRequestHeader.First,
1091 rRequestHeader.Second );
1100 if ( std::any_of(rRequestHeaders.begin(), rRequestHeaders.end(),
1101 [](
const DAVRequestHeader& rHeader) {
return rHeader.first.equalsIgnoreAsciiCase(
"User-Agent" ); }) )
1105 rRequestHeaders.emplace_back(
"User-Agent",
"LibreOffice" );
1110 const OUString& rRedirectURL )
1112 osl::Guard< osl::Mutex > aGuard(
m_aMutex );
1126 [&aUri](
const NeonUri& rUri) {
1128 return aUri == rUri; });
1134 osl::Guard< osl::Mutex > aGuard(
m_aMutex );
1176 return errorCount < 3;
const OUString & getRequestURI() const
void UNLOCK(const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
const sal_uInt16 SC_BAD_REQUEST
void setFlags(const css::uno::Sequence< css::beans::NamedValue > &rFlags)
rtl::Reference< DAVSessionFactory > m_xSessionFactory
DAVResourceAccess(const css::uno::Reference< css::uno::XComponentContext > &rxContext, rtl::Reference< DAVSessionFactory > const &rSessionFactory, const OUString &rURL)
const sal_uInt16 SC_GATEWAY_TIMEOUT
std::vector< DAVRequestHeader > DAVRequestHeaders
constexpr sal_uInt32 g_nRedirectLimit
void MKCOL(const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
void GET0(DAVRequestHeaders &rRequestHeaders, const std::vector< OUString > &rHeaderNames, DAVResource &rResource, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
const ExceptionCode & getError() const
rtl::Reference< DAVSession > m_xSession
void PROPPATCH(const std::vector< ProppatchValue > &rValues, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
void PROPFIND(const Depth nDepth, const std::vector< OUString > &rPropertyNames, std::vector< DAVResource > &rResources, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
const OUString & GetPath() const
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
const sal_uInt16 SC_INSUFFICIENT_STORAGE
css::uno::Reference< css::uno::XComponentContext > m_xContext
const OUString & getData() const
void LOCK(css::ucb::Lock &inLock, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
virtual int authenticate(const OUString &inRealm, const OUString &inHostName, OUString &inoutUserName, OUString &outPassWord, bool bCanUseSystemCredentials) override
const sal_uInt16 SC_SERVICE_UNAVAILABLE
sal_uInt16 getStatus() const
void MOVE(const OUString &rSourcePath, const OUString &rDestinationURI, bool bOverwrite, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
void COPY(const OUString &rSourcePath, const OUString &rDestinationURI, bool bOverwrite, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
const sal_uInt16 SC_BAD_GATEWAY
const OUString & GetHost() const
std::pair< OUString, OUString > DAVRequestHeader
void PUT(const css::uno::Reference< css::io::XInputStream > &rStream, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
DAVResourceAccess & operator=(const DAVResourceAccess &rOther)
void DESTROY(const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
static void getUserRequestHeaders(const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv, const OUString &rURI, css::ucb::WebDAVHTTPMethod eMethod, DAVRequestHeaders &rRequestHeaders)
css::uno::Sequence< css::beans::NamedValue > m_aFlags
void OPTIONS(DAVOptions &rOptions, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
const OUString & GetURI() const
css::uno::Reference< css::io::XInputStream > POST(const OUString &rContentType, const OUString &rReferer, const css::uno::Reference< css::io::XInputStream > &rInputStream, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
Reference< XComponentContext > m_xContext
std::vector< NeonUri > m_aRedirectURIs
void HEAD(const std::vector< OUString > &rHeaderNames, DAVResource &rResource, const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
void setURL(const OUString &rNewURL)
bool detectRedirectCycle(const OUString &rRedirectURL)
css::uno::Reference< css::io::XInputStream > GET(const css::uno::Reference< css::ucb::XCommandEnvironment > &xEnv)
bool handleException(const DAVException &e, int errorCount)