+
    (j/                     x    ^ RI HtHt ^ RIHt ^ RIHtHtHt ^ RI	H
t
Ht ^ RIt^ RIt^ RIt^ RIt^ RIt/ tR tR# )    )requestjsonify)get_db)get_user_id_from_tokengenerate_tokenadmin_required)error_responsebuild_search_conditionsNc                 r   V P                  R R.R7      R 4       pV P                  RR.R7      R 4       pV P                  RR.R7      \        R 4       4       pV P                  R	R.R7      \        R
 4       4       pV P                  RRR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       p	V P                  RR.R7      \        R 4       4       p
V P                  RR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       pV P                  RR.R7      \        R 4       4       pR# )z/api/admin/captchaGET)methodsc                  *   \        \        P                  ! 4       4      p \        P                  ! ^^	4      p\        P                  ! ^^	4      pV RV R2pW,           pRVR\
        P
                  P                  4       /\        V &   \        RV RV/4      # )   z + z = ?answer
created_at
captcha_idquestion)	struuiduuid4randomrandintdatetimenowcaptcha_storer   )r   num1num2r   r   s        B   E:\Work\靠谱人脉\软件相关\BangBang\backend\routes\admin.pyget_captcha*register_admin_routes.<locals>.get_captcha   s    &
~~a#~~a#V3tfD) f(++//1%
j!
 *
  	    z/api/admin/loginPOSTc                     \         P                  p V P                  R 4      pV P                  R4      pV P                  R4      pV P                  R4      pV'       d	   V'       g   \        R4      # V\        9  d   \        R4      # \        V4      \        V,          R,          8w  d   \        R4      # \        V \        4       pVP                  4       p VP                  RV34       VP                  4       pV'       g   \        R	4      VP                  4        # \        P                  ! VP                  R
4      VR,          P                  R
4      4      '       d   \        P                  ! ^ 4      p\         P                   P#                  4       \         P$                  ! ^R7      ,           p	VP                  RVR,          WP'                  R4      34       VP)                  4        \+        RRRRRVRR VR ,          //4      VP                  4        # \        R	4      VP                  4        #   \,         d   p
TP/                  4        T
hRp
?
ii ; i  TP                  4        i ; i)usernamepasswordr   captchau   请输入验证码u   验证码已过期，请刷新r   u   验证码错误,SELECT * FROM admin_users WHERE username = ?u   用户名或密码错误utf-8)dayszIINSERT INTO admin_sessions (admin_id, token, expires_at) VALUES (?, ?, ?)idz%Y-%m-%d %H:%M:%SsuccessTmessageu   登录成功tokenadminN)r   jsongetr	   r   intr   cursorexecutefetchoneclosebcryptcheckpwencodesecretstoken_urlsafer   r   	timedeltastrftimecommitr   	Exceptionrollback)datar$   r%   r   r&   connr2   r.   r-   
expires_ates              r   admin_login*register_admin_routes.<locals>.admin_login    s   ||88J'88J'XXl+
((9%!"677]*!"BCCw<=4X>>!"344*%x	NNIH;WOO%E%&@A, JJL) ~~hoog6j8I8P8PQX8YZZ--b1%..224x7I7Iq7QQ
_4[%)<)<=P)QR t~Uj%
*;<	   JJL &&@A
 JJL	  	MMOG	 JJLs8   5H. AH. B%H. 
H. .I9III I%z/api/admin/mec                  N    \        R RRR\        P                  R,          //4      # )r+   Tr.   r$   )r   r   r.    r!   r   get_admin_me+register_admin_routes.<locals>.get_admin_meR   s&     	4:w}}Z?X2YZ[[r!   z/api/admin/logoutc                     \         P                  P                  R 4      p V '       d   V P                  R4      '       dh   V P	                  R4      ^,          p\        4       pVP                  4       p VP                  RV34       VP                  4         TP                  4        \        RRRR/4      #   \         d   pTP                  4        ThRp?ii ; i  TP                  4        i ; i)	AuthorizationzBearer  z*DELETE FROM admin_sessions WHERE token = ?Nr+   Tr,   u   退出成功)r   headersr0   
startswithsplitr   r2   r3   r=   r>   r?   r5   r   )auth_headerr-   rA   r2   rC   s        r   admin_logout+register_admin_routes.<locals>.admin_logoutW   s     oo))/:;11)<<%%c*1-E8D[[]FKeXV
 

	4NCDD   

s$   2#B5 5C CCC C,z/api/admin/passwordPUTc                     \         P                  p V P                  R 4      pV P                  R4      pV'       d	   V'       g   \        R4      # \	        4       pVP                  4       p VP                  RR4       VP                  4       pV'       g   \        R4      VP                  4        # \        P                  ! VP                  R4      VR,          P                  R4      4      '       d}   \        P                  ! VP                  R4      \        P                  ! 4       4      pVP                  RVR34       VP                  4        \        R	R
RR/4      VP                  4        # \        R4      VP                  4        #   \          d   pTP#                  4        ThRp?ii ; i  TP                  4        i ; i)old_passwordnew_passwordu   请输入旧密码和新密码r'   r.   u   管理员不存在r(   r%   z6UPDATE admin_users SET password = ? WHERE username = ?r+   Tr,   u   密码修改成功u   旧密码错误N)r.   )r   r/   r0   r	   r   r2   r3   r4   r5   r6   r7   r8   hashpwgensaltr=   r   r>   r?   )r@   rU   rV   rA   r2   r.   hashed_passwordrC   s           r   admin_change_password4register_admin_routes.<locals>.admin_change_passwordi   sR    ||xx/xx/<!"BCCx	NNI:VOO%E%&:; JJL ~~l11':E*<M<T<TU\<]^^"(--0C0CG0LfnnN^"_WZikrYst	4<PQR JJL &&78
 JJL	  	MMOG	 JJLs8   )4F .AF 0A+F ,
F F)F$$F))F, ,F>z/api/admin/newsc            
      @   \        \        P                  P                  R ^4      4      p \        \        P                  P                  R^
4      4      pV ^,
          V,          p\	        4       pVP                  4       p VP                  R4       VP                  4       ^ ,          pVP                  RW34       VP                  4       pV Uu. uF  p\        V4      NK  	  pp\        RVRVR V RV/4      VP                  4        # u upi   TP                  4        i ; i)pagelimitz4SELECT COUNT(*) FROM news WHERE status = "published"z
                SELECT * FROM news WHERE status = "published" 
                ORDER BY sort_order ASC, created_at DESC 
                LIMIT ? OFFSET ?
            itemstotal)r1   r   argsr0   r   r2   r3   r4   fetchalldictr   r5   )	r]   r^   offsetrA   r2   r`   rowsrowr_   s	            r   get_admin_news-register_admin_routes.<locals>.get_admin_news   s     7<<##FA./GLL$$Wb12(e#x	NNQROO%a(ENN  	"
 ??$D*./$3T#Y$E/GUGUFD'SXYZJJL	 0 JJLs   >AD D!D D Dz/api/admin/news/<int:news_id>c                 6   \        4       pVP                  4       p VP                  R V 34       VP                  4       pV'       g   \	        R4      VP                  4        # \        \        V4      4      VP                  4        #   TP                  4        i ; i)zSELECT * FROM news WHERE id = ?u   资讯不存在)r   r2   r3   r4   r	   r5   r   rc   )news_idrA   r2   rf   s   &   r   get_admin_news_item2register_admin_routes.<locals>.get_admin_news_item   sp     x		NN<wjI//#C%&78 JJL 49%JJLDJJLs   5B "B Bz/api/admin/usersc            
         \         P                  P                  R 4      p \        \         P                  P                  R^4      4      p\        \         P                  P                  R^
4      4      pV^,
          V,          p\	        4       pVP                  4       p RpRp. p. p	V '       dL   RR.p
\        W4      w  rV'       d3   Wk,          pW{,          pVP                  V4       V	P                  V4       VP                  Wy4       VP                  4       ^ ,          pVR,          pVP                  W#.4       VP                  Wh4       VP                  4       p. pV F$  p\        V4      pRVR	&   VP                  V4       K&  	  \        R
VRVRVRV/4      VP                  4        #   TP                  4        i ; i)searchr]   r^   z,SELECT * FROM users WHERE deleted_at IS NULLz3SELECT COUNT(*) FROM users WHERE deleted_at IS NULLphonenicknamez* ORDER BY created_at DESC LIMIT ? OFFSET ?******r%   r_   r`   )r   ra   r0   r1   r   r2   r
   extendr3   r4   rb   rc   appendr   r5   )rn   r]   r^   rd   rA   r2   querycount_queryparamscount_paramssearch_fieldssearch_condsearch_paramsr`   re   r_   rf   users                     r   get_admin_users.register_admin_routes.<locals>.get_admin_users   sy    !!(+7<<##FA./GLL$$Wb12(e#x 	BEOKFL!(* 5-D]-[*(E.KMM-0 ''6NN;5OO%a(EAAEMM5/*NN5)??$DECy#+Z T" 
 GUGUFD'SXYZJJLDJJLs   C=F+ +F=z/api/admin/users/<int:user_id>c                 D   \        4       pVP                  4       p VP                  R V 34       VP                  4       pV'       g   \	        R4      VP                  4        # \        V4      pRVR&   \        V4      VP                  4        #   TP                  4        i ; i)7SELECT * FROM users WHERE id = ? AND deleted_at IS NULLu   用户不存在rq   r%   )r   r2   r3   r4   r	   r5   rc   r   )user_idrA   r2   rf   r{   s   &    r   get_admin_user-register_admin_routes.<locals>.get_admin_user   s     x	NNTW^V`a//#C%&78 JJL	 9D'D4=JJLDJJLs   5B "B Bc                 b   \         P                  p\        4       pVP                  4       p . p. pR V9   d*   VP	                  R4       VP	                  VR ,          4       RV9   d*   VP	                  R4       VP	                  VR,          4       RV9   d*   VP	                  R4       VP	                  VR,          4       V'       g   \        R4      VP                  4        # VP	                  V 4       VP                  RRP                  V4       R	2V4       VP                  4        VP                  R
V 34       VP                  4       p\        V4      pRVR&   \        V4      VP                  4        #   \         d   pTP                  4        ThRp?ii ; i  TP                  4        i ; i)enabledzenabled = ?rp   znickname = ?genderz
gender = ?u   没有需要更新的字段zUPDATE users SET z, z$ WHERE id = ? AND deleted_at IS NULLr   rq   r%   N)r   r/   r   r2   rs   r	   r5   r3   joinr=   r4   rc   r   r>   r?   )	r   r@   rA   r2   update_fieldsupdate_valuesupdated_userr{   rC   s	   &        r   update_admin_user0register_admin_routes.<locals>.update_admin_user   sl    ||x	MMD $$]3$$T)_5T!$$^4$$T*%564$$\2$$T(^4 %&CD  JJL   )NN.tyy/G.HHlmo|}KKMNNTW^V`a!??,L%D'D4=
 JJL	  	MMOG	 JJLs1   BE7 
E7 #BE7 7FFFF F.DELETEc                 0   \        4       pVP                  4       p VP                  R V 34       VP                  4        \	        RRRR/4      VP                  4        #   \         d   pTP                  4        ThRp?ii ; i  TP                  4        i ; i)z:UPDATE users SET deleted_at = datetime('now') WHERE id = ?r+   Tr,   u   删除成功N)r   r2   r3   r=   r   r5   r>   r?   )r   rA   r2   rC   s   &   r   delete_admin_user0register_admin_routes.<locals>.delete_admin_user  s     x		NNY\c[efKKMItYGH
 JJL	  	MMOG	 JJLs#   1A B )A;;B  B Bz/api/admin/sms/configc                  D    ^ RI Hp  V ! 4       pRVR&   \        RRRV/4      # )r   )get_sms_configrq   aliyun_sms_access_key_secretr+   Tr@   )	utils.smsr   r   )r   configs     r   r   -register_admin_routes.<locals>.get_sms_config(  s.     	-!19-.	4899r!   c            	      f   \         P                  p \        4       pVP                  4       p . ROpV F  pW@9   g   K  VR8X  d   W,          R8X  d   K!  VP	                  RV34       VP                  4       pV'       d&   VP	                  R\        W,          4      V34       Kq  VP	                  RV\        W,          4      34       K  	  VP                  4        \        RRRR	/4      VP                  4        #   \         d   pTP                  4        ThR
p?ii ; i  TP                  4        i ; i)use_real_smsr   rq   z1SELECT id FROM system_config WHERE config_key = ?z>UPDATE system_config SET config_value = ? WHERE config_key = ?zBINSERT INTO system_config (config_key, config_value) VALUES (?, ?)r+   Tr,   u   配置更新成功N)r   aliyun_sms_access_key_idr   aliyun_sms_sign_namealiyun_sms_template_codealiyun_sms_region_id)r   r/   r   r2   r3   r4   r   r=   r   r5   r>   r?   )r@   rA   r2   config_keyskeyrf   rC   s          r   update_sms_config0register_admin_routes.<locals>.update_sms_config0  s    ||x	K #;<<hAV NN#VY\X^_ //+C'gjmnrnwjxz}i~'knqsvw{  xA  tB  nC  D # KKMItY8LMN
 JJL	  	MMOG	 JJLs0   C9 A C9 >A*C9 9DDDD D0N)router   )appr   rD   rH   rQ   rZ   rg   rk   r|   r   r   r   r   r   s   &             r   register_admin_routesr      s8   YY#eWY5 6" 	YY!F8Y4/ 5/b 	YYY0\  1\ 	YY"VHY5E  6E  	YY$vuoY>  ?< 	YY 5'Y2  30 	YY.Y@  A 	YY!E7Y3(  4(T 	YY/%YA  B  	YY/%YA#  B#J 	YY/(YD  E 	YY&Y8:  9: 	YY&Y8#  9#r!   )flaskr   r   utils.databaser   
utils.authr   r   r   utils.helpersr	   r
   r6   r   r   r   r9   r   r   rG   r!   r   <module>r      s.    " ! M M A     Hr!   