from flask import Flask, jsonify, render_template, request, redirect, url_for, session from flask_cors import CORS from config import Config import psycopg2 app = Flask(__name__) app.config.from_object(Config) app.secret_key = app.config["SECRET_KEY"] CORS(app) conn = psycopg2.connect( host="localhost", port=5432, database="ecocharge", user="eco", password="eco_pass" ) @app.route("/") def home(): return jsonify({ "message": "API EcoCharge en ligne" }) @app.route("/api/status") def status(): return jsonify({ "project": "EcoCharge", "api": "ok", "database": "postgresql_connected" }) @app.route("/admin/login", methods=["GET", "POST"]) def admin_login(): if request.method == "POST": username = request.form.get("username") password = request.form.get("password") if username == "admin" and password == "admin123": session["admin_logged_in"] = True return redirect(url_for("admin_dashboard")) return render_template("login.html", error="Identifiants incorrects") return render_template("login.html") @app.route("/admin/dashboard", methods=["GET", "POST"]) def admin_dashboard(): if not session.get("admin_logged_in"): return redirect(url_for("admin_login")) cur = conn.cursor() if request.method == "POST": min_battery = request.form.get("min_battery") max_temp = request.form.get("max_temp") min_power = request.form.get("min_power") cur.execute(""" INSERT INTO settings (key, value) VALUES ('min_battery_voltage', %s) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value """, (min_battery,)) cur.execute(""" INSERT INTO settings (key, value) VALUES ('max_battery_temperature', %s) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value """, (max_temp,)) cur.execute(""" INSERT INTO settings (key, value) VALUES ('min_solar_power', %s) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value """, (min_power,)) conn.commit() cur.execute("SELECT value FROM settings WHERE key = 'min_battery_voltage'") row1 = cur.fetchone() cur.execute("SELECT value FROM settings WHERE key = 'max_battery_temperature'") row2 = cur.fetchone() cur.execute("SELECT value FROM settings WHERE key = 'min_solar_power'") row3 = cur.fetchone() settings = { "min_battery": row1[0] if row1 else "10.5", "max_temp": row2[0] if row2 else "45", "min_power": row3[0] if row3 else "5" } return render_template("admin_dashboard.html", settings=settings) @app.route("/admin/logout") def admin_logout(): session.pop("admin_logged_in", None) return redirect(url_for("admin_login")) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True)