Material_Verwaltungs_Tool/backup_restore.php

549 lines
18 KiB
PHP
Raw Permalink Normal View History

2024-02-28 19:02:27 +00:00
<?php
session_start(); // Sitzung starten, um die Authentifizierung zu verwalten
// Überprüfen, ob das Passwort gesendet wurde und korrekt ist
if (isset($_POST['password']) && $_POST['password'] === 'demo') {
$_SESSION['authenticated'] = true; // Authentifizierung erfolgreich, Sitzungsvariable setzen
}
// Überprüfen, ob der Benutzer bereits authentifiziert ist, sonst das Passwort-Eingabeformular anzeigen
if (!isset($_SESSION['authenticated']) || !$_SESSION['authenticated']) {
echo '
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Passwortschutz</title>
<style>
/* Globales CSS */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
margin-top: 100px;
}
h1 {
text-align: center;
color: #333;
}
form {
text-align: center;
margin-top: 20px;
}
input[type="password"] {
padding: 10px;
width: 100%;
margin-top: 10px;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 5px;
}
input[type="submit"] {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
margin-top: 10px;
}
input[type="submit"]:hover {
background-color: #45a049;
}
/* Popup-Overlay */
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
#password-popup {
background-color: #333;
padding: 20px;
border-radius: 5px;
color: #fff;
}
/* Ende des CSS */
</style>
</head>
<body>
<div class="container">
<h1>Passwortschutz</h1>
<!-- Popup-Overlay und Passwort-Formular -->
<div id="overlay">
<div id="password-popup">
<form action="" method="post">
<label for="password">Passwort:</label><br>
<input type="password" id="password" name="password"><br>
<input type="submit" value="Einloggen">
</form>
</div>
</div>
<!-- JavaScript für das Schließen des Popups bei Klick außerhalb des Formulars -->
<script>
document.addEventListener("DOMContentLoaded", function() {
var overlay = document.getElementById("overlay");
overlay.addEventListener("click", function(event) {
if (event.target === overlay) {
overlay.style.display = "none";
}
});
});
</script>
</div>
</body>
</html>';
exit; // Die Ausführung hier stoppen, damit der Rest der Seite nicht angezeigt wird, bis das Passwort korrekt eingegeben wurde
}
// Datenbankverbindung herstellen
include_once 'config/config.php';
include_once 'log.php'; // Logdatei einbinden
// Backup durchführen und direkt verschlüsseln
if (isset($_POST['backup'])) {
$timestamp = date('Y-m-d_H-i-s'); // Eindeutiger Zeitstempel für die Dateinamen
$backup_file = "backup/backup_$timestamp.sql"; // Backup-Datei im "backup/"-Ordner speichern
$command = "mysqldump -u $username -p$password $database > $backup_file";
exec($command);
// Backup erfolgreich erstellt
if (file_exists($backup_file)) {
// Backup-Datei verschlüsseln
$encryption_key = "2Tj&wuWCUeMrSD%tWS%2fv&vDQdFTeUQ"; // Geheimen Schlüssel für die Verschlüsselung
$input_file = $backup_file; // Backup-Datei, die verschlüsselt werden soll
$output_file = "backup/encrypted_backup_$timestamp.txt"; // Verschlüsselte Ausgabedatei
// Verschlüsselungsalgorithmus und Modus (z.B. AES-256-CBC)
$encryption_algorithm = 'aes-256-cbc';
// Initialisierungsvektor für die Verschlüsselung (zufällig generieren oder festlegen)
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($encryption_algorithm));
// Verschlüsselung durchführen
if ($encrypted_data = openssl_encrypt(file_get_contents($input_file), $encryption_algorithm, $encryption_key, 0, $iv)) {
// Initialisierungsvektor (IV) der verschlüsselten Datei hinzufügen
$encrypted_data_with_iv = $iv . $encrypted_data;
// Verschlüsselte Daten in Ausgabedatei schreiben
file_put_contents($output_file, $encrypted_data_with_iv);
// Erfolgreiche Meldung mit Download-Link anzeigen
$download_button = "<a href='$output_file' download class='download-button'>Download Backup</a>";
echo "<script>alert('Backup erfolgreich erstellt und verschlüsselt: Download Backup');</script>";
// Ereignis protokollieren
logEvent('Backup erstellt und verschlüsselt', 'Backup', "Backup-Datei: $backup_file");
} else {
echo "Fehler beim Erstellen und Verschlüsseln des Backups.";
}
} else {
echo "Fehler beim Erstellen des Backups.";
}
}
// Wiederherstellung durchführen
if (isset($_POST['restore'])) {
if (isset($_FILES['restore_file'])) {
$restore_file = $_FILES['restore_file']['tmp_name'];
// Backup-Datei entschlüsseln, bevor die Wiederherstellung durchgeführt wird
$encryption_key = "2Tj&wuWCUeMrSD%tWS%2fv&vDQdFTeUQ"; // Geheimer Schlüssel für die Verschlüsselung
$encryption_algorithm = 'aes-256-cbc';
$iv_size = openssl_cipher_iv_length($encryption_algorithm);
$encrypted_data_with_iv = file_get_contents($restore_file);
$iv = substr($encrypted_data_with_iv, 0, $iv_size);
$encrypted_data = substr($encrypted_data_with_iv, $iv_size);
$restored_data = openssl_decrypt($encrypted_data, $encryption_algorithm, $encryption_key, 0, $iv);
// Temporäre Datei für die Wiederherstellung erstellen
$temp_restore_file = 'temp_restore.sql';
file_put_contents($temp_restore_file, $restored_data);
// Wiederherstellung durchführen
$command = "mysql -u $username -p$password $database < $temp_restore_file";
exec($command);
echo "<script>alert('Wiederherstellung erfolgreich abgeschlossen.');</script>";
// Ereignis protokollieren
logEvent('Wiederherstellung durchgeführt', 'Wiederherstellung', "Wiederhergestellte Datei: $restore_file");
// Temporäre Datei löschen
unlink($temp_restore_file);
} else {
echo "Datei für die Wiederherstellung nicht hochgeladen.";
}
}
// Wiederherstellung aus ausgewähltem Backup durchführen
if (isset($_POST['restore_from_selected'])) {
$selected_backup = $_POST['selected_backup'];
// Wiederherstellung durchführen
$command = "mysql -u $username -p$password $database < $selected_backup";
exec($command);
echo "<script>alert('Wiederherstellung erfolgreich abgeschlossen.');</script>";
// Ereignis protokollieren
logEvent('Wiederherstellung ausgewähltes Backup durchgeführt', 'Wiederherstellung', "Ausgewählte Backup-Datei: $selected_backup");
}
// Liste der letzten 10 Backups generieren
$backup_files = glob('backup/encrypted_backup_*.txt'); // Nur nach verschlüsselten Backups suchen
$backup_files = array_slice($backup_files, -10); // Die letzten 10 Backups auswählen
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
2024-02-29 10:07:38 +00:00
<title>Einstellungen</title>
2024-02-28 19:02:27 +00:00
<style>
/* Header CSS */
body {
background-color: aliceblue;
}
.header {
background-color: #333;
color: #fff;
padding: 20px 0;
}
.header-container {
width: 80%;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.header h1 {
margin: 0;
}
.header nav ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.header nav ul li {
display: inline;
margin-right: 20px;
}
.header nav ul li:last-child {
margin-right: 0;
}
.header nav ul li a {
color: #fff;
text-decoration: none;
}
/* Container CSS */
.container {
width: 80%;
margin: 0 auto;
padding: 20px;
background-color: #333;
color: #fff;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
margin-top: 40px;
}
h1, h2 {
text-align: center;
}
form {
text-align: center;
margin-top: 20px;
}
input[type="submit"] {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
input[type="submit"]:hover {
background-color: #45a049;
}
input[type="file"] {
display: block;
margin: 10px auto;
}
.download-button {
display: block;
margin-top: 20px;
text-align: center;
text-decoration: none;
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border-radius: 5px;
}
.download-button:hover {
background-color: #45a049;
}
/* Backup List Styles */
.backup-list {
list-style: none;
padding: 0;
margin: 20px 0;
}
.backup-list li {
background-color: #fff;
padding: 10px;
margin-bottom: 10px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.backup-list li a {
color: #333;
text-decoration: none;
font-weight: bold;
}
.backup-list li form {
display: inline;
}
.backup-list li input[type="submit"] {
background-color: #45a049;
color: #fff;
padding: 5px 10px;
margin-left: 10px;
transition: background-color 0.3s;
}
.backup-list li input[type="submit"]:hover {
background-color: #45a049;
}
2024-02-29 10:07:38 +00:00
.custom-box {
background-color: #333;
border: 1px solid #ddd;
border-radius: 5px;
padding: 20px;
margin-top: 20px;
margin: 10px auto;
max-width: 1537px;
text-align: center;
}
.custom-box h2 {
color: #333;
font-size: 24px;
margin-bottom: 10px;
color: #fff;
}
.custom-box p {
color: #fff;
font-size: 14px;
margin-bottom: 15px;
}
.custom-box .download-button-small {
display: inline-block;
padding: 8px 16px; /* Anpassen der Padding-Werte für die gewünschte Größe */
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
text-decoration: none;
margin-top: 10px;
}
.custom-box .download-button-small:hover {
background-color: #45a049;
}
/* CSS für die Settings-Box */
.settings-box {
width: 80%; /* Größere Breite für die Box */
margin: 20px auto;
padding: 30px; /* Mehr Innenabstand für den Inhalt */
background-color: #333;
border-radius: 10px; /* Abgerundete Ecken */
box-shadow: 0 0 15px rgba(0, 0, 0, 0.1); /* Leichter Schatten */
color: #fff; /* Schriftfarbe auf Weiß geändert */
}
.settings-box h1 {
text-align: center;
margin-bottom: 30px; /* Mehr Abstand zum Inhalt */
}
.settings-box label {
display: block;
font-weight: bold;
margin-bottom: 10px; /* Weniger Abstand zwischen den Labels */
}
.settings-box input[type="text"] {
width: calc(100% - 22px); /* Berücksichtigt den Padding */
padding: 10px;
margin-bottom: 20px; /* Mehr Abstand zu den anderen Elementen */
border: 1px solid #ccc;
border-radius: 5px;
box-sizing: border-box;
}
.settings-box input[type="submit"] {
width: 15%; /* Kleinere Breite für den Button */
padding: 8px 12px; /* Kleinerer Padding für den Button */
background-color: #4CAF50;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
.settings-box input[type="submit"]:hover {
background-color: #45a049;
}
2024-02-28 19:02:27 +00:00
</style>
</head>
<body>
<header class="header">
<div class="header-container">
<h1>Materialverwaltung</h1>
<nav>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="add_material_form.php">Artikel hinzufügen</a></li>
<li><a href="article_overview.php">Artikel Übersicht</a></li>
2024-02-29 10:07:38 +00:00
<li><a href="backup_restore.php">Einstellungen</a></li>
2024-02-28 19:02:27 +00:00
</ul>
</nav>
</div>
</header>
2024-02-29 10:07:38 +00:00
</form>
<div class="settings-box">
<h1>Gotify Einstellungen</h1>
<form method="post" action="save_settings.php">
<label for="gotify_url">Gotify API URL:</label><br>
<span>https://example.com/message</span><br><br>
<input type="text" id="gotify_url" name="gotify_url"><br><br>
<label for="app_token">Anwendungs-Token:</label><br>
<span>Apps Token</span><br><br>
<input type="text" id="app_token" name="app_token"><br><br>
<input type="submit" value="Einstellungen speichern">
</form>
<form action="send_test_notification.php" method="post">
<input type="submit" name="send_test_notification" value="Testnachricht senden">
</form>
</div>
<!-- Eigene Box für Download-Button und Text -->
<div class="custom-box">
<h2>Chrome-Erweiterung installieren</h2>
<details>
<summary style="color: white;">Anleitung anzeigen</summary>
<p><strong style="color: white;">Download der Erweiterung:</strong> Zunächst muss die Chrome-Erweiterung heruntergeladen werden. Normalerweise wird dies als ZIP-Datei bereitgestellt. Der Benutzer sollte die ZIP-Datei auf seinen Computer herunterladen.</p>
<p><strong style="color: white;">Extrahieren der ZIP-Datei:</strong> Der Benutzer muss die heruntergeladene ZIP-Datei extrahieren. Dazu kann er einen Dateimanager wie den Windows Explorer oder den Finder auf einem Mac verwenden.</p>
<p><strong style="color: white;">Erweiterung aktivieren:</strong> Um die Erweiterung zu aktivieren, muss der Benutzer zu den Erweiterungseinstellungen in Google Chrome navigieren. Dies kann erreicht werden, indem man in Chrome auf die drei vertikalen Punkte oben rechts im Browserfenster klickt und dann "Erweiterungen" auswählt.</p>
<p><strong style="color: white;">Entwicklermodus aktivieren:</strong> Innerhalb der Erweiterungseinstellungen sollte der Benutzer den "Entwicklermodus" oben rechts auf der Seite aktivieren.</p>
<p><strong style="color: white;">Erweiterung installieren:</strong> Nachdem der Entwicklermodus aktiviert wurde, erscheint eine Schaltfläche "Entpackte Erweiterung laden". Der Benutzer muss darauf klicken und den Ordner auswählen, in dem er die zuvor extrahierte Erweiterung gespeichert hat.</p>
<p><strong style="color: white;">Bestätigung:</strong> Nachdem der Benutzer den Ordner ausgewählt hat, wird die Erweiterung in Chrome installiert. Es sollte eine Bestätigungsmeldung erscheinen, die anzeigt, dass die Erweiterung erfolgreich installiert wurde.</p>
<p><strong style="color: white;">Erweiterung verwenden:</strong> Die Erweiterung ist jetzt installiert und kann verwendet werden. Abhängig von der Funktionalität der Erweiterung kann sie automatisch aktiviert werden oder der Benutzer muss sie über das Erweiterungssymbol in der Symbolleiste von Chrome aktivieren.</p>
</details>
<a href="Material_chrome.zip" download class="download-button-small">Download Chrome-Erweiterung</a>
</div>
2024-02-28 19:02:27 +00:00
<div class="container">
<h1>Backup und Wiederherstellung</h1>
<h2>Backup erstellen</h2>
<form action="" method="post">
<input type="submit" name="backup" value="Backup erstellen">
</form>
2024-02-29 10:07:38 +00:00
<?php if (isset($download_button)) echo $download_button; ?> <!-- Download-Button anzeigen, wenn Backup erfolgreich -->
2024-02-28 19:02:27 +00:00
<h2>Wiederherstellung durchführen</h2>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="restore_file" accept=".txt">
<input type="submit" name="restore" value="Wiederherstellung durchführen">
</form>
<!-- Backup-Liste -->
<h2>Letzte 10 verschlüsselte Backups</h2>
<ul class="backup-list">
<?php foreach ($backup_files as $file): ?>
<li>
<a href="<?php echo $file; ?>"><?php echo basename($file); ?></a>
<form action="" method="post">
<input type="hidden" name="selected_backup" value="<?php echo $file; ?>">
<input type="submit" name="restore_from_selected" value="Wiederherstellen">
</form>
</li>
<?php endforeach; ?>
</ul>
</div>
</body>
</html>