aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/AppFramework/Middleware/NotModifiedMiddleware.php
blob: 17b423164f6aad0558ff668d53b7c5bc4cb32288 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

declare(strict_types=1);

/**
 * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */
namespace OC\AppFramework\Middleware;

use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Middleware;
use OCP\IRequest;

class NotModifiedMiddleware extends Middleware {
	/** @var IRequest */
	private $request;

	public function __construct(IRequest $request) {
		$this->request = $request;
	}

	public function afterController($controller, $methodName, Response $response) {
		$etagHeader = $this->request->getHeader('IF_NONE_MATCH');
		if ($etagHeader !== '' && $response->getETag() !== null && trim($etagHeader) === '"' . $response->getETag() . '"') {
			$response->setStatus(Http::STATUS_NOT_MODIFIED);
			return $response;
		}

		$modifiedSinceHeader = $this->request->getHeader('IF_MODIFIED_SINCE');
		if ($modifiedSinceHeader !== '' && $response->getLastModified() !== null && trim($modifiedSinceHeader) === $response->getLastModified()->format(\DateTimeInterface::RFC2822)) {
			$response->setStatus(Http::STATUS_NOT_MODIFIED);
			return $response;
		}

		return $response;
	}
}