Compare commits

...
1 Commits
Author SHA1 Message Date
Bruno Eckhardt 4782a2c401 new api with url request 2026-05-13 11:02:42 +02:00
+56 -73
View File
@@ -1,40 +1,35 @@
<?php <?php
include_once '../controller/DatabaseController.php'; include_once(__DIR__ . '/../controller/DatabaseController.php');
include_once '../controller/DataController.php'; include_once(__DIR__ . '/../controller/DataController.php');
include_once __DIR__ . '/../modules/Mail.php'; include_once(__DIR__ . '/../modules/Mail.php');
header("Content-Type: application/json"); header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization, Function, Content-Type");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { // 1. Daten aus der URL (GET) statt aus dem Header holen
http_response_code(200); $token = $_GET['token'] ?? '';
exit(); $function = $_GET['action'] ?? ''; // Ich habe es 'action' genannt, passend zur URL
// Prüfen, ob überhaupt etwas übergeben wurde
if (empty($token) || empty($function)) {
http_response_code(400);
echo json_encode(["error" => "Token oder Action fehlt in der URL"]);
exit;
} }
// $validTokens = [ // 2. Token-Validierung direkt in der Datenbank (Performanter!)
// "15a437d128c918633e57dc7d18118a073b807644f21731ed5a7ebcf3eca9e242", // Annahme: Deine DatabaseShow kann Filter. Wenn nicht, hier das SQL anpassen.
// ]; $checkToken = DatabaseShow(
$validTokens = DatabaseShow(
"API_Credentials", "API_Credentials",
"TOKEN" "TOKEN",
"TOKEN = ?",
$token
); );
$validTokens = array_column($validTokens, 'TOKEN'); if (empty($checkToken)) {
$headers = getallheaders();
$token = $headers['Authorization'] ?? $headers['authorization'] ?? $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$function = $headers['Function'] ?? $headers['function'] ?? '';
if (!in_array($token, $validTokens)) {
http_response_code(401); http_response_code(401);
$error = json_encode([
"error" => "Unauthorized",
"debug_received_token" => $token,
"debug_all_headers" => $headers
]);
// Loggen des Fehlversuchs
DatabaseInsert( DatabaseInsert(
"API_LOGS", "API_LOGS",
"CLIENT_IP, TOKEN, API, FUNKTION, JSON", "CLIENT_IP, TOKEN, API, FUNKTION, JSON",
@@ -42,60 +37,48 @@ if (!in_array($token, $validTokens)) {
$token, $token,
(new getSpecificData())->getRequestURL(), (new getSpecificData())->getRequestURL(),
$function, $function,
$error json_encode(["error" => "Unauthorized"])
); );
errorMail( echo json_encode(["error" => "Zugriff verweigert", "hint" => "Token ungültig"]);
"API Login failed",
$error,
true,
);
echo json_encode(
[
"error" => "Unauthorized",
"Contact" => "bruno.eckhardt07@gmail.com",
]
);
exit; exit;
} }
if (in_array($token, $validTokens)) { // 3. Logik-Teil mit switch (sauberer als viele IFs)
DatabaseInsert( $data = null;
"API_LOGS",
"CLIENT_IP, TOKEN, API, FUNKTION",
(new getSpecificData())->getClientIP(),
$token,
(new getSpecificData())->getRequestURL(),
$function
);
if ($function === "IPs") { switch ($function) {
$data = DatabaseShow( case "UeberstundenAbbau":
"logs", $data = DatabaseShow("Ueberstunden", "DATUM, MINUTEN", "GRUND = ?", "Abbau");
"CLIENT_IP" break;
);
case "UeberstundenAktuell":
$conn = db_connect();
$sql = "SELECT
(SELECT COALESCE(SUM(OVERTIME), 0) FROM Firmenberichte) AS berichte,
(SELECT COALESCE(SUM(MINUTEN), 0) FROM Ueberstunden WHERE GRUND = 'Abbau') AS abbau,
(SELECT COALESCE(SUM(MINUTEN), 0) FROM Ueberstunden WHERE GRUND = 'Aufbau') AS aufbau";
$res = $conn->query($sql);
$row = $res->fetch_object();
$data = ($row->berichte - $row->abbau + $row->aufbau) / 60;
break;
case "Berichte":
$data = DatabaseShowWithFK("Berufsschulberichte", $Berufsschulberichte);
break;
case "Stundenplan":
$data = DatabaseShowWithFK("Stundenplan", $Stundenplan, "ZEITEN, MO, DI, MI, DO, FR");
break;
default:
http_response_code(404);
echo json_encode(["error" => "Funktion '$function' nicht gefunden"]);
exit;
} }
if ($function === "Ueberstunden") { // 4. Erfolgreiche Antwort
$data = DatabaseShow( echo json_encode([
"Ueberstunden",
"MINUTEN"
);
}
if ($function === "Berichte") {
$data = DatabaseShowWithFK(
"Berufsschulberichte",
$Berufsschulberichte,
);
}
echo json_encode(
[
"success" => true, "success" => true,
"data" => $data, "data" => $data
] ]);
);
exit;
}