131 lines
No EOL
8.7 KiB
PHP
131 lines
No EOL
8.7 KiB
PHP
<?php
|
|
// Schritt 1: Das Projekt meldet sich beim Türsteher
|
|
$current_project = 'admin-tools';
|
|
require_once '../auth.php'; // Der Türsteher prüft, ob du Admin bist
|
|
|
|
// Schritt 2: Prüfen, ob das Formular abgeschickt wurde
|
|
$generated_hash = null;
|
|
$original_password = '';
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['password_to_hash'])) {
|
|
$original_password = $_POST['password_to_hash'];
|
|
$generated_hash = password_hash($original_password, PASSWORD_DEFAULT);
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Admin: Hash-Generator</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Lato:wght@400;700&display=swap" rel="stylesheet">
|
|
<style>
|
|
/* ... komplettes CSS von vorher ... */
|
|
:root {
|
|
--primary-color: #00e6e6; /* Aqua Blue */
|
|
--secondary-color: #ff66b2; /* Hot Pink */
|
|
--background-color: #121212;
|
|
--box-bg-color: #1f1f1f;
|
|
--text-color: #e0e0e0;
|
|
--error-color: #ff4d4d;
|
|
--glow-effect: none;
|
|
--retro-font: "Press Start 2P", cursive;
|
|
--modern-font: "Lato", sans-serif;
|
|
--cat-body-color: #8a2be2;
|
|
--cat-detail-color: var(--secondary-color);
|
|
--cat-eye-color: var(--primary-color);
|
|
--pixel-size: 2px;
|
|
}
|
|
body { font-family: var(--modern-font); background-color: var(--background-color); color: var(--text-color); margin: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow: hidden; position: relative; }
|
|
body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: repeating-linear-gradient(transparent, rgba(0, 0, 0, 0.3) 1px, transparent 4px); pointer-events: none; animation: scanlines 4s linear infinite; z-index: 100; }
|
|
.container { text-align: center; padding: 2rem; max-width: 90%; width: 400px; }
|
|
.header h1 { font-family: var(--retro-font); color: var(--primary-color); font-size: 2.5rem; text-shadow: none; margin-bottom: 0.5rem; }
|
|
.header p { font-family: var(--retro-font); color: var(--secondary-color); font-size: 1rem; margin-bottom: 2rem; }
|
|
.pixel-cat { position: relative; width: calc(30 * var(--pixel-size)); height: calc(35 * var(--pixel-size)); margin: 0 auto -10px; z-index: 10; }
|
|
.cat-body { position: absolute; top: calc(15 * var(--pixel-size)); left: calc(5 * var(--pixel-size)); width: calc(20 * var(--pixel-size)); height: calc(15 * var(--pixel-size)); background-color: var(--cat-body-color); z-index: 1; }
|
|
.cat-head { position: absolute; top: calc(5 * var(--pixel-size)); left: calc(8 * var(--pixel-size)); width: calc(14 * var(--pixel-size)); height: calc(10 * var(--pixel-size)); background-color: var(--cat-body-color); z-index: 2; }
|
|
.cat-ear { position: absolute; width: calc(4 * var(--pixel-size)); height: calc(5 * var(--pixel-size)); background-color: var(--cat-body-color); z-index: 0; }
|
|
.cat-ear.left { top: calc(0 * var(--pixel-size)); left: calc(7 * var(--pixel-size)); }
|
|
.cat-ear.right { top: calc(0 * var(--pixel-size)); right: calc(7 * var(--pixel-size)); }
|
|
.cat-eye { position: absolute; width: calc(2 * var(--pixel-size)); height: calc(2 * var(--pixel-size)); background-color: var(--cat-eye-color); z-index: 3; animation: eye-blink 10s infinite; }
|
|
.cat-eye.left { top: calc(8 * var(--pixel-size)); left: calc(10 * var(--pixel-size)); }
|
|
.cat-eye.right { top: calc(8 * var(--pixel-size)); right: calc(10 * var(--pixel-size)); }
|
|
.cat-nose { position: absolute; top: calc(11 * var(--pixel-size)); left: calc(14 * var(--pixel-size)); width: calc(2 * var(--pixel-size)); height: calc(1 * var(--pixel-size)); background-color: var(--cat-detail-color); z-index: 3; }
|
|
.cat-tail { position: absolute; top: calc(19 * var(--pixel-size)); left: calc(22 * var(--pixel-size)); width: calc(3 * var(--pixel-size)); height: calc(10 * var(--pixel-size)); background-color: var(--cat-body-color); transform-origin: bottom center; animation: tail-wag 15s infinite; z-index: 0; }
|
|
.main-content { background-color: var(--box-bg-color); padding: 2rem; border: 2px solid var(--cat-body-color); box-shadow: none; border-radius: 0; position: relative; overflow: hidden; min-height: 350px; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
|
.input-group { margin-bottom: 1.5rem; text-align: left; width: 100%; }
|
|
.input-group label { display: block; font-family: var(--retro-font); color: var(--text-color); margin-bottom: 0.5rem; font-size: 0.8rem; }
|
|
.input-group input { width: 100%; padding: 10px; border: 2px solid var(--primary-color); background-color: rgba(0, 0, 0, 0.4); color: var(--primary-color); font-family: var(--retro-font); outline: none; box-shadow: none; transition: box-shadow 0.3s ease, border-color 0.3s ease; box-sizing: border-box; }
|
|
.input-group input:focus { border-color: var(--secondary-color); }
|
|
.login-btn, .retry-btn { width: 100%; padding: 12px; background-color: var(--primary-color); color: var(--background-color); font-family: var(--retro-font); border: none; cursor: pointer; font-size: 1rem; text-transform: uppercase; transition: transform 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease; text-decoration: none; display: block; box-sizing: border-box; margin-bottom: 1rem; }
|
|
.login-btn:hover, .retry-btn:hover { transform: translateY(-2px); background-color: var(--secondary-color); box-shadow: 0 4px 8px rgba(0,0,0,0.3); }
|
|
.result { margin-top: 2rem; background-color: rgba(0,0,0,0.4); padding: 1rem; text-align: left; font-family: monospace; color: var(--primary-color); word-wrap: break-word; width: 100%; box-sizing: border-box; }
|
|
.result code { font-size: 0.9rem; }
|
|
/* --- NEU: Style für klickbaren Hash --- */
|
|
.result code {
|
|
cursor: pointer;
|
|
transition: color 0.2s ease;
|
|
}
|
|
.result code:hover {
|
|
color: var(--secondary-color);
|
|
}
|
|
@keyframes scanlines { 0% { background-position: 0 0; } 100% { background-position: 0 50px; } }
|
|
@keyframes tail-wag { 0%, 90% { transform: rotate(0deg); } 92.5% { transform: rotate(0deg); } 95% { transform: rotate(25deg); } 97.5% { transform: rotate(0deg); } 100% { transform: rotate(0deg); } }
|
|
@keyframes eye-blink { 0%, 99% { transform: scaleY(1); } 100% { transform: scaleY(0); } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header class="header">
|
|
<h1>ADMIN TOOLS</h1>
|
|
<p>Password Hash Generator</p>
|
|
</header>
|
|
|
|
<div class="pixel-cat"></div>
|
|
|
|
<main class="main-content">
|
|
<form action="index.php" method="POST" style="width: 100%;">
|
|
<div class="input-group">
|
|
<label for="password_input">NEW PASSWORD</label>
|
|
<input type="text" id="password_input" name="password_to_hash" placeholder="> Enter new key" autofocus>
|
|
</div>
|
|
<button type="submit" class="login-btn">GENERATE HASH</button>
|
|
</form>
|
|
|
|
<?php if ($generated_hash): ?>
|
|
<div class="result">
|
|
<strong>Original:</strong> <?php echo htmlspecialchars($original_password); ?><br><br>
|
|
<strong id="hash-label">Hash (klicken zum Kopieren):</strong><br>
|
|
<code id="hash-output"><?php echo $generated_hash; ?></code>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<a href="../index.php" class="retry-btn" style="margin-top: 2rem; background-color: #555;">BACK</a>
|
|
</main>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const hashOutput = document.getElementById('hash-output');
|
|
const hashLabel = document.getElementById('hash-label');
|
|
|
|
if (hashOutput) {
|
|
hashOutput.addEventListener('click', () => {
|
|
const hashText = hashOutput.innerText;
|
|
navigator.clipboard.writeText(hashText).then(() => {
|
|
// Erfolgreich kopiert! Gib dem Nutzer Feedback.
|
|
hashLabel.innerText = 'Kopiert! ✔️';
|
|
// Ändere es nach 2 Sekunden zurück.
|
|
setTimeout(() => {
|
|
hashLabel.innerHTML = 'Hash (klicken zum Kopieren):';
|
|
}, 2000);
|
|
}).catch(err => {
|
|
console.error('Fehler beim Kopieren: ', err);
|
|
hashLabel.innerText = 'Fehler beim Kopieren!';
|
|
});
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|