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; }
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(); }