
    Bգi	              
           d dl m Z mZmZ d dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  e            Zd	ed
efdZdeded
efdZdeded
efdZded
edz  fdZde
ded
edz  fdZde
ded
edz  fdZde
ded	eded
ef
dZdS )    )datetime	timedeltatimezoneN)JWTErrorjwt)select)AsyncSession)get_settings)Account)UserProfilepasswordreturnc                     t          j        |                     d          t          j                                                  d          S Nzutf-8)bcrypthashpwencodegensaltdecode)r   s    ./root/workspace/TheGreatWar/server/app/auth.pyhash_passwordr      s6    =116>3C3CDDKKGTTT    plainhashedc                 x    t          j        |                     d          |                    d                    S r   )r   checkpwr   )r   r   s     r   verify_passwordr      s,    >%,,w//w1G1GHHHr   user_idusernamec                     t          j        t          j                  }| |||t	          t
          j                  z   d}t          j        |t
          j	        t
          j
                  S )u   生成 JWT token)minutes)subr   iatexp)	algorithm)r   nowr   utcr   settingsJWT_EXPIRE_MINUTESr   r   
JWT_SECRETJWT_ALGORITHM)r   r   r&   payloads       r   create_access_tokenr-      s]    
,x|
$
$CYx'BCCCC	 G :gx2h>TUUUUr   tokenc                 ~    	 t          j        | t          j        t          j        g          S # t
          $ r Y dS w xY w)u-   解码并验证 JWT token，失败返回 None)
algorithmsN)r   r   r(   r*   r+   r   )r.   s    r   decode_access_tokenr1   '   sI    z%!4(BXAYZZZZ   tts   +. 
<<dbc                    K   |                      t          t                                        t          j        |k                         d {V }|                                S N)executer   r   wherer   scalar_one_or_none)r2   r   results      r   get_account_by_usernamer9   1   sW      ::fWoo33G4D4PQQRRRRRRRRF$$&&&r   c                    K   |                      t          t                                        t          j        |k                         d {V }|                                S r4   )r5   r   r   r6   idr7   )r2   r   r8   s      r   get_account_by_idr<   6   sV      ::fWoo33GJ'4IJJKKKKKKKKF$$&&&r   nicknamec                    K   t          |t          |          |          }|                     |           |                                  d {V  |                     |           d {V  |S )N)r   password_hashr=   )r   r   addflushrefresh)r2   r   r   r=   accounts        r   create_accountrD   ;   s      #H--  G
 FF7OOO
((**
**W

Nr   )r   r   r   r   joser   r   
sqlalchemyr   sqlalchemy.ext.asyncior	   
app.configr
   
app.modelsr   app.schemasr   r(   strr   boolr   r-   dictr1   r9   r<   rD    r   r   <module>rO      s   2 2 2 2 2 2 2 2 2 2                / / / / / / # # # # # #       # # # # # #<>>
UC UC U U U UI3 I I I I I I	V 	V 	V 	V 	V 	V 	Vs td{    'l 'c 'gPTn ' ' ' '
' 's 'w~ ' ' ' '
	\ 	S 	C 	SV 	[b 	 	 	 	 	 	r   