
    Yi'                     4   S r SSKJrJr  SSKJr  SSKJrJrJ	r	J
r
JrJrJr  SSKJr  SSKJrJr  \R&                  " SS	/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       r\R&                  " SS	/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       r\R&                  " SS/S
9\S 5       5       rg)uI   
管理员用户管理 API

提供用户 CRUD、权限管理等功能。
    )requestjsonify)generate_password_hash)dbUserCategoryAdminCategoryConfigRoleChallengeRecordDeploymentRecord   )admin_bp)admin_requiredsuperadmin_requiredz/api/user/<int:user_id>GET)methodsc           
          [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R                  R                  U S9R                  5       n[        R                  R                  U S9R                  5       nUR                  UR                  UR                  UR                  UR                  UR                  (       a  UR                  R                  S5      OSUR                  (       a  UR                  R                  S5      OSUUS.	n[        S	US
.5      $ ! [          a&  n[        SS[#        U5       3S.5      S4s SnA$ SnAff = f)u   获取用户详情F   用户不存在successmessage  user_idz%Y-%m-%d %H:%MN)	idusernameemailrole	is_active
created_at
last_loginchallenge_countdeployment_countT)r   datau   错误:   )r   querygetr   r   	filter_bycountr   r   r   r   r   r   r    strftimer!   	Exceptionstr)r   userr"   r#   	user_dataes         C   /Users/yu22x/Desktop/ddd_副本131/ctf/app/routes/admin/user_api.pyapi_get_userr1      s(   Pzz~~g&u9JKLcQQ *//99'9JPPR+11;;G;LRRT ''ZZIIHL$//223CD]aHL$//223CD]a. 0

	 4;<< P5xAx5HIJCOOPs#   5D2 C9D2 2
E"<EE"E"POSTc                     [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R
                  " 5       nSU;   ai  US   (       a_  [         R                  R                  US   S9R                  5       nU(       a   UR                  U :w  a  [        SSS.5      S4$ US   Ul	        S	U;   a  US	   S
;   a
  US	   Ul
        SU;   a  [        US   5      Ul        SU;   a  US   (       a  [        US   SS9Ul        [        R                   R#                  5         [        SSS.5      $ ! [$         aD  n[        R                   R'                  5         [        SS[)        U5       3S.5      S4s SnA$ SnAff = f)u   更新用户信息Fr   r   r   r   r   u   该邮箱已被使用  r   )r-   	moderatoradminr   passwordpbkdf2:sha256methodTu   用户信息更新成功u   更新失败: r%   N)r   r&   r'   r   r   get_jsonr(   firstr   r   r   boolr   r   password_hashr   sessioncommitr+   rollbackr,   )r   r-   r$   existing_userr/   s        r0   api_update_userrD   /   sk    Vzz~~g&u9JKLcQQ! d?tG} JJ00tG}0EKKMM!1!1W!<5=TUVX[[[gDJ T>d6l.LLVDI $!${"34DN $z"2!7Z8HQ`!aD


44NOPP V


5~c!fX5NOPRUUUVs*   5D< A9D< 2B	D< <
F
9F?F
F
z/api/user/createc            
          [         R                  " 5       n U R                  S5      (       d  [        SSS.5      S4$ U R                  S5      (       d  [        SSS.5      S4$ U R                  S5      (       d  [        SS	S.5      S4$ [        R
                  R                  U S   S
9R                  5       (       a  [        SSS.5      S4$ [        R
                  R                  U S   S9R                  5       (       a  [        SSS.5      S4$ [	        U S   U S   [        U S   SS9U R                  SS5      U R                  SS5      S9n[        R                  R                  U5        [        R                  R                  5         [        SSUR                  S.5      $ ! [         aD  n[        R                  R                  5         [        SS[!        U5       3S.5      S4s SnA$ SnAff = f)u   创建新用户r   Fu   用户名不能为空r   r5   r   u   邮箱不能为空r8   u   密码不能为空)r   u   用户名已存在r4   u   邮箱已被使用r9   r:   r   r-   r   T)r   r   r?   r   r   u   用户创建成功)r   r   r   u   创建失败: r%   N)r   r<   r'   r   r   r&   r(   r=   r   r   r@   addrA   r   r+   rB   r,   )r$   new_userr/   s      r0   api_create_userrH   U   s   "V! xx
##u9PQRTWWWxx  u9MNOQTTTxx
##u9MNOQTTT ::j)9:@@BBu9MNOQTTT ::d7m4::<<u9MNOQTTT *%w-0j1A/Z&&)hh{D1
 	

x 


44HU]U`U`abb V


5~c!fX5NOPRUUUVs=   :F# %F# #%F# 	AF# AF# BF# #
G1-9G,&G1,G1DELETEc                 v    [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ UR                  [
        R                  :X  a  [        SSS.5      S4$ [        R                  R                  U S9R                  5         [        R                  R                  U5        [        R                  R                  5         [        SS	UR                   S
3S.5      $ ! [         aD  n[        R                  R                  5         [        SS[!        U5       3S.5      S4s SnA$ SnAff = f)u*   删除用户 - 仅超级管理员可操作Fr   r   r   u   不能删除超级管理员i  r   Tu   用户 u
    已删除u   删除失败: r%   N)r   r&   r'   r   r   r
   ADMINr   r(   deleter   r@   rA   r   r+   rB   r,   )r   r-   r/   s      r0   api_delete_userrM   ~   s   Vzz~~g&u9JKLcQQ 99

"u9VWXZ]]] 	%%g%6==? 	

$


4gdmm_J4WXYY V


5~c!fX5NOPRUUUVs)   5C* -C* &BC* *
D849D3-D83D8z#/api/user/<int:user_id>/permissionsc           	          [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R                  R                  U S9R                  5       n[        SUR                  UR                  UR                  UR                  S.U Vs/ s H  o3R                  5       PM     snS.5      $ s  snf ! [         a#  n[        S[        U5      S.5      S	4s S
nA$ S
nAff = f)u   获取用户的方向权限Fr   r   errorr   r   T)r   r   r   r   )r   r-   permissionsr%   N)r   r&   r'   r   r   r(   allr   r   r   r   to_dictr+   r,   )r   r-   rQ   pr/   s        r0   api_get_user_permissionsrU      s    Azz~~g&u7HIJCOO $))33G3DHHJgg MM			 2==AIIK=	
 	 		 > A53q6:;S@@As5   5C A#C B=4C =C 
C/C*$C/*C/c           
      r    [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R
                  " 5       nUR                  S5      nUR                  SS5      nU(       d  [        SSS.5      S	4$ [        R                  R                  U5      nU(       d  [        SS
S.5      S4$ [        R                  R                  U US9R                  5       nU(       a  XFl
        O*[        U UUS9n[        R                  R                  U5        [        R                  R                  5         [        SSUR                   SUR                    SU S3S.5      $ ! ["         aA  n[        R                  R%                  5         [        S['        U5      S.5      S4s SnA$ SnAff = f)u   设置用户的方向权限Fr   rO   r   category_idr   editoru   方向ID不能为空r5   u   方向不存在r   rW   r   rW   r   Tu
   已授予 u    对 u    的u   权限r   r%   N)r   r&   r'   r   r   r<   r	   r   r(   r=   r   r   r@   rF   rA   r   namer+   rB   r,   )	r   r-   r$   rW   r   categoryexistingnew_permissionr/   s	            r0   api_set_user_permissionr_      s   +Azz~~g&u7HIJCOO!hh}-xx)u7MNOQTTT "''++K8u7HIJCOO !&&00# 1 
 %' 	
  M +'N
 JJNN>*


#DMM?%d4&PVW
  	  A


53q6:;S@@As0   5E+ AE+ 5E+ =B-E+ +
F656F1+F61F6z1/api/user/<int:user_id>/permissions/<category_id>c                     [         R                  R                  U US9R                  5       nU(       d  [	        SSS.5      S4$ [
        R                  R                  U5        [
        R                  R                  5         [	        SSS.5      $ ! [         aA  n[
        R                  R                  5         [	        S[        U5      S.5      S	4s S
nA$ S
nAff = f)u   删除用户的方向权限rY   Fu   权限记录不存在rO   r   Tu   权限已删除r   r%   N)r   r&   r(   r=   r   r   r@   rL   rA   r+   rB   r,   )r   rW   
permissionr/   s       r0   api_delete_user_permissionrb      s    A"((22# 3 
 %' 	
 u7NOPRUUU


*%


44EFGG A


53q6:;S@@As%   AB A
B 
C6CCCz)/api/user/<int:user_id>/permissions/batchc                     [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R
                  " 5       nUR                  S/ 5      n[        R                  R                  U S9R                  5         U HY  nUR                  S5      nUR                  SS	5      nU(       d  M/  [        U UUS
9n[        R                  R                  U5        M[     [        R                  R                  5         [        SSUR                   S3S.5      $ ! [         aA  n[        R                  R                  5         [        S[!        U5      S.5      S4s SnA$ SnAff = f)u   批量设置用户权限Fr   rO   r   rQ   r   rW   r   rX   rZ   Tu
   已更新 u    的权限配置r   r%   N)r   r&   r'   r   r   r<   r   r(   rL   r   r@   rF   rA   r   r+   rB   r,   )	r   r-   r$   rQ   permrW   r   r^   r/   s	            r0   api_batch_set_permissionsre      s<    Azz~~g&u7HIJCOO!hh}b1 	%%g%6==?  D((=1K88FH-D{!.# +"
 

~.   	

#DMM?2BC
  	  A


53q6:;S@@As*   5D# A?D# ;A'D# #
E.-6E)#E.)E.N)__doc__flaskr   r   werkzeug.securityr   app.models.database.modelsr   r   r   r	   r
   r   r    r   app.services.auth.decoratorsr   r   router1   rD   rH   rM   rU   r_   rb   re        r0   <module>ro      s  
 # 4    L 
)E7;P  <P6 
)F8<"V  ="VH 
"VH5$V  6$VN 
)H:>V  ?V6 
5wGA  HA0 
5xH-A  I-A` 
ChZXA  YA( 
;fXN"A  O"Arn   