paijo77 commited on
Commit
cdd38c8
·
verified ·
1 Parent(s): aeba6f7

update app/dependencies.py

Browse files
Files changed (1) hide show
  1. app/dependencies.py +56 -0
app/dependencies.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import Depends, HTTPException, status, Cookie
2
+ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
3
+ from sqlalchemy.ext.asyncio import AsyncSession
4
+ from sqlalchemy import select
5
+ from typing import Optional
6
+
7
+ from app.database import get_db
8
+ from app.db_models import User
9
+ from app.auth import verify_token
10
+
11
+ security = HTTPBearer(auto_error=False)
12
+
13
+
14
+ async def get_current_user(
15
+ credentials: Optional[HTTPAuthorizationCredentials] = Depends(security),
16
+ token: Optional[str] = Cookie(None, alias="access_token"),
17
+ session: AsyncSession = Depends(get_db),
18
+ ) -> Optional[User]:
19
+ jwt_token = None
20
+ if credentials:
21
+ jwt_token = credentials.credentials
22
+ elif token:
23
+ jwt_token = token
24
+
25
+ if not jwt_token:
26
+ return None
27
+
28
+ payload = verify_token(jwt_token)
29
+ if not payload:
30
+ return None
31
+
32
+ user_id = payload.get("sub")
33
+ if not user_id:
34
+ return None
35
+
36
+ result = await session.execute(select(User).where(User.id == int(user_id)))
37
+ user = result.scalar_one_or_none()
38
+ return user
39
+
40
+
41
+ async def require_user(
42
+ current_user: Optional[User] = Depends(get_current_user),
43
+ ) -> User:
44
+ if not current_user:
45
+ raise HTTPException(
46
+ status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated"
47
+ )
48
+ return current_user
49
+
50
+
51
+ async def require_admin(current_user: User = Depends(require_user)) -> User:
52
+ if current_user.role != "admin":
53
+ raise HTTPException(
54
+ status_code=status.HTTP_403_FORBIDDEN, detail="Admin access required"
55
+ )
56
+ return current_user