-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmain_basic_auth_etape2.py
More file actions
64 lines (54 loc) · 2.04 KB
/
main_basic_auth_etape2.py
File metadata and controls
64 lines (54 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from sqlalchemy.orm import Session
from contextlib import asynccontextmanager
from passlib.context import CryptContext
import logging
from db import get_db
from init_db2 import init_db
from models import User
"""
Mettre en place la vérification des données de l'utilisateur avec
un mot de passe hashé.
"""
@asynccontextmanager
async def lifespan(app: FastAPI):
init_db()
print("DB initialisée")
yield
print("App arrêtée")
app = FastAPI(lifespan=lifespan)
security = HTTPBasic()
pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")
def basic_auth(db: Session = Depends(get_db), credentials: HTTPBasicCredentials = Depends(security)):
"""
Mettre en place ici l'accès à la base de données
:param credentials: contient le username et le password
:return: le user provenant de la base de données
"""
return {"username":credentials.username, "password":credentials.password}
@app.get("/users")
def users(db: Session = Depends(get_db)):
return db.query(User).all()
@app.get("/protected/users")
def protected(db: Session = Depends(get_db), _user=Depends(basic_auth)):
"""
Fournit la liste des utilisateurs mais le user/mot de passe de l'utilisateur ne sont pas vérifiées
:param db: accès base de données
:param _user: le user est fourni par la fonction basic_auth_noop
:return:
"""
return db.query(User).all()
@app.get('/protected/users/{user_id}')
def get_user(user_id, db: Session = Depends(get_db), _user=Depends(basic_auth)):
# Validation : ID positif
if user_id <= 0:
raise HTTPException(status_code=400, detail="Invalid user ID")
# Validation : utilisateur existe
user_db = db.get(User, user_id)
if not user_db:
raise HTTPException(status_code=404, detail="User not found")
# Validation : permissions
if _user.id != user_db.id:
raise HTTPException(status_code=403, detail="Access Denied")
return user_db