App/lib_new/99_manager.php

63 lines
1.8 KiB
PHP

<?php #lib/99_manager.php
// Missing:
// - Error handling
// - Proper response codes
class Manager
{
private static $routes = [
//"Termine",
//"Dienstpläne",
"Personal",
//"Prozesse",
//"Spinde",
//"Einsätze",
//"Anwesenheiten",
//"Fahrzeuge"
];
private function __construct() {}
private function __destruct() {}
public static function Answer() {
try {
Request::ParseInput();
Login::Login();
if (Request::IsLogout()) {
// Logout detected
Login::Logout();
Response::Get()->Code(200)->Message("Logout erkannt!");
} else if (!Login::LoggedIn()) {
// Login is necessary
Response::Get()->Code(401);
} else {
// Include routes. Needed also for /-Request
foreach (self::$routes as $route => $filename) {
$file = "routes/".str_replace(["ä", "ö", "ü", "ß"], ["ae", "oe", "ue", "ss"], $filename).".php";
if (file_exists($file)) {
include $file;
} }
if (Request::IsRoot()) {
// POST (Login) or GET/OPTIONS... i dont care, all will result in the same
$access = [];
foreach (self::$routes as $route => $filename) {
$class = "\\Routes\\".$route;
$access[$route] = $class::Rights();
}
Response::Get()->Code(200)->Content($access)->ETag(hash('sha256', json_encode($access)));
} else if (!in_array(Request::Route(), self::$routes)) {
Response::Get()->Code(404)->Message("Route not found");
} else {
// This is the good path. We can try to answer the request
$class = "\\Routes\\".Request::Route();
(new $class)->Answer();
} }
} catch (\Throwable $e) { // For PHP 7
Response::Get()->Code(500)->Message("<h5>Caught throwable:</h5>".$e);
} catch (\Exception $e) { // For PHP 5
Response::Get()->Code(500)->Message("<h5>Caught exception:</h5>".$e);
} } }