From 4ac2635092213bc27db403c76cf4142bb5d19dc9 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Fri, 18 Sep 2026 06:19:03 +0000 Subject: [PATCH] runtime: publish SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5 --- ...ORKER-EXACT-SOURCE-READONLY-516R5RCA5.json | 38 ++++ ...WORKER-EXACT-SOURCE-READONLY-516R5RCA5.txt | 36 ++++ runtime/latest.json | 39 +++- runtime/latest.txt | 182 +++--------------- 4 files changed, 140 insertions(+), 155 deletions(-) create mode 100644 runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.json create mode 100644 runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.txt diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.json b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.json new file mode 100644 index 00000000..3774fe79 --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "gram-support-service-worker-exact-source-readonly", + "started_at_utc": "2026-09-18T06:19:00Z", + "finished_at_utc": "2026-09-18T06:19:02Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "379bcbf1f6a2973b06547d9db50a4fd99e2617ee053737afc1e5ce6db9d550f9", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6", + "sanitized_output_sha256": "ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "GRAM516R5RCA5_SAFE_REPORT={\"err_truncated\":false,\"guest\":{\"core\":[{\"matches\":[{\"sep\":true},{\"line\":1,\"text\":\"header('X-Content-Type-Options', 'nosniff');\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\tif (\\\\XF::app()->config('enableClickjackingProtection'))\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\t$response->header('X-Frame-Options', 'SAMEORIGIN');\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\tabstract protected function initialize();\"},{\"line\":54,\"text\":\"\\tabstract public function getResponseType();\"},{\"line\":55,\"text\":\"\\tabstract public function renderRedirect($url, $type, $message = '');\"},{\"line\":56,\"text\":\"\\tabstract public function renderMessage($message);\"},{\"line\":57,\"text\":\"\\tabstract public function renderErrors(array $errors);\"},{\"line\":58,\"text\":\"\\tabstract public function renderView($viewName, $templateName, array $params = []);\"},{\"line\":59,\"text\":\"\"},{\"line\":60,\"text\":\"\\tpublic function setReply(AbstractReply $reply)\"},{\"line\":61,\"text\":\"\\t{\"},{\"line\":62,\"text\":\"\\t\\t$this->reply = $reply;\"},{\"line\":63,\"text\":\"\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\tpublic function renderUnrepresentable()\"},{\"line\":66,\"text\":\"\\t{\"},{\"line\":67,\"text\":\"\\t\\treturn $this->renderErrors(['This page is not representable in the requested type.']);\"},{\"line\":68,\"text\":\"\\t}\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t/**\"},{\"sep\":true},{\"line\":73,\"text\":\"\\t * @param array $params\"},{\"line\":74,\"text\":\"\\t *\"},{\"line\":75,\"text\":\"\\t * @return View\"},{\"line\":76,\"text\":\"\\t */\"},{\"line\":77,\"text\":\"\\tpublic function createViewObject($viewName, $templateName, array $params = [])\"},{\"line\":78,\"text\":\"\\t{\"},{\"line\":79,\"text\":\"\\t\\t$f = $this->viewFactory;\"},{\"line\":80,\"text\":\"\\t\\treturn $f($viewName, [\"},{\"line\":81,\"text\":\"\\t\\t\\t$this, $this->response, $templateName, $params,\"},{\"line\":82,\"text\":\"\\t\\t]);\"},{\"line\":83,\"text\":\"\\t}\"},{\"line\":84,\"text\":\"\"},{\"line\":85,\"text\":\"\\tpublic function renderViewObject($viewName, &$templateName, array &$params = [], $responseType = null)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\t$responseType = $responseType ?: $this->getResponseType();\"},{\"line\":88,\"text\":\"\\t\\t$view = $this->createViewObject($viewName, $templateName, $params);\"},{\"line\":89,\"text\":\"\\t\\t$method = 'render' . ucfirst($responseType);\"},{\"line\":90,\"text\":\"\\t\\tif ($view && method_exists($view, $method))\"},{\"line\":91,\"text\":\"\\t\\t{\"},{\"line\":92,\"text\":\"\\t\\t\\t$result = $view->$method();\"},{\"line\":93,\"text\":\"\\t\\t}\"},{\"line\":94,\"text\":\"\\t\\telse\"},{\"line\":95,\"text\":\"\\t\\t{\"},{\"line\":96,\"text\":\"\\t\\t\\t$result = null;\"},{\"line\":97,\"text\":\"\\t\\t}\"},{\"line\":98,\"text\":\"\"},{\"line\":99,\"text\":\"\\t\\tif ($view)\"},{\"line\":100,\"text\":\"\\t\\t{\"},{\"line\":101,\"text\":\"\\t\\t\\t$templateName = $view->getTemplateName();\"}],\"path\":\"src/XF/Mvc/Renderer/AbstractRenderer.php\",\"present\":true,\"sha256\":\"22f0ba6cb78fcbead8ac19cd24f2be211ff6eb1059a343513e0e85c12b72ac9e\"},{\"matches\":[{\"sep\":true},{\"line\":5,\"text\":\"use XF\\\\Mvc\\\\Reply\\\\AbstractReply;\"},{\"line\":6,\"text\":\"use XF\\\\Util\\\\File;\"},{\"line\":7,\"text\":\"\"},{\"line\":8,\"text\":\"use function count, strval;\"},{\"line\":9,\"text\":\"\"},{\"line\":10,\"text\":\"class Html extends AbstractRenderer\"},{\"line\":11,\"text\":\"{\"},{\"line\":12,\"text\":\"\\tprotected function initialize()\"},{\"line\":13,\"text\":\"\\t{\"},{\"line\":14,\"text\":\"\\t\\t$this->response->contentType('text/html');\"},{\"line\":15,\"text\":\"\\t}\"},{\"line\":16,\"text\":\"\"},{\"line\":17,\"text\":\"\\tpublic function getResponseType()\"},{\"line\":18,\"text\":\"\\t{\"},{\"line\":19,\"text\":\"\\t\\treturn 'html';\"},{\"line\":20,\"text\":\"\\t}\"},{\"line\":21,\"text\":\"\"},{\"line\":22,\"text\":\"\\tpublic function renderRedirect($url, $type, $message = '')\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\t$this->setResponseCode($type == 'permanent' ? 301 : 303);\"},{\"line\":25,\"text\":\"\\t\\t$this->response->header('Location', $url);\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function renderMessage($message)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$app = \\\\XF::app();\"},{\"line\":31,\"text\":\"\\t\\treturn $this->renderView('XF:MessagePage', $app['app.defaultType'] . ':message_page', [\"},{\"line\":32,\"text\":\"\\t\\t\\t'message' => $message,\"},{\"line\":33,\"text\":\"\\t\\t]);\"},{\"line\":34,\"text\":\"\\t}\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tpublic function renderErrors(array $errors)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$app = \\\\XF::app();\"},{\"line\":39,\"text\":\"\\t\\treturn $this->renderView('XF:Error', $app['app.defaultType'] . ':error', [\"},{\"line\":40,\"text\":\"\\t\\t\\t'errors' => $errors,\"},{\"line\":41,\"text\":\"\\t\\t\\t'error' => count($errors) == 1 ? reset($errors) : false,\"},{\"line\":42,\"text\":\"\\t\\t]);\"},{\"line\":43,\"text\":\"\\t}\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":46,\"text\":\"\\t{\"},{\"line\":47,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":48,\"text\":\"\\t\\tif ($output === null && $templateName)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\t$output = $this->getTemplate($templateName, $params)->render();\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\\t\\treturn $output;\"},{\"line\":53,\"text\":\"\\t}\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\tpublic function postFilter($content, AbstractReply $reply)\"},{\"line\":56,\"text\":\"\\t{\"},{\"line\":57,\"text\":\"\\t\\t$content = strval($content);\"}],\"path\":\"src/XF/Mvc/Renderer/Html.php\",\"present\":true,\"sha256\":\"beec569b9d8feb92998678acf018aa7a7fe19c3db7ff986de7010c03aeb146b7\"},{\"matches\":[{\"sep\":true},{\"line\":7,\"text\":\"\"},{\"line\":8,\"text\":\"use function array_key_exists, count, is_array, is_object, strval;\"},{\"line\":9,\"text\":\"\"},{\"line\":10,\"text\":\"class Json extends AbstractRenderer\"},{\"line\":11,\"text\":\"{\"},{\"line\":12,\"text\":\"\\tprotected $encodeModifiers = JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;\"},{\"line\":13,\"text\":\"\"},{\"line\":14,\"text\":\"\\tprotected function initialize()\"},{\"line\":15,\"text\":\"\\t{\"},{\"line\":16,\"text\":\"\\t\\t$this->response->contentType('application/json');\"},{\"line\":17,\"text\":\"\\t}\"},{\"line\":18,\"text\":\"\"},{\"line\":19,\"text\":\"\\tpublic function getResponseType()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'json';\"},{\"line\":22,\"text\":\"\\t}\"},{\"line\":23,\"text\":\"\"},{\"line\":24,\"text\":\"\\tpublic function renderRedirect($url, $type, $message = '')\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\treturn [\"},{\"line\":27,\"text\":\"\\t\\t\\t'status' => 'ok',\"},{\"line\":28,\"text\":\"\\t\\t\\t'message' => $message,\"},{\"line\":29,\"text\":\"\\t\\t\\t'redirect' => $url,\"},{\"line\":30,\"text\":\"\\t\\t];\"},{\"line\":31,\"text\":\"\\t}\"},{\"sep\":true},{\"line\":46,\"text\":\"\\t\\t\\t'error' => count($errors) == 1 ? reset($errors) : false,\"},{\"line\":47,\"text\":\"\\t\\t\\t'forJson' => true,\"},{\"line\":48,\"text\":\"\\t\\t];\"},{\"line\":49,\"text\":\"\\t\\t$html = $this->getTemplate($app['app.defaultType'] . ':error', $params)->render();\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\treturn [\"},{\"line\":52,\"text\":\"\\t\\t\\t'status' => 'error',\"},{\"line\":53,\"text\":\"\\t\\t\\t'errors' => $errors,\"},{\"line\":54,\"text\":\"\\t\\t\\t'errorHtml' => $this->getHtmlOutputStructure($html),\"},{\"line\":55,\"text\":\"\\t\\t];\"},{\"line\":56,\"text\":\"\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":59,\"text\":\"\\t{\"},{\"line\":60,\"text\":\"\\t\\tif (isset($params['innerContent']))\"},{\"line\":61,\"text\":\"\\t\\t{\"},{\"line\":62,\"text\":\"\\t\\t\\treturn $params['innerContent'];\"},{\"line\":63,\"text\":\"\\t\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":66,\"text\":\"\\t\\tif ($output === null)\"},{\"line\":67,\"text\":\"\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t$output = [\"},{\"line\":69,\"text\":\"\\t\\t\\t\\t'status' => 'ok',\"},{\"line\":70,\"text\":\"\\t\\t\\t\\t'html' => $this->renderHtmlFallback($viewName, $templateName, $params),\"},{\"line\":71,\"text\":\"\\t\\t\\t];\"},{\"line\":72,\"text\":\"\\t\\t}\"},{\"line\":73,\"text\":\"\\t\\telse if (is_array($output) && array_key_exists('html', $output) && $output['html'] === null)\"},{\"line\":74,\"text\":\"\\t\\t{\"},{\"line\":75,\"text\":\"\\t\\t\\t$output['html'] = $this->renderHtmlFallback($viewName, $templateName, $params);\"},{\"line\":76,\"text\":\"\\t\\t}\"},{\"line\":77,\"text\":\"\"},{\"line\":78,\"text\":\"\\t\\treturn $output;\"},{\"line\":79,\"text\":\"\\t}\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\tpublic function renderHtmlFallback($viewName, $templateName, array $params = [])\"},{\"line\":82,\"text\":\"\\t{\"},{\"line\":83,\"text\":\"\\t\\t$htmlOutput = $this->renderViewObject($viewName, $templateName, $params, 'html');\"},{\"line\":84,\"text\":\"\\t\\tif ($htmlOutput === null && $templateName)\"},{\"line\":85,\"text\":\"\\t\\t{\"},{\"line\":86,\"text\":\"\\t\\t\\t$htmlOutput = $this->getTemplate($templateName, $params)->render();\"},{\"line\":87,\"text\":\"\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\treturn $this->getHtmlOutputStructure($htmlOutput);\"},{\"line\":90,\"text\":\"\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\tpublic function getHtmlOutputStructure($html)\"},{\"line\":93,\"text\":\"\\t{\"}],\"path\":\"src/XF/Mvc/Renderer/Json.php\",\"present\":true,\"sha256\":\"2f3c46b7ef35aaceddf6c358dda1d53826ef7af886051487f3be9bfba0bd5f96\"},{\"matches\":[{\"sep\":true},{\"line\":1,\"text\":\"setResponseCode($type == 'permanent' ? 301 : 303);\"},{\"line\":19,\"text\":\"\\t\\t$this->response->header('Location', $url);\"},{\"line\":20,\"text\":\"\\t}\"},{\"line\":21,\"text\":\"\"},{\"line\":22,\"text\":\"\\tpublic function renderMessage($message)\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn '';\"},{\"line\":25,\"text\":\"\\t}\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\tpublic function renderErrors(array $errors)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\treturn '';\"},{\"line\":30,\"text\":\"\\t}\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":33,\"text\":\"\\t{\"},{\"line\":34,\"text\":\"\\t\\tif (isset($params['innerContent']))\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\treturn $params['innerContent'];\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":40,\"text\":\"\\t\\tif ($output === null)\"},{\"line\":41,\"text\":\"\\t\\t{\"},{\"line\":42,\"text\":\"\\t\\t\\t$output = '';\"},{\"line\":43,\"text\":\"\\t\\t}\"},{\"line\":44,\"text\":\"\\t\\treturn $output;\"}],\"path\":\"src/XF/Mvc/Renderer/Raw.php\",\"present\":true,\"sha256\":\"46592f40912a491fe76e3ebb2308c77b55db9bc5b3f231f3e3b47c0dacf58e29\"},{\"matches\":[],\"path\":\"src/XF/Mvc/Reply/View.php\",\"present\":true,\"sha256\":\"c4a3a6fcd36b056428ab1bc569857ba3757df53548b648301d5cb6271817662e\"},{\"matches\":[{\"sep\":true},{\"line\":53,\"text\":\"\\t\\t}\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\t\\t$match = $this->route($routePath);\"},{\"line\":56,\"text\":\"\"},{\"line\":57,\"text\":\"\\t\\t$earlyResponse = $this->beforeDispatch($match);\"},{\"line\":58,\"text\":\"\\t\\tif ($earlyResponse)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\treturn $earlyResponse;\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\"},{\"line\":63,\"text\":\"\\t\\t$reply = $this->dispatchLoop($match);\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t$responseType = $reply->getResponseType() ?: $match->getResponseType();\"},{\"line\":66,\"text\":\"\\t\\t$response = $this->render($reply, $responseType);\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\treturn $response;\"},{\"line\":69,\"text\":\"\\t}\"},{\"line\":70,\"text\":\"\"},{\"line\":71,\"text\":\"\\tpublic function route($routePath)\"},{\"line\":72,\"text\":\"\\t{\"},{\"line\":73,\"text\":\"\\t\\t$match = $this->getRouter()->routeToController($routePath, $this->request);\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\tif (!($match instanceof RouteMatch) || !$match->getController())\"},{\"line\":76,\"text\":\"\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t$match = $this->app->getErrorRoute('DispatchError', [\"},{\"line\":78,\"text\":\"\\t\\t\\t\\t'code' => 'invalid_route',\"},{\"sep\":true},{\"line\":102,\"text\":\"\\t{\"},{\"line\":103,\"text\":\"\\t\\t$i = 1;\"},{\"line\":104,\"text\":\"\\t\\t$attemptErrorReroute = true;\"},{\"line\":105,\"text\":\"\\t\\t$originalMatch = $match;\"},{\"line\":106,\"text\":\"\\t\\t$reply = null;\"},{\"line\":107,\"text\":\"\"},{\"line\":108,\"text\":\"\\t\\t$this->app->fire($this->eventPrefix . '_match', [$this, &$match]);\"},{\"line\":109,\"text\":\"\"},{\"line\":110,\"text\":\"\\t\\tdo\"},{\"line\":111,\"text\":\"\\t\\t{\"},{\"line\":112,\"text\":\"\\t\\t\\t$controllerClass = $match->getController();\"},{\"line\":113,\"text\":\"\\t\\t\\t$action = $match->getAction();\"},{\"line\":114,\"text\":\"\\t\\t\\t$responseType = $match->getResponseType();\"},{\"line\":115,\"text\":\"\\t\\t\\t$sectionContext = $match->getSectionContext();\"},{\"line\":116,\"text\":\"\\t\\t\\t$params = $match->getParameterBag();\"},{\"line\":117,\"text\":\"\\t\\t\\t$controller = null;\"},{\"line\":118,\"text\":\"\"},{\"line\":119,\"text\":\"\\t\\t\\ttry\"},{\"line\":120,\"text\":\"\\t\\t\\t{\"},{\"line\":121,\"text\":\"\\t\\t\\t\\t$reply = $this->dispatchFromMatch($match, $controller, $reply);\"},{\"line\":122,\"text\":\"\\t\\t\\t}\"},{\"line\":123,\"text\":\"\\t\\t\\tcatch (\\\\Throwable $e)\"},{\"line\":124,\"text\":\"\\t\\t\\t{\"},{\"line\":125,\"text\":\"\\t\\t\\t\\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, [\"},{\"line\":126,\"text\":\"\\t\\t\\t\\t\\t'responseType' => $responseType,\"},{\"line\":127,\"text\":\"\\t\\t\\t\\t\\t'sectionContext' => $sectionContext,\"},{\"line\":128,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":129,\"text\":\"\\t\\t\\t\\t\\t'params' => $params,\"},{\"line\":130,\"text\":\"\\t\\t\\t\\t]);\"},{\"line\":131,\"text\":\"\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":132,\"text\":\"\\t\\t\\t}\"},{\"line\":133,\"text\":\"\\t\\t\\tcatch (\\\\Exception $e)\"},{\"line\":134,\"text\":\"\\t\\t\\t{\"},{\"line\":135,\"text\":\"\\t\\t\\t\\t// this will only be hit in PHP 5.x\"},{\"line\":136,\"text\":\"\\t\\t\\t\\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, [\"},{\"line\":137,\"text\":\"\\t\\t\\t\\t\\t'responseType' => $responseType,\"},{\"line\":138,\"text\":\"\\t\\t\\t\\t\\t'sectionContext' => $sectionContext,\"},{\"line\":139,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":140,\"text\":\"\\t\\t\\t\\t\\t'params' => $params,\"},{\"line\":141,\"text\":\"\\t\\t\\t\\t]);\"},{\"line\":142,\"text\":\"\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":143,\"text\":\"\\t\\t\\t}\"},{\"line\":144,\"text\":\"\"},{\"line\":145,\"text\":\"\\t\\t\\tif (!$reply instanceof AbstractReply)\"},{\"line\":146,\"text\":\"\\t\\t\\t{\"},{\"line\":147,\"text\":\"\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":148,\"text\":\"\\t\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":149,\"text\":\"\\t\\t\\t\\t\\t\\t'code' => 'no_reply',\"},{\"line\":150,\"text\":\"\\t\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":151,\"text\":\"\\t\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":152,\"text\":\"\\t\\t\\t\\t\\t], $responseType)\"},{\"line\":153,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":154,\"text\":\"\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":155,\"text\":\"\\t\\t\\t}\"},{\"line\":156,\"text\":\"\"},{\"line\":157,\"text\":\"\\t\\t\\tif (!($reply instanceof Reroute) && $attemptErrorReroute)\"},{\"line\":158,\"text\":\"\\t\\t\\t{\"},{\"line\":159,\"text\":\"\\t\\t\\t\\t// if we might be debugging, move this up so that we can display an error instead of the page results.\"},{\"line\":160,\"text\":\"\\t\\t\\t\\t// not doing this can hide errors\"},{\"line\":161,\"text\":\"\"},{\"line\":162,\"text\":\"\\t\\t\\t\\ttry\"},{\"line\":163,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":164,\"text\":\"\\t\\t\\t\\t\\t\\\\XF::triggerRunOnce(true);\"},{\"line\":165,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":166,\"text\":\"\\t\\t\\t\\tcatch (\\\\Throwable $e)\"},{\"line\":167,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":168,\"text\":\"\\t\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":169,\"text\":\"\"},{\"line\":170,\"text\":\"\\t\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":171,\"text\":\"\\t\\t\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)\"},{\"line\":172,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":173,\"text\":\"\\t\\t\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":174,\"text\":\"\\t\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":175,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":176,\"text\":\"\\t\\t\\t\\tcatch (\\\\Exception $e)\"},{\"line\":177,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":178,\"text\":\"\\t\\t\\t\\t\\t// this will only be hit in PHP 5.x\"},{\"line\":179,\"text\":\"\\t\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":180,\"text\":\"\"},{\"line\":181,\"text\":\"\\t\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":182,\"text\":\"\\t\\t\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)\"},{\"line\":183,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":184,\"text\":\"\\t\\t\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":185,\"text\":\"\\t\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":186,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":187,\"text\":\"\\t\\t\\t}\"},{\"line\":188,\"text\":\"\"},{\"line\":189,\"text\":\"\\t\\t\\tif ($reply instanceof Reroute)\"},{\"line\":190,\"text\":\"\\t\\t\\t{\"},{\"line\":191,\"text\":\"\\t\\t\\t\\t$match = $reply->getMatch();\"},{\"line\":192,\"text\":\"\\t\\t\\t\\tif (!$match->getResponseType())\"},{\"line\":193,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":194,\"text\":\"\\t\\t\\t\\t\\t$match->setResponseType($responseType);\"},{\"line\":195,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":196,\"text\":\"\\t\\t\\t\\tif (!$match->getSectionContext())\"},{\"line\":197,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":198,\"text\":\"\\t\\t\\t\\t\\t$match->setSectionContext($sectionContext);\"},{\"line\":199,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":200,\"text\":\"\\t\\t\\t}\"},{\"line\":201,\"text\":\"\\t\\t\\telse\"},{\"line\":202,\"text\":\"\\t\\t\\t{\"},{\"line\":203,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":204,\"text\":\"\\t\\t\\t}\"},{\"line\":205,\"text\":\"\\t\\t}\"},{\"line\":206,\"text\":\"\\t\\twhile ($i++ < 10);\"},{\"line\":207,\"text\":\"\"},{\"line\":208,\"text\":\"\\t\\tif ($reply instanceof Reroute)\"},{\"line\":209,\"text\":\"\\t\\t{\"},{\"line\":210,\"text\":\"\\t\\t\\t// rerouted too many times\"},{\"line\":211,\"text\":\"\\t\\t\\t$reply = new Error(\"},{\"line\":212,\"text\":\"\\t\\t\\t\\t'An error occurred while the page was being generated. Please try again later.',\"},{\"line\":213,\"text\":\"\\t\\t\\t\\t500\"},{\"line\":214,\"text\":\"\\t\\t\\t);\"},{\"line\":215,\"text\":\"\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":216,\"text\":\"\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":217,\"text\":\"\\t\\t}\"},{\"line\":218,\"text\":\"\"},{\"line\":219,\"text\":\"\\t\\t$this->app->postDispatch($reply, $match, $originalMatch);\"},{\"line\":220,\"text\":\"\"},{\"line\":221,\"text\":\"\\t\\t$this->app->fire($this->eventPrefix . '_post_dispatch', [$this, &$reply, $match, $originalMatch]);\"},{\"line\":222,\"text\":\"\"},{\"line\":223,\"text\":\"\\t\\treturn $reply;\"},{\"line\":224,\"text\":\"\\t}\"},{\"line\":225,\"text\":\"\"},{\"line\":226,\"text\":\"\\tprotected function handleControllerError($e, $attemptErrorReroute, $controller, array $state = [])\"},{\"line\":227,\"text\":\"\\t{\"},{\"line\":228,\"text\":\"\\t\\t/** @var \\\\Throwable $e */\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t$state = array_replace([\"},{\"line\":231,\"text\":\"\\t\\t\\t'responseType' => null,\"},{\"line\":232,\"text\":\"\\t\\t\\t'sectionContext' => '',\"},{\"line\":233,\"text\":\"\\t\\t\\t'action' => '',\"},{\"line\":234,\"text\":\"\\t\\t\\t'params' => null,\"},{\"line\":235,\"text\":\"\\t\\t], $state);\"},{\"line\":236,\"text\":\"\"},{\"line\":237,\"text\":\"\\t\\tif ($attemptErrorReroute)\"},{\"line\":238,\"text\":\"\\t\\t{\"},{\"line\":239,\"text\":\"\\t\\t\\t\\\\XF::logException($e, true); // rollback as don't know the state\"},{\"line\":240,\"text\":\"\"},{\"line\":241,\"text\":\"\\t\\t\\t$reply = new Reroute(\"},{\"line\":242,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $state['responseType'])\"},{\"line\":243,\"text\":\"\\t\\t\\t);\"},{\"line\":244,\"text\":\"\\t\\t}\"},{\"line\":245,\"text\":\"\\t\\telse\"},{\"line\":246,\"text\":\"\\t\\t{\"},{\"line\":247,\"text\":\"\\t\\t\\t$reply = new Error(\"},{\"line\":248,\"text\":\"\\t\\t\\t\\t'An error occurred while the page was being generated. Please try again later.',\"},{\"line\":249,\"text\":\"\\t\\t\\t\\t500\"},{\"line\":250,\"text\":\"\\t\\t\\t);\"},{\"line\":251,\"text\":\"\\t\\t}\"},{\"line\":252,\"text\":\"\"},{\"line\":253,\"text\":\"\\t\\t$reply->setResponseType($state['responseType']);\"},{\"line\":254,\"text\":\"\\t\\t$reply->setSectionContext($state['sectionContext']);\"},{\"line\":255,\"text\":\"\"},{\"line\":256,\"text\":\"\\t\\tif ($controller instanceof Controller)\"},{\"line\":257,\"text\":\"\\t\\t{\"},{\"line\":258,\"text\":\"\\t\\t\\t$controller->applyReplyChanges($state['action'], $state['params'] ?: new ParameterBag(), $reply);\"},{\"line\":259,\"text\":\"\\t\\t}\"},{\"line\":260,\"text\":\"\"},{\"line\":261,\"text\":\"\\t\\treturn $reply;\"},{\"line\":262,\"text\":\"\\t}\"},{\"line\":263,\"text\":\"\"},{\"line\":264,\"text\":\"\\tpublic function dispatchFromMatch(RouteMatch $match, &$controller = null, ?AbstractReply $previousReply = null)\"},{\"line\":265,\"text\":\"\\t{\"},{\"sep\":true},{\"line\":277,\"text\":\"\\t\\t$action,\"},{\"line\":278,\"text\":\"\\t\\tRouteMatch $match,\"},{\"line\":279,\"text\":\"\\t\\t&$controller = null,\"},{\"line\":280,\"text\":\"\\t\\t?AbstractReply $previousReply = null\"},{\"line\":281,\"text\":\"\\t)\"},{\"line\":282,\"text\":\"\\t{\"},{\"line\":283,\"text\":\"\\t\\t$params = $match->getParameterBag();\"},{\"line\":284,\"text\":\"\\t\\tif (!$params)\"},{\"line\":285,\"text\":\"\\t\\t{\"},{\"line\":286,\"text\":\"\\t\\t\\t$params = new ParameterBag();\"},{\"line\":287,\"text\":\"\\t\\t}\"},{\"line\":288,\"text\":\"\"},{\"line\":289,\"text\":\"\\t\\t$responseType = $match->getResponseType();\"},{\"line\":290,\"text\":\"\"},{\"line\":291,\"text\":\"\\t\\tif (!$controllerClass)\"},{\"line\":292,\"text\":\"\\t\\t{\"},{\"line\":293,\"text\":\"\\t\\t\\treturn new Reroute(\"},{\"line\":294,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":295,\"text\":\"\\t\\t\\t\\t\\t'code' => 'no_controller',\"},{\"line\":296,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":297,\"text\":\"\\t\\t\\t\\t\\t'action' => is_string($action) ? $action : null,\"},{\"line\":298,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":299,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":300,\"text\":\"\\t\\t\\t);\"},{\"line\":301,\"text\":\"\\t\\t}\"},{\"line\":302,\"text\":\"\"},{\"line\":303,\"text\":\"\\t\\t$controller = $this->app->controller($controllerClass, $this->request);\"},{\"line\":304,\"text\":\"\\t\\tif (!$controller)\"},{\"line\":305,\"text\":\"\\t\\t{\"},{\"line\":306,\"text\":\"\\t\\t\\treturn new Reroute(\"},{\"line\":307,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":308,\"text\":\"\\t\\t\\t\\t\\t'code' => 'invalid_controller',\"},{\"line\":309,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":310,\"text\":\"\\t\\t\\t\\t\\t'action' => is_string($action) ? $action : null,\"},{\"line\":311,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":312,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":313,\"text\":\"\\t\\t\\t);\"},{\"line\":314,\"text\":\"\\t\\t}\"},{\"line\":315,\"text\":\"\"},{\"line\":316,\"text\":\"\\t\\t$controller->setupFromMatch($match);\"},{\"line\":317,\"text\":\"\\t\\tif ($previousReply)\"},{\"line\":318,\"text\":\"\\t\\t{\"},{\"line\":319,\"text\":\"\\t\\t\\t$controller->setupFromReply($previousReply);\"},{\"line\":320,\"text\":\"\\t\\t}\"},{\"line\":321,\"text\":\"\"},{\"line\":322,\"text\":\"\\t\\tif ($action instanceof \\\\Closure)\"},{\"line\":323,\"text\":\"\\t\\t{\"},{\"line\":324,\"text\":\"\\t\\t\\t$action = $action($controller, $responseType, $params);\"},{\"line\":325,\"text\":\"\\t\\t}\"},{\"line\":326,\"text\":\"\\t\\telse\"},{\"line\":327,\"text\":\"\\t\\t{\"},{\"line\":328,\"text\":\"\\t\\t\\t$action = preg_replace('#[^a-z0-9]#i', ' ', $action);\"},{\"line\":329,\"text\":\"\\t\\t\\t$action = str_replace(' ', '', ucwords($action));\"},{\"line\":330,\"text\":\"\\t\\t}\"},{\"line\":331,\"text\":\"\"},{\"line\":332,\"text\":\"\\t\\t$method = 'action' . $action;\"},{\"line\":333,\"text\":\"\\t\\tif (!is_callable([$controller, $method]))\"},{\"line\":334,\"text\":\"\\t\\t{\"},{\"line\":335,\"text\":\"\\t\\t\\t$reply = new Reroute(\"},{\"line\":336,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":337,\"text\":\"\\t\\t\\t\\t\\t'code' => 'invalid_action',\"},{\"line\":338,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":339,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":340,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":341,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":342,\"text\":\"\\t\\t\\t);\"},{\"line\":343,\"text\":\"\"}],\"path\":\"src/XF/Mvc/Dispatcher.php\",\"present\":true,\"sha256\":\"ff47c67e92d0490db099eb588b0ad5d1b96c537062338f53ea82f8f55224ceb1\"}],\"error\":null,\"exact\":{\"controller_pwa\":{\"bytes\":715,\"present\":true,\"sha256\":\"9e3217d9524349a8137b89d418e4693ca17f8e5f61ba5b563fff747d1014efb3\",\"text\":\"user_id\\n || (!$visitor->hasPermission('gramSupport', 'manage')\\n && !$visitor->hasPermission('gramSupport', 'viewAll')))\\n {\\n throw $this->exception($this->noPermission());\\n }\\n }\\n\\n public function actionIndex()\\n {\\n $this->assertStaff();\\n $this->setResponseType('raw');\\n\\n return $this->view(\\n 'Gram\\\\Support:PwaServiceWorker',\\n 'gram_support_staff_service_worker',\\n []\\n );\\n }\\n}\\n\"},\"view_pwa_service_worker\":{\"bytes\":381,\"present\":true,\"sha256\":\"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04\",\"text\":\"response->contentType('application/javascript', 'utf-8');\\n\\n $js = $this->renderTemplate(\\n 'public:gram_support_staff_service_worker',\\n $this->params\\n );\\n\\n return $this->response->body($js);\\n }\\n}\\n\"}},\"ok\":true,\"render_raw_implementations\":[{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Pub/View/Error/EmbeddedImageRequest.php\",\"sha256\":\"dae0d06414fc6778a17187e9c5cab5e2923fb5484733a3b193d8d28b6c381d71\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Pub/View/Attachment/View.php\",\"sha256\":\"5addd9bb6b49abb0c83d52d0390db22d62ccff84854cd90eb8015c35fe93e5be\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Api/View/Attachment/View.php\",\"sha256\":\"6e1fceda47e3773d05d3a068b5af89436a2ebb4bd73b8ce1ac04e555e1908bd0\"},{\"hits\":[{\"line\":11,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/User/EmailList.php\",\"sha256\":\"e5d72d2a23a66cf0b70086ce2e39e3be0ed076551df4300d3af16112f7ec1876\"},{\"hits\":[{\"line\":14,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/User/ExportListing.php\",\"sha256\":\"b414d9898a7f68b34ad964c91f26d4f759948034bb83a508f3dcc169ca830c2e\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/AddOn/Icon.php\",\"sha256\":\"2626f56b3f7353f452e844b46b75aa7501769c7c1e5dc91a89a455efc8b2d2f4\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Attachment/View.php\",\"sha256\":\"2ecfa72cebb7ac80e0d9b7290b8b24f20a74bd7367c9aabadf69e0ee7bdf14f4\"},{\"hits\":[{\"line\":11,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Log/ImageProxy/Image.php\",\"sha256\":\"b83a8022066c68bf55d9e0ef1b2a6586dc01b129418861eabc9aeb4e6da6d300\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Log/EmailBounce/View.php\",\"sha256\":\"01a4cc67a7184293fcc1180f48d24a323bc11574b8128373904e54192867d075\"},{\"hits\":[{\"line\":18,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Style/Export.php\",\"sha256\":\"7c04dde645d1fb8c43ca801eee917c3de97ddb3c89bf1adc412e44db4bf2311e\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Install/View/Install/ConfigDownload.php\",\"sha256\":\"5fc4ff410a4ce3d83bedce9a7e9e855802c71660377face69b4e3d237c94cb3f\"},{\"hits\":[{\"line\":7,\"text\":\" public function renderRaw()\"}],\"path\":\"src/addons/Gram/Support/Pub/View/PwaServiceWorker.php\",\"sha256\":\"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04\"}]},\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"out_truncated\":false,\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}\nGRAM516R5RCA5_DECISION=PASS_SERVICE_WORKER_EXACT_SOURCE_CAPTURED\nGRAM516R5RCA5_NEXT_GATE=BUILD_EXACT_SERVICE_WORKER_FIX\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.txt b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.txt new file mode 100644 index 00000000..d20178d7 --- /dev/null +++ b/runtime/history/SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5.txt @@ -0,0 +1,36 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=gram-support-service-worker-exact-source-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=379bcbf1f6a2973b06547d9db50a4fd99e2617ee053737afc1e5ce6db9d550f9 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6 +SANITIZED_OUTPUT_SHA256=ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6 +OUTPUT_BEGIN +GRAM516R5RCA5_SAFE_REPORT={"err_truncated":false,"guest":{"core":[{"matches":[{"sep":true},{"line":1,"text":"header('X-Content-Type-Options', 'nosniff');"},{"line":46,"text":""},{"line":47,"text":"\t\tif (\\XF::app()->config('enableClickjackingProtection'))"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\t$response->header('X-Frame-Options', 'SAMEORIGIN');"},{"line":50,"text":"\t\t}"},{"line":51,"text":"\t}"},{"line":52,"text":""},{"line":53,"text":"\tabstract protected function initialize();"},{"line":54,"text":"\tabstract public function getResponseType();"},{"line":55,"text":"\tabstract public function renderRedirect($url, $type, $message = '');"},{"line":56,"text":"\tabstract public function renderMessage($message);"},{"line":57,"text":"\tabstract public function renderErrors(array $errors);"},{"line":58,"text":"\tabstract public function renderView($viewName, $templateName, array $params = []);"},{"line":59,"text":""},{"line":60,"text":"\tpublic function setReply(AbstractReply $reply)"},{"line":61,"text":"\t{"},{"line":62,"text":"\t\t$this->reply = $reply;"},{"line":63,"text":"\t}"},{"line":64,"text":""},{"line":65,"text":"\tpublic function renderUnrepresentable()"},{"line":66,"text":"\t{"},{"line":67,"text":"\t\treturn $this->renderErrors(['This page is not representable in the requested type.']);"},{"line":68,"text":"\t}"},{"line":69,"text":""},{"line":70,"text":"\t/**"},{"sep":true},{"line":73,"text":"\t * @param array $params"},{"line":74,"text":"\t *"},{"line":75,"text":"\t * @return View"},{"line":76,"text":"\t */"},{"line":77,"text":"\tpublic function createViewObject($viewName, $templateName, array $params = [])"},{"line":78,"text":"\t{"},{"line":79,"text":"\t\t$f = $this->viewFactory;"},{"line":80,"text":"\t\treturn $f($viewName, ["},{"line":81,"text":"\t\t\t$this, $this->response, $templateName, $params,"},{"line":82,"text":"\t\t]);"},{"line":83,"text":"\t}"},{"line":84,"text":""},{"line":85,"text":"\tpublic function renderViewObject($viewName, &$templateName, array &$params = [], $responseType = null)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\t$responseType = $responseType ?: $this->getResponseType();"},{"line":88,"text":"\t\t$view = $this->createViewObject($viewName, $templateName, $params);"},{"line":89,"text":"\t\t$method = 'render' . ucfirst($responseType);"},{"line":90,"text":"\t\tif ($view && method_exists($view, $method))"},{"line":91,"text":"\t\t{"},{"line":92,"text":"\t\t\t$result = $view->$method();"},{"line":93,"text":"\t\t}"},{"line":94,"text":"\t\telse"},{"line":95,"text":"\t\t{"},{"line":96,"text":"\t\t\t$result = null;"},{"line":97,"text":"\t\t}"},{"line":98,"text":""},{"line":99,"text":"\t\tif ($view)"},{"line":100,"text":"\t\t{"},{"line":101,"text":"\t\t\t$templateName = $view->getTemplateName();"}],"path":"src/XF/Mvc/Renderer/AbstractRenderer.php","present":true,"sha256":"22f0ba6cb78fcbead8ac19cd24f2be211ff6eb1059a343513e0e85c12b72ac9e"},{"matches":[{"sep":true},{"line":5,"text":"use XF\\Mvc\\Reply\\AbstractReply;"},{"line":6,"text":"use XF\\Util\\File;"},{"line":7,"text":""},{"line":8,"text":"use function count, strval;"},{"line":9,"text":""},{"line":10,"text":"class Html extends AbstractRenderer"},{"line":11,"text":"{"},{"line":12,"text":"\tprotected function initialize()"},{"line":13,"text":"\t{"},{"line":14,"text":"\t\t$this->response->contentType('text/html');"},{"line":15,"text":"\t}"},{"line":16,"text":""},{"line":17,"text":"\tpublic function getResponseType()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn 'html';"},{"line":20,"text":"\t}"},{"line":21,"text":""},{"line":22,"text":"\tpublic function renderRedirect($url, $type, $message = '')"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\t$this->setResponseCode($type == 'permanent' ? 301 : 303);"},{"line":25,"text":"\t\t$this->response->header('Location', $url);"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function renderMessage($message)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$app = \\XF::app();"},{"line":31,"text":"\t\treturn $this->renderView('XF:MessagePage', $app['app.defaultType'] . ':message_page', ["},{"line":32,"text":"\t\t\t'message' => $message,"},{"line":33,"text":"\t\t]);"},{"line":34,"text":"\t}"},{"line":35,"text":""},{"line":36,"text":"\tpublic function renderErrors(array $errors)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$app = \\XF::app();"},{"line":39,"text":"\t\treturn $this->renderView('XF:Error', $app['app.defaultType'] . ':error', ["},{"line":40,"text":"\t\t\t'errors' => $errors,"},{"line":41,"text":"\t\t\t'error' => count($errors) == 1 ? reset($errors) : false,"},{"line":42,"text":"\t\t]);"},{"line":43,"text":"\t}"},{"line":44,"text":""},{"line":45,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":46,"text":"\t{"},{"line":47,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":48,"text":"\t\tif ($output === null && $templateName)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\t$output = $this->getTemplate($templateName, $params)->render();"},{"line":51,"text":"\t\t}"},{"line":52,"text":"\t\treturn $output;"},{"line":53,"text":"\t}"},{"line":54,"text":""},{"line":55,"text":"\tpublic function postFilter($content, AbstractReply $reply)"},{"line":56,"text":"\t{"},{"line":57,"text":"\t\t$content = strval($content);"}],"path":"src/XF/Mvc/Renderer/Html.php","present":true,"sha256":"beec569b9d8feb92998678acf018aa7a7fe19c3db7ff986de7010c03aeb146b7"},{"matches":[{"sep":true},{"line":7,"text":""},{"line":8,"text":"use function array_key_exists, count, is_array, is_object, strval;"},{"line":9,"text":""},{"line":10,"text":"class Json extends AbstractRenderer"},{"line":11,"text":"{"},{"line":12,"text":"\tprotected $encodeModifiers = JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;"},{"line":13,"text":""},{"line":14,"text":"\tprotected function initialize()"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\t$this->response->contentType('application/json');"},{"line":17,"text":"\t}"},{"line":18,"text":""},{"line":19,"text":"\tpublic function getResponseType()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'json';"},{"line":22,"text":"\t}"},{"line":23,"text":""},{"line":24,"text":"\tpublic function renderRedirect($url, $type, $message = '')"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\treturn ["},{"line":27,"text":"\t\t\t'status' => 'ok',"},{"line":28,"text":"\t\t\t'message' => $message,"},{"line":29,"text":"\t\t\t'redirect' => $url,"},{"line":30,"text":"\t\t];"},{"line":31,"text":"\t}"},{"sep":true},{"line":46,"text":"\t\t\t'error' => count($errors) == 1 ? reset($errors) : false,"},{"line":47,"text":"\t\t\t'forJson' => true,"},{"line":48,"text":"\t\t];"},{"line":49,"text":"\t\t$html = $this->getTemplate($app['app.defaultType'] . ':error', $params)->render();"},{"line":50,"text":""},{"line":51,"text":"\t\treturn ["},{"line":52,"text":"\t\t\t'status' => 'error',"},{"line":53,"text":"\t\t\t'errors' => $errors,"},{"line":54,"text":"\t\t\t'errorHtml' => $this->getHtmlOutputStructure($html),"},{"line":55,"text":"\t\t];"},{"line":56,"text":"\t}"},{"line":57,"text":""},{"line":58,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":59,"text":"\t{"},{"line":60,"text":"\t\tif (isset($params['innerContent']))"},{"line":61,"text":"\t\t{"},{"line":62,"text":"\t\t\treturn $params['innerContent'];"},{"line":63,"text":"\t\t}"},{"line":64,"text":""},{"line":65,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":66,"text":"\t\tif ($output === null)"},{"line":67,"text":"\t\t{"},{"line":68,"text":"\t\t\t$output = ["},{"line":69,"text":"\t\t\t\t'status' => 'ok',"},{"line":70,"text":"\t\t\t\t'html' => $this->renderHtmlFallback($viewName, $templateName, $params),"},{"line":71,"text":"\t\t\t];"},{"line":72,"text":"\t\t}"},{"line":73,"text":"\t\telse if (is_array($output) && array_key_exists('html', $output) && $output['html'] === null)"},{"line":74,"text":"\t\t{"},{"line":75,"text":"\t\t\t$output['html'] = $this->renderHtmlFallback($viewName, $templateName, $params);"},{"line":76,"text":"\t\t}"},{"line":77,"text":""},{"line":78,"text":"\t\treturn $output;"},{"line":79,"text":"\t}"},{"line":80,"text":""},{"line":81,"text":"\tpublic function renderHtmlFallback($viewName, $templateName, array $params = [])"},{"line":82,"text":"\t{"},{"line":83,"text":"\t\t$htmlOutput = $this->renderViewObject($viewName, $templateName, $params, 'html');"},{"line":84,"text":"\t\tif ($htmlOutput === null && $templateName)"},{"line":85,"text":"\t\t{"},{"line":86,"text":"\t\t\t$htmlOutput = $this->getTemplate($templateName, $params)->render();"},{"line":87,"text":"\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\treturn $this->getHtmlOutputStructure($htmlOutput);"},{"line":90,"text":"\t}"},{"line":91,"text":""},{"line":92,"text":"\tpublic function getHtmlOutputStructure($html)"},{"line":93,"text":"\t{"}],"path":"src/XF/Mvc/Renderer/Json.php","present":true,"sha256":"2f3c46b7ef35aaceddf6c358dda1d53826ef7af886051487f3be9bfba0bd5f96"},{"matches":[{"sep":true},{"line":1,"text":"setResponseCode($type == 'permanent' ? 301 : 303);"},{"line":19,"text":"\t\t$this->response->header('Location', $url);"},{"line":20,"text":"\t}"},{"line":21,"text":""},{"line":22,"text":"\tpublic function renderMessage($message)"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn '';"},{"line":25,"text":"\t}"},{"line":26,"text":""},{"line":27,"text":"\tpublic function renderErrors(array $errors)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\treturn '';"},{"line":30,"text":"\t}"},{"line":31,"text":""},{"line":32,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":33,"text":"\t{"},{"line":34,"text":"\t\tif (isset($params['innerContent']))"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\treturn $params['innerContent'];"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":40,"text":"\t\tif ($output === null)"},{"line":41,"text":"\t\t{"},{"line":42,"text":"\t\t\t$output = '';"},{"line":43,"text":"\t\t}"},{"line":44,"text":"\t\treturn $output;"}],"path":"src/XF/Mvc/Renderer/Raw.php","present":true,"sha256":"46592f40912a491fe76e3ebb2308c77b55db9bc5b3f231f3e3b47c0dacf58e29"},{"matches":[],"path":"src/XF/Mvc/Reply/View.php","present":true,"sha256":"c4a3a6fcd36b056428ab1bc569857ba3757df53548b648301d5cb6271817662e"},{"matches":[{"sep":true},{"line":53,"text":"\t\t}"},{"line":54,"text":""},{"line":55,"text":"\t\t$match = $this->route($routePath);"},{"line":56,"text":""},{"line":57,"text":"\t\t$earlyResponse = $this->beforeDispatch($match);"},{"line":58,"text":"\t\tif ($earlyResponse)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\treturn $earlyResponse;"},{"line":61,"text":"\t\t}"},{"line":62,"text":""},{"line":63,"text":"\t\t$reply = $this->dispatchLoop($match);"},{"line":64,"text":""},{"line":65,"text":"\t\t$responseType = $reply->getResponseType() ?: $match->getResponseType();"},{"line":66,"text":"\t\t$response = $this->render($reply, $responseType);"},{"line":67,"text":""},{"line":68,"text":"\t\treturn $response;"},{"line":69,"text":"\t}"},{"line":70,"text":""},{"line":71,"text":"\tpublic function route($routePath)"},{"line":72,"text":"\t{"},{"line":73,"text":"\t\t$match = $this->getRouter()->routeToController($routePath, $this->request);"},{"line":74,"text":""},{"line":75,"text":"\t\tif (!($match instanceof RouteMatch) || !$match->getController())"},{"line":76,"text":"\t\t{"},{"line":77,"text":"\t\t\t$match = $this->app->getErrorRoute('DispatchError', ["},{"line":78,"text":"\t\t\t\t'code' => 'invalid_route',"},{"sep":true},{"line":102,"text":"\t{"},{"line":103,"text":"\t\t$i = 1;"},{"line":104,"text":"\t\t$attemptErrorReroute = true;"},{"line":105,"text":"\t\t$originalMatch = $match;"},{"line":106,"text":"\t\t$reply = null;"},{"line":107,"text":""},{"line":108,"text":"\t\t$this->app->fire($this->eventPrefix . '_match', [$this, &$match]);"},{"line":109,"text":""},{"line":110,"text":"\t\tdo"},{"line":111,"text":"\t\t{"},{"line":112,"text":"\t\t\t$controllerClass = $match->getController();"},{"line":113,"text":"\t\t\t$action = $match->getAction();"},{"line":114,"text":"\t\t\t$responseType = $match->getResponseType();"},{"line":115,"text":"\t\t\t$sectionContext = $match->getSectionContext();"},{"line":116,"text":"\t\t\t$params = $match->getParameterBag();"},{"line":117,"text":"\t\t\t$controller = null;"},{"line":118,"text":""},{"line":119,"text":"\t\t\ttry"},{"line":120,"text":"\t\t\t{"},{"line":121,"text":"\t\t\t\t$reply = $this->dispatchFromMatch($match, $controller, $reply);"},{"line":122,"text":"\t\t\t}"},{"line":123,"text":"\t\t\tcatch (\\Throwable $e)"},{"line":124,"text":"\t\t\t{"},{"line":125,"text":"\t\t\t\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, ["},{"line":126,"text":"\t\t\t\t\t'responseType' => $responseType,"},{"line":127,"text":"\t\t\t\t\t'sectionContext' => $sectionContext,"},{"line":128,"text":"\t\t\t\t\t'action' => $action,"},{"line":129,"text":"\t\t\t\t\t'params' => $params,"},{"line":130,"text":"\t\t\t\t]);"},{"line":131,"text":"\t\t\t\t$attemptErrorReroute = false;"},{"line":132,"text":"\t\t\t}"},{"line":133,"text":"\t\t\tcatch (\\Exception $e)"},{"line":134,"text":"\t\t\t{"},{"line":135,"text":"\t\t\t\t// this will only be hit in PHP 5.x"},{"line":136,"text":"\t\t\t\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, ["},{"line":137,"text":"\t\t\t\t\t'responseType' => $responseType,"},{"line":138,"text":"\t\t\t\t\t'sectionContext' => $sectionContext,"},{"line":139,"text":"\t\t\t\t\t'action' => $action,"},{"line":140,"text":"\t\t\t\t\t'params' => $params,"},{"line":141,"text":"\t\t\t\t]);"},{"line":142,"text":"\t\t\t\t$attemptErrorReroute = false;"},{"line":143,"text":"\t\t\t}"},{"line":144,"text":""},{"line":145,"text":"\t\t\tif (!$reply instanceof AbstractReply)"},{"line":146,"text":"\t\t\t{"},{"line":147,"text":"\t\t\t\t$reply = new Reroute("},{"line":148,"text":"\t\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":149,"text":"\t\t\t\t\t\t'code' => 'no_reply',"},{"line":150,"text":"\t\t\t\t\t\t'controller' => $controllerClass,"},{"line":151,"text":"\t\t\t\t\t\t'action' => $action,"},{"line":152,"text":"\t\t\t\t\t], $responseType)"},{"line":153,"text":"\t\t\t\t);"},{"line":154,"text":"\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":155,"text":"\t\t\t}"},{"line":156,"text":""},{"line":157,"text":"\t\t\tif (!($reply instanceof Reroute) && $attemptErrorReroute)"},{"line":158,"text":"\t\t\t{"},{"line":159,"text":"\t\t\t\t// if we might be debugging, move this up so that we can display an error instead of the page results."},{"line":160,"text":"\t\t\t\t// not doing this can hide errors"},{"line":161,"text":""},{"line":162,"text":"\t\t\t\ttry"},{"line":163,"text":"\t\t\t\t{"},{"line":164,"text":"\t\t\t\t\t\\XF::triggerRunOnce(true);"},{"line":165,"text":"\t\t\t\t}"},{"line":166,"text":"\t\t\t\tcatch (\\Throwable $e)"},{"line":167,"text":"\t\t\t\t{"},{"line":168,"text":"\t\t\t\t\t$attemptErrorReroute = false;"},{"line":169,"text":""},{"line":170,"text":"\t\t\t\t\t$reply = new Reroute("},{"line":171,"text":"\t\t\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)"},{"line":172,"text":"\t\t\t\t\t);"},{"line":173,"text":"\t\t\t\t\t$reply->setResponseType($responseType);"},{"line":174,"text":"\t\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":175,"text":"\t\t\t\t}"},{"line":176,"text":"\t\t\t\tcatch (\\Exception $e)"},{"line":177,"text":"\t\t\t\t{"},{"line":178,"text":"\t\t\t\t\t// this will only be hit in PHP 5.x"},{"line":179,"text":"\t\t\t\t\t$attemptErrorReroute = false;"},{"line":180,"text":""},{"line":181,"text":"\t\t\t\t\t$reply = new Reroute("},{"line":182,"text":"\t\t\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)"},{"line":183,"text":"\t\t\t\t\t);"},{"line":184,"text":"\t\t\t\t\t$reply->setResponseType($responseType);"},{"line":185,"text":"\t\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":186,"text":"\t\t\t\t}"},{"line":187,"text":"\t\t\t}"},{"line":188,"text":""},{"line":189,"text":"\t\t\tif ($reply instanceof Reroute)"},{"line":190,"text":"\t\t\t{"},{"line":191,"text":"\t\t\t\t$match = $reply->getMatch();"},{"line":192,"text":"\t\t\t\tif (!$match->getResponseType())"},{"line":193,"text":"\t\t\t\t{"},{"line":194,"text":"\t\t\t\t\t$match->setResponseType($responseType);"},{"line":195,"text":"\t\t\t\t}"},{"line":196,"text":"\t\t\t\tif (!$match->getSectionContext())"},{"line":197,"text":"\t\t\t\t{"},{"line":198,"text":"\t\t\t\t\t$match->setSectionContext($sectionContext);"},{"line":199,"text":"\t\t\t\t}"},{"line":200,"text":"\t\t\t}"},{"line":201,"text":"\t\t\telse"},{"line":202,"text":"\t\t\t{"},{"line":203,"text":"\t\t\t\tbreak;"},{"line":204,"text":"\t\t\t}"},{"line":205,"text":"\t\t}"},{"line":206,"text":"\t\twhile ($i++ < 10);"},{"line":207,"text":""},{"line":208,"text":"\t\tif ($reply instanceof Reroute)"},{"line":209,"text":"\t\t{"},{"line":210,"text":"\t\t\t// rerouted too many times"},{"line":211,"text":"\t\t\t$reply = new Error("},{"line":212,"text":"\t\t\t\t'An error occurred while the page was being generated. Please try again later.',"},{"line":213,"text":"\t\t\t\t500"},{"line":214,"text":"\t\t\t);"},{"line":215,"text":"\t\t\t$reply->setResponseType($responseType);"},{"line":216,"text":"\t\t\t$reply->setSectionContext($sectionContext);"},{"line":217,"text":"\t\t}"},{"line":218,"text":""},{"line":219,"text":"\t\t$this->app->postDispatch($reply, $match, $originalMatch);"},{"line":220,"text":""},{"line":221,"text":"\t\t$this->app->fire($this->eventPrefix . '_post_dispatch', [$this, &$reply, $match, $originalMatch]);"},{"line":222,"text":""},{"line":223,"text":"\t\treturn $reply;"},{"line":224,"text":"\t}"},{"line":225,"text":""},{"line":226,"text":"\tprotected function handleControllerError($e, $attemptErrorReroute, $controller, array $state = [])"},{"line":227,"text":"\t{"},{"line":228,"text":"\t\t/** @var \\Throwable $e */"},{"line":229,"text":""},{"line":230,"text":"\t\t$state = array_replace(["},{"line":231,"text":"\t\t\t'responseType' => null,"},{"line":232,"text":"\t\t\t'sectionContext' => '',"},{"line":233,"text":"\t\t\t'action' => '',"},{"line":234,"text":"\t\t\t'params' => null,"},{"line":235,"text":"\t\t], $state);"},{"line":236,"text":""},{"line":237,"text":"\t\tif ($attemptErrorReroute)"},{"line":238,"text":"\t\t{"},{"line":239,"text":"\t\t\t\\XF::logException($e, true); // rollback as don't know the state"},{"line":240,"text":""},{"line":241,"text":"\t\t\t$reply = new Reroute("},{"line":242,"text":"\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $state['responseType'])"},{"line":243,"text":"\t\t\t);"},{"line":244,"text":"\t\t}"},{"line":245,"text":"\t\telse"},{"line":246,"text":"\t\t{"},{"line":247,"text":"\t\t\t$reply = new Error("},{"line":248,"text":"\t\t\t\t'An error occurred while the page was being generated. Please try again later.',"},{"line":249,"text":"\t\t\t\t500"},{"line":250,"text":"\t\t\t);"},{"line":251,"text":"\t\t}"},{"line":252,"text":""},{"line":253,"text":"\t\t$reply->setResponseType($state['responseType']);"},{"line":254,"text":"\t\t$reply->setSectionContext($state['sectionContext']);"},{"line":255,"text":""},{"line":256,"text":"\t\tif ($controller instanceof Controller)"},{"line":257,"text":"\t\t{"},{"line":258,"text":"\t\t\t$controller->applyReplyChanges($state['action'], $state['params'] ?: new ParameterBag(), $reply);"},{"line":259,"text":"\t\t}"},{"line":260,"text":""},{"line":261,"text":"\t\treturn $reply;"},{"line":262,"text":"\t}"},{"line":263,"text":""},{"line":264,"text":"\tpublic function dispatchFromMatch(RouteMatch $match, &$controller = null, ?AbstractReply $previousReply = null)"},{"line":265,"text":"\t{"},{"sep":true},{"line":277,"text":"\t\t$action,"},{"line":278,"text":"\t\tRouteMatch $match,"},{"line":279,"text":"\t\t&$controller = null,"},{"line":280,"text":"\t\t?AbstractReply $previousReply = null"},{"line":281,"text":"\t)"},{"line":282,"text":"\t{"},{"line":283,"text":"\t\t$params = $match->getParameterBag();"},{"line":284,"text":"\t\tif (!$params)"},{"line":285,"text":"\t\t{"},{"line":286,"text":"\t\t\t$params = new ParameterBag();"},{"line":287,"text":"\t\t}"},{"line":288,"text":""},{"line":289,"text":"\t\t$responseType = $match->getResponseType();"},{"line":290,"text":""},{"line":291,"text":"\t\tif (!$controllerClass)"},{"line":292,"text":"\t\t{"},{"line":293,"text":"\t\t\treturn new Reroute("},{"line":294,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":295,"text":"\t\t\t\t\t'code' => 'no_controller',"},{"line":296,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":297,"text":"\t\t\t\t\t'action' => is_string($action) ? $action : null,"},{"line":298,"text":"\t\t\t\t\t'match' => $match,"},{"line":299,"text":"\t\t\t\t], $responseType)"},{"line":300,"text":"\t\t\t);"},{"line":301,"text":"\t\t}"},{"line":302,"text":""},{"line":303,"text":"\t\t$controller = $this->app->controller($controllerClass, $this->request);"},{"line":304,"text":"\t\tif (!$controller)"},{"line":305,"text":"\t\t{"},{"line":306,"text":"\t\t\treturn new Reroute("},{"line":307,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":308,"text":"\t\t\t\t\t'code' => 'invalid_controller',"},{"line":309,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":310,"text":"\t\t\t\t\t'action' => is_string($action) ? $action : null,"},{"line":311,"text":"\t\t\t\t\t'match' => $match,"},{"line":312,"text":"\t\t\t\t], $responseType)"},{"line":313,"text":"\t\t\t);"},{"line":314,"text":"\t\t}"},{"line":315,"text":""},{"line":316,"text":"\t\t$controller->setupFromMatch($match);"},{"line":317,"text":"\t\tif ($previousReply)"},{"line":318,"text":"\t\t{"},{"line":319,"text":"\t\t\t$controller->setupFromReply($previousReply);"},{"line":320,"text":"\t\t}"},{"line":321,"text":""},{"line":322,"text":"\t\tif ($action instanceof \\Closure)"},{"line":323,"text":"\t\t{"},{"line":324,"text":"\t\t\t$action = $action($controller, $responseType, $params);"},{"line":325,"text":"\t\t}"},{"line":326,"text":"\t\telse"},{"line":327,"text":"\t\t{"},{"line":328,"text":"\t\t\t$action = preg_replace('#[^a-z0-9]#i', ' ', $action);"},{"line":329,"text":"\t\t\t$action = str_replace(' ', '', ucwords($action));"},{"line":330,"text":"\t\t}"},{"line":331,"text":""},{"line":332,"text":"\t\t$method = 'action' . $action;"},{"line":333,"text":"\t\tif (!is_callable([$controller, $method]))"},{"line":334,"text":"\t\t{"},{"line":335,"text":"\t\t\t$reply = new Reroute("},{"line":336,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":337,"text":"\t\t\t\t\t'code' => 'invalid_action',"},{"line":338,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":339,"text":"\t\t\t\t\t'action' => $action,"},{"line":340,"text":"\t\t\t\t\t'match' => $match,"},{"line":341,"text":"\t\t\t\t], $responseType)"},{"line":342,"text":"\t\t\t);"},{"line":343,"text":""}],"path":"src/XF/Mvc/Dispatcher.php","present":true,"sha256":"ff47c67e92d0490db099eb588b0ad5d1b96c537062338f53ea82f8f55224ceb1"}],"error":null,"exact":{"controller_pwa":{"bytes":715,"present":true,"sha256":"9e3217d9524349a8137b89d418e4693ca17f8e5f61ba5b563fff747d1014efb3","text":"user_id\n || (!$visitor->hasPermission('gramSupport', 'manage')\n && !$visitor->hasPermission('gramSupport', 'viewAll')))\n {\n throw $this->exception($this->noPermission());\n }\n }\n\n public function actionIndex()\n {\n $this->assertStaff();\n $this->setResponseType('raw');\n\n return $this->view(\n 'Gram\\Support:PwaServiceWorker',\n 'gram_support_staff_service_worker',\n []\n );\n }\n}\n"},"view_pwa_service_worker":{"bytes":381,"present":true,"sha256":"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04","text":"response->contentType('application/javascript', 'utf-8');\n\n $js = $this->renderTemplate(\n 'public:gram_support_staff_service_worker',\n $this->params\n );\n\n return $this->response->body($js);\n }\n}\n"}},"ok":true,"render_raw_implementations":[{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Pub/View/Error/EmbeddedImageRequest.php","sha256":"dae0d06414fc6778a17187e9c5cab5e2923fb5484733a3b193d8d28b6c381d71"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Pub/View/Attachment/View.php","sha256":"5addd9bb6b49abb0c83d52d0390db22d62ccff84854cd90eb8015c35fe93e5be"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Api/View/Attachment/View.php","sha256":"6e1fceda47e3773d05d3a068b5af89436a2ebb4bd73b8ce1ac04e555e1908bd0"},{"hits":[{"line":11,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/User/EmailList.php","sha256":"e5d72d2a23a66cf0b70086ce2e39e3be0ed076551df4300d3af16112f7ec1876"},{"hits":[{"line":14,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/User/ExportListing.php","sha256":"b414d9898a7f68b34ad964c91f26d4f759948034bb83a508f3dcc169ca830c2e"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/AddOn/Icon.php","sha256":"2626f56b3f7353f452e844b46b75aa7501769c7c1e5dc91a89a455efc8b2d2f4"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Attachment/View.php","sha256":"2ecfa72cebb7ac80e0d9b7290b8b24f20a74bd7367c9aabadf69e0ee7bdf14f4"},{"hits":[{"line":11,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Log/ImageProxy/Image.php","sha256":"b83a8022066c68bf55d9e0ef1b2a6586dc01b129418861eabc9aeb4e6da6d300"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Log/EmailBounce/View.php","sha256":"01a4cc67a7184293fcc1180f48d24a323bc11574b8128373904e54192867d075"},{"hits":[{"line":18,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Style/Export.php","sha256":"7c04dde645d1fb8c43ca801eee917c3de97ddb3c89bf1adc412e44db4bf2311e"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Install/View/Install/ConfigDownload.php","sha256":"5fc4ff410a4ce3d83bedce9a7e9e855802c71660377face69b4e3d237c94cb3f"},{"hits":[{"line":7,"text":" public function renderRaw()"}],"path":"src/addons/Gram/Support/Pub/View/PwaServiceWorker.php","sha256":"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04"}]},"guest_stderr_present":false,"inner_rc":0,"ok":true,"out_truncated":false,"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +GRAM516R5RCA5_DECISION=PASS_SERVICE_WORKER_EXACT_SOURCE_CAPTURED +GRAM516R5RCA5_NEXT_GATE=BUILD_EXACT_SERVICE_WORKER_FIX +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 51ccf551..3774fe79 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1 +1,38 @@ -{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260918T061701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-18T06:17:01Z","finished_at_utc":"2026-09-18T06:17:02Z","reference_register_checked":true,"reference_sha256":"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66","error_register_checked":true,"error_register_sha256":"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "gram-support-service-worker-exact-source-readonly", + "started_at_utc": "2026-09-18T06:19:00Z", + "finished_at_utc": "2026-09-18T06:19:02Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "379bcbf1f6a2973b06547d9db50a4fd99e2617ee053737afc1e5ce6db9d550f9", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6", + "sanitized_output_sha256": "ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "GRAM516R5RCA5_SAFE_REPORT={\"err_truncated\":false,\"guest\":{\"core\":[{\"matches\":[{\"sep\":true},{\"line\":1,\"text\":\"header('X-Content-Type-Options', 'nosniff');\"},{\"line\":46,\"text\":\"\"},{\"line\":47,\"text\":\"\\t\\tif (\\\\XF::app()->config('enableClickjackingProtection'))\"},{\"line\":48,\"text\":\"\\t\\t{\"},{\"line\":49,\"text\":\"\\t\\t\\t$response->header('X-Frame-Options', 'SAMEORIGIN');\"},{\"line\":50,\"text\":\"\\t\\t}\"},{\"line\":51,\"text\":\"\\t}\"},{\"line\":52,\"text\":\"\"},{\"line\":53,\"text\":\"\\tabstract protected function initialize();\"},{\"line\":54,\"text\":\"\\tabstract public function getResponseType();\"},{\"line\":55,\"text\":\"\\tabstract public function renderRedirect($url, $type, $message = '');\"},{\"line\":56,\"text\":\"\\tabstract public function renderMessage($message);\"},{\"line\":57,\"text\":\"\\tabstract public function renderErrors(array $errors);\"},{\"line\":58,\"text\":\"\\tabstract public function renderView($viewName, $templateName, array $params = []);\"},{\"line\":59,\"text\":\"\"},{\"line\":60,\"text\":\"\\tpublic function setReply(AbstractReply $reply)\"},{\"line\":61,\"text\":\"\\t{\"},{\"line\":62,\"text\":\"\\t\\t$this->reply = $reply;\"},{\"line\":63,\"text\":\"\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\tpublic function renderUnrepresentable()\"},{\"line\":66,\"text\":\"\\t{\"},{\"line\":67,\"text\":\"\\t\\treturn $this->renderErrors(['This page is not representable in the requested type.']);\"},{\"line\":68,\"text\":\"\\t}\"},{\"line\":69,\"text\":\"\"},{\"line\":70,\"text\":\"\\t/**\"},{\"sep\":true},{\"line\":73,\"text\":\"\\t * @param array $params\"},{\"line\":74,\"text\":\"\\t *\"},{\"line\":75,\"text\":\"\\t * @return View\"},{\"line\":76,\"text\":\"\\t */\"},{\"line\":77,\"text\":\"\\tpublic function createViewObject($viewName, $templateName, array $params = [])\"},{\"line\":78,\"text\":\"\\t{\"},{\"line\":79,\"text\":\"\\t\\t$f = $this->viewFactory;\"},{\"line\":80,\"text\":\"\\t\\treturn $f($viewName, [\"},{\"line\":81,\"text\":\"\\t\\t\\t$this, $this->response, $templateName, $params,\"},{\"line\":82,\"text\":\"\\t\\t]);\"},{\"line\":83,\"text\":\"\\t}\"},{\"line\":84,\"text\":\"\"},{\"line\":85,\"text\":\"\\tpublic function renderViewObject($viewName, &$templateName, array &$params = [], $responseType = null)\"},{\"line\":86,\"text\":\"\\t{\"},{\"line\":87,\"text\":\"\\t\\t$responseType = $responseType ?: $this->getResponseType();\"},{\"line\":88,\"text\":\"\\t\\t$view = $this->createViewObject($viewName, $templateName, $params);\"},{\"line\":89,\"text\":\"\\t\\t$method = 'render' . ucfirst($responseType);\"},{\"line\":90,\"text\":\"\\t\\tif ($view && method_exists($view, $method))\"},{\"line\":91,\"text\":\"\\t\\t{\"},{\"line\":92,\"text\":\"\\t\\t\\t$result = $view->$method();\"},{\"line\":93,\"text\":\"\\t\\t}\"},{\"line\":94,\"text\":\"\\t\\telse\"},{\"line\":95,\"text\":\"\\t\\t{\"},{\"line\":96,\"text\":\"\\t\\t\\t$result = null;\"},{\"line\":97,\"text\":\"\\t\\t}\"},{\"line\":98,\"text\":\"\"},{\"line\":99,\"text\":\"\\t\\tif ($view)\"},{\"line\":100,\"text\":\"\\t\\t{\"},{\"line\":101,\"text\":\"\\t\\t\\t$templateName = $view->getTemplateName();\"}],\"path\":\"src/XF/Mvc/Renderer/AbstractRenderer.php\",\"present\":true,\"sha256\":\"22f0ba6cb78fcbead8ac19cd24f2be211ff6eb1059a343513e0e85c12b72ac9e\"},{\"matches\":[{\"sep\":true},{\"line\":5,\"text\":\"use XF\\\\Mvc\\\\Reply\\\\AbstractReply;\"},{\"line\":6,\"text\":\"use XF\\\\Util\\\\File;\"},{\"line\":7,\"text\":\"\"},{\"line\":8,\"text\":\"use function count, strval;\"},{\"line\":9,\"text\":\"\"},{\"line\":10,\"text\":\"class Html extends AbstractRenderer\"},{\"line\":11,\"text\":\"{\"},{\"line\":12,\"text\":\"\\tprotected function initialize()\"},{\"line\":13,\"text\":\"\\t{\"},{\"line\":14,\"text\":\"\\t\\t$this->response->contentType('text/html');\"},{\"line\":15,\"text\":\"\\t}\"},{\"line\":16,\"text\":\"\"},{\"line\":17,\"text\":\"\\tpublic function getResponseType()\"},{\"line\":18,\"text\":\"\\t{\"},{\"line\":19,\"text\":\"\\t\\treturn 'html';\"},{\"line\":20,\"text\":\"\\t}\"},{\"line\":21,\"text\":\"\"},{\"line\":22,\"text\":\"\\tpublic function renderRedirect($url, $type, $message = '')\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\t$this->setResponseCode($type == 'permanent' ? 301 : 303);\"},{\"line\":25,\"text\":\"\\t\\t$this->response->header('Location', $url);\"},{\"line\":26,\"text\":\"\\t}\"},{\"line\":27,\"text\":\"\"},{\"line\":28,\"text\":\"\\tpublic function renderMessage($message)\"},{\"line\":29,\"text\":\"\\t{\"},{\"line\":30,\"text\":\"\\t\\t$app = \\\\XF::app();\"},{\"line\":31,\"text\":\"\\t\\treturn $this->renderView('XF:MessagePage', $app['app.defaultType'] . ':message_page', [\"},{\"line\":32,\"text\":\"\\t\\t\\t'message' => $message,\"},{\"line\":33,\"text\":\"\\t\\t]);\"},{\"line\":34,\"text\":\"\\t}\"},{\"line\":35,\"text\":\"\"},{\"line\":36,\"text\":\"\\tpublic function renderErrors(array $errors)\"},{\"line\":37,\"text\":\"\\t{\"},{\"line\":38,\"text\":\"\\t\\t$app = \\\\XF::app();\"},{\"line\":39,\"text\":\"\\t\\treturn $this->renderView('XF:Error', $app['app.defaultType'] . ':error', [\"},{\"line\":40,\"text\":\"\\t\\t\\t'errors' => $errors,\"},{\"line\":41,\"text\":\"\\t\\t\\t'error' => count($errors) == 1 ? reset($errors) : false,\"},{\"line\":42,\"text\":\"\\t\\t]);\"},{\"line\":43,\"text\":\"\\t}\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":46,\"text\":\"\\t{\"},{\"line\":47,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":48,\"text\":\"\\t\\tif ($output === null && $templateName)\"},{\"line\":49,\"text\":\"\\t\\t{\"},{\"line\":50,\"text\":\"\\t\\t\\t$output = $this->getTemplate($templateName, $params)->render();\"},{\"line\":51,\"text\":\"\\t\\t}\"},{\"line\":52,\"text\":\"\\t\\treturn $output;\"},{\"line\":53,\"text\":\"\\t}\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\tpublic function postFilter($content, AbstractReply $reply)\"},{\"line\":56,\"text\":\"\\t{\"},{\"line\":57,\"text\":\"\\t\\t$content = strval($content);\"}],\"path\":\"src/XF/Mvc/Renderer/Html.php\",\"present\":true,\"sha256\":\"beec569b9d8feb92998678acf018aa7a7fe19c3db7ff986de7010c03aeb146b7\"},{\"matches\":[{\"sep\":true},{\"line\":7,\"text\":\"\"},{\"line\":8,\"text\":\"use function array_key_exists, count, is_array, is_object, strval;\"},{\"line\":9,\"text\":\"\"},{\"line\":10,\"text\":\"class Json extends AbstractRenderer\"},{\"line\":11,\"text\":\"{\"},{\"line\":12,\"text\":\"\\tprotected $encodeModifiers = JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;\"},{\"line\":13,\"text\":\"\"},{\"line\":14,\"text\":\"\\tprotected function initialize()\"},{\"line\":15,\"text\":\"\\t{\"},{\"line\":16,\"text\":\"\\t\\t$this->response->contentType('application/json');\"},{\"line\":17,\"text\":\"\\t}\"},{\"line\":18,\"text\":\"\"},{\"line\":19,\"text\":\"\\tpublic function getResponseType()\"},{\"line\":20,\"text\":\"\\t{\"},{\"line\":21,\"text\":\"\\t\\treturn 'json';\"},{\"line\":22,\"text\":\"\\t}\"},{\"line\":23,\"text\":\"\"},{\"line\":24,\"text\":\"\\tpublic function renderRedirect($url, $type, $message = '')\"},{\"line\":25,\"text\":\"\\t{\"},{\"line\":26,\"text\":\"\\t\\treturn [\"},{\"line\":27,\"text\":\"\\t\\t\\t'status' => 'ok',\"},{\"line\":28,\"text\":\"\\t\\t\\t'message' => $message,\"},{\"line\":29,\"text\":\"\\t\\t\\t'redirect' => $url,\"},{\"line\":30,\"text\":\"\\t\\t];\"},{\"line\":31,\"text\":\"\\t}\"},{\"sep\":true},{\"line\":46,\"text\":\"\\t\\t\\t'error' => count($errors) == 1 ? reset($errors) : false,\"},{\"line\":47,\"text\":\"\\t\\t\\t'forJson' => true,\"},{\"line\":48,\"text\":\"\\t\\t];\"},{\"line\":49,\"text\":\"\\t\\t$html = $this->getTemplate($app['app.defaultType'] . ':error', $params)->render();\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\treturn [\"},{\"line\":52,\"text\":\"\\t\\t\\t'status' => 'error',\"},{\"line\":53,\"text\":\"\\t\\t\\t'errors' => $errors,\"},{\"line\":54,\"text\":\"\\t\\t\\t'errorHtml' => $this->getHtmlOutputStructure($html),\"},{\"line\":55,\"text\":\"\\t\\t];\"},{\"line\":56,\"text\":\"\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":59,\"text\":\"\\t{\"},{\"line\":60,\"text\":\"\\t\\tif (isset($params['innerContent']))\"},{\"line\":61,\"text\":\"\\t\\t{\"},{\"line\":62,\"text\":\"\\t\\t\\treturn $params['innerContent'];\"},{\"line\":63,\"text\":\"\\t\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":66,\"text\":\"\\t\\tif ($output === null)\"},{\"line\":67,\"text\":\"\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t$output = [\"},{\"line\":69,\"text\":\"\\t\\t\\t\\t'status' => 'ok',\"},{\"line\":70,\"text\":\"\\t\\t\\t\\t'html' => $this->renderHtmlFallback($viewName, $templateName, $params),\"},{\"line\":71,\"text\":\"\\t\\t\\t];\"},{\"line\":72,\"text\":\"\\t\\t}\"},{\"line\":73,\"text\":\"\\t\\telse if (is_array($output) && array_key_exists('html', $output) && $output['html'] === null)\"},{\"line\":74,\"text\":\"\\t\\t{\"},{\"line\":75,\"text\":\"\\t\\t\\t$output['html'] = $this->renderHtmlFallback($viewName, $templateName, $params);\"},{\"line\":76,\"text\":\"\\t\\t}\"},{\"line\":77,\"text\":\"\"},{\"line\":78,\"text\":\"\\t\\treturn $output;\"},{\"line\":79,\"text\":\"\\t}\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\tpublic function renderHtmlFallback($viewName, $templateName, array $params = [])\"},{\"line\":82,\"text\":\"\\t{\"},{\"line\":83,\"text\":\"\\t\\t$htmlOutput = $this->renderViewObject($viewName, $templateName, $params, 'html');\"},{\"line\":84,\"text\":\"\\t\\tif ($htmlOutput === null && $templateName)\"},{\"line\":85,\"text\":\"\\t\\t{\"},{\"line\":86,\"text\":\"\\t\\t\\t$htmlOutput = $this->getTemplate($templateName, $params)->render();\"},{\"line\":87,\"text\":\"\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\treturn $this->getHtmlOutputStructure($htmlOutput);\"},{\"line\":90,\"text\":\"\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\tpublic function getHtmlOutputStructure($html)\"},{\"line\":93,\"text\":\"\\t{\"}],\"path\":\"src/XF/Mvc/Renderer/Json.php\",\"present\":true,\"sha256\":\"2f3c46b7ef35aaceddf6c358dda1d53826ef7af886051487f3be9bfba0bd5f96\"},{\"matches\":[{\"sep\":true},{\"line\":1,\"text\":\"setResponseCode($type == 'permanent' ? 301 : 303);\"},{\"line\":19,\"text\":\"\\t\\t$this->response->header('Location', $url);\"},{\"line\":20,\"text\":\"\\t}\"},{\"line\":21,\"text\":\"\"},{\"line\":22,\"text\":\"\\tpublic function renderMessage($message)\"},{\"line\":23,\"text\":\"\\t{\"},{\"line\":24,\"text\":\"\\t\\treturn '';\"},{\"line\":25,\"text\":\"\\t}\"},{\"line\":26,\"text\":\"\"},{\"line\":27,\"text\":\"\\tpublic function renderErrors(array $errors)\"},{\"line\":28,\"text\":\"\\t{\"},{\"line\":29,\"text\":\"\\t\\treturn '';\"},{\"line\":30,\"text\":\"\\t}\"},{\"line\":31,\"text\":\"\"},{\"line\":32,\"text\":\"\\tpublic function renderView($viewName, $templateName, array $params = [])\"},{\"line\":33,\"text\":\"\\t{\"},{\"line\":34,\"text\":\"\\t\\tif (isset($params['innerContent']))\"},{\"line\":35,\"text\":\"\\t\\t{\"},{\"line\":36,\"text\":\"\\t\\t\\treturn $params['innerContent'];\"},{\"line\":37,\"text\":\"\\t\\t}\"},{\"line\":38,\"text\":\"\"},{\"line\":39,\"text\":\"\\t\\t$output = $this->renderViewObject($viewName, $templateName, $params);\"},{\"line\":40,\"text\":\"\\t\\tif ($output === null)\"},{\"line\":41,\"text\":\"\\t\\t{\"},{\"line\":42,\"text\":\"\\t\\t\\t$output = '';\"},{\"line\":43,\"text\":\"\\t\\t}\"},{\"line\":44,\"text\":\"\\t\\treturn $output;\"}],\"path\":\"src/XF/Mvc/Renderer/Raw.php\",\"present\":true,\"sha256\":\"46592f40912a491fe76e3ebb2308c77b55db9bc5b3f231f3e3b47c0dacf58e29\"},{\"matches\":[],\"path\":\"src/XF/Mvc/Reply/View.php\",\"present\":true,\"sha256\":\"c4a3a6fcd36b056428ab1bc569857ba3757df53548b648301d5cb6271817662e\"},{\"matches\":[{\"sep\":true},{\"line\":53,\"text\":\"\\t\\t}\"},{\"line\":54,\"text\":\"\"},{\"line\":55,\"text\":\"\\t\\t$match = $this->route($routePath);\"},{\"line\":56,\"text\":\"\"},{\"line\":57,\"text\":\"\\t\\t$earlyResponse = $this->beforeDispatch($match);\"},{\"line\":58,\"text\":\"\\t\\tif ($earlyResponse)\"},{\"line\":59,\"text\":\"\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\treturn $earlyResponse;\"},{\"line\":61,\"text\":\"\\t\\t}\"},{\"line\":62,\"text\":\"\"},{\"line\":63,\"text\":\"\\t\\t$reply = $this->dispatchLoop($match);\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t$responseType = $reply->getResponseType() ?: $match->getResponseType();\"},{\"line\":66,\"text\":\"\\t\\t$response = $this->render($reply, $responseType);\"},{\"line\":67,\"text\":\"\"},{\"line\":68,\"text\":\"\\t\\treturn $response;\"},{\"line\":69,\"text\":\"\\t}\"},{\"line\":70,\"text\":\"\"},{\"line\":71,\"text\":\"\\tpublic function route($routePath)\"},{\"line\":72,\"text\":\"\\t{\"},{\"line\":73,\"text\":\"\\t\\t$match = $this->getRouter()->routeToController($routePath, $this->request);\"},{\"line\":74,\"text\":\"\"},{\"line\":75,\"text\":\"\\t\\tif (!($match instanceof RouteMatch) || !$match->getController())\"},{\"line\":76,\"text\":\"\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t$match = $this->app->getErrorRoute('DispatchError', [\"},{\"line\":78,\"text\":\"\\t\\t\\t\\t'code' => 'invalid_route',\"},{\"sep\":true},{\"line\":102,\"text\":\"\\t{\"},{\"line\":103,\"text\":\"\\t\\t$i = 1;\"},{\"line\":104,\"text\":\"\\t\\t$attemptErrorReroute = true;\"},{\"line\":105,\"text\":\"\\t\\t$originalMatch = $match;\"},{\"line\":106,\"text\":\"\\t\\t$reply = null;\"},{\"line\":107,\"text\":\"\"},{\"line\":108,\"text\":\"\\t\\t$this->app->fire($this->eventPrefix . '_match', [$this, &$match]);\"},{\"line\":109,\"text\":\"\"},{\"line\":110,\"text\":\"\\t\\tdo\"},{\"line\":111,\"text\":\"\\t\\t{\"},{\"line\":112,\"text\":\"\\t\\t\\t$controllerClass = $match->getController();\"},{\"line\":113,\"text\":\"\\t\\t\\t$action = $match->getAction();\"},{\"line\":114,\"text\":\"\\t\\t\\t$responseType = $match->getResponseType();\"},{\"line\":115,\"text\":\"\\t\\t\\t$sectionContext = $match->getSectionContext();\"},{\"line\":116,\"text\":\"\\t\\t\\t$params = $match->getParameterBag();\"},{\"line\":117,\"text\":\"\\t\\t\\t$controller = null;\"},{\"line\":118,\"text\":\"\"},{\"line\":119,\"text\":\"\\t\\t\\ttry\"},{\"line\":120,\"text\":\"\\t\\t\\t{\"},{\"line\":121,\"text\":\"\\t\\t\\t\\t$reply = $this->dispatchFromMatch($match, $controller, $reply);\"},{\"line\":122,\"text\":\"\\t\\t\\t}\"},{\"line\":123,\"text\":\"\\t\\t\\tcatch (\\\\Throwable $e)\"},{\"line\":124,\"text\":\"\\t\\t\\t{\"},{\"line\":125,\"text\":\"\\t\\t\\t\\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, [\"},{\"line\":126,\"text\":\"\\t\\t\\t\\t\\t'responseType' => $responseType,\"},{\"line\":127,\"text\":\"\\t\\t\\t\\t\\t'sectionContext' => $sectionContext,\"},{\"line\":128,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":129,\"text\":\"\\t\\t\\t\\t\\t'params' => $params,\"},{\"line\":130,\"text\":\"\\t\\t\\t\\t]);\"},{\"line\":131,\"text\":\"\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":132,\"text\":\"\\t\\t\\t}\"},{\"line\":133,\"text\":\"\\t\\t\\tcatch (\\\\Exception $e)\"},{\"line\":134,\"text\":\"\\t\\t\\t{\"},{\"line\":135,\"text\":\"\\t\\t\\t\\t// this will only be hit in PHP 5.x\"},{\"line\":136,\"text\":\"\\t\\t\\t\\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, [\"},{\"line\":137,\"text\":\"\\t\\t\\t\\t\\t'responseType' => $responseType,\"},{\"line\":138,\"text\":\"\\t\\t\\t\\t\\t'sectionContext' => $sectionContext,\"},{\"line\":139,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":140,\"text\":\"\\t\\t\\t\\t\\t'params' => $params,\"},{\"line\":141,\"text\":\"\\t\\t\\t\\t]);\"},{\"line\":142,\"text\":\"\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":143,\"text\":\"\\t\\t\\t}\"},{\"line\":144,\"text\":\"\"},{\"line\":145,\"text\":\"\\t\\t\\tif (!$reply instanceof AbstractReply)\"},{\"line\":146,\"text\":\"\\t\\t\\t{\"},{\"line\":147,\"text\":\"\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":148,\"text\":\"\\t\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":149,\"text\":\"\\t\\t\\t\\t\\t\\t'code' => 'no_reply',\"},{\"line\":150,\"text\":\"\\t\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":151,\"text\":\"\\t\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":152,\"text\":\"\\t\\t\\t\\t\\t], $responseType)\"},{\"line\":153,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":154,\"text\":\"\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":155,\"text\":\"\\t\\t\\t}\"},{\"line\":156,\"text\":\"\"},{\"line\":157,\"text\":\"\\t\\t\\tif (!($reply instanceof Reroute) && $attemptErrorReroute)\"},{\"line\":158,\"text\":\"\\t\\t\\t{\"},{\"line\":159,\"text\":\"\\t\\t\\t\\t// if we might be debugging, move this up so that we can display an error instead of the page results.\"},{\"line\":160,\"text\":\"\\t\\t\\t\\t// not doing this can hide errors\"},{\"line\":161,\"text\":\"\"},{\"line\":162,\"text\":\"\\t\\t\\t\\ttry\"},{\"line\":163,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":164,\"text\":\"\\t\\t\\t\\t\\t\\\\XF::triggerRunOnce(true);\"},{\"line\":165,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":166,\"text\":\"\\t\\t\\t\\tcatch (\\\\Throwable $e)\"},{\"line\":167,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":168,\"text\":\"\\t\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":169,\"text\":\"\"},{\"line\":170,\"text\":\"\\t\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":171,\"text\":\"\\t\\t\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)\"},{\"line\":172,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":173,\"text\":\"\\t\\t\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":174,\"text\":\"\\t\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":175,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":176,\"text\":\"\\t\\t\\t\\tcatch (\\\\Exception $e)\"},{\"line\":177,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":178,\"text\":\"\\t\\t\\t\\t\\t// this will only be hit in PHP 5.x\"},{\"line\":179,\"text\":\"\\t\\t\\t\\t\\t$attemptErrorReroute = false;\"},{\"line\":180,\"text\":\"\"},{\"line\":181,\"text\":\"\\t\\t\\t\\t\\t$reply = new Reroute(\"},{\"line\":182,\"text\":\"\\t\\t\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)\"},{\"line\":183,\"text\":\"\\t\\t\\t\\t\\t);\"},{\"line\":184,\"text\":\"\\t\\t\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":185,\"text\":\"\\t\\t\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":186,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":187,\"text\":\"\\t\\t\\t}\"},{\"line\":188,\"text\":\"\"},{\"line\":189,\"text\":\"\\t\\t\\tif ($reply instanceof Reroute)\"},{\"line\":190,\"text\":\"\\t\\t\\t{\"},{\"line\":191,\"text\":\"\\t\\t\\t\\t$match = $reply->getMatch();\"},{\"line\":192,\"text\":\"\\t\\t\\t\\tif (!$match->getResponseType())\"},{\"line\":193,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":194,\"text\":\"\\t\\t\\t\\t\\t$match->setResponseType($responseType);\"},{\"line\":195,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":196,\"text\":\"\\t\\t\\t\\tif (!$match->getSectionContext())\"},{\"line\":197,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":198,\"text\":\"\\t\\t\\t\\t\\t$match->setSectionContext($sectionContext);\"},{\"line\":199,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":200,\"text\":\"\\t\\t\\t}\"},{\"line\":201,\"text\":\"\\t\\t\\telse\"},{\"line\":202,\"text\":\"\\t\\t\\t{\"},{\"line\":203,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":204,\"text\":\"\\t\\t\\t}\"},{\"line\":205,\"text\":\"\\t\\t}\"},{\"line\":206,\"text\":\"\\t\\twhile ($i++ < 10);\"},{\"line\":207,\"text\":\"\"},{\"line\":208,\"text\":\"\\t\\tif ($reply instanceof Reroute)\"},{\"line\":209,\"text\":\"\\t\\t{\"},{\"line\":210,\"text\":\"\\t\\t\\t// rerouted too many times\"},{\"line\":211,\"text\":\"\\t\\t\\t$reply = new Error(\"},{\"line\":212,\"text\":\"\\t\\t\\t\\t'An error occurred while the page was being generated. Please try again later.',\"},{\"line\":213,\"text\":\"\\t\\t\\t\\t500\"},{\"line\":214,\"text\":\"\\t\\t\\t);\"},{\"line\":215,\"text\":\"\\t\\t\\t$reply->setResponseType($responseType);\"},{\"line\":216,\"text\":\"\\t\\t\\t$reply->setSectionContext($sectionContext);\"},{\"line\":217,\"text\":\"\\t\\t}\"},{\"line\":218,\"text\":\"\"},{\"line\":219,\"text\":\"\\t\\t$this->app->postDispatch($reply, $match, $originalMatch);\"},{\"line\":220,\"text\":\"\"},{\"line\":221,\"text\":\"\\t\\t$this->app->fire($this->eventPrefix . '_post_dispatch', [$this, &$reply, $match, $originalMatch]);\"},{\"line\":222,\"text\":\"\"},{\"line\":223,\"text\":\"\\t\\treturn $reply;\"},{\"line\":224,\"text\":\"\\t}\"},{\"line\":225,\"text\":\"\"},{\"line\":226,\"text\":\"\\tprotected function handleControllerError($e, $attemptErrorReroute, $controller, array $state = [])\"},{\"line\":227,\"text\":\"\\t{\"},{\"line\":228,\"text\":\"\\t\\t/** @var \\\\Throwable $e */\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t$state = array_replace([\"},{\"line\":231,\"text\":\"\\t\\t\\t'responseType' => null,\"},{\"line\":232,\"text\":\"\\t\\t\\t'sectionContext' => '',\"},{\"line\":233,\"text\":\"\\t\\t\\t'action' => '',\"},{\"line\":234,\"text\":\"\\t\\t\\t'params' => null,\"},{\"line\":235,\"text\":\"\\t\\t], $state);\"},{\"line\":236,\"text\":\"\"},{\"line\":237,\"text\":\"\\t\\tif ($attemptErrorReroute)\"},{\"line\":238,\"text\":\"\\t\\t{\"},{\"line\":239,\"text\":\"\\t\\t\\t\\\\XF::logException($e, true); // rollback as don't know the state\"},{\"line\":240,\"text\":\"\"},{\"line\":241,\"text\":\"\\t\\t\\t$reply = new Reroute(\"},{\"line\":242,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('Exception', ['exception' => $e], $state['responseType'])\"},{\"line\":243,\"text\":\"\\t\\t\\t);\"},{\"line\":244,\"text\":\"\\t\\t}\"},{\"line\":245,\"text\":\"\\t\\telse\"},{\"line\":246,\"text\":\"\\t\\t{\"},{\"line\":247,\"text\":\"\\t\\t\\t$reply = new Error(\"},{\"line\":248,\"text\":\"\\t\\t\\t\\t'An error occurred while the page was being generated. Please try again later.',\"},{\"line\":249,\"text\":\"\\t\\t\\t\\t500\"},{\"line\":250,\"text\":\"\\t\\t\\t);\"},{\"line\":251,\"text\":\"\\t\\t}\"},{\"line\":252,\"text\":\"\"},{\"line\":253,\"text\":\"\\t\\t$reply->setResponseType($state['responseType']);\"},{\"line\":254,\"text\":\"\\t\\t$reply->setSectionContext($state['sectionContext']);\"},{\"line\":255,\"text\":\"\"},{\"line\":256,\"text\":\"\\t\\tif ($controller instanceof Controller)\"},{\"line\":257,\"text\":\"\\t\\t{\"},{\"line\":258,\"text\":\"\\t\\t\\t$controller->applyReplyChanges($state['action'], $state['params'] ?: new ParameterBag(), $reply);\"},{\"line\":259,\"text\":\"\\t\\t}\"},{\"line\":260,\"text\":\"\"},{\"line\":261,\"text\":\"\\t\\treturn $reply;\"},{\"line\":262,\"text\":\"\\t}\"},{\"line\":263,\"text\":\"\"},{\"line\":264,\"text\":\"\\tpublic function dispatchFromMatch(RouteMatch $match, &$controller = null, ?AbstractReply $previousReply = null)\"},{\"line\":265,\"text\":\"\\t{\"},{\"sep\":true},{\"line\":277,\"text\":\"\\t\\t$action,\"},{\"line\":278,\"text\":\"\\t\\tRouteMatch $match,\"},{\"line\":279,\"text\":\"\\t\\t&$controller = null,\"},{\"line\":280,\"text\":\"\\t\\t?AbstractReply $previousReply = null\"},{\"line\":281,\"text\":\"\\t)\"},{\"line\":282,\"text\":\"\\t{\"},{\"line\":283,\"text\":\"\\t\\t$params = $match->getParameterBag();\"},{\"line\":284,\"text\":\"\\t\\tif (!$params)\"},{\"line\":285,\"text\":\"\\t\\t{\"},{\"line\":286,\"text\":\"\\t\\t\\t$params = new ParameterBag();\"},{\"line\":287,\"text\":\"\\t\\t}\"},{\"line\":288,\"text\":\"\"},{\"line\":289,\"text\":\"\\t\\t$responseType = $match->getResponseType();\"},{\"line\":290,\"text\":\"\"},{\"line\":291,\"text\":\"\\t\\tif (!$controllerClass)\"},{\"line\":292,\"text\":\"\\t\\t{\"},{\"line\":293,\"text\":\"\\t\\t\\treturn new Reroute(\"},{\"line\":294,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":295,\"text\":\"\\t\\t\\t\\t\\t'code' => 'no_controller',\"},{\"line\":296,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":297,\"text\":\"\\t\\t\\t\\t\\t'action' => is_string($action) ? $action : null,\"},{\"line\":298,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":299,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":300,\"text\":\"\\t\\t\\t);\"},{\"line\":301,\"text\":\"\\t\\t}\"},{\"line\":302,\"text\":\"\"},{\"line\":303,\"text\":\"\\t\\t$controller = $this->app->controller($controllerClass, $this->request);\"},{\"line\":304,\"text\":\"\\t\\tif (!$controller)\"},{\"line\":305,\"text\":\"\\t\\t{\"},{\"line\":306,\"text\":\"\\t\\t\\treturn new Reroute(\"},{\"line\":307,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":308,\"text\":\"\\t\\t\\t\\t\\t'code' => 'invalid_controller',\"},{\"line\":309,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":310,\"text\":\"\\t\\t\\t\\t\\t'action' => is_string($action) ? $action : null,\"},{\"line\":311,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":312,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":313,\"text\":\"\\t\\t\\t);\"},{\"line\":314,\"text\":\"\\t\\t}\"},{\"line\":315,\"text\":\"\"},{\"line\":316,\"text\":\"\\t\\t$controller->setupFromMatch($match);\"},{\"line\":317,\"text\":\"\\t\\tif ($previousReply)\"},{\"line\":318,\"text\":\"\\t\\t{\"},{\"line\":319,\"text\":\"\\t\\t\\t$controller->setupFromReply($previousReply);\"},{\"line\":320,\"text\":\"\\t\\t}\"},{\"line\":321,\"text\":\"\"},{\"line\":322,\"text\":\"\\t\\tif ($action instanceof \\\\Closure)\"},{\"line\":323,\"text\":\"\\t\\t{\"},{\"line\":324,\"text\":\"\\t\\t\\t$action = $action($controller, $responseType, $params);\"},{\"line\":325,\"text\":\"\\t\\t}\"},{\"line\":326,\"text\":\"\\t\\telse\"},{\"line\":327,\"text\":\"\\t\\t{\"},{\"line\":328,\"text\":\"\\t\\t\\t$action = preg_replace('#[^a-z0-9]#i', ' ', $action);\"},{\"line\":329,\"text\":\"\\t\\t\\t$action = str_replace(' ', '', ucwords($action));\"},{\"line\":330,\"text\":\"\\t\\t}\"},{\"line\":331,\"text\":\"\"},{\"line\":332,\"text\":\"\\t\\t$method = 'action' . $action;\"},{\"line\":333,\"text\":\"\\t\\tif (!is_callable([$controller, $method]))\"},{\"line\":334,\"text\":\"\\t\\t{\"},{\"line\":335,\"text\":\"\\t\\t\\t$reply = new Reroute(\"},{\"line\":336,\"text\":\"\\t\\t\\t\\t$this->app->getErrorRoute('DispatchError', [\"},{\"line\":337,\"text\":\"\\t\\t\\t\\t\\t'code' => 'invalid_action',\"},{\"line\":338,\"text\":\"\\t\\t\\t\\t\\t'controller' => $controllerClass,\"},{\"line\":339,\"text\":\"\\t\\t\\t\\t\\t'action' => $action,\"},{\"line\":340,\"text\":\"\\t\\t\\t\\t\\t'match' => $match,\"},{\"line\":341,\"text\":\"\\t\\t\\t\\t], $responseType)\"},{\"line\":342,\"text\":\"\\t\\t\\t);\"},{\"line\":343,\"text\":\"\"}],\"path\":\"src/XF/Mvc/Dispatcher.php\",\"present\":true,\"sha256\":\"ff47c67e92d0490db099eb588b0ad5d1b96c537062338f53ea82f8f55224ceb1\"}],\"error\":null,\"exact\":{\"controller_pwa\":{\"bytes\":715,\"present\":true,\"sha256\":\"9e3217d9524349a8137b89d418e4693ca17f8e5f61ba5b563fff747d1014efb3\",\"text\":\"user_id\\n || (!$visitor->hasPermission('gramSupport', 'manage')\\n && !$visitor->hasPermission('gramSupport', 'viewAll')))\\n {\\n throw $this->exception($this->noPermission());\\n }\\n }\\n\\n public function actionIndex()\\n {\\n $this->assertStaff();\\n $this->setResponseType('raw');\\n\\n return $this->view(\\n 'Gram\\\\Support:PwaServiceWorker',\\n 'gram_support_staff_service_worker',\\n []\\n );\\n }\\n}\\n\"},\"view_pwa_service_worker\":{\"bytes\":381,\"present\":true,\"sha256\":\"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04\",\"text\":\"response->contentType('application/javascript', 'utf-8');\\n\\n $js = $this->renderTemplate(\\n 'public:gram_support_staff_service_worker',\\n $this->params\\n );\\n\\n return $this->response->body($js);\\n }\\n}\\n\"}},\"ok\":true,\"render_raw_implementations\":[{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Pub/View/Error/EmbeddedImageRequest.php\",\"sha256\":\"dae0d06414fc6778a17187e9c5cab5e2923fb5484733a3b193d8d28b6c381d71\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Pub/View/Attachment/View.php\",\"sha256\":\"5addd9bb6b49abb0c83d52d0390db22d62ccff84854cd90eb8015c35fe93e5be\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Api/View/Attachment/View.php\",\"sha256\":\"6e1fceda47e3773d05d3a068b5af89436a2ebb4bd73b8ce1ac04e555e1908bd0\"},{\"hits\":[{\"line\":11,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/User/EmailList.php\",\"sha256\":\"e5d72d2a23a66cf0b70086ce2e39e3be0ed076551df4300d3af16112f7ec1876\"},{\"hits\":[{\"line\":14,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/User/ExportListing.php\",\"sha256\":\"b414d9898a7f68b34ad964c91f26d4f759948034bb83a508f3dcc169ca830c2e\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/AddOn/Icon.php\",\"sha256\":\"2626f56b3f7353f452e844b46b75aa7501769c7c1e5dc91a89a455efc8b2d2f4\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Attachment/View.php\",\"sha256\":\"2ecfa72cebb7ac80e0d9b7290b8b24f20a74bd7367c9aabadf69e0ee7bdf14f4\"},{\"hits\":[{\"line\":11,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Log/ImageProxy/Image.php\",\"sha256\":\"b83a8022066c68bf55d9e0ef1b2a6586dc01b129418861eabc9aeb4e6da6d300\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Log/EmailBounce/View.php\",\"sha256\":\"01a4cc67a7184293fcc1180f48d24a323bc11574b8128373904e54192867d075\"},{\"hits\":[{\"line\":18,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Admin/View/Style/Export.php\",\"sha256\":\"7c04dde645d1fb8c43ca801eee917c3de97ddb3c89bf1adc412e44db4bf2311e\"},{\"hits\":[{\"line\":9,\"text\":\"\\tpublic function renderRaw()\"}],\"path\":\"src/XF/Install/View/Install/ConfigDownload.php\",\"sha256\":\"5fc4ff410a4ce3d83bedce9a7e9e855802c71660377face69b4e3d237c94cb3f\"},{\"hits\":[{\"line\":7,\"text\":\" public function renderRaw()\"}],\"path\":\"src/addons/Gram/Support/Pub/View/PwaServiceWorker.php\",\"sha256\":\"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04\"}]},\"guest_stderr_present\":false,\"inner_rc\":0,\"ok\":true,\"out_truncated\":false,\"transport_rc\":0,\"transport_stderr_bytes\":0,\"transport_stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}\nGRAM516R5RCA5_DECISION=PASS_SERVICE_WORKER_EXACT_SOURCE_CAPTURED\nGRAM516R5RCA5_NEXT_GATE=BUILD_EXACT_SERVICE_WORKER_FIX\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/latest.txt b/runtime/latest.txt index c313f04b..d20178d7 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,162 +1,36 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +COMMAND_ID=SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5 STATUS=OK RC=0 HOST=pve01 -COMPONENT=cluster-context -REFERENCE_SHA[PRIVATE_IP]e5154c41cb[PRIVATE_IP]aca68090be[PRIVATE_IP]bf[PRIVATE_IP]df[PRIVATE_IP] -ERROR_REGISTER_SHA[PRIVATE_IP]ec0f527ed3afeed[PRIVATE_IP]ee[PRIVATE_IP]bbfb[PRIVATE_IP]af4ba7ba0 +MODE=read-only +COMPONENT=gram-support-service-worker-exact-source-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=379bcbf1f6a2973b06547d9db50a4fd99e2617ee053737afc1e5ce6db9d550f9 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6 +SANITIZED_OUTPUT_SHA256=ff422d1ff9a452d5fef336f20c19e5b81593633cfc1a2dcf4669d836025ea6f6 OUTPUT_BEGIN -GENERATED_AT_UTC=[PRIVATE_IP]T06:17:01Z -Cluster information -------------------- -Name: homelab -Config Version: 3 -Transport: knet -Secure auth: on +GRAM516R5RCA5_SAFE_REPORT={"err_truncated":false,"guest":{"core":[{"matches":[{"sep":true},{"line":1,"text":"header('X-Content-Type-Options', 'nosniff');"},{"line":46,"text":""},{"line":47,"text":"\t\tif (\\XF::app()->config('enableClickjackingProtection'))"},{"line":48,"text":"\t\t{"},{"line":49,"text":"\t\t\t$response->header('X-Frame-Options', 'SAMEORIGIN');"},{"line":50,"text":"\t\t}"},{"line":51,"text":"\t}"},{"line":52,"text":""},{"line":53,"text":"\tabstract protected function initialize();"},{"line":54,"text":"\tabstract public function getResponseType();"},{"line":55,"text":"\tabstract public function renderRedirect($url, $type, $message = '');"},{"line":56,"text":"\tabstract public function renderMessage($message);"},{"line":57,"text":"\tabstract public function renderErrors(array $errors);"},{"line":58,"text":"\tabstract public function renderView($viewName, $templateName, array $params = []);"},{"line":59,"text":""},{"line":60,"text":"\tpublic function setReply(AbstractReply $reply)"},{"line":61,"text":"\t{"},{"line":62,"text":"\t\t$this->reply = $reply;"},{"line":63,"text":"\t}"},{"line":64,"text":""},{"line":65,"text":"\tpublic function renderUnrepresentable()"},{"line":66,"text":"\t{"},{"line":67,"text":"\t\treturn $this->renderErrors(['This page is not representable in the requested type.']);"},{"line":68,"text":"\t}"},{"line":69,"text":""},{"line":70,"text":"\t/**"},{"sep":true},{"line":73,"text":"\t * @param array $params"},{"line":74,"text":"\t *"},{"line":75,"text":"\t * @return View"},{"line":76,"text":"\t */"},{"line":77,"text":"\tpublic function createViewObject($viewName, $templateName, array $params = [])"},{"line":78,"text":"\t{"},{"line":79,"text":"\t\t$f = $this->viewFactory;"},{"line":80,"text":"\t\treturn $f($viewName, ["},{"line":81,"text":"\t\t\t$this, $this->response, $templateName, $params,"},{"line":82,"text":"\t\t]);"},{"line":83,"text":"\t}"},{"line":84,"text":""},{"line":85,"text":"\tpublic function renderViewObject($viewName, &$templateName, array &$params = [], $responseType = null)"},{"line":86,"text":"\t{"},{"line":87,"text":"\t\t$responseType = $responseType ?: $this->getResponseType();"},{"line":88,"text":"\t\t$view = $this->createViewObject($viewName, $templateName, $params);"},{"line":89,"text":"\t\t$method = 'render' . ucfirst($responseType);"},{"line":90,"text":"\t\tif ($view && method_exists($view, $method))"},{"line":91,"text":"\t\t{"},{"line":92,"text":"\t\t\t$result = $view->$method();"},{"line":93,"text":"\t\t}"},{"line":94,"text":"\t\telse"},{"line":95,"text":"\t\t{"},{"line":96,"text":"\t\t\t$result = null;"},{"line":97,"text":"\t\t}"},{"line":98,"text":""},{"line":99,"text":"\t\tif ($view)"},{"line":100,"text":"\t\t{"},{"line":101,"text":"\t\t\t$templateName = $view->getTemplateName();"}],"path":"src/XF/Mvc/Renderer/AbstractRenderer.php","present":true,"sha256":"22f0ba6cb78fcbead8ac19cd24f2be211ff6eb1059a343513e0e85c12b72ac9e"},{"matches":[{"sep":true},{"line":5,"text":"use XF\\Mvc\\Reply\\AbstractReply;"},{"line":6,"text":"use XF\\Util\\File;"},{"line":7,"text":""},{"line":8,"text":"use function count, strval;"},{"line":9,"text":""},{"line":10,"text":"class Html extends AbstractRenderer"},{"line":11,"text":"{"},{"line":12,"text":"\tprotected function initialize()"},{"line":13,"text":"\t{"},{"line":14,"text":"\t\t$this->response->contentType('text/html');"},{"line":15,"text":"\t}"},{"line":16,"text":""},{"line":17,"text":"\tpublic function getResponseType()"},{"line":18,"text":"\t{"},{"line":19,"text":"\t\treturn 'html';"},{"line":20,"text":"\t}"},{"line":21,"text":""},{"line":22,"text":"\tpublic function renderRedirect($url, $type, $message = '')"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\t$this->setResponseCode($type == 'permanent' ? 301 : 303);"},{"line":25,"text":"\t\t$this->response->header('Location', $url);"},{"line":26,"text":"\t}"},{"line":27,"text":""},{"line":28,"text":"\tpublic function renderMessage($message)"},{"line":29,"text":"\t{"},{"line":30,"text":"\t\t$app = \\XF::app();"},{"line":31,"text":"\t\treturn $this->renderView('XF:MessagePage', $app['app.defaultType'] . ':message_page', ["},{"line":32,"text":"\t\t\t'message' => $message,"},{"line":33,"text":"\t\t]);"},{"line":34,"text":"\t}"},{"line":35,"text":""},{"line":36,"text":"\tpublic function renderErrors(array $errors)"},{"line":37,"text":"\t{"},{"line":38,"text":"\t\t$app = \\XF::app();"},{"line":39,"text":"\t\treturn $this->renderView('XF:Error', $app['app.defaultType'] . ':error', ["},{"line":40,"text":"\t\t\t'errors' => $errors,"},{"line":41,"text":"\t\t\t'error' => count($errors) == 1 ? reset($errors) : false,"},{"line":42,"text":"\t\t]);"},{"line":43,"text":"\t}"},{"line":44,"text":""},{"line":45,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":46,"text":"\t{"},{"line":47,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":48,"text":"\t\tif ($output === null && $templateName)"},{"line":49,"text":"\t\t{"},{"line":50,"text":"\t\t\t$output = $this->getTemplate($templateName, $params)->render();"},{"line":51,"text":"\t\t}"},{"line":52,"text":"\t\treturn $output;"},{"line":53,"text":"\t}"},{"line":54,"text":""},{"line":55,"text":"\tpublic function postFilter($content, AbstractReply $reply)"},{"line":56,"text":"\t{"},{"line":57,"text":"\t\t$content = strval($content);"}],"path":"src/XF/Mvc/Renderer/Html.php","present":true,"sha256":"beec569b9d8feb92998678acf018aa7a7fe19c3db7ff986de7010c03aeb146b7"},{"matches":[{"sep":true},{"line":7,"text":""},{"line":8,"text":"use function array_key_exists, count, is_array, is_object, strval;"},{"line":9,"text":""},{"line":10,"text":"class Json extends AbstractRenderer"},{"line":11,"text":"{"},{"line":12,"text":"\tprotected $encodeModifiers = JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;"},{"line":13,"text":""},{"line":14,"text":"\tprotected function initialize()"},{"line":15,"text":"\t{"},{"line":16,"text":"\t\t$this->response->contentType('application/json');"},{"line":17,"text":"\t}"},{"line":18,"text":""},{"line":19,"text":"\tpublic function getResponseType()"},{"line":20,"text":"\t{"},{"line":21,"text":"\t\treturn 'json';"},{"line":22,"text":"\t}"},{"line":23,"text":""},{"line":24,"text":"\tpublic function renderRedirect($url, $type, $message = '')"},{"line":25,"text":"\t{"},{"line":26,"text":"\t\treturn ["},{"line":27,"text":"\t\t\t'status' => 'ok',"},{"line":28,"text":"\t\t\t'message' => $message,"},{"line":29,"text":"\t\t\t'redirect' => $url,"},{"line":30,"text":"\t\t];"},{"line":31,"text":"\t}"},{"sep":true},{"line":46,"text":"\t\t\t'error' => count($errors) == 1 ? reset($errors) : false,"},{"line":47,"text":"\t\t\t'forJson' => true,"},{"line":48,"text":"\t\t];"},{"line":49,"text":"\t\t$html = $this->getTemplate($app['app.defaultType'] . ':error', $params)->render();"},{"line":50,"text":""},{"line":51,"text":"\t\treturn ["},{"line":52,"text":"\t\t\t'status' => 'error',"},{"line":53,"text":"\t\t\t'errors' => $errors,"},{"line":54,"text":"\t\t\t'errorHtml' => $this->getHtmlOutputStructure($html),"},{"line":55,"text":"\t\t];"},{"line":56,"text":"\t}"},{"line":57,"text":""},{"line":58,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":59,"text":"\t{"},{"line":60,"text":"\t\tif (isset($params['innerContent']))"},{"line":61,"text":"\t\t{"},{"line":62,"text":"\t\t\treturn $params['innerContent'];"},{"line":63,"text":"\t\t}"},{"line":64,"text":""},{"line":65,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":66,"text":"\t\tif ($output === null)"},{"line":67,"text":"\t\t{"},{"line":68,"text":"\t\t\t$output = ["},{"line":69,"text":"\t\t\t\t'status' => 'ok',"},{"line":70,"text":"\t\t\t\t'html' => $this->renderHtmlFallback($viewName, $templateName, $params),"},{"line":71,"text":"\t\t\t];"},{"line":72,"text":"\t\t}"},{"line":73,"text":"\t\telse if (is_array($output) && array_key_exists('html', $output) && $output['html'] === null)"},{"line":74,"text":"\t\t{"},{"line":75,"text":"\t\t\t$output['html'] = $this->renderHtmlFallback($viewName, $templateName, $params);"},{"line":76,"text":"\t\t}"},{"line":77,"text":""},{"line":78,"text":"\t\treturn $output;"},{"line":79,"text":"\t}"},{"line":80,"text":""},{"line":81,"text":"\tpublic function renderHtmlFallback($viewName, $templateName, array $params = [])"},{"line":82,"text":"\t{"},{"line":83,"text":"\t\t$htmlOutput = $this->renderViewObject($viewName, $templateName, $params, 'html');"},{"line":84,"text":"\t\tif ($htmlOutput === null && $templateName)"},{"line":85,"text":"\t\t{"},{"line":86,"text":"\t\t\t$htmlOutput = $this->getTemplate($templateName, $params)->render();"},{"line":87,"text":"\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\treturn $this->getHtmlOutputStructure($htmlOutput);"},{"line":90,"text":"\t}"},{"line":91,"text":""},{"line":92,"text":"\tpublic function getHtmlOutputStructure($html)"},{"line":93,"text":"\t{"}],"path":"src/XF/Mvc/Renderer/Json.php","present":true,"sha256":"2f3c46b7ef35aaceddf6c358dda1d53826ef7af886051487f3be9bfba0bd5f96"},{"matches":[{"sep":true},{"line":1,"text":"setResponseCode($type == 'permanent' ? 301 : 303);"},{"line":19,"text":"\t\t$this->response->header('Location', $url);"},{"line":20,"text":"\t}"},{"line":21,"text":""},{"line":22,"text":"\tpublic function renderMessage($message)"},{"line":23,"text":"\t{"},{"line":24,"text":"\t\treturn '';"},{"line":25,"text":"\t}"},{"line":26,"text":""},{"line":27,"text":"\tpublic function renderErrors(array $errors)"},{"line":28,"text":"\t{"},{"line":29,"text":"\t\treturn '';"},{"line":30,"text":"\t}"},{"line":31,"text":""},{"line":32,"text":"\tpublic function renderView($viewName, $templateName, array $params = [])"},{"line":33,"text":"\t{"},{"line":34,"text":"\t\tif (isset($params['innerContent']))"},{"line":35,"text":"\t\t{"},{"line":36,"text":"\t\t\treturn $params['innerContent'];"},{"line":37,"text":"\t\t}"},{"line":38,"text":""},{"line":39,"text":"\t\t$output = $this->renderViewObject($viewName, $templateName, $params);"},{"line":40,"text":"\t\tif ($output === null)"},{"line":41,"text":"\t\t{"},{"line":42,"text":"\t\t\t$output = '';"},{"line":43,"text":"\t\t}"},{"line":44,"text":"\t\treturn $output;"}],"path":"src/XF/Mvc/Renderer/Raw.php","present":true,"sha256":"46592f40912a491fe76e3ebb2308c77b55db9bc5b3f231f3e3b47c0dacf58e29"},{"matches":[],"path":"src/XF/Mvc/Reply/View.php","present":true,"sha256":"c4a3a6fcd36b056428ab1bc569857ba3757df53548b648301d5cb6271817662e"},{"matches":[{"sep":true},{"line":53,"text":"\t\t}"},{"line":54,"text":""},{"line":55,"text":"\t\t$match = $this->route($routePath);"},{"line":56,"text":""},{"line":57,"text":"\t\t$earlyResponse = $this->beforeDispatch($match);"},{"line":58,"text":"\t\tif ($earlyResponse)"},{"line":59,"text":"\t\t{"},{"line":60,"text":"\t\t\treturn $earlyResponse;"},{"line":61,"text":"\t\t}"},{"line":62,"text":""},{"line":63,"text":"\t\t$reply = $this->dispatchLoop($match);"},{"line":64,"text":""},{"line":65,"text":"\t\t$responseType = $reply->getResponseType() ?: $match->getResponseType();"},{"line":66,"text":"\t\t$response = $this->render($reply, $responseType);"},{"line":67,"text":""},{"line":68,"text":"\t\treturn $response;"},{"line":69,"text":"\t}"},{"line":70,"text":""},{"line":71,"text":"\tpublic function route($routePath)"},{"line":72,"text":"\t{"},{"line":73,"text":"\t\t$match = $this->getRouter()->routeToController($routePath, $this->request);"},{"line":74,"text":""},{"line":75,"text":"\t\tif (!($match instanceof RouteMatch) || !$match->getController())"},{"line":76,"text":"\t\t{"},{"line":77,"text":"\t\t\t$match = $this->app->getErrorRoute('DispatchError', ["},{"line":78,"text":"\t\t\t\t'code' => 'invalid_route',"},{"sep":true},{"line":102,"text":"\t{"},{"line":103,"text":"\t\t$i = 1;"},{"line":104,"text":"\t\t$attemptErrorReroute = true;"},{"line":105,"text":"\t\t$originalMatch = $match;"},{"line":106,"text":"\t\t$reply = null;"},{"line":107,"text":""},{"line":108,"text":"\t\t$this->app->fire($this->eventPrefix . '_match', [$this, &$match]);"},{"line":109,"text":""},{"line":110,"text":"\t\tdo"},{"line":111,"text":"\t\t{"},{"line":112,"text":"\t\t\t$controllerClass = $match->getController();"},{"line":113,"text":"\t\t\t$action = $match->getAction();"},{"line":114,"text":"\t\t\t$responseType = $match->getResponseType();"},{"line":115,"text":"\t\t\t$sectionContext = $match->getSectionContext();"},{"line":116,"text":"\t\t\t$params = $match->getParameterBag();"},{"line":117,"text":"\t\t\t$controller = null;"},{"line":118,"text":""},{"line":119,"text":"\t\t\ttry"},{"line":120,"text":"\t\t\t{"},{"line":121,"text":"\t\t\t\t$reply = $this->dispatchFromMatch($match, $controller, $reply);"},{"line":122,"text":"\t\t\t}"},{"line":123,"text":"\t\t\tcatch (\\Throwable $e)"},{"line":124,"text":"\t\t\t{"},{"line":125,"text":"\t\t\t\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, ["},{"line":126,"text":"\t\t\t\t\t'responseType' => $responseType,"},{"line":127,"text":"\t\t\t\t\t'sectionContext' => $sectionContext,"},{"line":128,"text":"\t\t\t\t\t'action' => $action,"},{"line":129,"text":"\t\t\t\t\t'params' => $params,"},{"line":130,"text":"\t\t\t\t]);"},{"line":131,"text":"\t\t\t\t$attemptErrorReroute = false;"},{"line":132,"text":"\t\t\t}"},{"line":133,"text":"\t\t\tcatch (\\Exception $e)"},{"line":134,"text":"\t\t\t{"},{"line":135,"text":"\t\t\t\t// this will only be hit in PHP 5.x"},{"line":136,"text":"\t\t\t\t$reply = $this->handleControllerError($e, $attemptErrorReroute, $controller, ["},{"line":137,"text":"\t\t\t\t\t'responseType' => $responseType,"},{"line":138,"text":"\t\t\t\t\t'sectionContext' => $sectionContext,"},{"line":139,"text":"\t\t\t\t\t'action' => $action,"},{"line":140,"text":"\t\t\t\t\t'params' => $params,"},{"line":141,"text":"\t\t\t\t]);"},{"line":142,"text":"\t\t\t\t$attemptErrorReroute = false;"},{"line":143,"text":"\t\t\t}"},{"line":144,"text":""},{"line":145,"text":"\t\t\tif (!$reply instanceof AbstractReply)"},{"line":146,"text":"\t\t\t{"},{"line":147,"text":"\t\t\t\t$reply = new Reroute("},{"line":148,"text":"\t\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":149,"text":"\t\t\t\t\t\t'code' => 'no_reply',"},{"line":150,"text":"\t\t\t\t\t\t'controller' => $controllerClass,"},{"line":151,"text":"\t\t\t\t\t\t'action' => $action,"},{"line":152,"text":"\t\t\t\t\t], $responseType)"},{"line":153,"text":"\t\t\t\t);"},{"line":154,"text":"\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":155,"text":"\t\t\t}"},{"line":156,"text":""},{"line":157,"text":"\t\t\tif (!($reply instanceof Reroute) && $attemptErrorReroute)"},{"line":158,"text":"\t\t\t{"},{"line":159,"text":"\t\t\t\t// if we might be debugging, move this up so that we can display an error instead of the page results."},{"line":160,"text":"\t\t\t\t// not doing this can hide errors"},{"line":161,"text":""},{"line":162,"text":"\t\t\t\ttry"},{"line":163,"text":"\t\t\t\t{"},{"line":164,"text":"\t\t\t\t\t\\XF::triggerRunOnce(true);"},{"line":165,"text":"\t\t\t\t}"},{"line":166,"text":"\t\t\t\tcatch (\\Throwable $e)"},{"line":167,"text":"\t\t\t\t{"},{"line":168,"text":"\t\t\t\t\t$attemptErrorReroute = false;"},{"line":169,"text":""},{"line":170,"text":"\t\t\t\t\t$reply = new Reroute("},{"line":171,"text":"\t\t\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)"},{"line":172,"text":"\t\t\t\t\t);"},{"line":173,"text":"\t\t\t\t\t$reply->setResponseType($responseType);"},{"line":174,"text":"\t\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":175,"text":"\t\t\t\t}"},{"line":176,"text":"\t\t\t\tcatch (\\Exception $e)"},{"line":177,"text":"\t\t\t\t{"},{"line":178,"text":"\t\t\t\t\t// this will only be hit in PHP 5.x"},{"line":179,"text":"\t\t\t\t\t$attemptErrorReroute = false;"},{"line":180,"text":""},{"line":181,"text":"\t\t\t\t\t$reply = new Reroute("},{"line":182,"text":"\t\t\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $responseType)"},{"line":183,"text":"\t\t\t\t\t);"},{"line":184,"text":"\t\t\t\t\t$reply->setResponseType($responseType);"},{"line":185,"text":"\t\t\t\t\t$reply->setSectionContext($sectionContext);"},{"line":186,"text":"\t\t\t\t}"},{"line":187,"text":"\t\t\t}"},{"line":188,"text":""},{"line":189,"text":"\t\t\tif ($reply instanceof Reroute)"},{"line":190,"text":"\t\t\t{"},{"line":191,"text":"\t\t\t\t$match = $reply->getMatch();"},{"line":192,"text":"\t\t\t\tif (!$match->getResponseType())"},{"line":193,"text":"\t\t\t\t{"},{"line":194,"text":"\t\t\t\t\t$match->setResponseType($responseType);"},{"line":195,"text":"\t\t\t\t}"},{"line":196,"text":"\t\t\t\tif (!$match->getSectionContext())"},{"line":197,"text":"\t\t\t\t{"},{"line":198,"text":"\t\t\t\t\t$match->setSectionContext($sectionContext);"},{"line":199,"text":"\t\t\t\t}"},{"line":200,"text":"\t\t\t}"},{"line":201,"text":"\t\t\telse"},{"line":202,"text":"\t\t\t{"},{"line":203,"text":"\t\t\t\tbreak;"},{"line":204,"text":"\t\t\t}"},{"line":205,"text":"\t\t}"},{"line":206,"text":"\t\twhile ($i++ < 10);"},{"line":207,"text":""},{"line":208,"text":"\t\tif ($reply instanceof Reroute)"},{"line":209,"text":"\t\t{"},{"line":210,"text":"\t\t\t// rerouted too many times"},{"line":211,"text":"\t\t\t$reply = new Error("},{"line":212,"text":"\t\t\t\t'An error occurred while the page was being generated. Please try again later.',"},{"line":213,"text":"\t\t\t\t500"},{"line":214,"text":"\t\t\t);"},{"line":215,"text":"\t\t\t$reply->setResponseType($responseType);"},{"line":216,"text":"\t\t\t$reply->setSectionContext($sectionContext);"},{"line":217,"text":"\t\t}"},{"line":218,"text":""},{"line":219,"text":"\t\t$this->app->postDispatch($reply, $match, $originalMatch);"},{"line":220,"text":""},{"line":221,"text":"\t\t$this->app->fire($this->eventPrefix . '_post_dispatch', [$this, &$reply, $match, $originalMatch]);"},{"line":222,"text":""},{"line":223,"text":"\t\treturn $reply;"},{"line":224,"text":"\t}"},{"line":225,"text":""},{"line":226,"text":"\tprotected function handleControllerError($e, $attemptErrorReroute, $controller, array $state = [])"},{"line":227,"text":"\t{"},{"line":228,"text":"\t\t/** @var \\Throwable $e */"},{"line":229,"text":""},{"line":230,"text":"\t\t$state = array_replace(["},{"line":231,"text":"\t\t\t'responseType' => null,"},{"line":232,"text":"\t\t\t'sectionContext' => '',"},{"line":233,"text":"\t\t\t'action' => '',"},{"line":234,"text":"\t\t\t'params' => null,"},{"line":235,"text":"\t\t], $state);"},{"line":236,"text":""},{"line":237,"text":"\t\tif ($attemptErrorReroute)"},{"line":238,"text":"\t\t{"},{"line":239,"text":"\t\t\t\\XF::logException($e, true); // rollback as don't know the state"},{"line":240,"text":""},{"line":241,"text":"\t\t\t$reply = new Reroute("},{"line":242,"text":"\t\t\t\t$this->app->getErrorRoute('Exception', ['exception' => $e], $state['responseType'])"},{"line":243,"text":"\t\t\t);"},{"line":244,"text":"\t\t}"},{"line":245,"text":"\t\telse"},{"line":246,"text":"\t\t{"},{"line":247,"text":"\t\t\t$reply = new Error("},{"line":248,"text":"\t\t\t\t'An error occurred while the page was being generated. Please try again later.',"},{"line":249,"text":"\t\t\t\t500"},{"line":250,"text":"\t\t\t);"},{"line":251,"text":"\t\t}"},{"line":252,"text":""},{"line":253,"text":"\t\t$reply->setResponseType($state['responseType']);"},{"line":254,"text":"\t\t$reply->setSectionContext($state['sectionContext']);"},{"line":255,"text":""},{"line":256,"text":"\t\tif ($controller instanceof Controller)"},{"line":257,"text":"\t\t{"},{"line":258,"text":"\t\t\t$controller->applyReplyChanges($state['action'], $state['params'] ?: new ParameterBag(), $reply);"},{"line":259,"text":"\t\t}"},{"line":260,"text":""},{"line":261,"text":"\t\treturn $reply;"},{"line":262,"text":"\t}"},{"line":263,"text":""},{"line":264,"text":"\tpublic function dispatchFromMatch(RouteMatch $match, &$controller = null, ?AbstractReply $previousReply = null)"},{"line":265,"text":"\t{"},{"sep":true},{"line":277,"text":"\t\t$action,"},{"line":278,"text":"\t\tRouteMatch $match,"},{"line":279,"text":"\t\t&$controller = null,"},{"line":280,"text":"\t\t?AbstractReply $previousReply = null"},{"line":281,"text":"\t)"},{"line":282,"text":"\t{"},{"line":283,"text":"\t\t$params = $match->getParameterBag();"},{"line":284,"text":"\t\tif (!$params)"},{"line":285,"text":"\t\t{"},{"line":286,"text":"\t\t\t$params = new ParameterBag();"},{"line":287,"text":"\t\t}"},{"line":288,"text":""},{"line":289,"text":"\t\t$responseType = $match->getResponseType();"},{"line":290,"text":""},{"line":291,"text":"\t\tif (!$controllerClass)"},{"line":292,"text":"\t\t{"},{"line":293,"text":"\t\t\treturn new Reroute("},{"line":294,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":295,"text":"\t\t\t\t\t'code' => 'no_controller',"},{"line":296,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":297,"text":"\t\t\t\t\t'action' => is_string($action) ? $action : null,"},{"line":298,"text":"\t\t\t\t\t'match' => $match,"},{"line":299,"text":"\t\t\t\t], $responseType)"},{"line":300,"text":"\t\t\t);"},{"line":301,"text":"\t\t}"},{"line":302,"text":""},{"line":303,"text":"\t\t$controller = $this->app->controller($controllerClass, $this->request);"},{"line":304,"text":"\t\tif (!$controller)"},{"line":305,"text":"\t\t{"},{"line":306,"text":"\t\t\treturn new Reroute("},{"line":307,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":308,"text":"\t\t\t\t\t'code' => 'invalid_controller',"},{"line":309,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":310,"text":"\t\t\t\t\t'action' => is_string($action) ? $action : null,"},{"line":311,"text":"\t\t\t\t\t'match' => $match,"},{"line":312,"text":"\t\t\t\t], $responseType)"},{"line":313,"text":"\t\t\t);"},{"line":314,"text":"\t\t}"},{"line":315,"text":""},{"line":316,"text":"\t\t$controller->setupFromMatch($match);"},{"line":317,"text":"\t\tif ($previousReply)"},{"line":318,"text":"\t\t{"},{"line":319,"text":"\t\t\t$controller->setupFromReply($previousReply);"},{"line":320,"text":"\t\t}"},{"line":321,"text":""},{"line":322,"text":"\t\tif ($action instanceof \\Closure)"},{"line":323,"text":"\t\t{"},{"line":324,"text":"\t\t\t$action = $action($controller, $responseType, $params);"},{"line":325,"text":"\t\t}"},{"line":326,"text":"\t\telse"},{"line":327,"text":"\t\t{"},{"line":328,"text":"\t\t\t$action = preg_replace('#[^a-z0-9]#i', ' ', $action);"},{"line":329,"text":"\t\t\t$action = str_replace(' ', '', ucwords($action));"},{"line":330,"text":"\t\t}"},{"line":331,"text":""},{"line":332,"text":"\t\t$method = 'action' . $action;"},{"line":333,"text":"\t\tif (!is_callable([$controller, $method]))"},{"line":334,"text":"\t\t{"},{"line":335,"text":"\t\t\t$reply = new Reroute("},{"line":336,"text":"\t\t\t\t$this->app->getErrorRoute('DispatchError', ["},{"line":337,"text":"\t\t\t\t\t'code' => 'invalid_action',"},{"line":338,"text":"\t\t\t\t\t'controller' => $controllerClass,"},{"line":339,"text":"\t\t\t\t\t'action' => $action,"},{"line":340,"text":"\t\t\t\t\t'match' => $match,"},{"line":341,"text":"\t\t\t\t], $responseType)"},{"line":342,"text":"\t\t\t);"},{"line":343,"text":""}],"path":"src/XF/Mvc/Dispatcher.php","present":true,"sha256":"ff47c67e92d0490db099eb588b0ad5d1b96c537062338f53ea82f8f55224ceb1"}],"error":null,"exact":{"controller_pwa":{"bytes":715,"present":true,"sha256":"9e3217d9524349a8137b89d418e4693ca17f8e5f61ba5b563fff747d1014efb3","text":"user_id\n || (!$visitor->hasPermission('gramSupport', 'manage')\n && !$visitor->hasPermission('gramSupport', 'viewAll')))\n {\n throw $this->exception($this->noPermission());\n }\n }\n\n public function actionIndex()\n {\n $this->assertStaff();\n $this->setResponseType('raw');\n\n return $this->view(\n 'Gram\\Support:PwaServiceWorker',\n 'gram_support_staff_service_worker',\n []\n );\n }\n}\n"},"view_pwa_service_worker":{"bytes":381,"present":true,"sha256":"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04","text":"response->contentType('application/javascript', 'utf-8');\n\n $js = $this->renderTemplate(\n 'public:gram_support_staff_service_worker',\n $this->params\n );\n\n return $this->response->body($js);\n }\n}\n"}},"ok":true,"render_raw_implementations":[{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Pub/View/Error/EmbeddedImageRequest.php","sha256":"dae0d06414fc6778a17187e9c5cab5e2923fb5484733a3b193d8d28b6c381d71"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Pub/View/Attachment/View.php","sha256":"5addd9bb6b49abb0c83d52d0390db22d62ccff84854cd90eb8015c35fe93e5be"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Api/View/Attachment/View.php","sha256":"6e1fceda47e3773d05d3a068b5af89436a2ebb4bd73b8ce1ac04e555e1908bd0"},{"hits":[{"line":11,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/User/EmailList.php","sha256":"e5d72d2a23a66cf0b70086ce2e39e3be0ed076551df4300d3af16112f7ec1876"},{"hits":[{"line":14,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/User/ExportListing.php","sha256":"b414d9898a7f68b34ad964c91f26d4f759948034bb83a508f3dcc169ca830c2e"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/AddOn/Icon.php","sha256":"2626f56b3f7353f452e844b46b75aa7501769c7c1e5dc91a89a455efc8b2d2f4"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Attachment/View.php","sha256":"2ecfa72cebb7ac80e0d9b7290b8b24f20a74bd7367c9aabadf69e0ee7bdf14f4"},{"hits":[{"line":11,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Log/ImageProxy/Image.php","sha256":"b83a8022066c68bf55d9e0ef1b2a6586dc01b129418861eabc9aeb4e6da6d300"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Log/EmailBounce/View.php","sha256":"01a4cc67a7184293fcc1180f48d24a323bc11574b8128373904e54192867d075"},{"hits":[{"line":18,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Admin/View/Style/Export.php","sha256":"7c04dde645d1fb8c43ca801eee917c3de97ddb3c89bf1adc412e44db4bf2311e"},{"hits":[{"line":9,"text":"\tpublic function renderRaw()"}],"path":"src/XF/Install/View/Install/ConfigDownload.php","sha256":"5fc4ff410a4ce3d83bedce9a7e9e855802c71660377face69b4e3d237c94cb3f"},{"hits":[{"line":7,"text":" public function renderRaw()"}],"path":"src/addons/Gram/Support/Pub/View/PwaServiceWorker.php","sha256":"700f01f005b818d63267e70dac7669a606c78fabbef5d3e01731c49db3d0be04"}]},"guest_stderr_present":false,"inner_rc":0,"ok":true,"out_truncated":false,"transport_rc":0,"transport_stderr_bytes":0,"transport_stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +GRAM516R5RCA5_DECISION=PASS_SERVICE_WORKER_EXACT_SOURCE_CAPTURED +GRAM516R5RCA5_NEXT_GATE=BUILD_EXACT_SERVICE_WORKER_FIX +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-GRAM-SUPPORT-SERVICE-WORKER-EXACT-SOURCE-READONLY-516R5RCA5","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} -Quorum information ------------------- -Date: Fri Sep [PRIVATE_IP] 2026 -Quorum provider: corosync_votequorum -Nodes: 3 -Node ID: [PRIVATE_IP] -Ring ID: 1.130 -Quorate: Yes - -Votequorum information ----------------------- -Expected votes: 3 -Highest expected: 3 -Total votes: 3 -Quorum: 2 -Flags: Quorate - -Membership information ----------------------- - Nodeid Votes Name -[PRIVATE_IP] [PRIVATE_IP].11 (local) -[PRIVATE_IP] [PRIVATE_IP].13 -[PRIVATE_IP] [PRIVATE_IP].12 - -Membership information ----------------------- - Nodeid Votes Name - 1 1 pve01 (local) - 2 1 pve03 - 3 1 pve02 -[{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":110},{"cpu":[PRIVATE_IP]01996,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":113},{"cpu":[PRIVATE_IP]9539,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":130},{"cpu":[PRIVATE_IP]924605,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"snikket","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":150},{"cpu":[PRIVATE_IP]460672,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":160},{"cpu":[PRIVATE_IP]07012,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":170},{"cpu":[PRIVATE_IP]53506,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":171},{"cpu":[PRIVATE_IP]901381,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":190},{"cpu":[PRIVATE_IP]924605,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/210","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":976760,"vmid":210},{"cpu":[PRIVATE_IP]352072,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/211","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-staging","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":211},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]434978,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]47097,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]41116,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":[PRIVATE_IP]},{"content":"iso,import,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,import,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,import,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] -Name Type Status Total (KiB) Used (KiB) Available (KiB) % -local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 21.19% -local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.00% - UNIT LOAD ACTIVE SUB DESCRIPTION -● homelab-app-cloud-quorum-queue.service loaded failed failed Homelab canonical application cloud quorum backup queue -● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC -● homelab-vm-cloud-quorum-queue.service loaded failed failed Homelab canonical VM/CT cloud quorum backup queue - -Legend: LOAD → Reflects whether the unit definition was properly loaded. - ACTIVE → The high-level unit activation state, i.e. generalization of SUB. - SUB → The low-level unit activation state, values depend on unit type. - -3 loaded units listed. -NEXT LEFT LAST PASSED UNIT ACTIVATES -Fri [PRIVATE_IP] 09:17:37 MSK 35s Fri [PRIVATE_IP] 09:16:35 MSK 26s ago homelab-router-watchdog.timer homelab-router-watchdog.service -Fri [PRIVATE_IP] 09:17:57 MSK 55s Fri [PRIVATE_IP] 09:16:57 MSK 4s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service -Fri [PRIVATE_IP] 09:18:00 MSK 58s Fri [PRIVATE_IP] 09:03:00 MSK 14min ago homelab-disk-space-health.timer homelab-disk-space-health.service -Fri [PRIVATE_IP] 09:18:00 MSK 58s Fri [PRIVATE_IP] 09:03:00 MSK 14min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service -Fri [PRIVATE_IP] 09:20:57 MSK 3min 55s Fri [PRIVATE_IP] 09:15:57 MSK 1min 4s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service -Fri [PRIVATE_IP] 09:20:57 MSK 3min 55s Fri [PRIVATE_IP] 09:15:57 MSK 1min 4s ago netbird-peers-health.timer netbird-peers-health.service -Fri [PRIVATE_IP] 09:22:05 MSK 5min Fri [PRIVATE_IP] 09:16:37 MSK 25s ago homelab-health-metrics.timer homelab-health-metrics.service -Fri [PRIVATE_IP] 09:22:57 MSK 5min Fri [PRIVATE_IP] 09:07:57 MSK 9min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service -Fri [PRIVATE_IP] 09:23:16 MSK 6min Fri [PRIVATE_IP] 09:13:16 MSK 3min 46s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service -Fri [PRIVATE_IP] 09:29:30 MSK 12min Fri [PRIVATE_IP] 08:49:57 MSK 27min ago homelab-backup-v2.timer homelab-backup-v2.service -Fri [PRIVATE_IP] 09:29:57 MSK 12min Fri [PRIVATE_IP] 09:14:57 MSK 2min 4s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service -Fri [PRIVATE_IP] 09:30:00 MSK 12min Fri [PRIVATE_IP] 09:15:12 MSK 1min 49s ago homelab-incident-journal.timer homelab-incident-journal.service -Fri [PRIVATE_IP] 09:30:22 MSK 13min Fri [PRIVATE_IP] 09:04:12 MSK 12min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service -Fri [PRIVATE_IP] 09:30:27 MSK 13min Fri [PRIVATE_IP] 09:15:57 MSK 1min 4s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service -Fri [PRIVATE_IP] 09:30:57 MSK 13min Fri [PRIVATE_IP] 09:15:57 MSK 1min 4s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service -Fri [PRIVATE_IP] 09:31:02 MSK 14min Fri [PRIVATE_IP] 09:15:12 MSK 1min 49s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service -Fri [PRIVATE_IP] 09:35:09 MSK 18min Fri [PRIVATE_IP] 09:05:32 MSK 11min ago homelab-backup-audit.timer homelab-backup-audit.service -Fri [PRIVATE_IP] 09:35:16 MSK 18min Thu [PRIVATE_IP] 05:52:43 MSK 1 day 3h ago man-db.timer man-db.service -Fri [PRIVATE_IP] 09:37:50 MSK 20min Fri [PRIVATE_IP] 09:04:21 MSK 12min ago homelab-reference-refresh.timer homelab-reference-refresh.service -Fri [PRIVATE_IP] 09:42:47 MSK 25min Fri [PRIVATE_IP] 03:11:45 MSK 6h ago apt-daily.timer apt-daily.service -Fri [PRIVATE_IP] 10:15:00 MSK 57min Thu [PRIVATE_IP] 10:15:11 MSK 23h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service -Fri [PRIVATE_IP] 10:35:57 MSK 1h 18min Fri [PRIVATE_IP] 04:35:57 MSK 4h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service -Fri [PRIVATE_IP] 11:20:14 MSK 2h 3min Fri [PRIVATE_IP] 05:11:32 MSK 4h 5min ago homelab-evidence-root.timer homelab-evidence-root.service -Fri [PRIVATE_IP] 12:35:31 MSK 3h 18min Fri [PRIVATE_IP] 06:32:16 MSK 2h 44min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service -Fri [PRIVATE_IP] 16:47:57 MSK 7h Thu [PRIVATE_IP] 16:47:57 MSK 16h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service -Sat [PRIVATE_IP] 00:00:00 MSK 14h Fri [PRIVATE_IP] 00:00:00 MSK 9h ago dpkg-db-backup.timer dpkg-db-backup.service -Sat [PRIVATE_IP] 00:01:48 MSK 14h Fri [PRIVATE_IP] 00:07:16 MSK 9h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service -Sat [PRIVATE_IP] 00:02:46 MSK 14h Fri [PRIVATE_IP] 00:10:53 MSK 9h ago homelab-quality-gate.timer homelab-quality-gate.service -Sat [PRIVATE_IP] 00:13:58 MSK 14h Fri [PRIVATE_IP] 00:12:32 MSK 9h ago homelab-docker-health.timer homelab-docker-health.service -Sat [PRIVATE_IP] 00:18:29 MSK 15h Fri [PRIVATE_IP] 00:15:12 MSK 9h ago homelab-storage-capacity.timer homelab-storage-capacity.service -Sat [PRIVATE_IP] 00:34:18 MSK 15h Fri [PRIVATE_IP] 00:35:52 MSK 8h ago logrotate.timer logrotate.service -Sat [PRIVATE_IP] 02:12:34 MSK 16h Fri [PRIVATE_IP] 04:11:16 MSK 5h 5min ago pve-daily-update.timer pve-daily-update.service -Sat [PRIVATE_IP] 03:23:30 MSK 18h Fri [PRIVATE_IP] 03:22:16 MSK 5h 54min ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service -Sat [PRIVATE_IP] 06:15:09 MSK 20h Fri [PRIVATE_IP] 06:03:32 MSK 3h 13min ago apt-daily-upgrade.timer apt-daily-upgrade.service -Sat [PRIVATE_IP] 07:18:21 MSK 22h Fri [PRIVATE_IP] 07:18:12 MSK 1h 58min ago homelab-drift-check.timer homelab-drift-check.service -Sat [PRIVATE_IP] 07:38:11 MSK 22h Fri [PRIVATE_IP] 07:48:57 MSK 1h 28min ago homelab-alerting-health.timer homelab-alerting-health.service -Sat [PRIVATE_IP] 07:38:37 MSK 22h Fri [PRIVATE_IP] 07:39:32 MSK 1h 37min ago homelab-service-registry-check.timer homelab-service-registry-check.service -Sat [PRIVATE_IP] 07:40:06 MSK 22h Fri [PRIVATE_IP] 07:45:12 MSK 1h 31min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service -Sat [PRIVATE_IP] 07:48:00 MSK 22h Fri [PRIVATE_IP] 07:58:00 MSK 1h 19min ago homelab-runbook-generate.timer homelab-runbook-generate.service -Sat [PRIVATE_IP] 07:56:40 MSK 22h Fri [PRIVATE_IP] 07:59:22 MSK 1h 17min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service -Sat [PRIVATE_IP] 07:56:49 MSK 22h Fri [PRIVATE_IP] 08:00:57 MSK 1h 16min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service -Sat [PRIVATE_IP] 08:08:44 MSK 22h Fri [PRIVATE_IP] 08:07:05 MSK 1h 9min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service -Sat [PRIVATE_IP] 08:15:14 MSK 22h Fri [PRIVATE_IP] 08:15:57 MSK 1h 1min ago homelab-overall-health.timer homelab-overall-health.service -Sat [PRIVATE_IP] 08:19:35 MSK 23h Fri [PRIVATE_IP] 08:29:57 MSK 47min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service -Sat [PRIVATE_IP] 08:31:12 MSK 23h Fri [PRIVATE_IP] 08:25:57 MSK 51min ago homelab-capacity-risk.timer homelab-capacity-risk.service -Sat [PRIVATE_IP] 08:41:46 MSK 23h Fri [PRIVATE_IP] 08:37:57 MSK 39min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service -Sat [PRIVATE_IP] 08:48:35 MSK 23h Fri [PRIVATE_IP] 08:48:57 MSK 28min ago homelab-cluster-passport.timer homelab-cluster-passport.service -Sat [PRIVATE_IP] 08:51:11 MSK 23h Fri [PRIVATE_IP] 09:00:12 MSK 16min ago homelab-golden-state-index.timer homelab-golden-state-index.service -Sun [PRIVATE_IP] 03:10:03 MSK 1 day 17h Sun [PRIVATE_IP] 03:10:22 MSK 5 days ago e2scrub_all.timer e2scrub_all.service -Sun [PRIVATE_IP] 03:10:58 MSK 1 day 17h Sun [PRIVATE_IP] 03:10:39 MSK 5 days ago xfs_scrub_all.timer xfs_scrub_all.service -Sun [PRIVATE_IP] 07:40:18 MSK 1 day 22h Sun [PRIVATE_IP] 07:35:56 MSK 5 days ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service -Mon [PRIVATE_IP] 00:04:42 MSK 2 days Mon [PRIVATE_IP] 00:10:39 MSK 4 days ago homelab-secret-sanity.timer homelab-secret-sanity.service -Mon [PRIVATE_IP] 00:09:14 MSK 2 days Mon [PRIVATE_IP] 00:30:56 MSK 4 days ago fstrim.timer fstrim.service -- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service -- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service -- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service - -56 timers listed. -RUNTIME_MANIFEST_ID=df[PRIVATE_IP]ac9b5abd[PRIVATE_IP]b[PRIVATE_IP]d89496fb2bde[PRIVATE_IP] -EXPERIMENT_ID=5462ee[PRIVATE_IP]ebe[PRIVATE_IP]feb2ad[PRIVATE_IP]1ad87bbac0b8108 -COLLECTION_START_AT=[PRIVATE_IP]T[PRIVATE_IP]:00 -FIRST_COMPLETE_D1_CLOSE=[PRIVATE_IP]T[PRIVATE_IP]:00 -PRODUCTION_LAUNCH_ALLOWED=False -EXECUTION_AUTHORITY=False -RISK_AUTHORITY=False -STAGE_A_HEALTH=AWAITING_PRIMARY_FINALITY -FORENSIC_PREVIOUS_EPOCH_PRESERVED=YES - -## NEWFI_TASK6_AUTH_CHECKPOINT_V[PRIVATE_IP] -- Scope: historical accepted AUTH test, not a current SMTP connection test. -- Newfi approved SMTP account/sender: aleisaev@yandex.ru. -- Endpoint used by accepted test: smtp.yandex.ru:465 with certificate verification; single PLAIN initial response accepted with code 235. -- Evidence: incident ledger ### NEWFI_TASK6_YANDEX_AUTH_V2_OBSERVATION and ### NEWFI_TASK6_AUTH_PROOF_CLOSE_V1. -- No password file written, no application configuration changed, no mail sent by the accepted AUTH test. -- Persistent transport installation and application delivery are not proven by this checkpoint. Task6 is not complete. -- AUTH challenge and missing-file incidents closed; launch/session incident remains OPEN with original cause unproven. -- This update does not change VM211, VM160, routing, board state or Git. -- Other incidents and infrastructure health were not assessed. - - -## NEWFI_PRIVATE_STRUCTURE92_WRONG_MARKER_SCOPE_[PRIVATE_IP] CLOSURE -- Status: CLOSED -- RCA: NEWFI92 inspected the pve01 NEWFI90 attempt marker, which had not been finalized because the outer shell exited immediately after the guest returned RC3 following its successful rollback. The guest marker contained the true final rollback state. -- Correction: NEWFI93 required both the guest FINISHED/ROLLED_BACK record and a fresh exact demo-state readback before reconciling the outer NEWFI90 marker. NEWFI92 itself never reserved an attempt or mutated state. - - -## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] -- Status: OPEN -- Command: NEWFI95 -- Symptom: after the content-structure precheck passed, the pve03 Python wrapper failed to parse at the PHP line beginning with $root. No Portal discovery or application mutation was reached. -- RCA: an outer raw triple-single-quoted guest Python payload contained an inner raw triple-single-quoted PHP payload. The inner delimiter terminated the outer Python string, causing PHP source to be parsed as Python. -- Safety: NEWFI95 was read-only, created no attempt marker, and did not reach the intended nested guest execution. Do not replay NEWFI95. - - -## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] CLOSURE -- Status: CLOSED -- RCA: an inner triple-single-quoted PHP literal terminated the outer triple-single-quoted Python guest payload in NEWFI95. The wrapper therefore failed parsing before the intended Portal discovery executed. -- Correction: NEWFI96 removed the nested Python payload layer entirely and passed one Python program directly to VM211 through qm guest exec stdin. The read-only Portal contract completed with QGA exit 0 and the implementation worktree remained unchanged. OUTPUT_END CHAT_OUTPUT_END