- {% for category, message in messages %}
-
- {% endif %}
- {% endwith %}
-
- {% endfor %}
-
-
-
-
-
- {% if category == 'success' %}
-
- {% elif category == 'danger' %}
-
- {% else %}
-
- {% endif %}
-
-
-
- {{ message }}
-Rollen verwalten
diff --git a/AstraOS/Frontend/HTML/settings.html b/AstraOS/Frontend/HTML/settings.html index 0c05d82..f85d8ee 100644 --- a/AstraOS/Frontend/HTML/settings.html +++ b/AstraOS/Frontend/HTML/settings.html @@ -11,41 +11,6 @@Einstellungen
- {% for category, message in messages %}
-
- {% endif %}
- {% endwith %}
-
-
- {% endfor %}
-
-
-
-
-
- {% if category == 'success' %}
-
- {% elif category == 'danger' %}
-
- {% else %}
-
- {% endif %}
-
-
-
- {{ message }}
-Account-Informationen
diff --git a/AstraOS/Frontend/HTML/sidebar.html b/AstraOS/Frontend/HTML/sidebar.html index 02680a7..d00d0b2 100644 --- a/AstraOS/Frontend/HTML/sidebar.html +++ b/AstraOS/Frontend/HTML/sidebar.html @@ -293,7 +293,7 @@ x-transition:leave="toast transition ease-in duration-300" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" - class="max-w-md w-full bg-gray-800 shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden border border-{{ 'red' if category == 'danger' else ('green' if category == 'success' else ('blue' if category == 'info' else 'gray')) }}-500/40"> + class="max-w-lg w-full bg-gray-800 shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden border border-{{ 'red' if category == 'danger' else ('green' if category == 'success' else ('blue' if category == 'info' else 'gray')) }}-500/40">
diff --git a/AstraOS/astra_os.py b/AstraOS/astra_os.py
index f25147b..681e020 100644
--- a/AstraOS/astra_os.py
+++ b/AstraOS/astra_os.py
@@ -263,7 +263,7 @@ def login():
session['user_id'] = str(user['_id'])
session['username'] = user['username']
session['permissions'] = get_user_permissions(str(user['_id']))
- add_log("User Login")
+ add_log("Benutzer-Login")
# Prüfen, ob Discord verknüpft ist
if not user.get('discord_id'):
@@ -401,7 +401,7 @@ def dashboard():
@app.route('/logout')
@login_required
def logout():
- add_log("User Logout")
+ add_log("Benutzer-Logout")
session.clear()
flash("Sie wurden erfolgreich abgemeldet.", "info")
return redirect(url_for('login'))
@@ -460,7 +460,7 @@ def add_user():
'discord_username': None,
'discord_avatar': None
})
- add_log("User Created", f"Username: {username}")
+ add_log("Benutzer erstellt", f"Benutzername: {username}")
if dashboard_collection is not None:
dashboard_collection.update_one(
{"key": "last_user_created"},
@@ -505,7 +505,7 @@ def edit_user(user_id):
{'_id': ObjectId(user_id)},
{'$set': update_data}
)
- add_log("User Edited", f"Username: {username}")
+ add_log("Benutzer bearbeitet", f"Benutzername: {username}")
flash(f"Benutzer '{username}' wurde erfolgreich aktualisiert.", "success")
return redirect(url_for('user_management'))
@app.route('/delete_user/', methods=['POST'])
@@ -520,7 +520,7 @@ def delete_user(user_id):
return redirect(url_for('user_management'))
user = accounts_collection.find_one({'_id': ObjectId(user_id)})
accounts_collection.delete_one({'_id': ObjectId(user_id)})
- add_log("User Deleted", f"Username: {user.get('username', 'N/A')}")
+ add_log("Benutzer gelöscht", f"Benutzername: {user.get('username', 'N/A')}")
flash("Benutzer wurde erfolgreich gelöscht.", "success")
return redirect(url_for('user_management'))
@@ -553,7 +553,7 @@ def update_password():
hashed_password = generate_password_hash(new_password)
accounts_collection.update_one({'_id': ObjectId(user_id)}, {'$set': {'password': hashed_password}})
- add_log("Password Changed")
+ add_log("Passwort geändert")
flash("Dein Passwort wurde erfolgreich geändert.", "success")
return redirect(url_for('settings'))
@@ -565,7 +565,7 @@ def unlink_discord():
{'_id': ObjectId(user_id)},
{'$set': {'discord_id': None, 'discord_username': None, 'discord_avatar': None}}
)
- add_log("Discord Unlinked")
+ add_log("Discord-Verknüpfung aufgehoben")
flash("Deine Discord-Verknüpfung wurde entfernt. Bitte verknüpfe dein Konto erneut.", "info")
return redirect(url_for('link_discord'))
@@ -640,7 +640,7 @@ def callback_discord():
'discord_avatar': discord_avatar
}}
)
- add_log("Discord Linked")
+ add_log("Discord verknüpft")
flash("Discord-Account erfolgreich verknüpft!", "success")
return redirect(url_for('dashboard'))
@@ -652,7 +652,7 @@ def callback_discord():
session['user_id'] = str(user['_id'])
session['username'] = user['username']
session['permissions'] = get_user_permissions(str(user['_id']))
- add_log("User Login via Discord")
+ add_log("Benutzer-Login via Discord")
flash("Erfolgreich mit Discord angemeldet!", "success")
return redirect(url_for('dashboard'))
else:
@@ -687,7 +687,7 @@ def add_role():
"permissions": permissions,
"is_deletable": True
})
- add_log("Role Created", f"Role: {role_name}")
+ add_log("Rolle erstellt", f"Rolle: {role_name}")
flash(f"Rolle '{role_name}' wurde erstellt.", "success")
return redirect(url_for('role_management'))
@app.route('/edit_role/', methods=['POST'])
@@ -703,7 +703,7 @@ def edit_role(role_id):
{'_id': ObjectId(role_id)},
{'$set': {'name': role_name, 'permissions': permissions}}
)
- add_log("Role Edited", f"Role: {role_name}")
+ add_log("Rolle bearbeitet", f"Rolle: {role_name}")
flash(f"Rolle '{role_name}' wurde aktualisiert.", "success")
return redirect(url_for('role_management'))
@app.route('/delete_role/', methods=['POST'])
@@ -715,12 +715,17 @@ def delete_role(role_id):
flash("Diese Rolle kann nicht gelöscht werden.", "danger")
return redirect(url_for('role_management'))
roles_collection.delete_one({'_id': ObjectId(role_id)})
- add_log("Role Deleted", f"Role: {role.get('name', 'N/A')}")
+ add_log("Rolle gelöscht", f"Rolle: {role.get('name', 'N/A')}")
flash("Rolle wurde gelöscht.", "success")
return redirect(url_for('role_management'))
def calculate_current_age(birthdate_str):
- birthdate_dt = datetime.strptime(birthdate_str, '%Y-%m-%d')
+ try:
+ # Versuche zuerst das DD.MM.YYYY Format
+ birthdate_dt = datetime.strptime(birthdate_str, '%d.%m.%Y')
+ except ValueError:
+ # Wenn das fehlschlägt, versuche das YYYY-MM-DD Format (für alte Einträge)
+ birthdate_dt = datetime.strptime(birthdate_str, '%Y-%m-%d')
today = datetime.today()
return today.year - birthdate_dt.year - ((today.month, today.day) < (birthdate_dt.month, birthdate_dt.day))
@@ -737,29 +742,32 @@ def age_verification():
ingame_name = request.form.get('ingame_name')
if birthdate_str and steam_id and ingame_name:
- birthdate_dt = datetime.strptime(birthdate_str, '%Y-%m-%d')
- today = datetime.today()
- age = today.year - birthdate_dt.year - ((today.month, today.day) < (birthdate_dt.month, birthdate_dt.day))
+ try:
+ birthdate_dt = datetime.strptime(birthdate_str, '%d.%m.%Y')
+ today = datetime.today()
+ age = today.year - birthdate_dt.year - ((today.month, today.day) < (birthdate_dt.month, birthdate_dt.day))
- user_data = {
- 'birthdate': birthdate_str,
- 'steam_id': steam_id,
- 'ingame_name': ingame_name,
- 'age': age,
- 'checked_by': session.get('username'),
- 'timestamp': datetime.utcnow()
- }
- age_verification_collection.insert_one(user_data)
+ user_data = {
+ 'birthdate': birthdate_str,
+ 'steam_id': steam_id,
+ 'ingame_name': ingame_name,
+ 'age': age,
+ 'checked_by': session.get('username'),
+ 'timestamp': datetime.utcnow()
+ }
+ age_verification_collection.insert_one(user_data)
- result = {'age': age, 'steam_id': steam_id}
- if age < 13:
- thirteenth_birthday = birthdate_dt.replace(year=birthdate_dt.year + 13)
- ban_duration_days = (thirteenth_birthday - today).days + 1
- result['ban_duration_days'] = ban_duration_days
- result['ban_command'] = f"oban {steam_id} {ban_duration_days}d"
+ result = {'age': age, 'steam_id': steam_id}
+ if age < 13:
+ thirteenth_birthday = birthdate_dt.replace(year=birthdate_dt.year + 13)
+ ban_duration_days = (thirteenth_birthday - today).days + 1
+ result['ban_duration_days'] = ban_duration_days
+ result['ban_command'] = f"oban {steam_id} {ban_duration_days}d"
- add_log("Age Verification Added", f"Ingame Name: {ingame_name}, SteamID: {steam_id}")
- flash("Altersüberprüfung erfolgreich durchgeführt und gespeichert.", "success")
+ add_log("Altersüberprüfung hinzugefügt", f"Ingame Name: {ingame_name}, SteamID: {steam_id}")
+ flash("Altersüberprüfung erfolgreich durchgeführt und gespeichert.", "success")
+ except ValueError:
+ flash("Ungültiges Datumsformat. Bitte DD.MM.YYYY verwenden.", "danger")
if search_query:
users = list(age_verification_collection.find({
@@ -793,7 +801,10 @@ def view_user_age_details(user_id):
result = None
if user.get('age') < 13:
today = datetime.today()
- birthdate_dt = datetime.strptime(user['birthdate'], '%Y-%m-%d')
+ try:
+ birthdate_dt = datetime.strptime(user['birthdate'], '%d.%m.%Y')
+ except ValueError:
+ birthdate_dt = datetime.strptime(user['birthdate'], '%Y-%m-%d')
thirteenth_birthday = birthdate_dt.replace(year=birthdate_dt.year + 13)
ban_duration_days = (thirteenth_birthday - today).days + 1
if ban_duration_days > 0:
@@ -828,7 +839,7 @@ def delete_age_verification(user_id):
return redirect(url_for('view_user_age_details', user_id=user_id))
age_verification_collection.delete_one({'_id': ObjectId(user_id)})
- add_log("Age Verification Deleted", f"Ingame Name: {entry.get('ingame_name', 'N/A')}, SteamID: {entry.get('steam_id', 'N/A')}")
+ add_log("Altersüberprüfung gelöscht", f"Ingame Name: {entry.get('ingame_name', 'N/A')}, SteamID: {entry.get('steam_id', 'N/A')}")
flash("Eintrag zur Altersüberprüfung wurde gelöscht.", "success")
return redirect(url_for('age_verification'))
@app.route('/ip_analyzer', methods=['GET', 'POST'])
@@ -870,7 +881,7 @@ def ip_analyzer():
"added_by": session["username"],
"timestamp": datetime.utcnow()
})
- add_log("IP Analyzed", f"IP: {ip_address}")
+ add_log("IP analysiert", f"IP: {ip_address}")
flash("IP-Adresse erfolgreich analysiert und gespeichert.", "success")
else:
error = f"Fehler bei der API-Anfrage: Status {response.status_code}"
@@ -959,7 +970,7 @@ def upload_bot():
'created_at': datetime.utcnow(),
'status': 'stopped'
})
- add_log("Bot Uploaded", f"Bot Name: {bot_name}")
+ add_log("Bot hochgeladen", f"Bot Name: {bot_name}")
flash(f"Bot '{bot_name}' wurde erfolgreich hochgeladen.", "success")
return redirect(url_for('discord_bots'))
@app.route('/delete_bot/', methods=['POST'])
@@ -986,7 +997,7 @@ def delete_bot(bot_id):
except Exception as e:
flash(f"Fehler beim Löschen der Bot-Datei: {e}", "danger")
discord_bots_collection.delete_one({'_id': ObjectId(bot_id)})
- add_log("Bot Deleted", f"Bot Name: {bot_info.get('name', 'N/A')}")
+ add_log("Bot gelöscht", f"Bot Name: {bot_info.get('name', 'N/A')}")
flash(f"Bot '{bot_info['name']}' wurde erfolgreich gelöscht.", "success")
return redirect(url_for('discord_bots'))
@app.route('/bot_console/')
@@ -1042,7 +1053,7 @@ def handle_toggle_bot(data):
thread.daemon = True
thread.start()
discord_bots_collection.update_one({'_id': ObjectId(bot_id)}, {'$set': {'status': 'running'}})
- add_log("Bot Started", f"Bot Name: {bot_info.get('name', 'N/A')}")
+ add_log("Bot gestartet", f"Bot Name: {bot_info.get('name', 'N/A')}")
emit('status_update', {'bot_id': bot_id, 'status': 'running'}, room=bot_id)
emit('console_output', {'type': 'system', 'data': f'--- Bot-Prozess gestartet (PID: {process.pid}) ---'}, room=bot_id)
except Exception as e:
@@ -1057,7 +1068,7 @@ def handle_toggle_bot(data):
if bot_id in running_bots:
del running_bots[bot_id]
discord_bots_collection.update_one({'_id': ObjectId(bot_id)}, {'$set': {'status': 'stopped'}})
- add_log("Bot Stopped", f"Bot Name: {bot_info.get('name', 'N/A')}")
+ add_log("Bot gestoppt", f"Bot Name: {bot_info.get('name', 'N/A')}")
emit('status_update', {'bot_id': bot_id, 'status': 'stopped'}, room=bot_id)
emit('console_output', {'type': 'system', 'data': '--- Bot-Prozess wird gestoppt... ---'}, room=bot_id)
@app.route('/maintenance')
@@ -1133,7 +1144,7 @@ def update_maintenance():
{"$set": update_data},
upsert=True
)
- add_log("Maintenance Settings Updated", f"Enabled: {is_enabled}, Message: {status_message}")
+ add_log("Wartungseinstellungen aktualisiert", f"Aktiviert: {is_enabled}, Nachricht: {status_message}")
flash("Wartungseinstellungen wurden aktualisiert.", "success")
return redirect(url_for('maintenance_management'))
if __name__ == '__main__':