
    Bգi9                        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mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZ  eddg	          Z e            Z ee           ee          fd
ede	defdZe                    deej                   ee          fdede	fd            Ze                    de           ee          fdede	fd            Ze                     de           ee          fdefd            Z!dS )    )	APIRouterDependsHTTPExceptionstatus)
HTTPBearerHTTPAuthorizationCredentials)AsyncSession)create_access_tokencreate_accountdecode_access_tokenget_account_by_idget_account_by_usernameverify_password)get_db)ApiResponseAuthResponseLoginRequestRegisterRequestUserProfilez	/api/authu   认证)prefixtagscredentialsdbreturnc                   K   t          | j                  }|t          t          j        d          t          ||d                    d{V }|t          t          j        d          t          j        |          S )u0   解析 JWT 并返回当前用户，失败则 401Nu   无效或过期的 Tokenstatus_codedetailsubu   用户不存在)r   r   r   r   HTTP_401_UNAUTHORIZEDr   r   model_validate)r   r   payloadaccounts       5/root/workspace/TheGreatWar/server/app/routes/auth.pyget_current_userr%      s      
 "+"9::G(DMghhhh%b'%.99999999G(DM^____%g...    z	/register)response_modelr   bodyc                   K   t          || j                   d {V }|rt          t          j        d          t          || j        | j        | j                   d {V }t          |j	        |j                  }t          j        |          }t          t          ||                              d                    S )Nu   用户名已存在r   tokenuserjsonmodedata)r   usernamer   r   HTTP_409_CONFLICTr   passwordnicknamer
   idr   r!   r   r   
model_dump)r(   r   existingr#   r+   r,   s         r$   registerr9   (   s       -R????????H _(@I]^^^^ #2t}dmT]SSSSSSSSG  
G,<==E%g..DD111<<&<II   r&   z/login)r'   c                 l  K   t          || j                   d {V }|t          | j        |j                  st          t          j        d          t          |j	        |j                  }t          j        |          }t          t          ||                              d                    S )Nu   用户名或密码错误r   r*   r-   r.   r0   )r   r2   r   r4   password_hashr   r   r    r
   r6   r   r!   r   r   r7   )r(   r   r#   r+   r,   s        r$   loginr<   =   s      +B>>>>>>>>GodmW=RSS(DMghhhh
G,<==E%g..DD111<<&<II   r&   z/mer,   c                 N   K   t          |                     d                    S )Nr-   r.   r0   )r   r7   )r,   s    r$   mer>   M   s%      DOOO889999r&   N)"fastapir   r   r   r   fastapi.securityr   r   sqlalchemy.ext.asyncior	   app.authr
   r   r   r   r   r   app.databaser   app.schemasr   r   r   r   r   routersecurityr%   postHTTP_201_CREATEDr9   r<   getr>    r&   r$   <module>rK      sH   = = = = = = = = = = = = E E E E E E E E / / / / / /                       ] ] ] ] ] ] ] ] ] ] ] ] ] ]	+XJ	7	7	7:<< 180A0Awv/ /-// / / / /$ [&BYZZ=DWV__   l    [Z( Xk227>wv 
 
l 
 
 
 
 32
 E+..!()9!:!: : :; : : : /.: : :r&   