
    R7_iP                         S SK JrJrJrJrJrJrJrJrJ	r	  S SK
Jr  \" S\5      rS rS r\R!                  SS/S9S	 5       r\R!                  S
SS/S9S 5       rg)    )		Blueprintrender_templaterequestredirecturl_forjsonifysessiongflash)update_session_statewizardc                 T     SSK Jn  UR                  R                  U 5      $ !    g= f)u2   获取方向配置，如果不存在则返回 Noner   CategoryConfigN)app.models.database.modelsr   queryget)category_idr   s     6/Users/yu22x/Desktop/ge/ctf/app/routes/pages/wizard.pyget_category_configr      s+    =##''44s    # 'c                  B     SSK Jn   U R                  5       $ !   / s $ = f)u   获取所有启用的方向r   r   )r   r   get_enabled_categoriesr   s    r   r   r      s%    =4466	s    z/generate/select-categoryGET)methodsc            
      <   [        [        S5      (       a  [        R                  c(  [        SS5        [	        [        S[        S5      S95      $ [        5       n U (       d  SSS	S
S./n[        SUS9$ [        SU  Vs/ s H  o"R                  SS9PM     snS9$ s  snf )u   选择 CTF 方向页面user   请先登录再生成题目warning
auth.loginwizard.select_categorynextwebWebglobeu   Web 安全漏洞挑战)idnameicondescriptionz*pages/generate/wizard/select_category.html)
categoriesFinclude_config)	hasattrr
   r   r   r   r   r   r   to_dict)r*   default_categoriescs      r   select_categoryr1      s     1f+Y77;S3TUVV')J  3	
  8)
 	

 4=GHZIIUI3ZH Hs   <B
z/generate/wizard/<category_id>POSTc                 	  ^^ SSK nUR                  [        5      n[        [        S5      (       a  [        R
                  c'  [        SS5        [        [        S[        SU S9S	95      $ [        U 5      nU(       a  UR                  (       d   [        S
S5        [        [        S5      5      $ [        R                  S:X  aM  [        R                  " SS5        [        R                  " SS5        UR                  SUR                    S35        [        R                  S:X  Ga  0 nUR#                  5       nUR%                  S['        [        R(                  5       35        U H  nUR+                  S5      nUR+                  S5      nUS;   a&  [        R(                  R-                  U S35      XG'   MQ  [        R(                  R+                  U5      XG'   UR%                  SU SU SXG    35        M     [        R(                  R+                  S5      n	UR                  SU	 S[/        U	5       S35        UR                  S[1        [        R(                  R3                  5       5       35        U	(       a  XS'   UR                  SU	 S 35        OUR5                  S!5        UR                  S"[1        UR3                  5       5       35        U GH  nUR+                  S5      nUR+                  S5      nUR+                  U5      n
UR+                  S#5      (       d  MO  US;   aj  U
(       a$  [7        U
[0        5      (       aL  [9        U
5      S:X  a;  S$UR+                  S%5       3n[        US5        [        [        R:                  5      s  $ M  M  U
(       a  U
S&:X  d  M  S'UR+                  S%5       3n[        US5        [        [        R:                  5      s  $    U [        S'   U[        S'   [=        S(5        [        [        S)5      5      $ UR?                  S*S+9nSSK nSSK!mUU4S, jmT" UR+                  S-/ 5      5      nT" UR+                  S./ 5      5      nURE                  US/S0S19nURE                  US/S0S19nURG                  S2S35      nURG                  S2S35      n[I        S4UUUUR+                  S5/ 5      UUUR+                  S60 5      S79$ )8u/   动态 Wizard 页面 - 根据方向配置渲染r   Nr   r   r   r   zwizard.dynamic_wizard)r   r!   u   该方向未启用或不存在r    r   r   	form_datau   开始 u    方向的生成流程r2   u   收到的表单数据: r&   type)multi_selectmulti_select_categorizedz[]u   字段 z (z): ai_config_idu!   从表单获取的 ai_config_id: u
    (类型: )u   request.form 中的所有键: u   用户选择的 AI 配置 ID: u   ，已保存到 form_datau7   表单中未找到 ai_config_id，将使用默认配置u   收集到的 form_data 键: requiredu%   请先完成题目配置：请选择 label u%   请先完成题目配置：请填写 extra_selectedzgenerate.auto_startTr+   c                   > [        U [        5      (       a,  U R                  5        VVs0 s H  u  pUT" U5      _M     snn$ [        U [        5      (       a  U  Vs/ s H  nT" U5      PM     sn$ [        U [        5      (       a8  TR                  SSU 5      nTR                  SSU5      nUR                  5       nU$ U $ s  snnf s  snf )u   清理对象中的控制字符，确保可以安全序列化为 JSON

移除所有控制字符（包括换行、回车、制表符等），替换为空格并合并
z[\x00-\x1F\x7F] z +)
isinstancedictitemsliststrsubstrip)objkvitemcleanedclean_for_jsonres        r   rL   &dynamic_wizard.<locals>.clean_for_json   s    
 c4  58YY[A[TQA~a(([AAT""589STN4(S99S!! ff/c:GffUC1GmmoGNJ B9s   C Cform_fieldsdifficulty_rulesF),:)ensure_ascii
separatorsz	</script>z
<\/script>z"pages/generate/wizard/dynamic.htmlstages	ui_config)categoryrO   form_fields_jsonrU   rP   difficulty_rules_jsonrV   )%logging	getLogger__name__r-   r
   r   r   r   r   r   enabledr   methodr	   popinfor'   get_form_fieldsdebugrA   formr   getlistr5   rC   keysr   r@   lenurlr   r.   jsonrM   dumpsreplacer   )r   rZ   loggerrW   r4   rO   fieldfield_id
field_typer8   field_value	error_msgcategory_configrh   form_fields_cleaneddifficulty_rules_cleanedform_fields_json_strdifficulty_rules_json_strrL   rM   s                     @@r   dynamic_wizardrv   7   s<    x(F1f+Y77;R`k3lmnn #;/H8++.	: 89::~~M4(K&ghmm_,BCD~~	..0.tGLL/A.BCD EyyH6*JII&-ll&:&:hZr?&K	#&-ll&6&6x&@	#wxj:,c)BUAVWX ! ||''77~ZPTUaPbOccdef4T',,:K:K:M5N4OPQ(4n%KK8F_`aNNTU24	8H3I2JKL !EyyH6*J#--1Kyy$$!MM&:k4+H+HSQ\M]abMb&KEIIV]L^K_$`	i3'44 Nc+H '+*;&KEIIV]L^K_$`	i3'44# !( "-(-.  5677 &&d&;O , ))<)<]B)OP-o.A.ABTVX.YZ  ::&9Zd:e $

+CRWdn
 o 077]S 9 A A+} ], '-""8R017!%%k26	 	    N)flaskr   r   r   r   r   r   r	   r
   r   app.models.sessionr   r\   bpr   r   router1   rv    rw   r   <module>r}      st    d d d 3x" 
%w7 88 
*UFODB EBrw   