/** * Render lens content, cache it, then display it. * * @param string $name * @param array $cArgs Constructor arguments * @return bool * @exit; */ protected function stasis(string $name, ...$cArgs) : bool { // We don't want to cache anything tied to a session. $oldSession = $_SESSION; $_SESSION = []; $data = $this->airship_lens_object->render($name, ...$cArgs); $_SESSION = $oldSession; $port = $_SERVER['HTTP_PORT'] ?? ''; $cacheKey = $_SERVER['HTTP_HOST'] . ':' . $port . '/' . $_SERVER['REQUEST_URI']; if (!$this->airship_filecache_object->set($cacheKey, $data)) { return false; } $state = State::instance(); if (!\headers_sent()) { \header('Content-Type: text/html;charset=UTF-8'); \header('Content-Language: ' . $state->lang); \header('X-Content-Type-Options: nosniff'); \header('X-Frame-Options: SAMEORIGIN'); // Maybe make this configurable down the line? \header('X-XSS-Protection: 1; mode=block'); $hpkp = $state->HPKP; if ($hpkp instanceof HPKPBuilder) { $hpkp->sendHPKPHeader(); } $csp = $state->CSP; if ($csp instanceof CSPBuilder) { $csp->sendCSPHeader(); $this->airship_cspcache_object->set($_SERVER['REQUEST_URI'], \json_encode($csp->getHeaderArray())); } } die($data); }