
    :_i)              
          S r SSKJrJrJrJr  SSKJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  \" S\SS	9r\" \" \R(                  5      5      / / / / S
SSSS.	r\R-                  SS/S9\S 5       5       rS rS\S\4S 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$)%u   
系统配置管理API
    )	Blueprintjsonifyrequestg)dbSystemConfigCategoryConfig)admin_required)get_config_loader)SandboxConfigsystem_configz/api/admin/system-config)
url_prefixi   i@  i,  iX  )	allowed_commandsblocked_commandsallowed_read_dirsallowed_write_dirsknowledge_executable_dirsmax_file_sizemax_output_sizecommand_timeoutdocker_timeoutz/available-optionsGET)methodsc            
      z    [         R                  R                  SS9R                  [         R                  5      R                  5       n 0 nU  GH  nUR                  5       nUR                  UR                  UR                  0 S.nU GHJ  nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S/ 5      n	/ n
US;   av  U	 Ho  n[        U[        5      (       aD  U
R                  UR                  S	5      UR                  S5      UR                  S
5      S.5        M\  U
R                  XS.5        Mq     OmUS:X  ag  U	 Ha  nUR                  SS5      nUR                  S/ 5       H6  nU
R                  UR                  S	5      UR                  S5      US.5        M8     Mc     U
(       d  GM>  UUU
S.US   U'   GMM     XAUR                  '   GM     [        SUS.5      $ ! [         a7  nSSKnUR#                  5         [        S[%        U5      S.5      S4s SnA$ SnAff = f)u<   从各方向的表单配置中动态获取所有可用选项T)enabled)idnameiconfieldsr   typelabeloptions)selectmulti_selectvaluer   )r   r   r   )r   r   multi_select_categorizedcategory items)r   r   r'   )r!   r    r"   r   )success
categoriesr   NFr*   message  )r	   query	filter_byorder_by
sort_orderallget_form_fieldsr   r   r   get
isinstancedictappendr   	Exception	traceback	print_excstr)r+   category_optionsr'   form_fieldscategory_datafieldfield_id
field_typefield_labelr"   extracted_optionsopt	cat_groupcat_nameitemer:   s                    A/Users/yu22x/Desktop/ge/ctf/app/routes/admin/system_config_api.pyget_available_optionsrK      s,   @#))33D3AJJ>KdKdeiik
 "H"224Kkk  	M % 99T?"YYv.
#ii0))Ir2 %'!!;;&%c400-44&)ggg&6(+(8(+6  .44C5MN  '  #==%,	#,==R#@$-MM'2$>D-44&*hhw&7(,(9,46  %? &- %$!, *#49M(+H5= %H -:X[[)[ #^ *
  	  1v
   	s$   G G9 1G9 9
H:,H5/H:5H:c                 2   U c  / $ [        U [        5      (       a  U nOV[        U [        5      (       a?  U R                  SS5      R	                  S5       Vs/ s H  o"R                  5       PM     nnO/ nU Vs/ s H  o3(       d  M  UPM     sn$ s  snf s  snf )u$   将输入转换为去重后的列表,
)r6   listr<   replacesplitstrip)r%   r)   vrH   s       rJ   _normalize_listrT   f   s    }	%	E3		$)MM#t$<$B$B4$HI$Hq$HI"+UTdDU++ J ,s   B8
BBdatareturnc                    [         R                  5       nUR                  [        U R	                  S5      5      [        U R	                  S5      5      [        U R	                  S5      5      [        U R	                  S5      5      [        U R	                  S5      5      S.5        S H*  n U R	                  X!U   5      nUb  [        U5      X'   M*  M,     U$ ! [         a    [         U   X'    MH  f = f)u   合并并规范化策略数据r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   )DEFAULT_SANDBOX_POLICYcopyupdaterT   r5   intr9   )rU   policykeyvals       rJ   _normalize_policyr_   t   s    #((*F
MM+DHH5G,HI+DHH5G,HI,TXX6I-JK-dhh7K.LM%4TXX>Y5Z%[  Y	6((3s,C!#h  Y M  	605FK	6s   *$CC/.C/z/ai-sandboxc                  |    [         R                  " S[        5      =(       d    0 n [        U 5      n[	        SUS.5      $ )u   获取 AI 沙箱策略ai_sandbox_policyT)r*   r\   )r   
get_configrX   r_   r   )r\   
normalizeds     rJ   get_ai_sandbox_policyrd      s8     $$%8:PQWUWF"6*Jtz:;;    POSTc                  H    [         R                  " 5       =(       d    0 n [        U 5      n[        R                  " SUSS5        [        SU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   更新 AI 沙箱策略ra   uL   AI 工具沙箱策略（命令白名单/黑名单、目录限制、阈值）aiTu   沙箱策略已更新)r*   r\   r-   F   更新失败: r,   r.   N)r   get_jsonr_   r   
set_configr   r9   r   sessionrollbackr<   )rU   r\   rI   s      rJ   update_ai_sandbox_policyrn      s    !'R"4(Z		
 46F]^__ 


'Ax0
   	s   AA 
B!9BB!B!z/generation-limitsc                       [         R                  " S0 5      n S[         R                  " 5       0n[        SU US.5      $ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAff = f)	u-   获取题目生成限制配置（按方向）category_generation_limitsallow_registrationT)r*   category_limitsglobal_configFr,   r.   N)r   rb   is_registration_enabledr   r9   r<   )rr   rs   rI   s      rJ   get_generation_limitsru      s    &112NPRS !,"F"F"H
 .*
  	
  1v
   	s   <? 
A,	A'!A,'A,c                  t    [         R                  " 5       n SU ;   a  [        R                  " SU S   SS5        SU ;   a  [        R                  " SU S   SS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-   更新题目生成限制配置（按方向）rr   rp   u$   按方向的题目生成限制配置
generationrq   uE   是否允许用户注册（关闭后只能由管理员创建用户）securityTu   配置更新成功r,   Fri   r.   N)
r   rj   r   rk   r   r9   r   rl   rm   r<   )rU   rI   s     rJ   update_generation_limitsry      s    ! $##,&'6	  4'##$)*W	 +
  	
  


'Ax0
   	s   A&A) )
B739B2,B72B7z/upload-limitc                       SSK Jn   U R                  R                  S5      n[	        SUS.5      $ ! [
         a#  n[	        S[        U5      S.5      S4s S	nA$ S	nAff = f)
u   获取文件上传大小限制r   current_appMAX_CONTENT_LENGTHT)r*   max_sizeFr,   r.   N)flaskr|   configr5   r   r9   r<   )r|   r~   rI   s      rJ   get_upload_limitr      sq    %%%))*>? 
  	  1v
   	s   .1 
AAAAc                  f    SSK Jn   [        R                  " 5       nUR	                  S5      nUc  SU R
                  S'   O[        U5      U R
                  S'   [        R                  " SUSS5        [        S	S
S.5      $ ! [         a&  n[        SS[        U5       3S.5      S4s SnA$ SnAff = f)u*   设置文件上传大小限制（字节）r   r{   r~   Nr}   max_upload_sizeu:   文件上传大小限制（字节，None表示无限制）systemTu   上传大小限制已更新r,   Fri   r.   )r   r|   r   rj   r5   r   r[   r   rk   r   r9   r<   )r|   rU   r~   rI   s       rJ   set_upload_limitr     s    %!88J'7;K347:8}K34 	H		
 4
  	  'Ax0
   	s   A=B   
B0
B+%B0+B0z
/ui-configc                       [         R                  " S0 5      n [        SU S.5      $ ! [         a#  n[        S[	        U5      S.5      S4s SnA$ SnAff = f)u&   获取UI定制配置（统一管理）ui_customizationT)r*   r   Fr,   r.   N)r   rb   r   r9   r<   )	ui_configrI   s     rJ   get_ui_configr   $  sj     ++,>C	
  	  1v
   	s   $' 
AA	AAc                  B    [         R                  " 5       n U R                  S0 5      n[        R                  " SUSS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&   更新UI定制配置（统一管理）r   r   u8   UI定制配置（页面标题、主色调、描述等）uiTu   UI配置更新成功r,   Fri   r.   N)r   rj   r5   r   rk   r   r9   r   rl   rm   r<   )rU   r   rI   s      rJ   update_ui_configr   6  s    !HHXr*	F		
 -
  	  


'Ax0
   	s   AA 
B9BBBN)#__doc__r   r   r   r   r   app.models.database.modelsr   r   r	   app.services.auth.decoratorsr
   app.services.configr   app.services.ai.toolsr   __name__system_config_bpsortedrO   DEFAULT_ALLOWED_COMMANDSrX   routerK   rT   r7   r_   rd   rn   ru   ry   r   r   r   r    re   rJ   <module>r      s$   1 0 G G 7 1 /_hC]^  tM$J$JKL!#%
  ,ug>B  ?BT,D T , w7<  8< x8  9, ,ug>  ?. ,vh?!  @!T %9  :" &:  ;> ug6  7  vh7  8re   