This commit is contained in:
2026-04-01 22:23:25 +02:00
parent 0ea3e846f1
commit 23f7f78178
9 changed files with 104 additions and 80 deletions

View File

@@ -1,7 +1,9 @@
from flask import Flask, render_template, request, jsonify
import requests
from flask_talisman import Talisman
from led import led
import os
import threading
import sys
import log
from add_user import add_user
@@ -48,7 +50,6 @@ def call_led():
else:
SystemeLumieres.eteindreLumieres()
return jsonify({"success": True})
# Variable temporaire pour stocker le dernier badge scanné
dernier_badge_scanne = None
@app.route("/rfid-scan", methods=["POST"])
@@ -56,47 +57,29 @@ def rfid_scan():
global dernier_badge_scanne
data = request.get_json()
badge_id = data.get("badge_id")
# On va créer cette fonction dans ton fichier auth.py juste après
username = auth.get_user_by_rfid(badge_id)
if username:
# Le badge est dans la base de données ! On autorise.
dernier_badge_scanne = username
return jsonify({"success": True, "username": username})
else:
# Badge inconnu
return jsonify({"success": False})
@app.route("/check-rfid-login", methods=["GET"])
def check_rfid_login():
global dernier_badge_scanne
global current_user
# Si le Raspberry Pi a signalé un badge validé récemment
if dernier_badge_scanne:
user = dernier_badge_scanne
# On valide la connexion côté serveur
current_user = user
# On vide la variable pour ne pas le reconnecter en boucle à l'infini
dernier_badge_scanne = None
return jsonify({"success": True, "username": user})
return jsonify({"success": False})
@app.route("/alarme",methods=["POST"])
def armer_alarme():
SystemeAlarme.armer()
return jsonify({"success": True})
@app.route("/admin")
def admin_page():
return render_template("admin.html")
@@ -131,22 +114,32 @@ def get_users():
users = auth.get_users()
return jsonify({"success": True, "users": users})
@app.route("/api/relais-pi2/<action>", methods=["GET"])
@app.route("/api/<action>", methods=["GET"])
def relais_pi2(action):
"""
Flask sert de relais. Le navigateur demande à Flask, et Flask demande au Pi 2.
"""
url_pi2 = f"https://pi32.local:8000/{action}"
print(f"\n[RELAIS] 1. Tentative de contact avec le Pi 2 : {url_pi2}")
try:
# L'adresse de ton Pi 2
url_pi2 = f"https://pi32.local:8000/{action}"
# Le Pi 1 fait la requête ! verify=False permet d'ignorer le faux certificat
reponse = requests.get(url_pi2, timeout=5, verify=False)
return jsonify(reponse.json())
print(f"[RELAIS] 2. Code HTTP reçu du Pi 2 : {reponse.status_code}")
print(f"[RELAIS] 3. Texte brut reçu du Pi 2 : {reponse.text}")
if not reponse.ok:
return jsonify({
"success": False,
"message": f"Le Pi 2 a refusé la requête (Code {reponse.status_code})"
}), reponse.status_code
# Si tout va bien, on tente d'extraire le JSON
try:
data = reponse.json()
return jsonify(data)
except ValueError:
print("[RELAIS] 4. ERREUR : Le Pi 2 n'a pas renvoyé de JSON valide.")
return jsonify({"success": False, "message": "Réponse invalide du Pi 2"}), 502
except Exception as e:
return jsonify({"success": False, "message": str(e)})
print(f"[RELAIS] ERREUR CRITIQUE : Impossible de joindre le Pi 2. Raison : {e}")
return jsonify({"success": False, "message": f"Erreur de connexion : {str(e)}"}), 500
if __name__ == "__main__":