. * * sc.inc * * Sanity check code. * * @author Daniele Bonini * @copyrights (c) 2016, 2024, 5 Mode */ function SC_CHECK_ROUTE_STRU($route) { $ret = false; echo_ifdebug(true, "CHECKING_ROUTE_STRU: Start
"); // Check for +DESC if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/+DESC")) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_STRU: +DESC: ok
"); // Check for +CONTENT if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT")) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_STRU: +CONTENT: exists
"); // Check file dependencies list // Private/routes/test/test.php // Private/functions/func.various.inc // Public/static/css/style.css // Public/static/res/logot.png $af = file(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT"); foreach($af as &$line) { if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/" . trim(basename($line)) . "+scr")) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_STRU: " . trim(basename($line)) . "+scr: exists
"); if (left($line,7)==="Private") { if (!is_readable(APP_PRIVATE_PATH. trim(substr($line, 7)))) { return $ret; } } else { if (!is_readable(APP_PUBLIC_PATH . trim(substr($line, 6)))) { return $ret; } } } //echo_ifdebug(true, "CHECKING_ROUTE_STRU: +CONTENT: ok
"); // Check for +REQUIRING if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+REQUIRING")) { return $ret; } // Check route dependencies list $af = file(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+REQUIRING"); foreach($af as &$line) { if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $line)) { return $ret; } } echo_ifdebug(true, "CHECKING_ROUTE_STRU: +REQUIRING: ok
"); return true; } function SC_CHECK_ROUTE_DEP($route) { $ret = false; echo_ifdebug(true, "CHECKING_ROUTE_DEP: Start
"); // Check for +CONTENT if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT")) { return $ret; } // echo_ifdebug(true, "CHECKING_ROUTE_DEP: +CONTENT: exists
"); // // Check file dependencies list // // // index-scrs/: // func.various.inc+scr: // partial path // size // sha // style.css+scr // partial path // size // sha // // Private/routes/test/test.php // Private/functions/func.various.inc // Public/static/css/style.css // Public/static/res/logot.png // $af = file(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT"); foreach($af as &$line) { if (is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/" . trim(basename($line)) . "+scr")) { $asf = file(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/" . trim(basename($line)) . "+scr"); $size = trim($asf[1]); $sha = trim($asf[2]); if (left($line,7)==="Private") { $filePath = APP_PRIVATE_PATH . trim(substr($line, 7)); } else { $filePath = APP_PUBLIC_PATH . trim(substr($line, 6)); } if (filesize($filePath) != $size) { return $ret; } if (hash("sha256", file_get_contents($filePath), false) !== $sha) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_DEP: " . trim(basename($line)) . ": recognized
"); } else { return $ret; } } return true; } function SC_CHECK_ROUTE_RES($route) { $ret = false; $res = []; echo_ifdebug(true, "CHECKING_ROUTE_RES: Start
"); // Check for +CONTENT if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT")) { return $ret; } //echo_ifdebug(true, "CHECKING_ROUTE_RES: +CONTENT: exists
"); $af = file(APP_PRIVATE_PATH . "/routes/" . $route . "/" . APP_SECRETS_FOLDER . "/+CONTENT"); if (left($af[0],7)==="Private") { $routeFilePath = APP_PRIVATE_PATH . trim(substr($af[0], 7)); } else { $routeFilePath = APP_PUBLIC_PATH . trim(substr($af[0], 6)); } $acf = file_get_contents($routeFilePath); // ANALYZING HEADER.. preg_match_all("/.*<\/head>/s", $acf, $c, PREG_PATTERN_ORDER); //print_r($c[0][0]); // html header preg_match_all('/\/js\/.+\.js/s', $c[0][0], $res, PREG_PATTERN_ORDER); if (!empty($res[0])) { foreach($res[0] as $item) { if (!in_array("Public".$item.PHP_EOL,$af)) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_RES: $item in " . basename($routeFilePath) . ": recognized
"); } } preg_match_all('/\/css\/.+\.css/s', $c[0][0], $res, PREG_PATTERN_ORDER); //print_r($res); if (!empty($res)) { foreach($res[0] as $item) { //echo("Public".$item); if (!in_array("Public".$item.PHP_EOL,$af)) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_RES: $item in " . basename($routeFilePath) . ": recognized
"); } } //print_r($res[0]); // ANALYZING BODY.. preg_match_all("/.*<\/body>/s", $acf, $c, PREG_PATTERN_ORDER); //print_r($c[0][0]); // html body preg_match_all('/\/res\/.+\.png/s', $c[0][0], $res, PREG_PATTERN_ORDER); if (!empty($res[0])) { foreach($res[0] as $item) { //echo("Public".$item); if (!in_array("Public".$item.PHP_EOL,$af)) { return $ret; } echo_ifdebug(true, "CHECKING_ROUTE_RES: $item in " . basename($routeFilePath) . ": recognized
"); } } return true; } function SC_CHECK_ROUTE_ALL($route) { $ret = 200; if (!is_readable(APP_PRIVATE_PATH . "/routes/" . $route)) { $ret = 404; return $ret; } if (!SC_CHECK_ROUTE_STRU($route) || !SC_CHECK_ROUTE_DEP($route) || !SC_CHECK_ROUTE_RES($route)) { $ret = 502; return $ret; } return $ret; }