This commit is contained in:
pika 2025-03-30 21:52:20 +02:00
parent f939933a7c
commit be6f7cfcbb
35 changed files with 1897 additions and 733 deletions

View file

@ -129,30 +129,48 @@ def server_new():
def server_edit(server_id):
"""Edit an existing server"""
server = Server.query.get_or_404(server_id)
subnets = Subnet.query.all()
if request.method == 'POST':
hostname = request.form.get('hostname')
ip_address = request.form.get('ip_address')
subnet_id = request.form.get('subnet_id')
documentation = request.form.get('documentation', '')
if not hostname or not ip_address or not subnet_id:
flash('All fields are required', 'danger')
return redirect(url_for('dashboard.server_edit', server_id=server_id))
return render_template(
'dashboard/server_form.html',
title='Edit Server',
server=server,
subnets=subnets
)
# Check if hostname changed and already exists
if hostname != server.hostname and Server.query.filter_by(hostname=hostname).first():
flash('Hostname already exists', 'danger')
return redirect(url_for('dashboard.server_edit', server_id=server_id))
return render_template(
'dashboard/server_form.html',
title='Edit Server',
server=server,
subnets=subnets
)
# Check if IP changed and already exists
if ip_address != server.ip_address and Server.query.filter_by(ip_address=ip_address).first():
flash('IP address already exists', 'danger')
return redirect(url_for('dashboard.server_edit', server_id=server_id))
return render_template(
'dashboard/server_form.html',
title='Edit Server',
server=server,
subnets=subnets
)
# Update server
server.hostname = hostname
server.ip_address = ip_address
server.subnet_id = subnet_id
server.documentation = documentation
db.session.commit()
@ -160,9 +178,8 @@ def server_edit(server_id):
return redirect(url_for('dashboard.server_view', server_id=server.id))
# GET request - show form with current values
subnets = Subnet.query.all()
return render_template(
'dashboard/server_edit.html',
'dashboard/server_form.html',
title=f'Edit Server - {server.hostname}',
server=server,
subnets=subnets
@ -277,62 +294,44 @@ def app_edit(app_id):
server_id = request.form.get('server_id')
documentation = request.form.get('documentation', '')
# Get port data from form
port_numbers = request.form.getlist('port_numbers[]')
protocols = request.form.getlist('protocols[]')
port_descriptions = request.form.getlist('port_descriptions[]')
if not name or not server_id:
flash('All required fields must be filled', 'danger')
return render_template(
'dashboard/app_form.html',
title='Edit Application',
app=app,
servers=servers
)
# Validate inputs
if not all([name, server_id]):
flash('All fields are required', 'danger')
return render_template('dashboard/app_form.html',
title='Edit Application',
app=app,
servers=servers,
edit_mode=True)
# Check if name changed and already exists on the same server
existing_app = App.query.filter(App.name == name,
App.server_id == server_id,
App.id != app.id).first()
if existing_app:
flash('Application with this name already exists on the selected server', 'danger')
return render_template(
'dashboard/app_form.html',
title='Edit Application',
app=app,
servers=servers
)
# Update app
# Update application
app.name = name
app.server_id = server_id
app.documentation = documentation
# Delete existing ports and recreate them
# This simplifies handling additions, deletions, and updates
Port.query.filter_by(app_id=app.id).delete()
db.session.commit()
# Add new ports
for i in range(len(port_numbers)):
if port_numbers[i] and port_numbers[i].strip():
try:
port_num = int(port_numbers[i])
# Get protocol and description, handling index errors
protocol = protocols[i] if i < len(protocols) else 'TCP'
description = port_descriptions[i] if i < len(port_descriptions) else ''
new_port = Port(
app_id=app.id,
port_number=port_num,
protocol=protocol,
description=description
)
db.session.add(new_port)
except (ValueError, IndexError):
continue
try:
db.session.commit()
flash(f'Application {name} has been updated', 'success')
return redirect(url_for('dashboard.server_view', server_id=app.server_id))
except Exception as e:
db.session.rollback()
flash(f'Error updating application: {str(e)}', 'danger')
flash('Application updated successfully', 'success')
return redirect(url_for('dashboard.app_view', app_id=app.id))
return render_template('dashboard/app_form.html',
title='Edit Application',
app=app,
servers=servers,
edit_mode=True)
return render_template(
'dashboard/app_form.html',
title=f'Edit Application - {app.name}',
app=app,
servers=servers
)
@bp.route('/app/<int:app_id>/delete', methods=['POST'])
@login_required
@ -345,4 +344,40 @@ def app_delete(app_id):
db.session.commit()
flash('Application deleted successfully', 'success')
return redirect(url_for('dashboard.server_view', server_id=server_id))
return redirect(url_for('dashboard.server_view', server_id=server_id))
@bp.route('/settings', methods=['GET', 'POST'])
@login_required
def settings():
"""User settings page"""
if request.method == 'POST':
# Handle user settings update
current_password = request.form.get('current_password')
new_password = request.form.get('new_password')
confirm_password = request.form.get('confirm_password')
# Validate inputs
if not current_password:
flash('Current password is required', 'danger')
return redirect(url_for('dashboard.settings'))
if new_password != confirm_password:
flash('New passwords do not match', 'danger')
return redirect(url_for('dashboard.settings'))
# Verify current password
if not current_user.check_password(current_password):
flash('Current password is incorrect', 'danger')
return redirect(url_for('dashboard.settings'))
# Update password
current_user.set_password(new_password)
db.session.commit()
flash('Password updated successfully', 'success')
return redirect(url_for('dashboard.settings'))
return render_template(
'dashboard/settings.html',
title='User Settings'
)