o
    gIh                  	   @   sZ  d dl mZmZmZmZ d dlmZ d dlZd dlZd dl	m	Z	 d dl
Zd dlZd dlmZ eeZeedd de_d	d
dddddddZejddgddd Zejddgddd Zejddgddd Zdd Zejd dgdd!d" Zejd#dgdd$d% Zejd&dgdd'd( Zejd)dgdd*d+ Zed,krejdd-d. dS dS )/    )Flaskjsonifyrequestsession)CORSN)datetime)RotatingFileHandlerT)supports_credentialssuper_secret_key_1234567890zQwErTy2024!@#zZxCvBn$5678^&*zAsDfGh_!2345zPoIuYt*()_+zLkJhGf#0987zMnBvCx!@2024zTrEwQz$%123zPlOkMiN&*456)admin1admin2admin3admin4admin5admin6admin7admin8z
/api/loginPOST)methodsc                  C   sR   t j} | d}| d}|tv r!t| |kr!|td< tddiS tddidfS )NusernamepasswordadminsuccessTFi  )r   jsongetADMINSr   r   )datar   r    r   /var/www/html/logs/app.pylogin   s   

r   z/api/check_authGETc                   C   s   t ddtv iS )Nauthr   )r   r   r   r   r   r   
check_auth#   s   r"   z/api/logoutc                   C   s   t dd  tddiS )Nr   r   T)r   popr   r   r   r   r   logout'   s   r$   c                 C   s  t | ddd}| }W d    n1 sw   Y  td|dp,td|dtd|dp=td|dtd|dtd	|dpVtd	|dd
g d|v s`d|v rbd
ndd|v skd|v rmdndd}td|}|r|d}d
|v sd|v sd|d< td|}|D ]V}|d  }|d  }	|d  }
td|
}td|
}td|
}td|
}|d ||	|r|dnd|r|dnd|r|dnd|r|dndd q|S )Nrutf-8encodingu@   Никнеймы игрока: (.*?)\n|Player Nicknames: (.*?)\n      u9   IP-адрес игрока: (.*?) \(|IP Address: (.*?) \(zCountry: ([^,\)\n]+)uI   Отчет PlayBF2 AntiCheat \((.*?)\)|PlayBF2 AntiCheat Report \((.*?)\)u   Нетu5   Подозрительные процессы:
НетzSuspicious Processes:
None   Даu   AlphaTools: Не найденzAlphaTools: Not foundu   Не найден   Найден)nicknameipcountry	scan_datecheats_detectedcheats_detailssuspicious_processesalpha_toolsu   (Обнаруженные читы:|Detected Cheats:)([\s\S]+?)(\n\w|\n\-|\nSuspicious Processes:|\nПодозрительные процессы:)Noner1   u   - ([^\n]+) \(Location: ([^\)]+)\)([\s\S]+?)(?=\n- |\n\w|\n\-|\nSuspicious Processes:|\nПодозрительные процессы:|$)r   zSize: ([^\n]+)zCreated: ([^\n]+)zModified: ([^\n]+)zLast Accessed: ([^\n]+)r2    )namelocationsizecreatedmodifiedaccessed)openreadresearchgroupfindallstripappend)	file_pathfcontentplayer_infocheats_blockcheats_textcheatscheatr7   r8   detailsr9   r:   r;   r<   r   r   r   parse_log_file,   sF   
"""

	rN   z	/api/logsc                  C   s   d} dd t | D }g }t }|D ];}ztt j| |}||d< || ||d  W q tyN } zt	d| dt
|  W Y d }~qd }~ww t|tt|dS )	N./logsc                 S      g | ]	}| d r|qS .txtendswith.0rF   r   r   r   
<listcomp>Y       zget_logs.<locals>.<listcomp>filenamer/   Error parsing : )logs	countries)oslistdirsetrN   pathjoinrD   add	Exceptionprintstrr   sortedlist)logs_dir	log_filesall_logsr]   log_filelog_infoer   r   r   get_logsV   s   
$ro   z/api/searchc            
      C   s  t jdd } t jdd }d}dd t|D }g }|D ]c}zCttj||ddd	-}|	  }| |v rW|rEd
| |v rWt
tj||}||d< || W d    n1 saw   Y  W q" ty }	 ztd| dt|	  W Y d }	~	q"d }	~	ww t|S )Nqueryr6   r/   rO   c                 S   rP   rQ   rS   rU   r   r   r   rW   m   rX   zsearch_logs.<locals>.<listcomp>r%   r&   r'   z	country: rY   zError searching in r[   )r   argsr   lowerr^   r_   r=   ra   rb   r>   rN   rD   rd   re   rf   r   )
rp   country_filterri   rj   resultsrl   rF   rG   rm   rn   r   r   r   search_logsh   s*   
$ru   z/api/logfilec                  C   s   t jd} d}| r| dstddidfS tj|| }tj|s,tddidfS t	|d	d
d}|
 }W d    n1 sBw   Y  td|iS )NrY   rO   rR   errorzInvalid filenamei  zFile not foundi  r%   r&   r'   rG   )r   rq   r   rT   r   r^   ra   rb   existsr=   r>   )rY   ri   rE   rF   rG   r   r   r   get_logfile}   s   
rx   z
/api/statsc                  C   s   d} dd t | D }g }|D ]0}ztt j| |}|| W q ty@ } ztd| dt|  W Y d }~qd }~ww t	
|}t|t||d dk t||d dk t||d	 d
k |d   d}t|S )NrO   c                 S   rP   rQ   rS   rU   r   r   r   rW      rX   zget_stats.<locals>.<listcomp>rZ   r[   r1   r+   r3   r4   r,   r/   )total_scansr1   r3   alpha_tools_detectedr]   )r^   r_   rN   ra   rb   rD   rd   re   rf   pd	DataFramelenvalue_countsto_dictr   )ri   rj   rk   rl   rm   rn   dfstatsr   r   r   	get_stats   s&   $
r   __main__i  )debugport)flaskr   r   r   r   
flask_corsr   r^   r?   r   pandasr{   logginglogging.handlersr   __name__app
secret_keyr   router   r"   r$   rN   ro   ru   rx   r   runr   r   r   r   <module>   sL    
	

*



