from threading import Thread from flask import Flask, render_template, send_file, Response, request, redirect, jsonify import io from ldapSync import sync_ldap_to_database from database import * from env import * app = Flask(__name__) # Route to the home @app.route('/') def add_door_form(): existing_groups = get_existing_groups(DBFILE) # Update with your database file path logs = get_latest_logs(DBFILE,5) #print(logs[0]) return render_template('./index.html', existing_groups=existing_groups, logs=logs) # Route to display the fuser db @app.route('/UserDB') def index(): users = get_users() return render_template('userdb.html', users=users) # Route to display the fuser db @app.route('/LogsDB') def logsdb(): logs = get_logs() return render_template('logsdb.html', logs=logs) @app.route('/export_logs') def export_logs(): logs = get_logs() # Create a file-like string to write logs log_output = io.StringIO() for log in logs: log_line = f"{log[0]},{log[1]},{log[2]},{log[3]},{'Yes' if log[4] else 'No'},\n" log_output.write(log_line) # Set the position to the beginning of the stream log_output.seek(0) # Create a response with the file data return Response( log_output, mimetype="text/plain", headers={"Content-disposition": "attachment; filename=logs.csv"} ) # Route to handle form submission and add the door to the database @app.route('/add_door', methods=['POST']) def add_door(): Door_id = request.form["Door_id"] group_cn = request.form["group_cn"] # Update with your database file path exec = add_door_to_database(DBFILE, group_cn, Door_id) if add_door_to_database(DBFILE, group_cn, Door_id): return redirect('/') else: return f"Failed to add door to the database." # Route to handle sync button click @app.route('/sync') def sync(): sync_ldap_to_database(DBFILE) return render_template('./LDAP.html') redirect('/') # Route to handle door access requests @app.route('/access', methods=['POST']) def door_access(): data = request.get_json() rfid_uid = data.get('rfid_uid') door_id = data.get('door_id') if rfid_uid is None or door_id is None: return jsonify({'error': 'RFID UID and door ID are required'}), 400 access_granted, upn = check_access(rfid_uid, door_id) if access_granted: print('') log_access_attempt(DBFILE,upn,rfid_uid,True,door_id) return jsonify({'access_granted': True, 'upn': upn}), 200 else: log_access_attempt(DBFILE,upn,rfid_uid,False,door_id) return jsonify({'access_granted': False}), 403 def run_flask_app(): app.run(debug=True, use_reloader=False, port=5000, host="0.0.0.0") def run_webServer_thread(): print(f'STARTING WEB SERVER ON PORT {WebServerPORT}') flask_thread = Thread(target=run_flask_app, daemon=True) flask_thread.start() # flask_thread.join() if __name__ == '__main__': app.run(debug=True)