public function toResponse()
 {
     $response = parent::toResponse();
     $response->setHeader('Content-Type', 'application/xml; charset="utf-8"');
     $response->setEntity(function (StreamInterface $stream) {
         $xml = new XmlStreamWriter(new StreamWrapper($stream));
         $xml->registerNamespace(WebDav::NS_DAV, 'D');
         $xml->startDocument();
         $xml->startElement(WebDav::NS_DAV, 'error');
         $this->toXml($xml);
         $xml->endElement();
         // D:error
         $xml->endDocument();
         $xml->flush();
     });
     return $response;
 }
 public function createStreamWriter(StreamInterface $stream)
 {
     $xml = new XmlStreamWriter(new StreamWrapper($stream));
     $xml->registerNamespace(WebDav::NS_DAV, 'D');
     return $xml;
 }
示例#3
0
 protected function createLockResponse($status, LockInfoInterface $lock, Uri $baseUri, $lockHeader = true)
 {
     $response = new HttpResponse($status);
     $response->setHeader('Content-Type', 'application/xml; charset="utf-8"');
     if ($lockHeader) {
         $response->setHeader('Lock-Token', sprintf('<urn:webdav:lock:%s>', $lock->getToken()));
     }
     $response->setEntity(function (StreamInterface $stream) use($lock, $baseUri) {
         $xml = new XmlStreamWriter(new StreamWrapper($stream));
         $xml->registerNamespace(WebDav::NS_DAV, 'D');
         $xml->startDocument();
         $xml->startElement(WebDav::NS_DAV, 'prop');
         $xml->startElement(WebDav::NS_DAV, 'lockdiscovery');
         $lock->toXml($xml, $baseUri);
         $xml->endElement();
         // D:lockdiscovery
         $xml->endElement();
         // D:prop
         $xml->endDocument();
         $xml->flush();
     });
     return $response;
 }
 public function process(DispatchRequest $dispatchRequest)
 {
     $request = $dispatchRequest->getHttpRequest();
     if ($request->getPathInfo() !== '') {
         return $dispatchRequest->proceed();
     }
     if ($request->isOptions()) {
         $response = new HttpResponse(WebDav::CODE_NO_CONTENT);
         $response->setHeader('MS-Author-Via', 'DAV');
         $response->setHeader('DAV', '1, 2, 3');
         $response->setHeader('Allow', 'OPTIONS, PROPFIND');
         $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0');
         return $response;
     }
     if ($request->getMethod() == WebDav::METHOD_PROPFIND) {
         $depth = strtolower($request->getHeader('Depth', 'infinity'));
         switch ($depth) {
             case '0':
             case '1':
                 // OK
                 break;
             default:
                 $response = new HttpResponse(WebDav::CODE_FORBIDDEN);
                 $response->setHeader('Content-Type', 'application/xml; charset="utf-8"');
                 $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0');
                 $response->setEntity(function (StreamInterface $stream) {
                     $xml = new XmlStreamWriter($stream);
                     $xml->registerNamespace(WebDav::NS_DAV, 'D');
                     $xml->startDocument();
                     $xml->startElement(WebDav::NS_DAV, 'error');
                     $xml->writeElement(WebDav::NS_DAV, 'propfind-finite-depth');
                     $xml->endElement();
                     // D:error
                     $xml->endDocument();
                     $xml->flush();
                 });
                 return $response;
         }
         $response = new HttpResponse(WebDav::CODE_MULTI_STATUS);
         $response->setHeader('Content-Type', 'application/xml; charset="utf-8"');
         $response->setHeader('Cache-Control', 'no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0');
         $response->setEntity(function (StreamInterface $stream) use($request, $depth) {
             $href = rtrim($request->getBaseUri(), '/') . '/';
             $xml = new XmlStreamWriter($stream);
             $xml->registerNamespace(WebDav::NS_DAV, 'D');
             $xml->registerNamespace(WebDav::NS_MS, 'ms');
             $xml->startDocument();
             $xml->startElement(WebDav::NS_DAV, 'multistatus');
             $xml->startElement(WebDav::NS_DAV, 'response');
             $xml->writeElement(WebDav::NS_DAV, 'href', $href);
             $xml->startElement(WebDav::NS_DAV, 'propstat');
             $xml->startElement(WebDav::NS_DAV, 'prop');
             $xml->writeElement(WebDav::NS_DAV, 'isroot', 1);
             $xml->writeElement(WebDav::NS_DAV, 'iscollection', 1);
             $xml->startElement(WebDav::NS_DAV, 'resourcetype');
             $xml->writeElement(WebDav::NS_DAV, 'collection');
             $xml->endElement();
             // D:resourcetype
             $xml->writeElement(WebDav::NS_DAV, 'getcontenttype', 'httpd/unix-directory');
             $xml->writeElement(WebDav::NS_DAV, 'getcontentlength', 0);
             $xml->writeElement(WebDav::NS_DAV, 'creationdate', gmdate(WebDav::DATE_FORMAT_TZ, 1337));
             $xml->startElement(WebDav::NS_DAV, 'getlastmodified');
             $xml->writeAttribute(WebDav::NS_MS, 'dt', 'dateTime.rfc1123');
             $xml->writeText(gmdate(WebDav::DATE_FORMAT_RFC1123, filemtime(__FILE__)));
             $xml->endElement();
             // D:getlastmodified
             $xml->writeElement(WebDav::NS_DAV, 'lockdiscovery');
             $xml->writeElement(WebDav::NS_DAV, 'supportedlock');
             $xml->writeElement(WebDav::NS_DAV, 'supported-report-set');
             $xml->endElement();
             // D:prop
             $xml->writeElement(WebDav::NS_DAV, 'status', 'HTTP/1.1 200 OK');
             $xml->endElement();
             // D:propstat
             $xml->endElement();
             // D:response
             if ($depth == '1') {
                 $xml->startElement(WebDav::NS_DAV, 'response');
                 $xml->writeElement(WebDav::NS_DAV, 'href', $href . 'dav/');
                 $xml->startElement(WebDav::NS_DAV, 'propstat');
                 $xml->startElement(WebDav::NS_DAV, 'prop');
                 $xml->writeElement(WebDav::NS_DAV, 'iscollection', 1);
                 $xml->startElement(WebDav::NS_DAV, 'resourcetype');
                 $xml->writeElement(WebDav::NS_DAV, 'collection');
                 $xml->endElement();
                 // D:resourcetype
                 $xml->writeElement(WebDav::NS_DAV, 'getcontenttype', 'httpd/unix-directory');
                 $xml->writeElement(WebDav::NS_DAV, 'getcontentlength', 0);
                 $xml->writeElement(WebDav::NS_DAV, 'creationdate', gmdate(WebDav::DATE_FORMAT_TZ, 1337));
                 $xml->startElement(WebDav::NS_DAV, 'getlastmodified');
                 $xml->writeAttribute(WebDav::NS_MS, 'dt', 'dateTime.rfc1123');
                 $xml->writeText(gmdate(WebDav::DATE_FORMAT_RFC1123, filemtime(__FILE__)));
                 $xml->endElement();
                 // D:getlastmodified
                 $xml->writeElement(WebDav::NS_DAV, 'lockdiscovery');
                 $xml->writeElement(WebDav::NS_DAV, 'supportedlock');
                 $xml->writeElement(WebDav::NS_DAV, 'supported-report-set');
                 $xml->endElement();
                 // D:prop
                 $xml->writeElement(WebDav::NS_DAV, 'status', 'HTTP/1.1 200 OK');
                 $xml->endElement();
                 // D:propstat
                 $xml->endElement();
                 // D:response
             }
             $xml->endElement();
             // D:multistatus
             $xml->endDocument();
             $xml->flush();
         });
         return $response;
     }
     return $dispatchRequest->proceed();
 }