
     Hi                         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S9r\R                  SS	/S
9S 5       rS rS rg)uP   
搜索 API 接口
提供全局搜索功能，支持搜索题目和部署记录
    )	Blueprintrequestjsonifyg)ChallengeRecordDeploymentRecorddb)or_searchz/api/search)
url_prefix GET)methodsc                    ^ [         R                  R                  SS5      R                  5       m[         R                  R                  SS5      n [	        [        [         R                  R                  SS5      5      S5      nT(       d  [        S/ S	S
.5      $ [        T5      S:  a  [        S/ S	S
.5      $ / n[        [        S5      (       a/  [        R                  (       a  [        R                  R                  OSn[        [        S5      =(       a4    [        R                  =(       a    [        R                  R                  S:H  nU S;   a  [        TX4U5      nUR                  U5        U S;   a  [        TX4U5      nUR                  U5        UR!                  U4S jS9  USU n[        SU[        U5      TS.5      $ )u   
全局搜索接口

Query Parameters:
    q: 搜索关键词
    type: 搜索类型 (all, challenges, deployments)，默认 all
    limit: 返回结果数量限制，默认 10

Returns:
    JSON: 搜索结果
qr   typealllimit
   2   Tr   )successresultstotal   userNadmin)r   
challenges)r   deploymentsc                    > TR                  5       U R                  SS5      R                  5       ;   a  SOSU R                  SS5      U R                  SS5      4$ )Nnamer   r   r   r   )lowerget)xquerys    =   /Users/yu22x/Desktop/ddd_副本5/ctf/app/routes/api/search.py<lambda>search.<locals>.<lambda>>   sJ    [[]aeeFB/5577Q	fb	fb     )key)r   r   r   r$   )r   argsr"   stripminintr   lenhasattrr   r   idrolesearch_challengesextendsearch_deploymentssort)search_typer   r   user_idis_adminchallenge_resultsdeployment_resultsr$   s          @r%   r   r      s    LLS"%++-E,,""651KGLL$$Wb12B7E
  	 5zA~
  	 G #1f--!&&affiidGq&!GaffG1GH ++-eWN() ,,/w%P)* LL L  fuoGW	  r(   c                    / n [         R                  R                  [        [         R                  R                  SU  S35      [         R                  R                  SU  S35      5      5      nU(       d*  U(       a#  UR                  [         R                  U:H  5      nOU(       d	  U(       d  / $ UR                  [         R                  R                  5       5      R                  U5      R                  5       nU H  nUR                  SUR                  UR                  UR                  (       a+  [        UR                  5      S:  a  UR                  SS S-   OUR                  SUR                   3SUR                  (       a  UR                  R!                  S5      OSS	.5        M     U$ ! ["         a  n[%        S
U 35         SnAU$ SnAff = f)u   搜索题目记录%	challenged   Nz...z/generate/?challenge_id=zfa-flag%Y-%m-%d %H:%M)r   r0   r    descriptionurlicon
created_atu   搜索题目出错: )r   r$   filterr
   r    iliker@   r7   order_byrC   descr   r   appendr0   r.   strftime	Exceptionprint)	r$   r7   r8   r   r   
base_queryr   r=   es	            r%   r2   r2   O   s   G*$**11$$**QugQ<8++11AeWA,?

 G#**?+B+Bg+MNJ'I  (()C)C)H)H)JKQQRWX\\^
#INN#ll!FOF[F[`cdmdydy`z  ~A  aAy44Tc:UB  GP  G\  G\1),,@!QZQeQei22;;<LMko  $ N  *$QC())N*s   B+F1 0C?F1 1
G;GGc                 B   / n [         R                  R                  [        [         R                  R                  SU  S35      [         R                  R                  SU  S35      5      5      nU(       d*  U(       a#  UR                  [         R                  U:H  5      nOU(       d	  U(       d  / $ UR                  [         R                  R                  5       5      R                  U5      R                  5       nU H  nSnUR                  (       a  UR                  R                  nSSSSS.R                  UR                   S5      n	UR#                  S	UR                  UR                  =(       d    S
UR                  SS  3U(       a  U SUR                    3OUR                   SUR                   3U	UR                   UR                  (       a  UR                  R%                  S5      OSS.5        M     U$ ! [&         a  n
[)        SU
 35         Sn
A
U$ Sn
A
ff = f)u   搜索部署记录r<   r   zfa-play-circlezfa-stop-circlezfa-exclamation-circlez
fa-spinner)runningstoppederrorcreatingz	fa-docker
deploymentu   部署 N   z - z/deployment/view/r?   )r   r0   r    r@   rA   rB   statusrC   u   搜索部署出错: )r   r$   rD   r
   container_namerE   deployment_uuidr7   rF   rC   rG   r   r   r=   r    r"   rU   rH   rI   rJ   rK   )r$   r7   r8   r   r   rL   r   rS   challenge_namestatus_iconrM   s              r%   r4   r4   v   s   G+*%++22 //55%lC 00665'|D

 G#**+;+C+Cw+NOJ'I !))*:*E*E*J*J*LMSSTYZ^^`%JN##!+!5!5!:!: ,+0(	
 c*##[1  NN$ 00"11_wz?Y?YZ\[\?]>^5_LZ.!1Z5F5F4GH`j`q`q*:+E+E*FG#$++R\RgRgj33<<=MNmq	 	 &4 N  *$QC())N*s   B+G; 0E	G; ;
HHHN)__doc__flaskr   r   r   r   app.models.database.modelsr   r   r	   
sqlalchemyr
   __name__	bp_searchrouter   r2   r4    r(   r%   <module>rb      sX   
 1 0 L L h]C	 eW%> &>B$N1r(   