diff --git a/srv/poe_manager/app.py b/srv/poe_manager/app.py index a6624aa..3d19ac7 100644 --- a/srv/poe_manager/app.py +++ b/srv/poe_manager/app.py @@ -329,7 +329,6 @@ def toggle_device(mac): flash(f"Gerät '{device['name']}' wurde {status_text}.") return redirect(url_for('devices')) - @app.route('/switches', methods=['GET', 'POST']) @login_required def switches(): @@ -373,20 +372,27 @@ def switches(): except sqlite3.IntegrityError: flash("Hostname existiert bereits oder Eingabefehler!") - # Inline-Delete - if request.method == 'POST' and 'delete_switch' in request.form: - if not current_user.is_admin: - flash("Zugriff verweigert!") - return redirect(url_for('switches')) - del_hostname = request.form['delete_switch'] - conn.execute("UPDATE devices SET switch_hostname=NULL WHERE switch_hostname=?", (del_hostname,)) - conn.execute("DELETE FROM switches WHERE hostname=?", (del_hostname,)) - conn.commit() - flash(f"Switch {del_hostname} gelöscht.") +@app.route('/switches/delete/', methods=['POST']) +def delete_switch(id): + switch = Switch.query.get_or_404(id) + # Prüfen, ob noch Geräte diesem Switch zugeordnet sind + assigned_devices = Device.query.filter_by(switch_hostname=switch.hostname).all() - switches = conn.execute("SELECT hostname, ip, username FROM switches").fetchall() - conn.close() - return render_template('switche.html', switches=switches) + if assigned_devices: + # Liste der Gerätenamen + device_names = [d.hostname for d in assigned_devices] + flash(f"Folgende Geräte sind noch dem Switch '{switch.hostname}' zugewiesen: {', '.join(device_names)}", "danger") + return redirect(url_for('switches')) + + try: + db.session.delete(switch) + db.session.commit() + flash(f"Switch '{switch.hostname}' wurde gelöscht.", "success") + except Exception as e: + db.session.rollback() + flash(f"Fehler beim Löschen des Switches: {e}", "danger") + + return redirect(url_for('switches')) @app.route("/get_log") @login_required