Exemple #1
0
 protected function sendRequestLine(StreamInterface $stream, HttpRequest $request)
 {
     $uri = $request->getUri();
     $buffer = $uri->getPath();
     if ($buffer === '' || substr($buffer, 0, 1) != '/') {
         $buffer = '/' . $buffer;
     }
     if ('' !== ($query = $buffer->getQueryString())) {
         $buffer .= '?' . $query;
     }
     $stream->write(sprintf("%s %s %s\r\n", $request->getMethod(false), $buffer, $request->getProtocol()));
 }
Exemple #2
0
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     if ($request->getMethod() != WebDav::METHOD_PROPFIND) {
         return;
     }
     $resource = $storage->findResource($path);
     $propfind = $this->parseRequest($request);
     if (!$resource->isCollection() && !$propfind->getDepth()->isDepth0()) {
         throw new BadRequestException();
     }
     $response = $this->buildResponse($resource, $baseUri, $propfind, $storage);
     // Populate DAV header in order to improve iCal support.
     $event = new PopulateOptionsEvent($resource);
     $this->dispatcher->notify($event);
     $response->setHeader('DAV', implode(', ', $event->features));
     return $response;
 }
Exemple #3
0
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     if ($request->getMethod() != WebDav::METHOD_PROPPATCH) {
         return;
     }
     $resource = $storage->findResource($path);
     $proppatch = $this->parseBody($request);
     $storage->beginTransaction();
     try {
         $proppatch->applyOperations($resource);
     } catch (\Exception $e) {
         $storage->rollBack();
         throw $e;
     }
     $storage->commit();
     return $this->buildProppatchResponse($proppatch, $request, $storage);
 }
Exemple #4
0
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     if ($request->getMethod() != WebDav::METHOD_REPORT) {
         return;
     }
     try {
         $resource = $storage->findResource($path);
     } catch (\OutOfBoundsException $e) {
         throw new NotFoundException($e);
     }
     try {
         $xml = (new XmlDocumentBuilder())->buildFromSource($request->getContents());
     } catch (XmlParseException $e) {
         throw new BadRequestException($e);
     }
     $name = new XmlName($xml->documentElement);
     foreach ($this->generators as $generator) {
         if ($generator->getReportName() == $name && $generator->isSupported($resource)) {
             return $generator->generateReport($xml->documentElement, $resource, $baseUri, $request, $this->dispatcher);
         }
     }
     throw new UnsupportedReportException();
 }
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     if ($request->getMethod() != WebDav::METHOD_MKCOL) {
         return;
     }
     try {
         $storage->findResource($path);
         // Collection is already mapped...
         throw new MethodNotAllowedException();
     } catch (\OutOfBoundsException $e) {
     }
     $parts = explode('/', $path);
     $name = array_pop($parts);
     try {
         $parent = $storage->findResource(implode('/', $parts));
     } catch (\OutOfBoundsException $e) {
         throw new WebDavException(WebDav::CODE_CONFLICT);
     }
     $proppatch = $this->parseBody($request);
     $storage->beginTransaction();
     try {
         $resource = $storage->createCollection($parent, $name);
         $success = true;
         if ($proppatch !== NULL) {
             $proppatch->applyOperations($resource);
         }
     } catch (\Exception $e) {
         $storage->rollBack();
         throw $e;
     }
     $storage->commit();
     if ($success) {
         return new HttpResponse(WebDav::CODE_CREATED);
     }
     $builder = new MakeCollectionResponseBuilder($proppatch);
     return $builder->buildResponse(WebDav::CODE_FORBIDDEN);
 }
Exemple #6
0
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     if ($request->getMethod() != WebDav::METHOD_MOVE) {
         return;
     }
     $storage->beginTransaction();
     try {
         $resource = $storage->findResource($path);
         $destination = $this->getDestinationPath($baseUri, $request);
         $overwrite = strtoupper($request->getHeader('Overwrite', 'F')) == 'T';
         $replaced = false;
         $resource = $this->performMove($resource, $destination, $overwrite, $replaced, $storage);
     } catch (\Exception $e) {
         $storage->rollBack();
         throw $e;
     }
     $storage->commit();
     $response = new HttpResponse($replaced ? WebDav::CODE_NO_CONTENT : WebDav::CODE_CREATED);
     $response->setHeader('Location', rtrim($baseUri, '/') . '/' . Uri::encode(ltrim($resource->getPath(), '/')));
     if (!$resource->isCollection()) {
         $response->setHeader('ETag', $resource->getEtag());
     }
     return $response;
 }
Exemple #7
0
 public function handle($path, Uri $baseUri, HttpRequest $request, StorageInterface $storage)
 {
     switch ($request->getMethod()) {
         case WebDav::METHOD_LOCK:
             if (!$storage instanceof LockStorageInterface) {
                 throw new MethodNotAllowedException();
             }
             return $this->handleLock($path, $baseUri, $request, $storage);
         case WebDav::METHOD_UNLOCK:
             if (!$storage instanceof LockStorageInterface) {
                 throw new MethodNotAllowedException();
             }
             return $this->handleUnlock($storage->findResource($path), $baseUri, $request, $storage);
     }
 }