107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
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)
|