diff options
Diffstat (limited to 'vendor/sabre/dav/lib/Sabre/DAV/TemporaryFileFilterPlugin.php')
-rw-r--r-- | vendor/sabre/dav/lib/Sabre/DAV/TemporaryFileFilterPlugin.php | 289 |
1 files changed, 0 insertions, 289 deletions
diff --git a/vendor/sabre/dav/lib/Sabre/DAV/TemporaryFileFilterPlugin.php b/vendor/sabre/dav/lib/Sabre/DAV/TemporaryFileFilterPlugin.php deleted file mode 100644 index 37f976b7b..000000000 --- a/vendor/sabre/dav/lib/Sabre/DAV/TemporaryFileFilterPlugin.php +++ /dev/null @@ -1,289 +0,0 @@ -<?php - -namespace Sabre\DAV; - -/** - * Temporary File Filter Plugin - * - * The purpose of this filter is to intercept some of the garbage files - * operation systems and applications tend to generate when mounting - * a WebDAV share as a disk. - * - * It will intercept these files and place them in a separate directory. - * these files are not deleted automatically, so it is adviceable to - * delete these after they are not accessed for 24 hours. - * - * Currently it supports: - * * OS/X style resource forks and .DS_Store - * * desktop.ini and Thumbs.db (windows) - * * .*.swp (vim temporary files) - * * .dat.* (smultron temporary files) - * - * Additional patterns can be added, by adding on to the - * temporaryFilePatterns property. - * - * @copyright Copyright (C) 2007-2014 fruux GmbH (https://fruux.com/). - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class TemporaryFileFilterPlugin extends ServerPlugin { - - /** - * This is the list of patterns we intercept. - * If new patterns are added, they must be valid patterns for preg_match. - * - * @var array - */ - public $temporaryFilePatterns = array( - '/^\._(.*)$/', // OS/X resource forks - '/^.DS_Store$/', // OS/X custom folder settings - '/^desktop.ini$/', // Windows custom folder settings - '/^Thumbs.db$/', // Windows thumbnail cache - '/^.(.*).swp$/', // ViM temporary files - '/^\.dat(.*)$/', // Smultron seems to create these - '/^~lock.(.*)#$/', // Windows 7 lockfiles - ); - - /** - * A reference to the main Server class - * - * @var Sabre\DAV\Server - */ - protected $server; - - /** - * This is the directory where this plugin - * will store it's files. - * - * @var string - */ - private $dataDir; - - /** - * Creates the plugin. - * - * Make sure you specify a directory for your files. If you don't, we - * will use PHP's directory for session-storage instead, and you might - * not want that. - * - * @param string|null $dataDir - */ - public function __construct($dataDir = null) { - - if (!$dataDir) $dataDir = ini_get('session.save_path').'/sabredav/'; - if (!is_dir($dataDir)) mkdir($dataDir); - $this->dataDir = $dataDir; - - } - - /** - * Initialize the plugin - * - * This is called automatically be the Server class after this plugin is - * added with Sabre\DAV\Server::addPlugin() - * - * @param Server $server - * @return void - */ - public function initialize(Server $server) { - - $this->server = $server; - $server->subscribeEvent('beforeMethod',array($this,'beforeMethod')); - $server->subscribeEvent('beforeCreateFile',array($this,'beforeCreateFile')); - - } - - /** - * This method is called before any HTTP method handler - * - * This method intercepts any GET, DELETE, PUT and PROPFIND calls to - * filenames that are known to match the 'temporary file' regex. - * - * @param string $method - * @param string $uri - * @return bool - */ - public function beforeMethod($method, $uri) { - - if (!$tempLocation = $this->isTempFile($uri)) - return true; - - switch($method) { - case 'GET' : - return $this->httpGet($tempLocation); - case 'PUT' : - return $this->httpPut($tempLocation); - case 'PROPFIND' : - return $this->httpPropfind($tempLocation, $uri); - case 'DELETE' : - return $this->httpDelete($tempLocation); - } - return true; - - } - - /** - * This method is invoked if some subsystem creates a new file. - * - * This is used to deal with HTTP LOCK requests which create a new - * file. - * - * @param string $uri - * @param resource $data - * @return bool - */ - public function beforeCreateFile($uri,$data) { - - if ($tempPath = $this->isTempFile($uri)) { - - $hR = $this->server->httpResponse; - $hR->setHeader('X-Sabre-Temp','true'); - file_put_contents($tempPath,$data); - return false; - } - return true; - - } - - /** - * This method will check if the url matches the temporary file pattern - * if it does, it will return an path based on $this->dataDir for the - * temporary file storage. - * - * @param string $path - * @return boolean|string - */ - protected function isTempFile($path) { - - // We're only interested in the basename. - list(, $tempPath) = URLUtil::splitPath($path); - - foreach($this->temporaryFilePatterns as $tempFile) { - - if (preg_match($tempFile,$tempPath)) { - return $this->getDataDir() . '/sabredav_' . md5($path) . '.tempfile'; - } - - } - - return false; - - } - - - /** - * This method handles the GET method for temporary files. - * If the file doesn't exist, it will return false which will kick in - * the regular system for the GET method. - * - * @param string $tempLocation - * @return bool - */ - public function httpGet($tempLocation) { - - if (!file_exists($tempLocation)) return true; - - $hR = $this->server->httpResponse; - $hR->setHeader('Content-Type','application/octet-stream'); - $hR->setHeader('Content-Length',filesize($tempLocation)); - $hR->setHeader('X-Sabre-Temp','true'); - $hR->sendStatus(200); - $hR->sendBody(fopen($tempLocation,'r')); - return false; - - } - - /** - * This method handles the PUT method. - * - * @param string $tempLocation - * @return bool - */ - public function httpPut($tempLocation) { - - $hR = $this->server->httpResponse; - $hR->setHeader('X-Sabre-Temp','true'); - - $newFile = !file_exists($tempLocation); - - if (!$newFile && ($this->server->httpRequest->getHeader('If-None-Match'))) { - throw new Exception\PreconditionFailed('The resource already exists, and an If-None-Match header was supplied'); - } - - file_put_contents($tempLocation,$this->server->httpRequest->getBody()); - $hR->sendStatus($newFile?201:200); - return false; - - } - - /** - * This method handles the DELETE method. - * - * If the file didn't exist, it will return false, which will make the - * standard HTTP DELETE handler kick in. - * - * @param string $tempLocation - * @return bool - */ - public function httpDelete($tempLocation) { - - if (!file_exists($tempLocation)) return true; - - unlink($tempLocation); - $hR = $this->server->httpResponse; - $hR->setHeader('X-Sabre-Temp','true'); - $hR->sendStatus(204); - return false; - - } - - /** - * This method handles the PROPFIND method. - * - * It's a very lazy method, it won't bother checking the request body - * for which properties were requested, and just sends back a default - * set of properties. - * - * @param string $tempLocation - * @param string $uri - * @return bool - */ - public function httpPropfind($tempLocation, $uri) { - - if (!file_exists($tempLocation)) return true; - - $hR = $this->server->httpResponse; - $hR->setHeader('X-Sabre-Temp','true'); - $hR->sendStatus(207); - $hR->setHeader('Content-Type','application/xml; charset=utf-8'); - - $this->server->parsePropFindRequest($this->server->httpRequest->getBody(true)); - - $properties = array( - 'href' => $uri, - 200 => array( - '{DAV:}getlastmodified' => new Property\GetLastModified(filemtime($tempLocation)), - '{DAV:}getcontentlength' => filesize($tempLocation), - '{DAV:}resourcetype' => new Property\ResourceType(null), - '{'.Server::NS_SABREDAV.'}tempFile' => true, - - ), - ); - - $data = $this->server->generateMultiStatus(array($properties)); - $hR->sendBody($data); - return false; - - } - - - /** - * This method returns the directory where the temporary files should be stored. - * - * @return string - */ - protected function getDataDir() - { - return $this->dataDir; - } -} |