From fec6b90993f8392344ecdce93619e68628b77771 Mon Sep 17 00:00:00 2001 From: ske087 Date: Wed, 12 Mar 2025 15:46:32 +0200 Subject: [PATCH] updated --- server_api/app.py | 18 ++++++++++++++---- server_api/instance/logs.db | Bin 94208 -> 0 bytes server_api/templates/settings.html | 4 ++++ 3 files changed, 18 insertions(+), 4 deletions(-) delete mode 100644 server_api/instance/logs.db diff --git a/server_api/app.py b/server_api/app.py index 8a8efa5..7bfd0fc 100644 --- a/server_api/app.py +++ b/server_api/app.py @@ -31,6 +31,13 @@ class Log(db.Model): mission3 = db.Column(db.String(100), default='') mission4 = db.Column(db.String(100), default='') +class MirServerSettings(db.Model): + id = db.Column(db.Integer, primary_key=True) + ip_address = db.Column(db.String(100), nullable=False) + user = db.Column(db.String(100), nullable=False) + password = db.Column(db.String(100), nullable=False) + auth_header = db.Column(db.String(500), nullable=False) + # Create the database if it does not exist if not os.path.exists('instance/logs.db'): with app.app_context(): @@ -215,6 +222,7 @@ def settings(): mir_ip = app.config.get('MIR_IP', '') mir_user = app.config.get('MIR_USER', '') mir_password = app.config.get('MIR_PASSWORD', '') + mir_auth_header = app.config.get('MIR_AUTH_HEADER', '') boards = Log.query.with_entities(Log.hostname).distinct().all() board_settings = [] for board in boards: @@ -230,7 +238,7 @@ def settings(): 'mission3': latest_log.mission3 if latest_log else '', 'mission4': latest_log.mission4 if latest_log else '' }) - return render_template('settings.html', cleanup_time=cleanup_time, mir_ip=mir_ip, mir_user=mir_user, mir_password=mir_password, boards=board_settings) + return render_template('settings.html', cleanup_time=cleanup_time, mir_ip=mir_ip, mir_user=mir_user, mir_password=mir_password, mir_auth_header=mir_auth_header, boards=board_settings) @app.route('/set_cleanup_time', methods=['POST']) def set_cleanup_time(): @@ -247,13 +255,15 @@ def set_mir_server(): mir_ip = request.form.get('mir_ip') mir_user = request.form.get('mir_user') mir_password = request.form.get('mir_password') - if mir_ip and mir_user and mir_password: + mir_auth_header = request.form.get('mir_auth_header') + if mir_ip and mir_user and mir_password and mir_auth_header: app.config['MIR_IP'] = mir_ip app.config['MIR_USER'] = mir_user app.config['MIR_PASSWORD'] = mir_password - flash('MIR server settings updated successfully!', 'success') + app.config['MIR_AUTH_HEADER'] = mir_auth_header + flash('MIR Server settings updated successfully!', 'success') else: - flash('Invalid MIR server settings!', 'danger') + flash('Invalid MIR Server settings!', 'danger') return redirect(url_for('settings')) @app.route('/set_board_settings/', methods=['POST']) diff --git a/server_api/instance/logs.db b/server_api/instance/logs.db deleted file mode 100644 index 9767ca45cd54580fc66119f4214c5f24f98c3972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94208 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 Server Password: +
+ + +