Router Update + Bugfix
This commit is contained in:
123
index.php
123
index.php
@@ -12,13 +12,12 @@ if (is_file("MAINTENANCE") && !in_array($_SERVER['REMOTE_ADDR'], ['127.0.0.1', '
|
||||
die();
|
||||
}
|
||||
|
||||
use Api\Request;
|
||||
use Configuration\Configuration;
|
||||
use Objects\Router;
|
||||
use Objects\Router\Router;
|
||||
|
||||
if (!is_readable(getClassPath(Configuration::class))) {
|
||||
header("Content-Type: application/json");
|
||||
die(json_encode(array( "success" => false, "msg" => "Configuration class is not readable, check permissions before proceeding." )));
|
||||
die(json_encode([ "success" => false, "msg" => "Configuration class is not readable, check permissions before proceeding." ]));
|
||||
}
|
||||
|
||||
$config = new Configuration();
|
||||
@@ -27,103 +26,49 @@ $sql = $user->getSQL();
|
||||
$settings = $config->getSettings();
|
||||
$installation = !$sql || ($sql->isConnected() && !$settings->isInstalled());
|
||||
|
||||
// API routes, prefix: /api/
|
||||
// TODO: move this to Router?
|
||||
if (isset($_GET["api"]) && is_string($_GET["api"])) {
|
||||
$isApiResponse = true;
|
||||
if ($installation) {
|
||||
$response = createError("Not installed");
|
||||
$requestedUri = $_GET["site"] ?? $_GET["api"] ?? $_SERVER["REQUEST_URI"];
|
||||
$requestedUri = Router::cleanURL($requestedUri);
|
||||
|
||||
if ($installation) {
|
||||
if ($requestedUri !== "" && $requestedUri !== "index.php") {
|
||||
$response = "Redirecting to <a href=\"/\">/</a>";
|
||||
header("Location: /");
|
||||
} else {
|
||||
$apiFunction = $_GET["api"];
|
||||
if (empty($apiFunction) || $apiFunction === "/") {
|
||||
$document = new \Elements\TemplateDocument($user, "swagger.twig");
|
||||
$response = $document->getCode();
|
||||
$isApiResponse = false;
|
||||
} else if(!preg_match("/[a-zA-Z]+(\/[a-zA-Z]+)*/", $apiFunction)) {
|
||||
http_response_code(400);
|
||||
$response = createError("Invalid Method");
|
||||
} else {
|
||||
$apiFunction = array_filter(array_map('ucfirst', explode("/", $apiFunction)));
|
||||
if (count($apiFunction) > 1) {
|
||||
$parentClass = "\\Api\\" . reset($apiFunction) . "API";
|
||||
$apiClass = "\\Api\\" . implode("\\", $apiFunction);
|
||||
} else {
|
||||
$apiClass = "\\Api\\" . implode("\\", $apiFunction);
|
||||
$parentClass = $apiClass;
|
||||
}
|
||||
|
||||
try {
|
||||
$file = getClassPath($parentClass);
|
||||
if(!file_exists($file) || !class_exists($parentClass) || !class_exists($apiClass)) {
|
||||
http_response_code(404);
|
||||
$response = createError("Not found");
|
||||
} else {
|
||||
$parentClass = new ReflectionClass($parentClass);
|
||||
$apiClass = new ReflectionClass($apiClass);
|
||||
if(!$apiClass->isSubclassOf(Request::class) || !$apiClass->isInstantiable()) {
|
||||
http_response_code(400);
|
||||
$response = createError("Invalid Method");
|
||||
} else {
|
||||
$request = $apiClass->newInstanceArgs(array($user, true));
|
||||
$success = $request->execute();
|
||||
$msg = $request->getLastError();
|
||||
$response = $request->getJsonResult();
|
||||
}
|
||||
}
|
||||
} catch (ReflectionException $e) {
|
||||
$response = createError("Error instantiating class: $e");
|
||||
}
|
||||
}
|
||||
|
||||
if ($isApiResponse) {
|
||||
header("Content-Type: application/json");
|
||||
} else {
|
||||
header("Content-Type: text/html");
|
||||
}
|
||||
$document = new Documents\Install($user);
|
||||
$response = $document->getCode();
|
||||
}
|
||||
} else {
|
||||
|
||||
// all other routes
|
||||
$requestedUri = $_GET["site"] ?? $_SERVER["REQUEST_URI"];
|
||||
$requestedUri = Router::cleanURL($requestedUri);
|
||||
$router = null;
|
||||
$routerCacheClass = '\Cache\RouterCache';
|
||||
$routerCachePath = getClassPath($routerCacheClass);
|
||||
if (is_file($routerCachePath)) {
|
||||
@include_once $routerCachePath;
|
||||
if (class_exists($routerCacheClass)) {
|
||||
$router = new $routerCacheClass($user);
|
||||
}
|
||||
}
|
||||
|
||||
if ($installation) {
|
||||
if ($requestedUri !== "" && $requestedUri !== "index.php") {
|
||||
$response = "Redirecting to <a href=\"/\">/</a>";
|
||||
header("Location: /");
|
||||
if ($router === null) {
|
||||
$req = new \Api\Routes\GenerateCache($user);
|
||||
if ($req->execute()) {
|
||||
$router = $req->getRouter();
|
||||
} else {
|
||||
$document = new Documents\Install($user);
|
||||
$response = $document->getCode();
|
||||
$message = "Unable to generate router cache: " . $req->getLastError();
|
||||
$response = (new Router($user))->returnStatusCode(500, [ "message" => $message ]);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
$router = null;
|
||||
|
||||
$routerCacheClass = '\Cache\RouterCache';
|
||||
$routerCachePath = getClassPath($routerCacheClass);
|
||||
if (is_file($routerCachePath)) {
|
||||
@include_once $routerCachePath;
|
||||
if (class_exists($routerCacheClass)) {
|
||||
$router = new $routerCacheClass($user);
|
||||
}
|
||||
}
|
||||
|
||||
if ($router === null) {
|
||||
$req = new \Api\Routes\GenerateCache($user);
|
||||
if ($req->execute()) {
|
||||
$router = $req->getRouter();
|
||||
} else {
|
||||
$message = "Unable to generate router cache: " . $req->getLastError();
|
||||
$response = (new Router($user))->returnStatusCode(500, [ "message" => $message ]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($router !== null) {
|
||||
if ($router !== null) {
|
||||
if (!isset($_GET["site"]) && isset($_GET["error"]) &&
|
||||
is_string($_GET["error"]) && preg_match("^\d+$", $_GET["error"])) {
|
||||
$response = $router->returnStatusCode(intval($_GET["error"]));
|
||||
} else {
|
||||
$response = $router->run($requestedUri);
|
||||
}
|
||||
|
||||
$user->processVisit();
|
||||
}
|
||||
|
||||
$user->processVisit();
|
||||
}
|
||||
|
||||
$user->sendCookies();
|
||||
|
||||
Reference in New Issue
Block a user