This commit is contained in:
Bruno committed 2025-12-11 12:27:33 +01:00
1 parent 2324e056da
commit 574bfdead4
33 files changed
+2042

No files matched your search

+1
View File
@@ -0,0 +1 @@
*.db
+73
View File
@@ -0,0 +1,73 @@
#!/bin/bash
while true; do
echo ""
echo "============================="
echo " Git Management Script"
echo "============================="
echo ""
echo "1) Geänderte Dateien anzeigen"
echo "2) Einzelne Dateien zum Commit auswählen"
echo "3) Alles stagen"
echo "4) Commit & Push"
echo "5) Alte Stände anzeigen"
echo "6) Aktueller Branch"
echo "7) Änderungen"
echo "99) Programm beenden"
echo ""
read -p "Auswahl: " auswahl
case $auswahl in
1)
echo "Geänderte Dateien:"
git status -s
;;
2)
echo "Geänderte Dateien:"
git status -s
echo ""
read -p "Welche Datei soll gestaged werden? (Pfad eingeben): " file
git add "$file"
echo ">> Datei '$file' wurde gestaged."
;;
3)
echo ">> Alle Dateien werden gestaged..."
git add -A
;;
4)
read -p "Commit Nachricht: " commitmsg
git commit -m "$commitmsg"
echo ">> Pushen..."
git push
;;
5)
echo ">> Alte Commits:"
git log --oneline --graph --decorate --all
;;
6)
echo "Aktueller Branch"
git branch
;;
7)
echo "Änderungen"
git status
;;
99)
echo "Beendet."
exit 0
;;
*)
echo "Ungültige Auswahl!"
;;
esac
done
+46
View File
@@ -0,0 +1,46 @@
{
"folders": [
{
"path": "."
},
],
"settings": {
"workbench.colorTheme": "Default Dark Modern",
"workbench.colorCustomizations": {
"activityBar.background": "#0051ffd0",
"activityBar.foreground": "#000000",
"breadcrumb.foreground": "#FFFFFF",
},
"editor.renderWhitespace": "all",
"editor.smoothScrolling": true,
"editor.fontSize": 14,
"editor.formatOnSave": true,
"editor.minimap.enabled": true,
"editor.minimap.scale": 2,
"editor.minimap.side": "right",
"editor.minimap.maxColumn": 100,
"editor.minimap.renderCharacters": true,
"editor.minimap.showSlider": "always",
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 3000,
"window.title": "PUBLIC",
"workbench.editor.wrapTabs": true,
},
"extensions": {
"recommendations": [
"oderwat.indent-rainbow",
"pranaygp.vscode-css-peek",
"wayou.vscode-todo-highlight",
"mrmlnc.vscode-mustache",
"fabiospampinato.vscode-highlight",
"junstyle.php-cs-fixer",
"mtea.gettext-editor",
"neilbrayfield.php-docblocker",
"bmewburn.vscode-intelephense-client",
"mohamed-ali.html-css-class-completion",
"rifi2k.format-html-in-php",
"mrorz.language-gettext",
"voldemortensen.rainbow-tags",
]
}
}
+39
View File
@@ -0,0 +1,39 @@
<?php
class cookieController {
public function setCookie(string $CookieName, int $CookieValue, int $CookieTime) {
setcookie($CookieName, $CookieValue, time()+($CookieTime*60));
}
public function readCookieValue(string $CookieName) {
if (isset($_COOKIE[$CookieName])) {
return $_COOKIE[$CookieName];
}
return 'Cookie not set';
}
public function DeleteCookie(string $CookieName) {
setcookie($CookieName, "", time()-(3600*24));
}
}
// USE:
/**
* Cookie setzen:
* $cookieManager = new cookieController();
* $cookieManager->SetCookie("USER", "7", 60);
*/
/**
* Cookie auslesen:
* $cookieValue = $cookieManager->readCookieValueCookie("USER");
* echo $cookieValue;
*/
/**
* Cookie loeschen:
* $cookieManager->DeleteCookie("USER");
*/
+131
View File
@@ -0,0 +1,131 @@
<?php
class getSpecificData {
public function getServerIP(): string {
return $_SERVER['SERVER_ADDR'] ?? 'Unbekannt';
}
public function getUserAgent(): string {
return $_SERVER['HTTP_USER_AGENT'] ?? 'Unbekannt';
}
public function getRequestURL(): string {
return $_SERVER['REQUEST_URI'] ?? 'Unbekannt';
}
public function getCookie(string $name): ?string {
return $_COOKIE[$name] ?? 'Unbekannt';
}
public function getSessionID(): string {
return $session_id ?? 'Unbekannt ';
}
public function getServerPort(): string {
return $_SERVER['SERVER_PORT'] ?? 'Unbekannt';
}
public function getClientPort(): string {
return $_SERVER['REMOTE_PORT'] ?? 'Unbekannt';
}
public function getDocumentRoot(): string {
return $_SERVER['DOCUMENT_ROOT'] ?? 'Unbekannt';
}
public function getRequestTimeFloat(): string {
return $_SERVER['REQUEST_TIME_FLOAT'] ?? 'Unbekannt';
}
public function getQuery(): string {
return $_SERVER['QUERY_STRING'] ?? 'Unbekannt';
}
public function getServerName(): string {
return $_SERVER['SERVER_NAME'] ?? 'Unbekannt';
}
public function getRequestMethod(): string {
return $_SERVER['REQUEST_METHOD'] ?? 'Unbekannt';
}
public function getCurrentDir(): string {
return __DIR__ ;
}
public function getDatabase(): string {
$conn = db_connect();
return $conn->host_info;
}
public function getClientIP(): string {
$xff = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? null;
if ($xff) {
$ips = array_map('trim', explode(',', $xff));
$clientIp = $ips[0];
return $clientIp;
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
public function getRequestTime(): string {
date_default_timezone_set('Europe/Berlin');
$timestamp = $_SERVER['REQUEST_TIME'] ?? time();
return date('Y-m-d H:i:s', $timestamp);
}
function getGeoIP($ClientIP) {
$response = file_get_contents("http://ip-api.com/json/{$ClientIP}?fields=country,countryCode");
$data = json_decode($response);
return $data->country;
}
function getWhitelistedIPs() {
$conn = db_connect();
$ips="SELECT `IP-ADDRESSE` FROM Whitelisted";
$results = $conn->query($ips);
$WhitelistedIPs = [];
if ($results && $results->num_rows > 0) {
while ($row = $results->fetch_assoc()) {
$WhitelistedIPs[] = $row['IP-ADDRESSE'];
}
}
return $WhitelistedIPs;
}
public function getAllData(): array {
return [
'Document-Root' => $this->getDocumentRoot(),
'CurrentDir' => $this->getCurrentDir(),
'SERVER-IP' => $this->getServerIP(),
'Server-Port' => $this->getServerPort(),
'Server-Name' => $this->getServerName(),
'Client-IP' => $this->getClientIP(),
'Client-Port' => $this->getClientPort(),
'User-Agent' => $this->getUserAgent(),
'Request URL' => $this->getRequestURL(),
'Cookie' => $this->getCookie('USER'),
'Session' => $this->getSessionID(),
'Query' => $this->getQuery(),
'Request-Method' => $this->getRequestMethod(),
'Request-Time' => $this->getRequestTime(),
'Request-Time-Float' => $this->getRequestTimeFloat(),
'Land' => $this->getGeoIP($this->getClientIP()),
'Database' => $this->getDatabase(),
'Whitelisted' => $this->getWhitelistedIPs(),
];
}
public function ShowAllData(): void {
$SpecificData = (new getSpecificData())->getAllData();
echo "<pre>";
print_r($SpecificData);
echo "</pre>";
}
}
// $ShowAllDAta = (new getSpecificData())->ShowAllData();
+27
View File
@@ -0,0 +1,27 @@
<?php
function db_connect() {
$local = false;
$servers = [
'remote' => '10.233.1.244',
'local' => '100.123.136.86'
];
$username = "worker";
$password = "bBHofurUJWKzPE8Z";
$dbname = "DEV";
$host = $local ? $servers['local'] : $servers['remote'];
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
throw new Exception("Datenbankverbindung fehlgeschlagen: " . $conn->connect_error);
}
$conn->set_charset("utf8mb4");
return $conn;
}
?>
+23
View File
@@ -0,0 +1,23 @@
<?php
function DatabaseInsert($table, $columns, ...$values) {
include_once 'DatabaseConnect.php';
$conn = db_connect();
// Platzhalter erzeugen
$placeholders = rtrim(str_repeat("?,", count($values)), ",");
// Query bauen
$sql = "INSERT INTO `$table` ($columns) VALUES ($placeholders)";
$stmt = $conn->prepare($sql);
if (!$stmt) {
die("Fehler beim Prepare: " . $conn->error);
}
if (!$stmt->execute($values)) {
die("Fehler beim Execute: " . $stmt->error);
}
return true;
}
+116
View File
@@ -0,0 +1,116 @@
<?php
function logging() {
include_once 'DatabaseConnect.php';
include_once 'DataController.php';
$ClientIP = (new getSpecificData())->getClientIP();
$ServerIP = (new getSpecificData())->getServerIP();
$UserAgent = (new getSpecificData())->getUserAgent();
$RequestURL = (new getSpecificData())->getRequestURL();
$USERCOOKIE = (new getSpecificData())->getCookie("USER");
$SessionID = (new getSpecificData())->getSessionID();
$REQUESTTIME = (new getSpecificData())->getRequestTime();
$QUERY = (new getSpecificData())->getQuery();
$LAND = (new getSpecificData())->getGeoIP($ClientIP);
$Whitelisted = (new getSpecificData())->getWhitelistedIPs();
if (in_array($ClientIP, $Whitelisted)) {
return;
}
$db_conn = db_connect();
$stmt = $db_conn->prepare("SELECT * FROM logs WHERE
`CLIENT-IP` LIKE ? and
`REQUEST-URL` = ? and
`REQUEST-URL` <> '/favicon.ico'
");
$stmt->bind_param("ss", $ClientIP, $RequestURL);
$stmt->execute();
$stmt->store_result();
if ($RequestURL !== '/favicon.ico') {
if ($stmt->num_rows > 0) { //wenn mindestens eine zeile vorhanden ist für die client ip dann führe updates durch, wenn nicht mache neue zeile
$updateCounter = $db_conn->prepare("
UPDATE logs
SET COUNTER = COUNTER + 1
WHERE `CLIENT-IP` = ?
AND `REQUEST-URL` = ?
");
$updateCounter->bind_param("ss", $ClientIP, $RequestURL);
$updateCounter->execute();
$updateLastRequest = $db_conn->prepare("
UPDATE logs
SET `LAST-REQUEST` = ?
WHERE `CLIENT-IP` = ?
AND `REQUEST-URL` = ?
");
$updateLastRequest->bind_param("sss", $REQUESTTIME, $ClientIP, $RequestURL);
$updateLastRequest->execute();
$updateCookieValue = $db_conn->prepare("
UPDATE logs
SET `USER-COOKIE-VALUE` = ?
WHERE `CLIENT-IP` = ?
AND `REQUEST-URL` = ?
");
$updateCookieValue->bind_param("sss", $USERCOOKIE, $ClientIP, $RequestURL);
$updateCookieValue->execute();
$updateServerIP = $db_conn->prepare("
UPDATE logs
SET `SERVER-IP` = ?
WHERE `CLIENT-IP` = ?
AND `REQUEST-URL` = ?
AND `SERVER-IP` IS NULL
");
$updateServerIP->bind_param("sss", $ServerIP, $ClientIP, $RequestURL);
$updateServerIP->execute();
$updateClientIP = $db_conn->prepare("
UPDATE logs
SET `CLIENT-IP` = ?
WHERE `REQUEST-URL` = ?
AND `CLIENT-IP` = 'Unbekannt'
");
$updateClientIP->bind_param("ss", $ClientIP, $RequestURL);
$updateClientIP->execute();
} else {
$query = $db_conn->prepare("
INSERT INTO logs (
`CLIENT-IP`,
`LAND`,
`SERVER-IP`,
`USER-AGENT`,
`REQUEST-URL`,
`USER-COOKIE-VALUE`,
`USER-SESSION-VALUE`,
`FIRST-REQUEST`,
`QUERY`
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
");
$query->bind_param(
"sssssssss",
$ClientIP,
$LAND,
$ServerIP,
$UserAgent,
$RequestURL,
$USERCOOKIE,
$SessionID,
$REQUESTTIME,
$QUERY
);
$query->execute();
}
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
include_once '../controller/LogController.php';
logging();
if (!isset($_GET['website'])) {
die("Fehlender Parameter: website");
}
$website = trim($_GET['website']);
$blocked_schemes = ['javascript:', 'data:', 'file:'];
foreach ($blocked_schemes as $scheme) {
if (stripos($website, $scheme) === 0) {
die("Ungültige URL.");
}
}
if (preg_match('/^https?:\/\//i', $website)) {
header("Location: " . $website);
exit;
}
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? "https://" : "http://";
$domain = $_SERVER['HTTP_HOST'];
$website = ltrim($website, "/");
$redirectUrl = $protocol . $domain . "/" . $website;
header("Location: " . $redirectUrl);
exit;
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

+30
View File
@@ -0,0 +1,30 @@
<?php
include_once 'controller/CookieController.php';
include_once 'controller/LogController.php';
include_once 'controller/DataController.php';
include_once 'controller/DatabaseConnect.php';
include_once 'moduls/ConsoleLog.php';
$data = new getSpecificData();
$cookie = new cookieController();
$clientIP = $data->getClientIP();
$whitelist = $data->getWhitelistedIPs();
if (in_array($clientIP, $whitelist)) {
$cookie->SetCookie("USER", "1", 60);
print_r($data->ShowAllData());
echo '<a href="/controller/RoutesController.php?website=/services/Dashboards/MainDashboard.php">Main Dashboard</a>';
} else {
$cookie->SetCookie("USER", "0", 60);
header("Location: /controller/RoutesController.php?website=/services/Dashboards/MainDashboard.php");
exit;
}
$allData = (new getSpecificData())->getAllData();
DebugLog($allData);
logging();
@@ -0,0 +1,66 @@
<?php
include_once '../controller/DatabaseController.php';
// --- Empfangene Werte ---
$datum = $_POST['datum'];
$p1 = $_POST['p1'];
$p2 = $_POST['p2'];
$p3 = $_POST['p3'];
$p4 = $_POST['p4'];
$beginn = $_POST['beginn']; // Format HH:MM
$endeReal = $_POST['ende_real']; // Format HH:MM
// --- Sollzeit berechnen: BEGINN + 8h 30min ---
$soll = new DateTime($beginn);
$soll->modify("+8 hours 30 minutes");
// --- ENDE_PUBLIC berechnen ---
$randomMin = rand(1, 9);
$endePublicDt = clone $soll;
$endePublicDt->modify("+{$randomMin} minutes");
$endePublic = $endePublicDt->format("H:i");
// --- OVERTIME berechnen: ENDE_REAL - Sollzeit ---
$real = DateTime::createFromFormat("H:i", $endeReal);
// Gesamtarbeitszeit tatsächliche (real - beginn)
$beginnDt = new DateTime($beginn);
$arbeitsDiff = $beginnDt->diff($real);
$arbeitsMinuten = ($arbeitsDiff->h * 60) + $arbeitsDiff->i;
// Sollzeit in Minuten
$sollMinuten = 8 * 60 + 30;
// Overtime bestimmen
if ($arbeitsMinuten <= $sollMinuten) {
$overtime = 0;
} else {
// Differenz: real - soll
$diff = $soll->diff($real);
$overtime = ($diff->h * 60) + $diff->i;
}
// --- Insert in DB ---
DatabaseInsert(
"Firmenberichte",
"DATUM, PROZESS_1, PROZESS_2, PROZESS_3, PROZESS_4, BEGINN, ENDE_REAL, ENDE_PUBLIC, OVERTIME",
$datum,
$p1,
$p2,
$p3,
$p4,
$beginn,
$endeReal,
$endePublic,
$overtime
);
if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
$redirectUrl = $_SERVER['HTTP_REFERER'];
} else {
$redirectUrl = 'index.php';
}
header("Location: $redirectUrl");
exit;
?>
+15
View File
@@ -0,0 +1,15 @@
<?php
function DebugLog(...$vars) {
echo "<script>";
foreach ($vars as $index => $value) {
$data = [
"Index" => $index,
"Value" => $value
];
echo "console.log(" . json_encode($data) . ");";
}
echo "</script>";
}
@@ -0,0 +1,54 @@
<?php
include_once '../controller/DatabaseConnect.php';
include_once '../controller/DataController.php';
$db_conn = db_connect();
$stmt = $db_conn->prepare("SELECT `CLIENT-IP`, `REQUEST-URL` FROM logs WHERE `LAND` = '' OR `LAND` IS NULL LIMIT 25");
$stmt->execute();
$result = $stmt->get_result();
$GeoIP = new getSpecificData();
while ($row = $result->fetch_assoc()) {
$ip = $row['CLIENT-IP'];
$url = $row['REQUEST-URL'];
$country = $GeoIP->getGeoIP($ip);
if (empty($country)) {
$country = 'Unbekannt';
}
$update = $db_conn->prepare("
UPDATE logs
SET `LAND` = ?
WHERE `CLIENT-IP` = ? AND `REQUEST-URL` = ?
LIMIT 50
");
$update->bind_param("sss", $country, $ip, $url);
$update->execute();
echo "<br>";
echo "<table style='border:1px solid black; border-collapse: collapse; width: 400px; text-align: center;'>";
echo "<tr>";
echo "<td style='border:1px solid black; width: 200px'>$ip</td>";
echo "<td style='border:1px solid black; width: 200px'>$country</td>";
echo "</tr>";
echo "</table>";
sleep(1);
}
// Redirect Ziel bestimmen
if (!empty($_SERVER['HTTP_REFERER'])) {
$redirectUrl = $_SERVER['HTTP_REFERER'];
} else {
$redirectUrl = 'index.php';
}
// Meldung anzeigen + automatische Weiterleitung
echo "<h3>Update abgeschlossen – weiterleitung erfolgt in 3 Sekunden...</h3>";
echo "<meta http-equiv='refresh' content='3;url=$redirectUrl'>";
?>
+4
View File
@@ -0,0 +1,4 @@
User-agent: *
Disallow: /admin/
Sitemap: https://blackpi.ipv64.net/sitemap.xml
+1
View File
@@ -0,0 +1 @@
Contact: bruno.eckhardt@gmx.de
+128
View File
@@ -0,0 +1,128 @@
<?php
include_once '../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Bericht hinzufügen</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f7f8;
margin: 0;
padding: 0;
}
.container {
max-width: 600px;
margin: 50px auto;
background: #fff;
padding: 30px;
border-radius: 12px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
}
h2 {
text-align: center;
color: #333;
margin-bottom: 30px;
}
form label {
display: block;
margin-bottom: 5px;
font-weight: bold;
color: #555;
}
form input {
width: 100%;
padding: 10px;
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 8px;
box-sizing: border-box;
transition: border-color 0.3s;
}
form input:focus {
border-color: #007BFF;
outline: none;
}
button {
width: 100%;
padding: 12px;
background-color: #007BFF;
color: #fff;
border: none;
border-radius: 8px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
}
button:hover {
background-color: #0056b3;
}
.form-group {
margin-bottom: 15px;
}
</style>
</head>
<body>
<div class="container">
<h2>Neuen Firmenbericht hinzufügen</h2>
<form action="../moduls/BerichteErstellenInsertModule.php" method="post">
<div class="form-group">
<label for="datum">Datum:</label>
<input type="date" id="datum" name="datum" required>
</div>
<div class="form-group">
<label for="p1">Prozess 1:</label>
<input type="text" id="p1" name="p1" required>
</div>
<div class="form-group">
<label for="p2">Prozess 2:</label>
<input type="text" id="p2" name="p2" required>
</div>
<div class="form-group">
<label for="p3">Prozess 3:</label>
<input type="text" id="p3" name="p3" required>
</div>
<div class="form-group">
<label for="p4">Prozess 4:</label>
<input type="text" id="p4" name="p4" required>
</div>
<div class="form-group">
<label for="beginn">Beginn:</label>
<input type="time" id="beginn" name="beginn" required>
</div>
<div class="form-group">
<label for="ende_real">Ende (real):</label>
<input type="time" id="ende_real" name="ende_real" required>
</div>
<button type="submit">Speichern</button>
</form>
</div>
</body>
</html>
+138
View File
@@ -0,0 +1,138 @@
<?php
include_once '../controller/LogController.php';
include_once '../controller/DatabaseConnect.php';
logging();
$conn = db_connect();
$corrections_file = __DIR__ . '/overtime_corrections.json';
// --- JSON-Korrektur laden ---
if (file_exists($corrections_file)) {
$corrections = json_decode(file_get_contents($corrections_file), true);
if (!is_array($corrections)) $corrections = [];
} else {
$corrections = ['plus' => 0, 'minus' => 0];
}
// --- Generelle Korrektur speichern ---
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$man_plus = intval($_POST['man_plus'] ?? 0);
$man_minus = intval($_POST['man_minus'] ?? 0);
$corrections = [
'plus' => $man_plus,
'minus' => $man_minus,
'total' => $man_plus - $man_minus
];
file_put_contents($corrections_file, json_encode($corrections, JSON_PRETTY_PRINT));
}
// --- Alle Firmenberichte aus DB laden ---
$daten = [];
$sql = "SELECT `DATUM`, `PROZESS_1`, `PROZESS_2`, `PROZESS_3`, `PROZESS_4`, `BEGINN`, `ENDE_REAL`, `ENDE_PUBLIC`, `OVERTIME` FROM Firmenberichte ORDER BY `DATUM` DESC";
if ($erg = $conn->query($sql)) {
while ($datensatz = $erg->fetch_object()) {
$daten[] = $datensatz;
}
$erg->free();
}
// --- Overtime-Summe berechnen ---
$gesamt_minuten = 0;
$time = "SELECT SUM(OVERTIME) AS db_minuten FROM Firmenberichte";
if ($erg = $conn->query($time)) {
$datensatz = $erg->fetch_object();
$gesamt_minuten = intval($datensatz->db_minuten);
}
// Generelle Korrektur hinzufügen
$gesamt_minuten += intval($corrections['total'] ?? 0);
// Stunden/Minuten
$stunden = intdiv($gesamt_minuten, 60);
$minuten = $gesamt_minuten % 60;
// Overtime-Objekt für Tabelle
$overtime = [
(object)[
'db_minuten' => intval($datensatz->db_minuten),
'plus' => $corrections['plus'] ?? 0,
'minus' => $corrections['minus'] ?? 0,
'gesamt_korrigiert'=> $gesamt_minuten,
'stunden' => $stunden,
'minuten' => $minuten
]
];
?>
<h1>Firmenberichte</h1>
<!-- Formular für generelle Korrektur -->
<form method="POST">
<h3>Generelle Stundenkorrektur für alle Berichte</h3>
<label>Plus-Minuten: </label>
<input type="number" name="man_plus" value=""><br>
<label>Minus-Minuten: </label>
<input type="number" name="man_minus" value=""><br><br>
<button type="submit">Speichern</button>
</form>
<hr>
<!-- Overtime Gesamtanzeige -->
<h2>Gesamte Overtime inkl. Korrektur</h2>
<div style="max-width:100%; overflow-x:auto;">
<table border="1" cellpadding="5" cellspacing="0"
style="border-collapse:collapse; width:100%; font-family:Arial; font-size:14px;">
<tr style="background:#f0f0f0; font-weight:bold;">
<th>DB-Minuten</th>
<th>Plus-Minuten</th>
<th>Minus-Minuten</th>
<th>Gesamt korrigiert</th>
<th>Stunden</th>
<th>Minuten</th>
</tr>
<?php foreach($overtime as $row): ?>
<tr>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->db_minuten ?? '') ?></td>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->plus ?? '') ?></td>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->minus ?? '') ?></td>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->gesamt_korrigiert ?? '') ?></td>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->stunden ?? '') ?></td>
<td style="padding:6px; word-break:break-word; white-space:normal;">
<?= htmlspecialchars($row->minuten ?? '') ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
<br>
<h2>Berichte im Detail</h2>
<div style="max-width:100%; overflow-x:auto;">
<table border="1" cellpadding="5" cellspacing="0"
style="border-collapse:collapse; width:100%; font-family:Arial; font-size:14px;">
<tr style="background:#f0f0f0; font-weight:bold;">
<?php
if (!empty($daten)) {
foreach ($daten[0] as $k => $v) {
echo "<th style='text-align:left; padding:6px; word-break:break-word; white-space:normal;'>".htmlspecialchars($k ?? '')."</th>";
}
}
?>
</tr>
<?php foreach ($daten as $bericht): ?>
<tr>
<?php foreach ($bericht as $v): ?>
<td style="padding:6px; word-break:break-word; white-space:normal; max-width:300px;">
<?= htmlspecialchars($v ?? '') ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
</div>
@@ -0,0 +1,102 @@
<?php
include_once '../../templates/AdminDashboardButtons.php';
include_once '../../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Dashboard</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f9;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 90%;
max-width: 1200px;
margin: 0 auto;
}
.section {
background: #ffffff;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.section h2 {
text-align: center;
margin-bottom: 20px;
}
.button-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
a.button {
padding: 15px 25px;
font-size: 18px;
border-radius: 8px;
color: white;
text-decoration: none;
display: inline-block;
transition: transform 0.2s, box-shadow 0.2s;
}
a.button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
}
@media (max-width: 900px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<?php foreach ($buttons as $section): ?>
<div class="section">
<h2><?php echo htmlspecialchars($section['section']); ?></h2>
<div class="button-container">
<?php foreach ($section['buttons'] as $button): ?>
<a class="button" href="<?php echo htmlspecialchars($button['link']); ?>" target="_blank"
style="background-color: <?php echo htmlspecialchars($button['color']); ?>;">
<?php echo htmlspecialchars($button['name']); ?>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</body>
</html>
@@ -0,0 +1,102 @@
<?php
include_once '../../templates/DevicesDashboardButtons.php';
include_once '../../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Device Dashboard</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f9;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 90%;
max-width: 1200px;
margin: 0 auto;
}
.section {
background: #ffffff;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.section h2 {
text-align: center;
margin-bottom: 20px;
}
.button-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
a.button {
padding: 15px 25px;
font-size: 18px;
border-radius: 8px;
color: white;
text-decoration: none;
display: inline-block;
transition: transform 0.2s, box-shadow 0.2s;
}
a.button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
}
@media (max-width: 900px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<?php foreach ($buttons as $section): ?>
<div class="section">
<h2><?php echo htmlspecialchars($section['section']); ?></h2>
<div class="button-container">
<?php foreach ($section['buttons'] as $button): ?>
<a class="button" href="<?php echo htmlspecialchars($button['link']); ?>" target="_blank"
style="background-color: <?php echo htmlspecialchars($button['color']); ?>;">
<?php echo htmlspecialchars($button['name']); ?>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</body>
</html>
@@ -0,0 +1,102 @@
<?php
include_once '../../templates/MainDashboardButtons.php';
include_once '../../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main Dashboard</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f9;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 90%;
max-width: 1200px;
margin: 0 auto;
}
.section {
background: #ffffff;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.section h2 {
text-align: center;
margin-bottom: 20px;
}
.button-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
a.button {
padding: 15px 25px;
font-size: 18px;
border-radius: 8px;
color: white;
text-decoration: none;
display: inline-block;
transition: transform 0.2s, box-shadow 0.2s;
}
a.button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
}
@media (max-width: 900px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<?php foreach ($buttons as $section): ?>
<div class="section">
<h2><?php echo htmlspecialchars($section['section']); ?></h2>
<div class="button-container">
<?php foreach ($section['buttons'] as $button): ?>
<a class="button" href="<?php echo htmlspecialchars($button['link']); ?>"
style="background-color: <?php echo htmlspecialchars($button['color']); ?>;">
<?php echo htmlspecialchars($button['name']); ?>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</body>
</html>
@@ -0,0 +1,102 @@
<?php
include_once '../../templates/ServicesDashboardButtons.php';
include_once '../../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Services Dashboard</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f9;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 90%;
max-width: 1200px;
margin: 0 auto;
}
.section {
background: #ffffff;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.section h2 {
text-align: center;
margin-bottom: 20px;
}
.button-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
a.button {
padding: 15px 25px;
font-size: 18px;
border-radius: 8px;
color: white;
text-decoration: none;
display: inline-block;
transition: transform 0.2s, box-shadow 0.2s;
}
a.button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
}
@media (max-width: 900px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<?php foreach ($buttons as $section): ?>
<div class="section">
<h2><?php echo htmlspecialchars($section['section']); ?></h2>
<div class="button-container">
<?php foreach ($section['buttons'] as $button): ?>
<a class="button" href="<?php echo htmlspecialchars($button['link']); ?>" target="_blank"
style="background-color: <?php echo htmlspecialchars($button['color']); ?>;">
<?php echo htmlspecialchars($button['name']); ?>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</body>
</html>
@@ -0,0 +1,102 @@
<?php
include_once '../../templates/ThirdpartyDashboardButtons.php';
include_once '../../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Thirdparty Dashboard</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f9;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 90%;
max-width: 1200px;
margin: 0 auto;
}
.section {
background: #ffffff;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.section h2 {
text-align: center;
margin-bottom: 20px;
}
.button-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
a.button {
padding: 15px 25px;
font-size: 18px;
border-radius: 8px;
color: white;
text-decoration: none;
display: inline-block;
transition: transform 0.2s, box-shadow 0.2s;
}
a.button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
}
@media (max-width: 900px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<?php foreach ($buttons as $section): ?>
<div class="section">
<h2><?php echo htmlspecialchars($section['section']); ?></h2>
<div class="button-container">
<?php foreach ($section['buttons'] as $button): ?>
<a class="button" href="<?php echo htmlspecialchars($button['link']); ?>" target="_blank"
style="background-color: <?php echo htmlspecialchars($button['color']); ?>;">
<?php echo htmlspecialchars($button['name']); ?>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</body>
</html>
+253
View File
@@ -0,0 +1,253 @@
<?php
include_once '../controller/LogController.php';
include_once '../controller/DatabaseConnect.php';
logging();
$conn = db_connect();
// $devips = [
// '178.19.224.210',
// '80.153.174.251',
// 'Unbekannt',
// ];
$devips = $Whitelisted = (new getSpecificData())->getWhitelistedIPs();
$devips_sql = "'" . implode("','", $devips) . "'";
echo "<h1>Datenbank auslesen um " . date("H:i:s") . "</h1>";
echo "<h2>Excluded:</h2>";
echo '<pre>';
print_r($devips_sql);
echo '</pre>';
echo '<br>';
/* ----------------------------------------------------------
FILTER aus Dropdown
---------------------------------------------------------- */
$filter = $_GET['filter'] ?? 'alle';
/* ----------------------------------------------------------
Eigene Query aus Form
---------------------------------------------------------- */
$customQuery = $_POST['custom_query'] ?? '';
$useCustom = false;
if ($customQuery) {
$forbidden = ['DELETE', 'UPDATE', 'INSERT', 'DROP', 'ALTER', 'TRUNCATE'];
$upper = strtoupper($customQuery);
foreach ($forbidden as $bad) {
if (strpos($upper, $bad) !== false) {
die("<b style='color:red'>Gefährliche Query blockiert! ($bad gefunden)</b>");
}
}
if (stripos($customQuery, "SELECT") !== 0) {
die("<b style='color:red'>Nur SELECT-Befehle sind erlaubt!</b>");
}
$sql = $customQuery;
$useCustom = true;
}
if (!$useCustom) {
switch ($filter) {
case 'today':
$sql = "
SELECT * FROM `logs`
WHERE `CLIENT-IP` NOT IN ($devips_sql)
AND DATE(`FIRST-REQUEST`) = CURDATE()
ORDER BY `FIRST-REQUEST` DESC
";
break;
case 'last10':
$sql = "
SELECT * FROM `logs`
WHERE `CLIENT-IP` NOT IN ($devips_sql)
ORDER BY `FIRST-REQUEST` DESC
LIMIT 10
";
break;
case 'last50':
$sql = "
SELECT * FROM `logs`
WHERE `CLIENT-IP` NOT IN ($devips_sql)
ORDER BY `FIRST-REQUEST` DESC
LIMIT 50
";
break;
case 'last100':
$sql = "
SELECT * FROM `logs`
WHERE `CLIENT-IP` NOT IN ($devips_sql)
ORDER BY `FIRST-REQUEST` DESC
LIMIT 100
";
break;
case 'lands':
$sql = "
SELECT LAND, COUNT(*) AS Anzahl
FROM logs
WHERE `CLIENT-IP` NOT IN ($devips_sql)
GROUP BY LAND
ORDER BY Anzahl DESC
";
break;
case 'counterperreq':
$sql = "
SELECT `CLIENT-IP`, `LAND`, `USER-AGENT`, `REQUEST-URL`, `FIRST-REQUEST` ,`LAST-REQUEST`, `COUNTER`
FROM logs
WHERE `CLIENT-IP` NOT IN ($devips_sql)
AND `COUNTER` > '1'
ORDER BY `COUNTER` DESC
";
break;
case 'counterperip':
$sql = "
SELECT `CLIENT-IP`, `LAND`, `USER-AGENT`, SUM(counter) AS gesamt_counter
FROM logs
WHERE `CLIENT-IP` NOT IN ($devips_sql)
GROUP BY `CLIENT-IP`
ORDER BY gesamt_counter DESC;
";
break;
case 'alle':
default:
$sql = "
SELECT * FROM `logs`
WHERE `CLIENT-IP` NOT IN ($devips_sql)
ORDER BY `FIRST-REQUEST` DESC
";
}
}
/* ----------------------------------------------------------
Dropdown anzeigen
---------------------------------------------------------- */
?>
<form method="GET">
<label><b>Log-Filter auswählen:</b></label>
<select name="filter" onchange="this.form.submit()">
<option value="alle" <?= $filter == 'alle' ? 'selected' : '' ?>>Alle Logs</option>
<option value="today" <?= $filter == 'today' ? 'selected' : '' ?>>Heute</option>
<option value="last10" <?= $filter == 'last10' ? 'selected' : '' ?>>Letzte 10</option>
<option value="last50" <?= $filter == 'last50' ? 'selected' : '' ?>>Letzte 50</option>
<option value="last100" <?= $filter == 'last100' ? 'selected' : '' ?>>Letzte 100</option>
<option value="lands" <?= $filter == 'lands' ? 'selected' : '' ?>>Länder per Counter</option>
<option value="counterperreq" <?= $filter == 'counterperreq' ? 'selected' : '' ?>>Counter per Req and IP
</option>
<option value="counterperip" <?= $filter == 'counterperip' ? 'selected' : '' ?>>Counter per IP</option>
</select>
</form>
<br><br>
<form method="POST">
<label><b>Eigene SELECT-Query ausführen:</b></label><br>
<textarea name="custom_query" style="width:1200px;height:60px;"><?= htmlspecialchars($customQuery) ?></textarea><br>
<button type="submit">Query ausführen</button>
</form>
<script>
document.addEventListener("DOMContentLoaded", () => {
const ta = document.querySelector("textarea[name='custom_query']");
const keywords = [
"select", "from", "where", "group", "by",
"is", "binary", "regexp", "any", "order",
"update", "delete", "create", "drop", "limit",
"null", "and", "or", "exists", "case",
"alter", "distinct", "having", "as", "on",
"not", "in", "union", "all", "like",
"some", "as", "by", "asc", "desc",
"outer", "inner", "left", "right", "join",
];
const regex = new RegExp("\\b(" + keywords.join("|") + ")\\b", "gi");
ta.addEventListener("input", () => {
let pos = ta.selectionStart; // Cursorposition merken
ta.value = ta.value.replace(regex, m => m.toUpperCase());
// Cursor zurücksetzen
ta.selectionStart = ta.selectionEnd = pos;
});
});
</script>
<br>
<hr>
<br>
<?php
$daten = [];
if ($erg = $conn->query($sql)) {
// Query schön anzeigen
echo "<b>Query:</b><br>";
echo "<div style='background:#f4f4f4; padding:10px; border-left:5px solid #007BFF; font-family:monospace; white-space:pre-wrap; word-wrap:break-word; max-width:1200px; overflow:auto;'>$sql</div><br>";
if ($erg->num_rows) {
echo "<b>Gefundene Einträge: " . $erg->num_rows . "</b><br><br>";
} else {
echo "<b>Keine Datensätze gefunden.</b><br><br>";
}
while ($datensatz = $erg->fetch_object()) {
$daten[] = $datensatz;
}
$erg->free();
}
// echo "<h2>Ergebnis:</h2>";
// echo '<pre>';
// print_r($daten);
// echo '</pre>';
echo "<h2>Ergebnis:</h2>";
if (empty($daten)) {
echo "<b>Keine Daten vorhanden.</b>";
} else {
// Responsives Wrapper-DIV
echo '<div style="max-width: 100%; overflow-x: auto;">';
// Tabelle
echo '<table border="1" cellpadding="5" cellspacing="0"
style="border-collapse:collapse; width:100%; font-family:Arial; font-size:14px;">';
// Tabellenkopf
echo "<tr style='background:#f0f0f0; font-weight:bold;'>";
foreach ($daten[0] as $spaltenname => $wert) {
echo "<th style='text-align:left; padding:6px; word-break:break-word; white-space:normal;'>" . htmlspecialchars($spaltenname ?? '') . "</th>";
}
echo "</tr>";
// Datenzeilen
foreach ($daten as $row) {
echo "<tr>";
foreach ($row as $value) {
echo "<td style='padding:6px; word-break:break-word; white-space:normal; max-width:300px;'>" . htmlspecialchars($value ?? '') . "</td>";
}
echo "</tr>";
}
echo "</table>";
echo "</div>"; // END responsive wrapper
}
exit;
?>
+12
View File
@@ -0,0 +1,12 @@
<?php
include_once '../controller/LogController.php';
logging();
$sitemapUrl = "http://blackpi.ipv64.net/sitemap.xml";
$xml = simplexml_load_file($sitemapUrl);
foreach ($xml->url as $urlEntry) {
$loc = (string) $urlEntry->loc;
echo '<div><a href="'.$loc.'" target="_blank">'.$loc.'</a></div>';
}
@@ -0,0 +1,5 @@
{
"plus": 0,
"minus": 480,
"total": -480
}
+117
View File
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://blackpi.ipv64.net/favicon.ico</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/index.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/moduls/BerichteErstellenInsertModule.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/moduls/ConsoleLog.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/moduls/DatabaseLandUpdateModule.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/robots.txt</loc>
<lastmod>2025-12-11</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/security.txt</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/BerichteErstellen.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/BerichteShow.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/Dashboards/AdminDashboard.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/Dashboards/DevicesDashboard.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/Dashboards/MainDashboard.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/Dashboards/ServicesDashboard.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/Dashboards/ThirdpartyDashboard.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/DatabaseLogShow.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/overtime_corrections.json</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/services/SitemapXMLShow.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/sitemap.xml</loc>
<lastmod>2025-12-11</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://blackpi.ipv64.net/static/access_denied.php</loc>
<lastmod>2025-12-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>
+66
View File
@@ -0,0 +1,66 @@
<?php
include_once '../controller/LogController.php';
logging();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Zugang verweigert</title>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
<style>
body {
background-color: #f8f9fa;
color: #333;
font-family: 'Roboto', sans-serif;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
.container {
background-color: #fff;
padding: 2.5rem 3rem;
border-radius: 15px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
text-align: center;
}
h1 {
color: #c0392b;
margin-bottom: 1rem;
}
p {
font-size: 1.1rem;
margin-bottom: 1.5rem;
}
.btn {
display: inline-block;
padding: 0.75rem 1.5rem;
background-color: #c0392b;
color: #fff;
text-decoration: none;
border-radius: 8px;
font-weight: bold;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #a93226;
}
</style>
</head>
<body>
<div class="container">
<h1>🚫 Zugriff verweigert</h1>
</div>
</body>
</html>
@@ -0,0 +1,30 @@
<?php
$buttoncoloractive = "#287decff";
$buttoncolorinactive = "#75666691";
$buttoncoloradmin = "#fd6a09ec";
$routing = "../../controller/RoutesController.php?website";
$buttons = [
["section" => "Datenbank Updaten", "buttons" => [
["name" => "Geo IPs Update", "link" => "$routing=/moduls/DatabaseLandUpdateModule.php", "color" => $buttoncoloractive],
]],
["section" => "Data Lookup", "buttons" => [
["name" => "Access Logs", "link" => "$routing=/services/DatabaseLogShow.php", "color" => $buttoncoloractive],
["name" => "Sitemap.xml", "link" => "$routing=/sitemap.xml", "color" => $buttoncoloractive],
["name" => "Sitemap", "link" => "$routing=/services/SitemapXMLShow.php", "color" => $buttoncoloractive],
["name" => "Robots.txt", "link" => "$routing=/robots.txt", "color" => $buttoncoloractive],
["name" => "Berichte", "link" => "$routing=/services/BerichteShow.php", "color" => $buttoncoloractive],
]],
["section" => "Dev", "buttons" => [
["name" => "Gitea / Code", "link" => "$routing=http://gitea.blackpi.ipv64.net/", "color" => $buttoncoloractive], // Username: bruno | Passwort: bBHofurUJWKzPE8Z
["name" => "HAProxy", "link" => "$routing=http://stats.blackpi.ipv64.net/", "color" => $buttoncoloractive],
]],
["section" => "Management", "buttons" => [
["name" => "Webshell", "link" => "$routing=/services/Webshell/", "color" => $buttoncolorinactive],
["name" => "Manuelles Mailing", "link" => "$routing=/services/ManualMailer/", "color" => $buttoncolorinactive],
]],
];
@@ -0,0 +1,57 @@
<?php
$buttoncoloractive = "#287decff";
$buttoncolorinactive = "#75666691";
$buttoncoloradmin = "#fd6a09ec";
$routing = "../../controller/RoutesController.php?website";
$buttons = [
["section" => "3D Drucker", "buttons" => [
["name" => "Ender 3 V3 KE", "link" => "$routing=http://10.233.1.52/", "color" => $buttoncoloractive],
]],
["section" => "NAS1", "buttons" => [
["name" => "NAS1-Manager", "link" => "$routing=http://nas-1.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "NAS1-Webserver", "link" => "$routing=http://10.233.1.21/", "color" => $buttoncoloractive],
]],
["section" => "NAS2", "buttons" => [
["name" => "NAS2-Manager", "link" => "$routing=http://nas-2.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "NAS2-Webserver", "link" => "$routing=http://10.233.1.22/", "color" => $buttoncoloractive],
]],
["section" => "Ubuntu-Server NAS", "buttons" => [
["name" => "Apache", "link" => "$routing=http://100.104.7.93", "color" => $buttoncoloractive],
["name" => "NAS-Manager", "link" => "$routing=http://100.104.7.93:9000", "color" => $buttoncoloractive],
]],
["section" => "Router", "buttons" => [
["name" => "FritzBox 7490", "link" => "$routing=http://fritzbox-1.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "FritzBox 7590", "link" => "$routing=http://fritzbox-2.blackpi.ipv64.net", "color" => $buttoncoloractive],
]],
["section" => "Netzwerk", "buttons" => [
["name" => "Zyxel GS1910-24", "link" => "$routing=http://switch.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "NWA5121-NI Innen", "link" => "$routing=http://ap-1.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "NWA5121-NI Außen", "link" => "$routing=http://ap-2.blackpi.ipv64.net", "color" => $buttoncoloractive],
["name" => "ZyWALL 20", "link" => "$routing=http://10.233.1.20", "color" => $buttoncoloractive],
["name" => "ZyWALL 110 WAN 1", "link" => "$routing=http://10.233.1.248", "color" => $buttoncoloractive],
["name" => "ZyWALL 110 WAN 2", "link" => "$routing=http://10.233.1.249", "color" => $buttoncoloractive],
]],
["section" => "Proxmox-LXC", "buttons" => [
["name" => "Chatserver", "link" => "$routing=http://100.97.206.98/chat/", "color" => $buttoncoloractive],
["name" => "Nextcloud", "link" => "$routing=http://100.122.126.69", "color" => $buttoncoloractive],
["name" => "Heimdall", "link" => "$routing=http://proxmox-tower-ubuntu-server2", "color" => $buttoncoloractive],
]],
["section" => "Proxmox-VM", "buttons" => [
["name" => "US 1 Webmin", "link" => "http://100.75.98.83:10000", "color" => $buttoncoloractive],
["name" => "US 2 Webmin", "link" => "http://100.120.248.66:10000", "color" => $buttoncoloractive],
["name" => "US 3 Webmin", "link" => "http://100.121.22.107:10000", "color" => $buttoncoloractive],
["name" => "US 4 Webmin", "link" => "http://100.97.206.98:10000", "color" => $buttoncoloractive],
["name" => "US 5 Webmin", "link" => "http://100.122.126.69:10000", "color" => $buttoncoloractive],
]],
];
@@ -0,0 +1,25 @@
<?php
$buttoncoloractive = "#287decff";
$buttoncolorinactive = "#75666691";
$buttoncoloradmin = "#fd6a09ec";
$routing = "../../controller/RoutesController.php?website";
$buttons = [
["section" => "Devices", "buttons" => [
["name" => "Devices Dashboard", "link" => "$routing=/services/Dashboards/DevicesDashboard.php", "color" => $buttoncoloractive],
]],
["section" => "Services", "buttons" => [
["name" => "Services Dashboard", "link" => "$routing=/services/Dashboards/ServicesDashboard.php", "color" => $buttoncoloractive],
]],
["section" => "Thirdparty", "buttons" => [
["name" => "Thirdparty Dashboard", "link" => "$routing=/services/Dashboards/ThirdpartyDashboard.php", "color" => $buttoncoloractive],
]],
["section" => "Admin", "buttons" => [
["name" => "Admin Dashboard", "link" => "$routing=/services/Dashboards/AdminDashboard.php", "color" => $buttoncoloractive],
]],
];
@@ -0,0 +1,22 @@
<?php
$buttoncoloractive = "#287decff";
$buttoncolorinactive = "#75666691";
$buttoncoloradmin = "#fd6a09ec";
$routing = "../../controller/RoutesController.php?website";
$buttons = [
["section" => "Ausbildung", "buttons" => [
["name" => "Vertretungsplan", "link" => "$routing=https://sbsz-hsp.de/sdb/getPlan", "color" => $buttoncoloractive],
["name" => "Stundenplan", "link" => "$routing=/services/Stundenplan.php", "color" => $buttoncolorinactive],
["name" => "Berichte Erstellen", "link" => "$routing=/services/BerichteErstellen.php", "color" => $buttoncoloractive],
]],
["section" => "Webserver", "buttons" => [
["name" => "Etherwake", "link" => "../../GLOBAL/routes.php/?website=/Etherwake/", "color" => $buttoncolorinactive],
["name" => "FileServer", "link" => "../../GLOBAL/routes.php/?website=/Fileserver/", "color" => $buttoncolorinactive],
["name" => "PasswortManager", "link" => "../../GLOBAL/routes.php/?website=/PasswortManager/", "color" => $buttoncolorinactive],
["name" => "Blackpi-Webcam", "link" => "../../GLOBAL/routes.php/?website=/Webcam/", "color" => $buttoncolorinactive],
]],
];
@@ -0,0 +1,22 @@
<?php
$buttoncoloractive = "#287decff";
$buttoncolorinactive = "#75666691";
$buttoncoloradmin = "#fd6a09ec";
$routing = "../../controller/RoutesController.php?website";
$buttons = [
["section" => "3D-Druck", "buttons" => [
["name" => "Cults 3D", "link" => "$routing=https://cults3d.com/de", "color" => $buttoncoloractive],
["name" => "Thingiverse", "link" => "$routing=https://www.thingiverse.com", "color" => $buttoncoloractive],
["name" => "Printables", "link" => "$routing=https://www.printables.com", "color" => $buttoncoloractive],
["name" => "Creality", "link" => "$routing=https://www.crealitycloud.com", "color" => $buttoncoloractive],
["name" => "Yeggi 3D Search", "link" => "$routing=https://www.yeggi.com", "color" => $buttoncoloractive],
]],
["section" => "Streaming", "buttons" => [
["name" => "Anyworld-Serien", "link" => "$routing=http://186.2.175.5/serien", "color" => $buttoncoloractive],
["name" => "Streamkiste", "link" => "$routing=https://www.streamkiste.al", "color" => $buttoncoloractive],
["name" => "Megakino", "link" => "$routing=https://megakino.me", "color" => $buttoncoloractive],
]],
];