33
44from typing import Annotated
55
6- from fastapi import Depends , HTTPException , Request , Security , status
6+ from fastapi import Depends , HTTPException , Security , status
77from fastapi .security import APIKeyCookie , APIKeyHeader
88from kink import di
99
1010from beeai_server .auth .utils import decode_jwt_token , extract_token
1111from beeai_server .configuration import Configuration
12-
13- from .models import AuthenticatedUser
12+ from beeai_server .domain .models .user import User , UserRole
13+ from beeai_server .exceptions import EntityNotFoundError
14+ from beeai_server .service_layer .services .users import UserService
1415
1516ConfigurationDependency = Annotated [Configuration , Depends (lambda : di [Configuration ])]
17+ UserServiceDependency = Annotated [UserService , Depends (lambda : di [UserService ])]
1618
1719api_key_cookie = APIKeyCookie (name = "beeai-platform" , auto_error = False )
1820api_key_header = APIKeyHeader (name = "Authorization" , auto_error = False )
19- # api_key_header = HTTPBearer(auto_error=False)
20-
21-
22- async def get_current_user (request : Request ) -> AuthenticatedUser :
23- user = request .user
24- if not user or not user .is_authenticated :
25- raise HTTPException (status_code = 401 , detail = "Not authenticated" )
26- return user
2721
2822
2923async def get_authenticated_user (
24+ user_service : UserServiceDependency ,
3025 configuration : ConfigurationDependency ,
3126 cookie_token : Annotated [str | None , Security (api_key_cookie )],
3227 header_token : Annotated [str | None , Security (api_key_header )],
33- ) -> AuthenticatedUser :
28+ ) -> User :
3429 if configuration .oidc .disable_oidc :
3530 # Bypass OIDC validation — return a default user for dev/testing mode
36- return AuthenticatedUser (
37- uid = "dev-user" ,
38- is_admin = True ,
39- display_name = "dev user" ,
40- email = "user@beeai.dev" ,
41- )
31+ return await user_service .get_user_by_email ("admin@beeai.dev" )
4232 try :
4333 token = extract_token (header_token , cookie_token )
4434 except Exception as e :
@@ -56,19 +46,20 @@ async def get_authenticated_user(
5646 email = claims .get ("email" )
5747 is_admin = email in configuration .oidc .admin_emails
5848
59- return AuthenticatedUser (
60- uid = claims .get ("sub" ),
61- is_admin = is_admin ,
62- display_name = claims .get ("displayName" ),
63- email = claims .get ("email" ),
64- )
49+ try :
50+ authenticated_user = await user_service .get_user_by_email (email = email )
51+ except EntityNotFoundError :
52+ role = UserRole .admin if is_admin else UserRole .user
53+ authenticated_user = await user_service .create_user (email = email , role = role )
54+
55+ return authenticated_user
6556
6657
67- def check_admin (user : Annotated [AuthenticatedUser , Depends (get_authenticated_user )]) -> AuthenticatedUser :
68- if not user .is_admin :
58+ def check_admin (user : Annotated [User , Depends (get_authenticated_user )]) -> User :
59+ if user .role != UserRole . admin :
6960 raise HTTPException (status_code = status .HTTP_403_FORBIDDEN , detail = "Admin privileges required" )
7061 return user
7162
7263
73- AuthenticatedUserDependency = Annotated [AuthenticatedUser , Depends (get_authenticated_user )]
64+ AuthenticatedUserDependency = Annotated [User , Depends (get_authenticated_user )]
7465AdminUserDependency = Annotated [str , Depends (check_admin )]
0 commit comments