
    Yio1                        S r SSKrSSKJrJrJr  SSKJrJr  SSK	J
r
  SSKJrJrJr  \" S\S	S
9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/S9\S 5       5       rg)u`   
CTF 方向 Prompt 管理 API

提供 Prompt 编译、验证、阶段 Prompt 配置等功能。
    N)	Blueprintrequestjsonify)dbCategoryConfig)PromptCompiler   )admin_requiredcategory_admin_requiredcategory_permission_requiredcategory_prompt_apiz/api/admin/categories)
url_prefixz/<category_id>/prompts/compilePOST)methodsc           	         [         R                  " 5       =(       d    0 n [        5       nSU;   a&  UR                  US   U UR	                  S5      5      nO UR                  XR	                  S5      5      n[        SU[        UR                  S5      5      [        U5      S.S.5      $ ! [         a#  n[        S[        U5      S.5      S	4s S
nA$ S
nAff = f)u   编译 Prompt 模板template_content
user_inputT
)total_linestotal_chars)successcompiled_promptstatsFr   error  N)r   get_jsonr   compile_from_templategetcompiler   lensplit	Exceptionstr)category_iddatacompilercompiledes        N   /Users/yu22x/Desktop/ddd_副本131/ctf/app/routes/admin/category/prompt_api.pycompile_promptr+      s     #DA!# %55'(&H  ''XXl5KLH'"8>>$#78"8}
  	  A53q6:;S@@As   BB) )
C3CCCz/<category_id>/prompts/validatec                    [         R                  " 5       nU(       a  SU;  a  [        SSS.5      S4$ [        R                  R                  U 5      nU(       d  [        SSS.5      S4$  [        5       nUR                  US   UR                  SS	9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)   验证 Prompt 模板与配置的一致性r   Fu   请提供模板内容r   i     方向不存在  T)include_config)r   
validationr   N)r   r   r   r   queryr   r   validate_templateto_dictr#   r$   )r%   r&   categoryr'   resultr)   s         r*   validate_promptr6   2   s     D%T153JKLcQQ##''4H53DEFKKA!#++#$D1

  
  	  A53q6:;S@@As   *9B$ $
C.CCCz/initc                       [         R                  5         [        SSS.5      $ ! [         a#  n [        S[	        U 5      S.5      S4s Sn A $ Sn A ff = f)u   初始化默认方向配置Tu!   默认方向配置初始化成功r   messageFr   r   N)CategoryServiceinit_default_categoriesr   r#   r$   )r)   s    r*   init_categoriesr<   W   sY    A//1:
  	  A53q6:;S@@As   !$ 
AAAAz/<category_id>/stage-promptsGETc                 >   SSK Jn  [        R                  R	                  U 5      nU(       d  [        SSS.5      S4$ UR                  5       =(       d    / nUR                  5       =(       d    0 nUR                  X5      n[        SUUR	                  SS	5      S
.5      $ )uG   获取阶段 Prompt 配置（包含系统固定部分和用户扩展）r   StagePromptGeneratorFr-   r   r.   Tglobal_rules )r   stagesrA   )	app.services.prompt.generatorr@   r   r1   r   r   
get_stagesget_advanced_configgenerate_all_stages)r%   r@   r4   rC   advancedresult_stagess         r*   get_stage_promptsrJ   g   s     C##''4H53DEFKK  "(bF++-3H )<<[QM ^R8      z/<category_id>/stage-extensionsc                    [         R                  R                  U 5      nU(       d  [        SSS.5      S4$ [        R
                  " 5       nUR                  S0 5      nUR                  SS5      n UR                  5       =(       d    / nU H#  nUR                  SS5      nXs;   d  M  X7   US	'   M%     [        R                  " U5      Ul	        UR                  5       =(       d    0 nXHS'   [        R                  " U5      Ul        S
SKJn	   U	R                  U5        [&        R(                  R+                  5         [        SSS.5      $ ! [         a+  n
S
SKnUR#                  S[%        U
5       35         Sn
A
N\Sn
A
ff = f! [         aA  n
[&        R(                  R-                  5         [        S[%        U
5      S.5      S4s Sn
A
$ Sn
A
ff = f)u'   保存阶段扩展内容和全局规则Fr-   r   r.   
extensionsrA   rB   iduser_extensionr   )PromptCompilerServiceNu   自动编译 Prompt 失败: Tu   Prompt 配置保存成功r8   r   )r   r1   r   r   r   r   rE   jsondumpsrC   rF   advanced_config$app.services.prompt.compiler_servicerP   compile_and_save_promptsr#   loggingwarningr$   r   sessioncommitrollback)r%   r4   r&   rM   rA   rC   stagestage_idrH   rP   r)   rV   s               r*   save_stage_extensionsr]   ~   s    ##''4H53DEFKKD,+J88NB/L$A$$&," Eyyr*H%*4*>&'  **V, //17R#/ #'::h#7  	O	E!::8D 	

 2
  	  	EOO:3q6(CDD	E  A


53q6:;S@@AsO   13F (A$F E
 +F 

E?!E:5F :E??F 
G6GGGz/<category_id>/compile-promptc                    SSK Jn  [        R                  R	                  U 5      nU(       d  [        SSS.5      S4$  [        R                  S:X  a  [        R                  " 5       =(       d    0 O0 nUR	                  SS5      nU(       a)  UR	                  S	S
5      nUR	                  S/ 5      nUnUnODUR                  5       =(       d    / nUR                  5       =(       d    0 n	U	R	                  S	S
5      nUR                  5       =(       d    0 n	U(       Gap  UR	                  SS5      n
/ nU GHT  nUR	                  SS
5      UR	                  SS
5      UR	                  SS
5      UR	                  SS
5      UR	                  SS5      UR	                  S	S
5      UR	                  SS
5      S.nU
(       a9  UR	                  SS
5      nU(       a  US   (       a  US==   SU-   -  ss'   OXS'   OUR	                  S0 5      nU(       al  [        U[        5      (       aW  SnS H  nUU;   d  M  UU   n  O   U(       a8  UR	                  SS
5      nU(       a  US   (       a  US==   SU-   -  ss'   OXS'   UR                  U5        GMW     OUR                  X5      nUR                  5       =(       d    / nUR!                  5       =(       d    0 nS
nU HW  nUSUR	                  SS
5       SUR	                  SS5       SUR	                  SS 5       S!UR	                  S"SS /5       S#3	-  nMY     UR"                  U S$S%S&S'S(S)S*S+US,UR	                  S-S.S//5      UR	                  S0S15      UR	                  S2S35      S4.nSnU H  nUR	                  S5      S5:X  d  M  Un  O   U(       aQ  UR	                  S6S
5      R%                  5       nU(       a*  UR	                  S5      (       a  US-   US   -   US'   OUUS'   UR'                  XUU(       a  UOS5      n[        S7US8.5      $ ! [(         a7  nSSKnUR-                  5         [        S[/        U5      S.5      S94s SnA$ SnAff = f):u%   编译完整的 Prompt（预览用）r   r?   Fr-   r   r.   r   use_current_editssystem_promptrB   rC   is_new_formatrN   namedescriptionoutput_formatskip_forbiddenrO   )rN   rb   rc   outputre   r`   rO   promptz

promptsN)   中等u   简单u   入门u   困难mediumeasybeginnerhardcontentz| z | 	max_countr	   u    个 | writeup_count   u    篇 | depth_rangez |
ri   PHPu   SQL注入, XSSu   博客系统      z
[4.0, 7.0]g?zPHP, Python, Node.js, Go, Java
port_rangei  ih  flag_formatzDASCTF{...}directory_patternz{timestamp}_{name})r4   r%   
difficultylanguageknowledge_pointsscenerp   max_knowledgerr   	diff_ratedifficulty_tableavailable_languagesrv   rw   rx   knowledge_acquisitionknowledge_script_instructionT)r   rg   r   )rD   r@   r   r1   r   r   r   methodr   rE   rF   
isinstancedictappendrG   get_difficulty_rulesget_output_configrb   stripcompile_full_promptr#   	traceback	print_excr$   )r%   r@   r4   r&   r_   current_system_promptcurrent_stagesrC   r`   rH   ra   full_stages
stage_data
stage_infoprompt_contentrh   rg   diffdifficulty_rulesoutput_configr   rulecontextknowledge_stager[   script_instructionr)   r   s                               r*   r   r      s    C##''4H53DEFKKCA+2>>V+Cw!'R HH%8%@ $(HH_b$A!!XXh3N $F1M ((*0bF335;H$LL"=M//17R  HH_e<MK$
$..r2&NN626#->>-#D(nn_bA&0nn5Eu&M%/^^OR%H&0nn5Er&J
 !%/^^Hb%AN%%&67&'78F^<SS8;I'78 )nnY;G:gt#<#<!%$rD#w)0 % %s
 "-3ZZ	2-FN-#-.>#?$./?$@F^D[$[$@CQ/?$@"":.O %R /BB;WK $88:@b 224: $D"TXXfb%9$:#dhh{TU>V=WW^_c_g_ghwyz_{^|  }D  EI  EM  EM  N[  ^_  ab  ]c  Ed  De  ei  !j  j % !&" 0#' 0#C'++L5%.I(,,]MJ!.!2!23FH\!]
&  Eyy"99"' ! !0!4!45SUW!X!^!^!` ""&&'7888JV8SVefvVw8wO$458JO$45 &99g*M
 
  	  A53q6:;S@@As,   G(P *E)P BP 
Q ),QQ Q )__doc__rQ   flaskr   r   r   app.models.database.modelsr   r   app.services.promptr   
decoratorsr
   r   r   __name__category_prompt_bprouter+   r6   r<   rJ   r]   r    rK   r*   <module>r      sf  
  - - 9 .  4hKbc  :VHMA  NA: ;fXNA  OAF 'F84	A  5	A 85'J  K* ;fXN.A  O.Ab 9E6?SKA  TKArK   