o
    "in                     @   s   d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ G dd dZedeefd	e	e d
edefddZdefddZdS )z/
API dependencies for Expert Training Platform
    )DependsHTTPExceptionstatusHeader)Session)Optional)get_dbc                   @   s$   e Zd Zd	dededefddZdS )
Userexpert   idrole	tenant_idc                 C   s   || _ || _|| _d S )Nr   r   r   )selfr   r   r    r   >/lsinfo/ai/hellotax_ai/training_center/backend/app/api/deps.py__init__   s   
zUser.__init__N)r
   r   )__name__
__module____qualname__intstrr   r   r   r   r   r	   
   s    r	   Nauthorizationdbreturnc           	         s   ddl m} | stddddS z|  \}}| dkr%tddddW S W n ty6   tdddd Y S w ddlm}m} z!|j	||j
dgd	}|d
}|sYtddddW S tt|dW S  |yp   tdddd Y S w )z7
    Get current authenticated user from JWT token
    r   )settingsr   adminr   bearer)jwtJWTErrorHS256)
algorithmssub)r   )app.core.configr   r	   splitlower
ValueErrorjoser   r    decode
SECRET_KEYgetr   )	r   r   r   schemetokenr   r    payloaduser_idr   r   r   get_current_user   s,   
r0   allowed_rolesc                     s"   t tfdtdtf fdd}|S )z6
    Dependency factory to require specific roles
    current_userr   c                    s   | j  vrttjdd| S )NzInsufficient permissions)status_codedetail)r   r   r   HTTP_403_FORBIDDEN)r2   r1   r   r   role_checker4   s   
z"require_role.<locals>.role_checker)r   r0   r	   )r1   r7   r   r6   r   require_role0   s   r8   )__doc__fastapir   r   r   r   sqlalchemy.ormr   typingr   app.core.databaser   r	   r   r0   r8   r   r   r   r   <module>   s     
 