U
    \j                     @   s   d Z ddlZddlmZ ddlmZmZmZm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ eddZeeeefee eedddZe	dddeefeeedddZdS )u5   FastAPI 依赖：JWT 会话鉴权、API Key 鉴权。    N)Optional)DependsHTTPExceptionstatusHeader)
HTTPBearerHTTPAuthorizationCredentials)Session   )get_db)UserApiKey)decode_access_tokenF)
auto_error)credsdbreturnc                 C   sh   | dks| j  dkr"ttjdt| j}|dkr@ttjd|t	|}|dkrdttjd|S )u,   用会话 JWT 鉴权（页面接口用）。Nbeareru   未携带 Bearer tokenu   token 无效或已过期u   用户不存在)
schemelowerr   r   HTTP_401_UNAUTHORIZEDr   credentialsqueryr   get)r   r   Zuser_iduser r   /root/pica-gateway/app/deps.pyget_current_user   s    
r    z	X-API-Key)defaultalias)	x_api_keyr   r   c                 C   sh   | st tjdt| }|ttj|k }|dksB|j	rNt tjdt
j |_|  |jS )u   用 X-API-Key 鉴权（外部调用接口用）。

    流程：明文 key → SHA-256 → 查库 → 命中且未吊销即通过。
    u   缺少 X-API-KeyNu   API Key 无效或已吊销)r   r   r   r   hash_keyr   filterkey_hashfirstZrevokeddtdatetimeutcnowZlast_used_atcommitr   )r!   r   r$   api_keyr   r   r   get_user_from_api_key    s    
r+   )__doc__r'   r&   typingr   fastapir   r   r   r   Zfastapi.securityr   r   sqlalchemy.ormr	   databaser   modelsr   r   securityr   Zbearer_schemer   strr+   r   r   r   r   <module>   s.   

