addet better ui?
This commit is contained in:
parent
9eb8f24845
commit
aff563a939
3 changed files with 81 additions and 25 deletions
19
app.py
19
app.py
|
@ -5,10 +5,12 @@ app = Flask(__name__)
|
|||
|
||||
# Speicher für Proxy-Subdomains (dict mit Liste für jeden Server)
|
||||
proxy_data = {}
|
||||
deleted_servers = set() # Hier speichern wir temporär gelöschte Server
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html', proxies=proxy_data)
|
||||
filtered_data = {k: v for k, v in proxy_data.items() if k not in deleted_servers}
|
||||
return render_template('index.html', proxies=filtered_data)
|
||||
|
||||
@app.route('/update', methods=['POST'])
|
||||
def update():
|
||||
|
@ -20,7 +22,22 @@ def update():
|
|||
server_name = data["server"]
|
||||
proxy_data[server_name] = data["entries"]
|
||||
|
||||
# Falls der Server wieder Daten sendet, entfernen wir ihn aus der Lösch-Liste
|
||||
if server_name in deleted_servers:
|
||||
deleted_servers.remove(server_name)
|
||||
|
||||
return jsonify({"message": "Updated successfully"}), 200
|
||||
|
||||
@app.route('/delete', methods=['POST'])
|
||||
def delete_entry():
|
||||
"""Markiert einen Server als gelöscht, damit er nicht mehr angezeigt wird"""
|
||||
data = request.json
|
||||
server_name = data.get("server")
|
||||
if not server_name or server_name not in proxy_data:
|
||||
return jsonify({"error": "Server not found"}), 400
|
||||
|
||||
deleted_servers.add(server_name)
|
||||
return jsonify({"message": f"Server {server_name} deleted"}), 200
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import requests
|
||||
import re
|
||||
import os
|
||||
import socket
|
||||
|
||||
CADDYFILE_PATH = "/opt/docker/caddy/conf/Caddyfile" # Pfad zur Caddyfile
|
||||
DASHBOARD_URL = "http://10.0.0.25:5000/update" # Anpassen!
|
||||
SERVER_NAME = os.getenv("CADDY_SERVER_NAME", "Unknown Server")
|
||||
SERVER_NAME = socket.gethostname()
|
||||
|
||||
def parse_caddyfile():
|
||||
entries = {}
|
||||
|
|
|
@ -3,33 +3,71 @@
|
|||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Zentrales Caddy-Dashboard</title>
|
||||
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
function toggleServer(id) {
|
||||
let section = document.getElementById("server-" + id);
|
||||
section.classList.toggle("hidden");
|
||||
}
|
||||
|
||||
function filterEntries() {
|
||||
let query = document.getElementById("search").value.toLowerCase();
|
||||
let rows = document.querySelectorAll("tbody tr");
|
||||
rows.forEach(row => {
|
||||
let domain = row.dataset.domain.toLowerCase();
|
||||
row.style.display = domain.includes(query) ? "" : "none";
|
||||
});
|
||||
}
|
||||
|
||||
function deleteServer(serverName) {
|
||||
fetch('/delete', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({"server": serverName})
|
||||
}).then(response => {
|
||||
if (response.ok) {
|
||||
document.getElementById("server-box-" + serverName).remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Zentrales Caddy-Dashboard</h1>
|
||||
<body class="bg-gray-900 text-gray-100">
|
||||
<header class="bg-indigo-700 text-white p-4 text-center">
|
||||
<h1 class="text-2xl font-bold">Zentrales Caddy-Dashboard</h1>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container mx-auto p-6">
|
||||
<input type="text" id="search" class="w-full p-2 mb-4 text-gray-900 rounded-md" placeholder="🔍 Suche nach einer Subdomain..." onkeyup="filterEntries()">
|
||||
|
||||
{% for server, entries in proxies.items() %}
|
||||
<h2>{{ server }}</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Domain</th>
|
||||
<th>Ziel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for domain, target in entries.items() %}
|
||||
<tr>
|
||||
<td><a href="https://{{ domain }}" target="_blank">{{ domain }}</a></td>
|
||||
<td>{{ target }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="server-box-{{ server }}" class="bg-gray-800 p-4 rounded-md mb-6">
|
||||
<div class="flex justify-between">
|
||||
<button onclick="toggleServer('{{ server }}')" class="text-lg font-semibold text-indigo-400">
|
||||
{{ server }}
|
||||
</button>
|
||||
<button onclick="deleteServer('{{ server }}')" class="bg-red-500 text-white px-3 py-1 rounded-md">🗑️ Löschen</button>
|
||||
</div>
|
||||
<div id="server-{{ server }}" class="mt-2 hidden">
|
||||
<table class="w-full mt-3">
|
||||
<thead>
|
||||
<tr class="text-cyan-400">
|
||||
<th class="text-left p-2">Domain</th>
|
||||
<th class="text-left p-2">Ziel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for domain, target in entries.items() %}
|
||||
<tr data-domain="{{ domain }}">
|
||||
<td class="p-2"><a href="https://{{ domain }}" target="_blank" class="text-indigo-400">{{ domain }}</a></td>
|
||||
<td class="p-2">{{ target }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue