Skip to content

Commit

Permalink
Merge pull request #1189 from melanger/configurableCache
Browse files Browse the repository at this point in the history
config of module.php cache headers
  • Loading branch information
jaimeperez committed Sep 11, 2019
2 parents 06401d6 + 0c14180 commit ba843ff
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 4 deletions.
25 changes: 25 additions & 0 deletions config-templates/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -861,6 +861,31 @@
*/
'production' => true,

/*
* SimpleSAMLphp modules can host static resources which are served through PHP.
* The serving of the resources can be configured through these settings.
*/
'assets' => [
/*
* These settings adjust the caching headers that are sent
* when serving static resources.
*/
'caching' => [
/*
* Amount of seconds before the resource should be fetched again
*/
'max_age' => 86400,
/*
* Calculate a checksum of every file and send it to the browser
* This allows the browser to avoid downloading assets again in situations
* where the Last-Modified header cannot be trusted,
* for example in cluster setups
*
* Defaults false
*/
'etag' => false,
],
],


/*********************
Expand Down
17 changes: 13 additions & 4 deletions lib/SimpleSAML/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -264,12 +264,21 @@ public static function process(Request $request = null)
}
}

$assetConfig = $config->getConfigItem('assets', new Configuration([], '[assets]'));
$cacheConfig = $assetConfig->getConfigItem('caching', new Configuration([], '[assets][caching]'));
$response = new BinaryFileResponse($path);
$response->setCache(['public' => true, 'max_age' => 86400]);
$response->setExpires(new \DateTime(gmdate('D, j M Y H:i:s \G\M\T', time() + 10 * 60)));
$response->setLastModified(new \DateTime(gmdate('D, j M Y H:i:s \G\M\T', filemtime($path))));
$response->setCache([
// "public" allows response caching even if the request was authenticated,
// which is exactly what we want for static resources
'public' => true,
'max_age' => (string)$cacheConfig->getInteger('max_age', 86400)
]);
$response->setAutoLastModified();
if ($cacheConfig->getBoolean('etag', false)) {
$response->setAutoEtag();
}
$response->isNotModified($request);
$response->headers->set('Content-Type', $contentType);
$response->headers->set('Content-Length', sprintf('%u', filesize($path))); // force file size to an unsigned
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE);
$response->prepare($request);
return $response;
Expand Down

0 comments on commit ba843ff

Please sign in to comment.