aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/public/AppFramework/Http/Response.php16
-rw-r--r--tests/lib/AppFramework/Http/ResponseTest.php14
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 512b312dae1..a6f5afd3c18 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -35,6 +35,7 @@
namespace OCP\AppFramework\Http;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Utility\ITimeFactory;
/**
* Base class for responses. Also used to just send headers.
@@ -95,12 +96,23 @@ class Response {
* @return $this
* @since 6.0.0 - return value was added in 7.0.0
*/
- public function cacheFor($cacheSeconds) {
-
+ public function cacheFor(int $cacheSeconds) {
if($cacheSeconds > 0) {
$this->addHeader('Cache-Control', 'max-age=' . $cacheSeconds . ', must-revalidate');
+
+ // Old scool prama caching
+ $this->addHeader('Pragma', 'public');
+
+ // Set expires header
+ $expires = new \DateTime();
+ /** @var ITimeFactory $time */
+ $time = \OC::$server->query(ITimeFactory::class);
+ $expires->setTimestamp($time->getTime());
+ $expires->add(new \DateInterval('PT'.$cacheSeconds.'S'));
+ $this->addHeader('Expires', $expires->format(\DateTime::RFC2822));
} else {
$this->addHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
+ unset($this->headers['Expires'], $this->headers['Pragma']);
}
return $this;
diff --git a/tests/lib/AppFramework/Http/ResponseTest.php b/tests/lib/AppFramework/Http/ResponseTest.php
index 9267d862600..5c867388369 100644
--- a/tests/lib/AppFramework/Http/ResponseTest.php
+++ b/tests/lib/AppFramework/Http/ResponseTest.php
@@ -27,6 +27,7 @@ namespace Test\AppFramework\Http;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Utility\ITimeFactory;
class ResponseTest extends \Test\TestCase {
@@ -222,15 +223,24 @@ class ResponseTest extends \Test\TestCase {
$headers = $this->childResponse->getHeaders();
$this->assertEquals('no-cache, no-store, must-revalidate', $headers['Cache-Control']);
+ $this->assertFalse(isset($headers['Pragma']));
+ $this->assertFalse(isset($headers['Expires']));
}
public function testCacheSeconds() {
+ $time = $this->createMock(ITimeFactory::class);
+ $time->method('getTime')
+ ->willReturn('1234567');
+
+ $this->overwriteService(ITimeFactory::class, $time);
+
$this->childResponse->cacheFor(33);
$headers = $this->childResponse->getHeaders();
- $this->assertEquals('max-age=33, must-revalidate',
- $headers['Cache-Control']);
+ $this->assertEquals('max-age=33, must-revalidate', $headers['Cache-Control']);
+ $this->assertEquals('public', $headers['Pragma']);
+ $this->assertEquals('Thu, 15 Jan 1970 06:56:40 +0000', $headers['Expires']);
}