diff options
Diffstat (limited to 'lib/public/appframework')
-rw-r--r-- | lib/public/appframework/http/icallbackresponse.php | 28 | ||||
-rw-r--r-- | lib/public/appframework/http/ioutput.php | 57 | ||||
-rw-r--r-- | lib/public/appframework/http/streamresponse.php | 48 |
3 files changed, 133 insertions, 0 deletions
diff --git a/lib/public/appframework/http/icallbackresponse.php b/lib/public/appframework/http/icallbackresponse.php new file mode 100644 index 00000000000..4a392ed081d --- /dev/null +++ b/lib/public/appframework/http/icallbackresponse.php @@ -0,0 +1,28 @@ +<?php +/** + * @author Bernhard Posselt + * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\AppFramework\Http; + + +/** + * Interface ICallbackResponse + * + * @package OCP\AppFramework\Http + */ +interface ICallbackResponse { + + /** + * Outputs the content that should be printed + * + * @param IOutput a small wrapper that handles output + */ + function callback(IOutput $output); + +} diff --git a/lib/public/appframework/http/ioutput.php b/lib/public/appframework/http/ioutput.php new file mode 100644 index 00000000000..191f84374dc --- /dev/null +++ b/lib/public/appframework/http/ioutput.php @@ -0,0 +1,57 @@ +<?php +/** + * @author Bernhard Posselt + * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\AppFramework\Http; + + +/** + * Very thin wrapper class to make output testable + */ +interface IOutput { + + /** + * @param string $out + */ + public function setOutput($out); + + /** + * @param string $path + * + * @return bool false if an error occured + */ + public function setReadfile($path); + + /** + * @param string $header + */ + public function setHeader($header); + + /** + * @return int returns the current http response code + */ + public function getHttpResponseCode(); + + /** + * @param int $code sets the http status code + */ + public function setHttpResponseCode($code); + + /** + * @param string $name + * @param string $value + * @param int $expire + * @param string $path + * @param string $domain + * @param bool $secure + * @param bool $httponly + */ + public function setCookie($name, $value, $expire, $path, $domain, $secure, $httponly); + +} diff --git a/lib/public/appframework/http/streamresponse.php b/lib/public/appframework/http/streamresponse.php new file mode 100644 index 00000000000..870eb95cc1a --- /dev/null +++ b/lib/public/appframework/http/streamresponse.php @@ -0,0 +1,48 @@ +<?php +/** + * @author Bernhard Posselt + * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\AppFramework\Http; + +use OCP\AppFramework\Http; + +/** + * Class StreamResponse + * + * @package OCP\AppFramework\Http + */ +class StreamResponse extends Response implements ICallbackResponse { + /** @var string */ + private $filePath; + + /** + * @param string $filePath the path to the file which should be streamed + */ + public function __construct ($filePath) { + $this->filePath = $filePath; + } + + + /** + * Streams the file using readfile + * + * @param IOutput a small wrapper that handles output + */ + public function callback (IOutput $output) { + // handle caching + if ($output->getHttpResponseCode() !== Http::STATUS_NOT_MODIFIED) { + if (!file_exists($this->filePath)) { + $output->setHttpResponseCode(Http::STATUS_NOT_FOUND); + } elseif ($output->setReadfile($this->filePath) === false) { + $output->setHttpResponseCode(Http::STATUS_BAD_REQUEST); + } + } + } + +} |