
    ҡ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j9                  deej:                         ee      fdede	fd       Zej9                  de       ee      fdede	fd       ZejA                  de       ee      fdefd       Z!y)    )	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{   }|t        t        j                  d      t        j                  |      S 7 6w)u0   解析 JWT 并返回当前用户，失败则 401Nu   无效或过期的 Tokenstatus_codedetailsubu   用户不存在)r   r   r   r   HTTP_401_UNAUTHORIZEDr   r   model_validate)r   r   payloadaccounts       M/mnt/c/Users/DipsyHou/Desktop/workspace/TheGreatWar/server/app/routes/auth.pyget_current_userr%      ss     
 "+"9"9:G(D(DMghh%b'%.99G(D(DM^__%%g..	 :s   AB A>7B z	/register)response_modelr   bodyc                   K   t        || j                         d {   }|rt        t        j                  d      t        || j                  | j                  | j                         d {   }t        |j                  |j                        }t        j                  |      }t        t        ||      j                  d            S 7 7 bw)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$   registerr8   (   s      -R??H(@(@I]^^ #2t}}dmmT]]SSG  

G,<,<=E%%g.DD1<<&<I  @
 Ts#   CCAC-C.A!CCz/login)r&   c                 |  K   t        || j                         d {   }| t        | j                  |j                        st        t        j                  d      t        |j                  |j                        }t        j                  |      }t        t        ||      j                  d            S 7 w)Nu   用户名或密码错误r   r)   r,   r-   r/   )r   r1   r   r3   password_hashr   r   r    r
   r5   r   r!   r   r   r6   )r'   r   r#   r*   r+   s        r$   loginr;   =   s     +B>>GodmmW=R=RS(D(DMghh

G,<,<=E%%g.DD1<<&<I  ?s   B<B:BB<z/mer+   c                 B   K   t        | j                  d            S w)Nr,   r-   r/   )r   r6   )r+   s    r$   mer=   M   s     DOOO899s   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_CREATEDr8   r;   getr=        r$   <module>rK      s   = = E /    ] ]	+XJ	7< 180Av/-// /$ [&BYBYZ=DV_  l  [( Xk27>v 
l 
 
 3
 E+.!()9!: :; : /:rJ   