
    9YiN                        S SK JrJrJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJr  S SKJr  S SKJr  S SKrS SKrS SKrS SKrS SKJr   S SKJrJrJrJr  Sr\" S
\"5      r#S r$S r%SS jr&S r'\#RQ                  SS/S9\S 5       5       r)\#RQ                  SS/S9\S 5       5       r*\#RQ                  SS/S9\S 5       5       r+g! \  a    Sr\!" S	5         N~f = f)    )	Blueprintrender_templateredirecturl_forsession	send_fileafter_this_requestResponsejsonifyrequestaborthas_request_contextcurrent_appflashg)SessionData)login_requiredN)Path)get_latest_challengeget_challenge_by_nameupdate_challengeget_challenge_recordTFuE   数据库操作模块导入失败，将使用文件方式读取数据generate_resultc                 r    1 Skn[         R                  R                  U 5      S   R                  5       nX!;   $ )u$   检查文件是否为二进制文件>   .gz.so.bmp.dll.exe.gif.ico.jpg.pdf.png.tar.zip.jpeg.dylib   )ospathsplitextlower)filenamebinary_extensionsexts      K   /Users/yu22x/Desktop/ddd_副本131/ctf/app/routes/generator/result_views.py_is_binary_filer2      s6    P
''

8
$Q
'
-
-
/C##    c                    U (       d  gSSK JnJn  U   UR                  5        HB  u  p4UR	                  S5      U :X  d  M  UR	                  SS5      nU(       d  M7  Us  sSSS5        $    SSS5         [        [        U 5      5      nU(       a  UR	                  S5      nU(       a  U$ g! , (       d  f       NE= f! [         a!  n[        S[        U5       35         SnAgSnAff = f)	u   
通过 challenge_id 从任务记录或数据库获取 category_id

Args:
    challenge_id: 题目ID
    
Returns:
    str: category_id，如果找不到则返回 'web'（默认）
webr)   tasks_status_tasks_lockchallenge_idcategory_idNchallenge_typeu&   从数据库读取题目记录失败: )
tasksr7   r8   itemsgetr   int	Exceptionprintstr)	r9   r7   r8   task_idtaskr:   challenge_datar;   es	            r1   _get_category_id_from_challengerG      s      1	)//1MGxx'<7"hh}e<;&& 
1 
A-c,.?@+//0@AN%%
 ' 
  A6s1vh?@@ 	As5   )B) B)B)(B)34B: )
B7:
C%C  C%c           	         [         (       d  S[        SSS.5      S44$ U (       a  [        [        U 5      5      nO
[	        5       nU(       d  S[        SSS.5      S44$ [        [        S5      (       as  [        R                  (       a^  UR                  S	5      [        R                  R                  :w  a0  [        R                  R                  S
:w  a  S[        SSS.5      S44$ OS[        SSS.5      S44$ UR                  S5      nU(       a  [        U5      OSnX1S'   UR                  S5      n[        [        5      R                  R                  R                  R                  nU(       d  S[        SSS.5      S44$ UnUR                  S5      (       d2  [         R"                  R%                  U5      (       d  ['        XT-  5      nO [         R"                  R)                  U5      (       d  [        U5      nUR*                  nUS-  U-  S-  U-  n	U	R)                  5       (       aL  ['        U	R-                  U5      5      n
['        U	5      n SSKJn  U" USU
05        [3        SU SU SU
 35        OS[        SSU SU	 S3S.5      S44$ X4$ [        U5      nS['        UR6                  5      ;   a   UR6                  nSn[9        U5       H  u  nnUS:X  d  M  Un  O   Ub  US -   [;        U5      :  a  XS!-      S:X  av  US"   nUS-  U-  S-  U-  n	U	R)                  5       (       aN  ['        U	R-                  U5      5      n
['        U	5      n SSKJn  U" USU
05        [3        S#U SU SU
 35        X4$ X4$ X4$ ! [4         a"  n[3        S['        U5       35         SnAGNSnAff = f! [4         a#  n[3        S['        U5       35         SnAX4$ SnAff = f! [4         a#  n[3        S$['        U5       35         SnAX4$ SnAff = f)%u   
获取题目数据和输出目录的公共函数

Args:
    challenge_id: 题目ID，如果为None则获取最新题目

Returns:
    tuple: (challenge_data, output_dir, category_id) 或 (None, error_response)
Nerroru   数据库操作不可用)statusmessagei     未找到题目数据i  useruser_idadminu   您没有权限查看此题目i  u   请先登录i  idr5   r:   
output_diru   输出目录未设置/ge10outputr   )r   u   已更新题目 u    的 output_dir: z -> u#   更新数据库 output_dir 失败: u   输出目录不存在: u   （已尝试新路径: u   ）   r)   u   已迁移题目 u   检查路径格式时出错: )HAS_DB_OPERATIONSr   r   r?   r   hasattrr   rM   r>   rP   rolerG   r   __file__parent
startswithr*   r+   isabsrB   existsnamerelative_toapp.models.database.operationsr   rA   r@   parts	enumeratelen)r9   rE   challenge_id_intr:   rQ   project_rootoriginal_output_dirold_output_pathchallenge_dir_namenew_output_dirnew_output_dir_strr   rF   output_pathrb   
ge10_indexiparts                     r1   _get_challenge_and_output_dirrp   ?   sz    g=WXY[^___-c,.?@-/g=TUVX[\\\ q&affi(AFFII5!&&++:P'WAa"bcehiii g^LMsSSS &))$/GW12BC]bK %0=!  ##L1J>((//66==Lg=TUVX[\\\ %  %%bggmmJ.G.G23
 	 77>>*%%23,11 &.<xGJ\\  ""!$^%?%?%M!N^,JFK !1LBT3UV()9(::KL_K``dewdxyz 'WCZ[eZff}  M  ~N  NQ  BR  #S  T  VY  Z  Z  ZH %%C :&S**++@#))!
(/GAtv~%&
  0
 )j1ns5z.I!^,8-22Y*)5)>)Lx)WZl)l)002214^5O5OP\5]1^.),^)<JV [ 01ALRdCe f %(89I8JJ[\o[ppt  vH  uI  'J  !K %%>%%>%%S  F;CF8DEEFF $- V %(KCPQF8&T U U
 %%V @5c!fX>?? %%	@s[   %N  7#O A3O %N/  
N,
N''N,/
O9OO OO 
P)PPc                    SSSSSS.nU (       d  U$ SSK nU R                  S5      nU Ha  nUR                  S	5      (       d  M  US
S R                  5       nUR	                  SSU5      nUR	                  SSU5      nU(       d  M]  XQS'     O   [        U5       GHX  u  pdSU;   d  M  SU;   d  M  SU;   d  M  US
-   [        U5      :  Ga(  X6S
-      nUR                  S5       Vs/ s H  oR                  5       PM     n	nU	 Vs/ s H  o(       d  M  UPM     n	n[        U	5      S:  a  U	S   (       a!  U	S   R                  S5      (       d  U	S   US'   U	S   (       a!  U	S   R                  S5      (       d  U	S   US'   [        U	5      S:  a+  U	S   (       a!  U	S   R                  S5      (       d  U	S   US'   [        U	5      S:  a+  U	S   (       a!  U	S   R                  S5      (       d  U	S   US'     O   US   S:X  a  Sn
SnU H  nUR                  5       R                  S5      (       a  SnM+  U(       a&  UR                  5       R                  S5      (       a  SnU(       d  Ma  UR                  5       R                  S5      (       d  M  U
S-  n
M     U
S
::  a  SUS'   OU
S::  a  SUS'   OSUS'   U H9  nSUR                  5       ;   d  S U;   d  M  S!U;   a  S"US#'   M,  S$U;   d  M4  S%US#'   M;     U$ s  snf s  snf )&u!   从 writeup 中提取基本信息   未命名题目 u   中等u	   1-2小时)r_   description
difficultyflag_formatestimated_timer   N
z# rU   z\s*-\s*[Ww]riteup\s*$u   \s*的?解题思路\s*$r_   u	   题目名u   题目描述|   :r)   rt      rw   ru   Fu   ## 知识点Tz##)	z1.z2.z3.z4.z5.z6.z7.z8.z9.u   简单u   困难flagFLAGu   动态zDASCTF{dynamic_flag}rv   u   静态zDASCTF{static_flag})resplitr\   stripsubrc   rd   r-   )writeupinfor   lineslinetitlern   	data_lineprb   knowledge_countin_knowledge_sections               r1   _extract_info_from_writeupr      s    "%D MM$E ??4  HNN$EFF3R?EFF5r5AEu$V  U#$>T#9cTk1us5z!!a%L	,5OOC,@A,@q,@A$)/EqQE/u:?Qxa(;(;C(@(@',QxVQxa(;(;C(@(@.3Ah]+5zA~%(58;N;Ns;S;S16q-.5zA~%(58;N;Ns;S;S-21X\*' $, LX%$Dzz|&&~66'+$#

(?(?(E(E',$##

(?(?@v(w(w1$  a!)D!!)D!)D TZZ\!Vt^4&<]#T!&;]#  Kc B/s   $K3
K8K8rR   GET)methodsc                  0	    SSK n U R                  [        5      nUR                  S 5        [        R
                  R                  S5      nUR                  SU 35        [        U5      u  p4Uc!  SSK	J
nJnJn  U" SS5        U" U" S5      5      $ UnUR                  S	S
5      n	Sn
 SSKJn  UR                  R                  U	5      nU(       a-  UR                   UR"                  UR$                  =(       d    SS.n
Sn[+        U5      S-  nUR-                  5       (       a%   [/        USSS9 nUR1                  5       nSSS5        SnSSKn[+        U5      nUR"                  nUR5                  SU5      nU(       a  UR7                  S5      nOUnSnUR                  S5      nU(       ag  SSKJnJn  U   UR?                  5        H@  u  nnUR                  S5      U:X  d  M  UR                  SS5      nU(       d  M8  US:w  d  M@    O   SSS5        US:X  a  [A        U5      nUR                  SS5      nUR                  S5      nU(       d  UR                  S5      (       a  [C        UR                  S5      [D        5      (       a  UR                  S5      nOY[G        UR                  S5      S5      (       a  UR                  S5      RI                  5       O[E        UR                  S5      5      nU(       d  SnSnUR                  S 5      nU(       aB   SS!KJ%n   U R                  R                  U5      n!U!(       a  U!R                   U!RL                  S".nUUUR                  S$S5      UR                  S%S5      S&.n[O        S'UR                  S5      UUUU	U
/ 0 S(9	$ ! [&         a  n[)        SU 35         SnAGNSnAff = f! , (       d  f       GN= f! [&         a  n[)        SU 35         SnAGNSnAff = f! , (       d  f       GN= f! [&         a  n[)        S#U 35         SnANSnAff = f! [&         aY  nS)[E        U5       3n"[)        U"5        [P        RR                  " 5         SSK	J
nJnJn  U" U"S5        U" U" S5      5      s SnA$ SnAff = f)*u   显示生成结果r   Nr9   "   接收到的 challenge_id 参数: )r   r   r   rL   rI   zgenerate_tasks.tasksr:   r5   )CategoryConfigfolder)rP   r_   iconu   获取方向配置失败: rs   z
writeup.mdrutf-8encodingu   读取writeup失败: rr   z^\d{8}_\d{6}_(.+)$r)   u	   未设置rP   r6   ru   	timestamp
created_at	isoformatu   未知时间rN   )User)rP   usernameu   获取出题人信息失败: rt   rw   )r_   ru   rt   rw   z pages/generate/result/index.html)r9   challenge_infogeneration_timeauthor_infor:   category_configcore_functions
code_filesu#   显示结果页面时发生错误: )*logging	getLogger__name__r   r   argsr>   debugrp   flaskr   r   r   app.models.database.modelsr   queryrP   r_   r   r@   rA   r   r^   openreadr   matchgroupr<   r7   r8   r=   r   
isinstancerB   rX   r   r   r   r   	traceback	print_exc)#r   loggerr9   rE   resultr   r   r   rQ   r:   r   r   categoryrF   r   writeup_filefchallenge_namer   rl   folder_name
name_matchru   re   r7   r8   rC   rD   r   r   r   rN   r   author	error_msgs#                                      r1   indexr   
  sY   ~9""8,() ||''79,HI "?|!L!66)73G$:;<<
$((> 
	4A%++//<H"++$MM$MM5X# J',6  3,g>!ffhG ? +:&!&&XX3[A
'--a0N )N !
)--d38%1%7%7%9MGTxx/3CC%)XXlK%H
%:**C!	 &:  $7@N'++L+FJ ),,[9>#5#5l#C#C.,,\:C@@"0"4"4\"BRYZhZlZlmyZz  }H  SI  SI."4"4\"B"L"L"N  OR  Sa  Se  Se  fr  Ss  Ot,O  $$Y/	;;0$ii$*OO#K #$)--mR@,001A2F	
 .'++D1)+##+

 
	
[  	4.qc233	4 ?> 3-aS1223, D  ;5aS9::;.  99#a&B	i22i! 67889s   BP2 P2 'AN <%P2 "O -O>O A.P2 4*O;"O;=O;O;	DP2 AP AP2 
O 'N;5P2 ;O  P2 
OO P2 O 
O8O3-P2 3O88P2 ;
P
P2 
P/P*%P2 *P//P2 2
R<AR
RRz/resultc                      [         R                  R                  S5      n U (       a  [        [	        SU S95      $ [        [	        S5      5      $ )u#   结果页面（重定向到index）r9   zgenerate_result.indexr9   )r   r   r>   r   r   r   s    r1   r   r     s?    
 <<##N3L 7lSTT 7899r3   z	/view-logc            
      F    [        S5        [        R                  R                  S5      n U (       d   [	        SS5        [        [        S5      5      $ SSKnUR                  [        5      nUR                  SU  35        [        U 5      u  p4Uc   [	        S	S5        [        [        S5      5      $ UR                  S
5      nU(       d   [	        SS5        [        [        S5      5      $ [        SU 35        [        U5      nUR                  5       (       d#  [	        SU 3S5        [        [        S5      5      $  [        USSS9 nUR                  5       nSSS5        UR                  SS5      n
UR%                  5       R&                  nUS:  a  U S3nOUS:  a
  US-  S S3nO	US-  S S3nWR)                  S5      S-   n[+        SU U
UUUUS9$ ! , (       d  f       N= f! [          aD  n	[        SU	 35        [	        S[#        U	5       3S5        [        [        S5      5      s Sn	A	$ Sn	A	ff = f! [          ab  n	[        S[#        U	5       35        [,        R.                  " 5         [	        S[#        U	5       3S5        [        [        S5      5      s Sn	A	$ Sn	A	ff = f) u*   查看题目生成日志（原始文本）u!   
=== 查看题目生成日志 ===r9   u   缺少题目ID参数rI   zauth.profiler   Nr   rL   log_fileu   该题目没有生成日志warningu   日志文件路径: u   日志文件不存在: r   r   r   u   读取日志文件失败: r_   rr   i   z Bi   z.2fz KBz MBrx   r)   zpages/generate/log/view.html)r9   r   log_contentr   	file_size
line_countu   查看日志时出错: )rA   r   r   r>   r   r   r   r   r   r   r   rp   r   r^   r   r   r@   rB   statst_sizecountr   r   r   )r9   r   r   rE   r   r   log_pathr   r   rF   r   r   file_size_strr   s                 r1   view_logr     s   F123 ||''7('2GN344""8,9,HI "?|!L!)73GN344 "%%j1/;GN344$XJ/0 >  +H:6@GN344	5hg6!ffh 7 (++F4EFMMO++	 t(k,M$(4/4C8M(K8=SAM !&&t,q0
 =*6,:)4&.'4(24 	4/ 76 	5.qc23.s1vh7AGN344	5:  1'Ax01'Ax0':/00	1s   AH4 AH4 07H4 (AH4 :G# GG# A3H4 
G G# H4  G# #
H1-9H,&H1'H4 ,H11H4 4
J >AJJ J )N),r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   app.models.sessionr   app.services.auth.decoratorsr   r*   tempfiler   jsonpathlibr   ra   r   r   r   r   rW   ImportErrorrA   r   	bp_resultr2   rG   rp   r   router   r   r    r3   r1   <module>r      s!   w  w  w  w  w * 7 	    S C  C
 '2	$"Hq&fUp ug&@9  '@9D UG,:  -: ug.H1  /H1[  S	
QRSs   C   CC