
    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y)    )datetime	timedeltatimezoneN)JWTErrorjwt)select)AsyncSession)get_settings)Account)UserProfilepasswordreturnc                     t        j                  | j                  d      t        j                               j	                  d      S Nzutf-8)bcrypthashpwencodegensaltdecode)r   s    F/mnt/c/Users/DipsyHou/Desktop/workspace/TheGreatWar/server/app/auth.pyhash_passwordr      s.    ==16>>3CDKKGTT    plainhashedc                 j    t        j                  | j                  d      |j                  d            S r   )r   checkpwr   )r   r   s     r   verify_passwordr      s%    >>%,,w/w1G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-      sX    
,,x||
$CYx'B'BCC	G ::gx22h>T>TUUr   tokenc                     	 t        j                  | t        j                  t        j                  g      S # t
        $ r Y yw xY w)u-   解码并验证 JWT token，失败返回 None)
algorithmsN)r   r   r(   r*   r+   r   )r.   s    r   decode_access_tokenr1   '   s;    zz%!4!4(BXBXAYZZ s   47 	AAdbc                    K   | j                  t        t              j                  t        j                  |k(               d {   }|j                         S 7 wN)executer   r   wherer   scalar_one_or_none)r2   r   results      r   get_account_by_usernamer9   1   sF     ::fWo33G4D4D4PQRRF$$&& S   AAAAc                    K   | j                  t        t              j                  t        j                  |k(               d {   }|j                         S 7 wr4   )r5   r   r   r6   idr7   )r2   r   r8   s      r   get_account_by_idr=   6   sD     ::fWo33GJJ'4IJKKF$$&& Lr:   nicknamec                    K   t        |t        |      |      }| j                  |       | j                          d {    | j	                  |       d {    |S 7 7 w)N)r   password_hashr>   )r   r   addflushrefresh)r2   r   r   r>   accounts        r   create_accountrE   ;   sZ     #H-G
 FF7O
((*
**W
N s!   <A"AA"A A" A")r   r   r   r   joser   r   
sqlalchemyr   sqlalchemy.ext.asyncior	   
app.configr
   
app.modelsr   app.schemasr   r(   strr   boolr   r-   dictr1   r9   r=   rE    r   r   <module>rP      s    2 2    / #  #>
UC UC UI3 I I I	V 	V 	V 	Vs td{ 'l 'c 'gPTn '
' 's 'w~ '
	\ 	S 	C 	SV 	[b 	r   