BuildTools commited on
Commit
7dd1415
·
1 Parent(s): 147aca7

nouveau Back

Browse files
Files changed (2) hide show
  1. main.py +53 -45
  2. requirements.txt +1 -2
main.py CHANGED
@@ -1,50 +1,58 @@
1
- from fastapi import FastAPI, HTTPException, Depends
 
 
 
 
2
  from pymongo import MongoClient
3
- from pydantic import BaseModel
4
- from bson.objectid import ObjectId
5
- import hashlib
6
- import os
7
 
8
  app = FastAPI()
 
 
9
 
10
- # Connexion à MongoDB
11
- MONGO_URL = "mongodb+srv://lebaykserver:mVef8e5F1GRtbA14@test.6bzxp.mongodb.net/"
12
- client = MongoClient(MONGO_URL)
13
- db = client["IA_SIGNATURE"] # Remplace "mydatabase" par le nom de ta base
14
- users_collection = db["USER"]
15
-
16
- # Modèle de connexion
17
- class LoginModel(BaseModel):
18
- name: str
19
- etablissement: str
20
- hashed_password: str
21
-
22
- def hash_password(password: str) -> str:
23
- return hashlib.sha256(password.encode()).hexdigest()
24
-
25
- @app.post("/login")
26
- def login(user: LoginModel):
27
- hashed_password = hash_password(user.hashed_password)
28
- found_user = users_collection.find_one({
29
- "name": user.name,
30
- "etablissement": user.etablissement,
31
- "hashed_password": hashed_password
 
 
 
 
 
 
 
 
 
 
32
  })
33
-
34
- if not found_user:
35
- raise HTTPException(status_code=401, detail="Identifiants invalides")
36
-
37
- return {"message": "Connexion réussie", "user_id": str(found_user["_id"]) }
38
-
39
- @app.post("/register")
40
- def register(user: LoginModel):
41
- if users_collection.find_one({"name": user.name, "etablissement": user.etablissement}):
42
- raise HTTPException(status_code=400, detail="Utilisateur déjà existant")
43
-
44
- user_data = {
45
- "name": user.name,
46
- "etablissement": user.etablissement,
47
- "hashed_password": hash_password(user.hashed_password)
48
- }
49
- inserted_id = users_collection.insert_one(user_data).inserted_id
50
- return {"message": "Utilisateur enregistré", "user_id": str(inserted_id)}
 
1
+ # backend.py
2
+ from fastapi import FastAPI, Request, Depends, HTTPException
3
+ from fastapi.responses import HTMLResponse, RedirectResponse
4
+ from fastapi.staticfiles import StaticFiles
5
+ from fastapi.templating import Jinja2Templates
6
  from pymongo import MongoClient
7
+ from starlette.middleware.sessions import SessionMiddleware
 
 
 
8
 
9
  app = FastAPI()
10
+ app.mount("/static", StaticFiles(directory="static"), name="static")
11
+ app.add_middleware(SessionMiddleware, secret_key="votre_secret_key_secure")
12
 
13
+ # Configuration MongoDB
14
+ client = MongoClient("mongodb+srv://lebaykserver:mVef8e5F1GRtbA14@test.6bzxp.mongodb.net/")
15
+ db = client["auth_demo"]
16
+ users = db["users"]
17
+ establishments = db["establishments"]
18
+
19
+ # Créer quelques données de test
20
+ if establishments.count_documents({}) == 0:
21
+ establishments.insert_many([{"name": "École 1"}, {"name": "Université A"}, {"name": "Lycée B"}])
22
+
23
+ @app.get("/", response_class=HTMLResponse)
24
+ async def root(request: Request):
25
+ if not request.session.get("user"):
26
+ return RedirectResponse(url="/login")
27
+ return templates.TemplateResponse("dashboard.html", {"request": request})
28
+
29
+ @app.get("/login", response_class=HTMLResponse)
30
+ async def login_page(request: Request):
31
+ if request.session.get("user"):
32
+ return RedirectResponse(url="/")
33
+ return templates.TemplateResponse("login.html", {"request": request})
34
+
35
+ @app.get("/api/establishments")
36
+ async def get_establishments():
37
+ return [e["name"] for e in establishments.find({}, {"_id": 0, "name": 1})]
38
+
39
+ @app.get("/api/login")
40
+ async def login(request: Request, username: str, password: str, establishment: str):
41
+ user = users.find_one({
42
+ "username": username,
43
+ "password": password,
44
+ "establishment": establishment
45
  })
46
+ if not user:
47
+ raise HTTPException(status_code=401, detail="Identifiants incorrects")
48
+ request.session["user"] = username
49
+ return {"status": "success"}
50
+
51
+ @app.get("/api/logout")
52
+ async def logout(request: Request):
53
+ request.session.pop("user", None)
54
+ return RedirectResponse(url="/login")
55
+
56
+ @app.get("/api/check_session")
57
+ async def check_session(request: Request):
58
+ return {"authenticated": bool(request.session.get("user"))}
 
 
 
 
 
requirements.txt CHANGED
@@ -1,4 +1,3 @@
1
  fastapi
2
  pymongo
3
- motor
4
- uvicorn
 
1
  fastapi
2
  pymongo
3
+ uvicorn