#!/bin/bash

set -e

WEBROOT="/var/www/html/server"

echo "[+] LEVEL 3 – SECURITY HARDENING (DETERMINISTISCH)"

echo "[+] Datenbank in definierten Zustand bringen"

mysql -u root <<EOF
USE serververwaltung;

-- Schema erzwingen
ALTER TABLE benutzer DROP COLUMN IF EXISTS rolle;
ALTER TABLE benutzer ADD COLUMN rolle VARCHAR(20);

ALTER TABLE benutzer MODIFY passwort VARCHAR(255);

-- Rollen setzen
UPDATE benutzer SET rolle='admin' WHERE benutzername='admin';
UPDATE benutzer SET rolle='user' WHERE benutzername='user';
EOF

echo "[+] Passwort-Hashes setzen"

ADMIN_HASH=$(php -r "echo password_hash('admin', PASSWORD_DEFAULT);")
USER_HASH=$(php -r "echo password_hash('user', PASSWORD_DEFAULT);")

mysql -u root <<EOF
USE serververwaltung;

UPDATE benutzer SET passwort='$ADMIN_HASH' WHERE benutzername='admin';
UPDATE benutzer SET passwort='$USER_HASH' WHERE benutzername='user';
EOF

echo "[+] login.php ersetzen"

cat <<'EOF' > "$WEBROOT/login.php"
<?php
include 'db.php';
session_start();

$benutzername = $_POST['benutzername'];
$passwort = $_POST['passwort'];

$stmt = $conn->prepare("SELECT * FROM benutzer WHERE benutzername=?");
$stmt->bind_param("s", $benutzername);
$stmt->execute();

$result = $stmt->get_result();

if ($row = $result->fetch_assoc()) {
    if (password_verify($passwort, $row['passwort'])) {
        $_SESSION['user'] = $benutzername;
        $_SESSION['rolle'] = $row['rolle'];
        header("Location: index.php");
        exit;
    }
}

echo "Login fehlgeschlagen";
?>
EOF

echo "[+] add.php ersetzen"

cat <<'EOF' > "$WEBROOT/add.php"
<?php
include 'db.php';
session_start();

if (!isset($_SESSION['user'])) {
    die("Nicht eingeloggt");
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $rechnername = $_POST["rechnername"];
    $ip_adresse = $_POST["ip_adresse"];
    $betriebssystem = $_POST["betriebssystem"];
    $festplattenspeicher = $_POST["festplattenspeicher"];
    $ram = $_POST["ram"];
    $hauptdienst = $_POST["hauptdienst"];

    $stmt = $conn->prepare("INSERT INTO server (rechnername, ip_adresse, betriebssystem, festplattenspeicher, ram, hauptdienst)
    VALUES (?, ?, ?, ?, ?, ?)");

    $stmt->bind_param("sssiss",
        $rechnername,
        $ip_adresse,
        $betriebssystem,
        $festplattenspeicher,
        $ram,
        $hauptdienst
    );

    if ($stmt->execute()) {
        header("Location: index.php");
        exit;
    } else {
        echo "Fehler";
    }
}
?>
EOF

echo "[+] delete.php ersetzen"

cat <<'EOF' > "$WEBROOT/delete.php"
<?php
include 'db.php';
session_start();

if (!isset($_SESSION['user'])) {
    die("Nicht eingeloggt");
}

if ($_SESSION['rolle'] !== 'admin') {
    die("Keine Berechtigung");
}

$id = $_GET['id'];

$stmt = $conn->prepare("DELETE FROM server WHERE id = ?");
$stmt->bind_param("i", $id);

if ($stmt->execute()) {
    header("Location: index.php");
    exit;
} else {
    echo "Fehler";
}
?>
EOF

echo "[+] index.php XSS absichern"

sed -i 's/\$row\["rechnername"\]/htmlspecialchars($row["rechnername"])/g' "$WEBROOT/index.php"
sed -i 's/\$row\["ip_adresse"\]/htmlspecialchars($row["ip_adresse"])/g' "$WEBROOT/index.php"
sed -i 's/\$row\["betriebssystem"\]/htmlspecialchars($row["betriebssystem"])/g' "$WEBROOT/index.php"
sed -i 's/\$row\["hauptdienst"\]/htmlspecialchars($row["hauptdienst"])/g' "$WEBROOT/index.php"

echo "[+] Apache neu starten"
systemctl restart apache2

IP=$(hostname -I | awk '{print $1}')

echo "[+] FERTIG"
echo "http://$IP/server"
