Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion apps/files_sharing/public.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,14 @@
$route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare';

if($token !== '') {
OC_Response::redirect($urlGenerator->linkToRoute($route, array('token' => $token)));
$protocol = \OC::$server->getRequest()->getHttpProtocol();
if ($protocol == 'HTTP/1.0') {
$status = '302 Found';
} else {
$status = '307 Temporary Redirect';
}
header($protocol.' ' . $status);
header('Location: ' . $urlGenerator->linkToRoute($route, array('token' => $token)));
} else {
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
Expand Down
124 changes: 5 additions & 119 deletions lib/private/legacy/response.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
*/

class OC_Response {
const STATUS_FOUND = 304;
const STATUS_FOUND = 302;
const STATUS_NOT_MODIFIED = 304;
const STATUS_TEMPORARY_REDIRECT = 307;
const STATUS_BAD_REQUEST = 400;
Expand All @@ -40,32 +40,6 @@ class OC_Response {
const STATUS_INTERNAL_SERVER_ERROR = 500;
const STATUS_SERVICE_UNAVAILABLE = 503;

/**
* Enable response caching by sending correct HTTP headers
* @param integer $cache_time time to cache the response
* >0 cache time in seconds
* 0 and <0 enable default browser caching
* null cache indefinitely
*/
static public function enableCaching($cache_time = null) {
if (is_numeric($cache_time)) {
header('Pragma: public');// enable caching in IE
if ($cache_time > 0) {
self::setExpiresHeader('PT'.$cache_time.'S');
header('Cache-Control: max-age='.$cache_time.', must-revalidate');
}
else {
header('Expires: 0');
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
}
}
else {
header('Cache-Control: cache');
header('Pragma: cache');
}

}

/**
* Set response status
* @param int $status a HTTP status code, see also the STATUS constants
Expand All @@ -77,12 +51,12 @@ static public function setStatus($status) {
$status = $status . ' Not Modified';
break;
case self::STATUS_TEMPORARY_REDIRECT:
if ($protocol == 'HTTP/1.1') {
$status = $status . ' Temporary Redirect';
break;
} else {
if ($protocol == 'HTTP/1.0') {
$status = self::STATUS_FOUND;
// fallthrough
} else {
$status = $status . ' Temporary Redirect';
break;
}
case self::STATUS_FOUND;
$status = $status . ' Found';
Expand All @@ -100,75 +74,6 @@ static public function setStatus($status) {
header($protocol.' '.$status);
}

/**
* Send redirect response
* @param string $location to redirect to
*/
static public function redirect($location) {
self::setStatus(self::STATUS_TEMPORARY_REDIRECT);
header('Location: '.$location);
}

/**
* Set response expire time
* @param string|DateTime|int $expires date-time when the response expires
* string for DateInterval from now
* DateTime object when to expire response
*/
static public function setExpiresHeader($expires) {
if (is_string($expires) && $expires[0] == 'P') {
$interval = $expires;
$expires = new DateTime('now');
$expires->add(new DateInterval($interval));
}
if ($expires instanceof DateTime) {
$expires->setTimezone(new DateTimeZone('GMT'));
$expires = $expires->format(DateTime::RFC2822);
}
header('Expires: '.$expires);
}

/**
* Checks and set ETag header, when the request matches sends a
* 'not modified' response
* @param string $etag token to use for modification check
*/
static public function setETagHeader($etag) {
if (empty($etag)) {
return;
}
$etag = '"'.$etag.'"';
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
self::setStatus(self::STATUS_NOT_MODIFIED);
exit;
}
header('ETag: '.$etag);
}

/**
* Checks and set Last-Modified header, when the request matches sends a
* 'not modified' response
* @param int|DateTime|string $lastModified time when the response was last modified
*/
static public function setLastModifiedHeader($lastModified) {
if (empty($lastModified)) {
return;
}
if (is_int($lastModified)) {
$lastModified = gmdate(DateTime::RFC2822, $lastModified);
}
if ($lastModified instanceof DateTime) {
$lastModified = $lastModified->format(DateTime::RFC2822);
}
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
trim($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lastModified) {
self::setStatus(self::STATUS_NOT_MODIFIED);
exit;
}
header('Last-Modified: '.$lastModified);
}

/**
* Sets the content disposition header (with possible workarounds)
* @param string $filename file name
Expand Down Expand Up @@ -209,25 +114,6 @@ static public function setContentLengthHeader($length) {
header('Content-Length: '.$length);
}

/**
* Send file as response, checking and setting caching headers
* @param string $filepath of file to send
* @deprecated 8.1.0 - Use \OCP\AppFramework\Http\StreamResponse or another AppFramework controller instead
*/
static public function sendFile($filepath) {
$fp = fopen($filepath, 'rb');
if ($fp) {
self::setLastModifiedHeader(filemtime($filepath));
self::setETagHeader(md5_file($filepath));

self::setContentLengthHeader(filesize($filepath));
fpassthru($fp);
}
else {
self::setStatus(self::STATUS_NOT_FOUND);
}
}

/**
* This function adds some security related headers to all requests served via base.php
* The implementation of this function has to happen here to ensure that all third-party
Expand Down
74 changes: 0 additions & 74 deletions lib/public/Response.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,27 +44,6 @@
* @deprecated 8.1.0 - Use AppFramework controllers instead and modify the response object
*/
class Response {
/**
* Enable response caching by sending correct HTTP headers
* @param int $cache_time time to cache the response
* >0 cache time in seconds
* 0 and <0 enable default browser caching
* null cache indefinitely
* @since 4.0.0
*/
static public function enableCaching( $cache_time = null ) {
\OC_Response::enableCaching( $cache_time );
}

/**
* Checks and set Last-Modified header, when the request matches sends a
* 'not modified' response
* @param string $lastModified time when the response was last modified
* @since 4.0.0
*/
static public function setLastModifiedHeader( $lastModified ) {
\OC_Response::setLastModifiedHeader( $lastModified );
}

/**
* Sets the content disposition header (with possible workarounds)
Expand All @@ -84,57 +63,4 @@ static public function setContentDispositionHeader( $filename, $type = 'attachme
static public function setContentLengthHeader($length) {
\OC_Response::setContentLengthHeader($length);
}

/**
* Disable browser caching
* @see enableCaching with cache_time = 0
* @since 4.0.0
* @deprecated 14.0.0 just set the headers
*/
static public function disableCaching() {
header('Pragma: public');// enable caching in IE
header('Expires: 0');
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
}

/**
* Checks and set ETag header, when the request matches sends a
* 'not modified' response
* @param string $etag token to use for modification check
* @since 4.0.0
*/
static public function setETagHeader( $etag ) {
\OC_Response::setETagHeader( $etag );
}

/**
* Send file as response, checking and setting caching headers
* @param string $filepath of file to send
* @since 4.0.0
* @deprecated 8.1.0 - Use \OCP\AppFramework\Http\StreamResponse or another AppFramework controller instead
* @suppress PhanDeprecatedFunction
*/
static public function sendFile( $filepath ) {
\OC_Response::sendFile( $filepath );
}

/**
* Set response expire time
* @param string|\DateTime $expires date-time when the response expires
* string for DateInterval from now
* DateTime object when to expire response
* @since 4.0.0
*/
static public function setExpiresHeader( $expires ) {
\OC_Response::setExpiresHeader( $expires );
}

/**
* Send redirect response
* @param string $location to redirect to
* @since 4.0.0
*/
static public function redirect( $location ) {
\OC_Response::redirect( $location );
}
}