+
    b}j                     b    ^ RI t ^ RIHt ^ RIHtHt ^RIHt R tR t	R t
R tRR	 ltRR
 ltR# )    Nwraps)requestjsonify)get_dbc                  .    \         P                  ! ^ 4      # )    )secretstoken_urlsafe     @   E:\Work\靠谱人脉\软件相关\BangBang\backend\utils\auth.pygenerate_tokenr      s      $$r   c                 0   a  \        S 4      V 3R  l4       pV# )c                    < \         P                  P                  R 4      pV'       d   VP                  R4      '       g   \	        RRRR/4      R3# VP                  R4      ^,          p\        4       pVP                  4       pVP                  RV34       VP                  4       pVP                  4        V'       g   \	        RRRR	/4      R3# \        V4      \         n        S! V / VB # )
AuthorizationzBearer successFerroru   请先登录i   z
            SELECT a.* FROM admin_users a
            JOIN admin_sessions s ON a.id = s.admin_id
            WHERE s.token = ? AND s.expires_at > datetime('now')
        u!   登录已过期，请重新登录)r   headersget
startswithr   splitr   cursorexecutefetchoneclosedictadmin)argskwargsauth_headertokenconnr   r   fs   *,     r   decorated_function*admin_required.<locals>.decorated_function
   s    oo))/:+"8"8"C"CIug~FGLL!!#&q)x  X		
 !

Iug7Z[\^aaaU$!&!!r   r   )r%   r&   s   f r   admin_requiredr(   	   s!    
1X" ", r   c                     V '       g   R # \        4       pVP                  4       pVP                  RV 34       VP                  4       pVP	                  4        V'       g   R # \        V4      p\        V4      VR&   V# )Nz
        SELECT u.* FROM users u
        JOIN sessions s ON u.id = s.user_id
        WHERE s.token = ? AND s.expires_at > datetime('now') AND u.deleted_at IS NULL
    location)r   r   r   r   r   r   build_location)r#   r$   r   rowusers   &    r   get_user_from_tokenr.   #   sl    8D[[]F
NN  	
 //
CJJL9D%d+DKr   c                     V '       g   R # \        4       pVP                  4       pVP                  RV 34       VP                  4       pVP	                  4        V'       d
   VR,          # R # )Nz
        SELECT u.id FROM users u
        JOIN sessions s ON u.id = s.user_id
        WHERE s.token = ? AND s.expires_at > datetime('now') AND u.deleted_at IS NULL
    id)r   r   r   r   r   )r#   r$   r   r,   s   &   r   get_user_id_from_tokenr1   5   sZ    8D[[]F
NN  	
 //
CJJL3t9%%r   c                @   \        4       pVP                  4       p V '       d   VP                  RV 34       M/V'       d   VP                  RV34       M VP                  4        R# VP	                  4       pVRJVP                  4        #   TP                  4        i ; i)u`   
通过token或user_id检查是否是管理员
如果是管理员返回True，否则返回False
z
                SELECT a.id FROM admin_users a
                JOIN admin_sessions s ON a.id = s.admin_id
                WHERE s.token = ? AND s.expires_at > datetime('now')
            z[
                SELECT a.id FROM admin_users a
                WHERE a.id = ?
            FN)r   r   r   r   r   )r#   user_idr$   r   r,   s   &&   r   get_admin_from_tokenr4   C   s    
 8D[[]FNN  	
 NN  
 
 	

 oo$



s   #B  B 'B Bc                 "   . pV P                  R 4      '       d   VP                  V R ,          4       V P                  R4      '       dw   VP                  V R,          4       V P                  R4      '       dH   VP                  V R,          4       V P                  R4      '       d   VP                  V R,          4       V'       d0   V P                  R4      '       d   VP                  V R,          4       V'       d   RP                  V4      # R# )provincecitydistrictstreetdetail_location/N)r   appendjoin)datainclude_detaillocation_partss   && r   r+   r+   ^   s    Nxx
d:./88F!!$v,/xx
##%%d:&6788H%%"))$x.9$((#455d#456'5388N#?4?r   )NN)F)r
   	functoolsr   flaskr   r   databaser   r   r(   r.   r1   r4   r+   r   r   r   <module>rD      s0      " %4$&6@r   