
    \i)                         S 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JrJr  SSKJr  SSKr\" S\5      r\R+                  S	S
/S9\
S 5       5       r\R+                  SS
/S9\
S 5       5       rg)uF   
任务视图模块

提供任务列表和任务详情页面的视图
    )	Blueprintrender_templaterequestredirecturl_forjsonifyg)login_required   )tasks_statusget_user_tasksget_taskupdate_task)get_generation_statusNgenerate_tasksz/tasksGET)methodsc                  $
  ^^ [        [        S5      (       a/  [        R                  (       a  [        R                  R                  OSn U (       d  [	        [        S5      5      $ [        [        U 5      5      n[        UR                  5       5       H  u  p#UR                  S5      S:X  d  M  [        U5      nU(       d  M0  UR                  S5      U:X  d  MG  UR                  S5      (       d  M_  UR                  SUR                  SS	5      5      US'   [        UUR                  SS	5      S
9  M      SSKJnJn  U" U 5      nU Vs1 s H+  oR                  S5      (       d  M  UR                  S5      iM-     n	n/ n
UR                  5        H7  u  p#UR                  S5      nU(       d  M  X;  d  M&  U
R!                  U5        M9     U
 H  nUR#                  US5        M     UR%                  5        Vs1 s H,  nUR                  S5      (       d  M  UR                  S5      iM.     nnU GH  nUR                  S5      nU(       d  M  X;  d  M%  SU 3nX;  d  M1  UR                  SS5      nU(       a  UOSnUR                  S5      n['        U[        5      (       a1   [(        R(                  R+                  UR-                  SS5      5      nO!Uc  [(        R(                  R/                  5       n[        U 5      UUR                  SS5      SUUR                  SU5      UUR                  S5      UR                  S5      S.	X'   GM      SSKJn  UR=                  5       nU Vs0 s H=  nUR                  UR>                  UR@                  URB                  URD                  S._M?     snm0 mUR                  5        H7  u  p#UR                  S S5      nUT;  a  / TU'   TU   R!                  X#45        M9     T H  nTU   RG                  S! S"S#9  M     [I        TRK                  5       5      [I        TRK                  5       5      -  nUU4S$ jn[M        UUS%9n[O        S&TTUS'9$ s  snf s  snf !   [(        R(                  R/                  5       n GN= f! [0         a6  n[3        S[        U5       35        SSKnUR7                  5          SnAGNSnAff = fs  snf ! [0         a$  n[3        S[        U5       35        0 m SnAGN[SnAff = f)(u   任务列表页面userN
auth.loginstatusrunningtask_idgeneration_startedmessage r   r   )get_challenges_by_userget_challenge_recordidchallenge_id
challenge-challenge_typeweb
created_atZ+00:00name   未命名题目	completed
updated_at
output_dirlog_file	user_idcategory_idr(   r   r%   r+   r!   r,   r-       从数据库读取题目失败: )CategoryConfig)r(   iconenabled
sort_orderu   获取方向配置失败: r0   c                 \    U S   R                  S[        R                  R                  5      $ )Nr   r%   )getdatetimemin)xs    J   /Users/yu22x/Desktop/ddd_副本138/ctf/app/routes/generator/tasks_views.py<lambda>tasks.<locals>.<lambda>   s    !A$((<1B1B1F1FG    T)keyreversec                    > U T;   =(       a    [        TU    5      S:  nTR                  U 0 5      nUR                  SS5      nU(       + U4$ )Nr   r5   i  )lenr7   )cat_id	has_taskscategory_infor5   categories_dicttasks_by_categorys       r;   get_category_sort_key$tasks.<locals>.get_category_sort_key   sU    //VC8I&8Q4RUV4V	'++FB7"&&|S9
z**r>   )r?   zpages/generate/tasks/list.html)rG   rF   sorted_category_ids)(hasattrr	   r   r    r   r   r   strlistitemsr7   r   r   app.models.database.operationsr   r   appendpopvalues
isinstancer8   fromisoformatreplacenow	Exceptionprint	traceback	print_excapp.models.database.modelsr2   get_all_categoriesr(   r3   r4   r5   sortsetkeyssortedr   )r/   
user_tasksr   tasktask_statusr   r   db_challenges	challengeexisting_challenge_idsuser_tasks_to_remover!   existing_task_challenge_idsvirtual_task_idr#   r0   r%   erY   r2   all_categoriescatall_category_idsrH   rJ   rF   rG   s                            @@r;   tasksrn      s    #1f--!&&affiidG-..  G-J j..0188H*/8K{{y9WDYmInIn"-//)TXXiQS=T"UYG#.??9b#AC 2B_.w7 HU!l})XeXefjXk"5)--"5}!l  "'--/MG88N3L| J$++G4	 0 ,GNN7D) , #))+'
+xx' %DHH^$+ 	$ '
 'I$==.L| O$.|n"= #4%.]]3CU%KN4B.K "+|!<J!*c22A)1):):)H)HI[I[\_aiIj)kJ $+%-%6%6%:%:%<
 $'w<'2 )f6G H"-&0&/mmL*&M(4&/mmL&A$-MM*$=
3J// 'P='::<%35%3c 66CHHchhSVS^S^nqn|n|#}}%35 #))+hh}e4//-/k* 	+&--wo> , )+&++G 	, 	
 ) ,1134s?;O;O;Q7RR+ !!17LM;+<)8-@B BO "m"'
0A)1):):)>)>)@J   0Q9:5 *3q6(34s   4R Q)%Q):/R -R 4AR 6Q.Q.)R R R AR "/Q3A<R S! (AS,S! )
R 3 RR 
S#+SSS! !
T+T

Tz/tasks/<task_id>c                 n   [        [        S5      (       a/  [        R                  (       a  [        R                  R                  OSnU(       d  [	        [        S5      5      $ [        U 5      nU(       Gd  U R                  S5      (       Ga   [        U R                  SS5      5      nSSK
Jn  U" U5      nU(       Gam  UR                  S5      n[        U5      [        U5      :w  a\  [        [        S5      (       a3  [        R                  (       a  [        R                  R                  S	;   d  [	        [        S
5      5      $ UR                  SS5      nU(       a  UOSnUR                  S5      n	[        U	[        5      (       a1   [         R                   R#                  U	R                  SS5      5      n	O!U	c  [         R                   R%                  5       n	[        U5      UUR                  SS5      SU	UR                  SU	5      UUR                  S5      UR                  S5      S.	nU(       d  [	        [        S
5      5      $ [        UR                  S5      5      [        U5      :w  a\  [        [        S5      (       a3  [        R                  (       a  [        R                  R                  S	;   d  [	        [        S
5      5      $ UR                  S5      S:X  af  [/        U 5      nU(       aT  UR                  S5      U :X  a?  UR                  SUR                  SS5      5      US'   [1        U UR                  SS5      S9  [3        SXS9$ !   [         R                   R%                  5       n	 GN= f! [&         a6  n
[)        S[        U
5       35        SSKnUR-                  5          Sn
A
GNSn
A
ff = f)u   任务详情页面r   Nr   r"   r   r   )r   r/   )admin	moderatorzgenerate_tasks.tasksr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r1   r   r   r   r   r   z pages/generate/tasks/detail.html)r   rb   )rK   r	   r   r    r   r   r   
startswithintrU   rO   r   r7   rL   rolerS   r8   rT   rV   rW   rX   rY   rZ   r   r   r   )r   r/   rb   r!   r   challenge_datachallenge_user_idr#   r0   r%   rj   rY   rc   s                r;   task_detailrw      s    #1f--!&&affiidG-.. GD G&&|44'	"w|R@ALK1,?N$2$6$6y$A!()S\9#Av..166affkkMc>c'0F(GHH "0!3!34De!L0>nE+//=
j#..=%-%6%6%D%DZEWEWX[]eEf%g
  '!)!2!2!6!6!8J  #7|#.*..v7HI)","0"4"4\:"N$0"0"4"4\"B . 2 2: >
   6788 488I3w</6""qvv!&&++AW2WG$:;<< xxY&+G4;??95@)ooi)R9PQDO*y"=? =wZZO=%-%6%6%:%:%<
  	"4SVH=>!!	"s9   B5M4 AM4 /M 6A5M4  M1.M4 4
N4>+N//N4)__doc__flaskr   r   r   r   r   r   r	   app.services.auth.decoratorsr
   rn   r   r   r   r   utilsr   r8   __name__bp_tasksrouterw    r>   r;   <module>r      s    U T T 7 F F ( %x0 
5'*EB  +EBP 
"UG4F[  5F[r>   