HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/aiScanner/__pycache__/models.cpython-310.pyc
o

��h0�@s�ddlmZddlmZddlZddlmZGdd�dej�ZGdd	�d	ej�Z	Gd
d�dej�Z
Gdd
�d
ej�ZGdd�dej�ZdS)�)�models)�
AdministratorN�)�ScanStatusUpdatec@s|eZdZdZejeejdd�Zej	dddd�Z
ejddd	d
�Zej
dd�Zejdd
�Zejdd�ZGdd�d�Zdd�ZdS)�AIScannerSettingsz>Store AI scanner configuration and API keys for administrators�ai_scanner_settings��	on_delete�related_name�T)�
max_length�blank�null�
����
max_digits�decimal_places�defaultF�r��auto_now_add��auto_nowc@�eZdZdZdS)zAIScannerSettings.MetarN��__name__�
__module__�__qualname__�db_table�r!r!�&/usr/local/CyberCP/aiScanner/models.py�Meta�r#cCsd|jj��S)NzAI Scanner Settings for )�admin�userName��selfr!r!r"�__str__szAIScannerSettings.__str__N)rrr�__doc__r�
OneToOneFieldr�CASCADEr%�	CharField�api_key�DecimalField�balance�BooleanField�is_payment_configured�
DateTimeField�
created_at�
updated_atr#r)r!r!r!r"r	src@seZdZdZgd�Zgd�Zejeej	dd�Z
ejddd�Zejd	d
�Z
ejdedd
�Zejdedd
�Zejddddd�Zejdd�Zejdd�Zejddd�Zejddd�Zejddd�Zejdd�Zejddd�ZGdd�d�Zdd�Zedd��Zedd��Z dd �Z!d!d"�Z"d#S)$�ScanHistoryzStore scan history and results�)�pending�Pending)�running�Running)�	completed�	Completed)�failed�Failed)�	cancelled�	Cancelled�)�fullz	Full Scan)�quickz
Quick Scan)�customzCustom Scan�scan_historyr�dT�r�uniquer�r�rC�r�choicesrr8r�)rrrr
rr�r
rr�rr
c@�eZdZdZdgZdS)zScanHistory.Meta�ai_scanner_historyz-started_atN�rrrr �orderingr!r!r!r"r#7�
r#cCsd|j�d|j�d|j�d�S)NzScan z - � (�))�scan_id�domain�statusr'r!r!r"r);szScanHistory.__str__cC�2|jrzt�|j�WStjygYSwgS)zParse findings JSON)�
findings_json�json�loads�JSONDecodeErrorr'r!r!r"�findings>��zScanHistory.findingscCs2|jrzt�|j�WStjyiYSwiS)zParse summary JSON)�summary_jsonr]r^r_r'r!r!r"�summaryHrazScanHistory.summarycC�t�|�|_dS)zSet findings from list/dictN)r]�dumpsr\)r(�
findings_listr!r!r"�set_findingsR�zScanHistory.set_findingscCrd)zSet summary from dictN)r]rerb)r(�summary_dictr!r!r"�set_summaryVrhzScanHistory.set_summaryN)#rrrr*�SCAN_STATUS_CHOICES�SCAN_TYPE_CHOICESr�
ForeignKeyrr,r%r-rXrY�	scan_typerZr/�cost_usd�IntegerField�
files_scanned�issues_found�	TextFieldr\rb�
error_messager3�
started_at�completed_atr#r)�propertyr`rcrgrjr!r!r!r"r6s2
	
	r6c@s�eZdZdZejddd�Zejeej	dd�Z
ejdd�Zejd	d�Ze�
�Zej
dd
�Zejdd�ZGdd
�d
�Zdd�Zdd�ZdS)�FileAccessTokenz-Temporary tokens for file access during scansrGTrH�
access_tokensrrrJi�rrc@r)zFileAccessToken.Meta�ai_scanner_file_tokensNrr!r!r!r"r#er$r#cCsd|j�d|j��S)Nz
Access token z for )�tokenrYr'r!r!r"r)hszFileAccessToken.__str__cCsddlm}|��|jkS)Nr��timezone)�django.utilsr}�now�
expires_at)r(r}r!r!r"�
is_expiredkszFileAccessToken.is_expiredN)rrrr*rr-r{rmr6r,rFrY�wp_pathr3r�r4r1�	is_activer#r)r�r!r!r!r"rx[srxcsxeZdZdZgd�Zgd�Zgd�Zeje	ej
dd�Zejddd	�Z
ejd
d�Zejded
d�Zejdedd�Zejdd�Zejdddd�Zejdddd�Zejdedd�Zejddd�Zejddd�Zejdd�Zejdd�Zejdd�Zejddd�Zejdd�Z ejdd�Z!ejdd�Z"Gdd�d�Z#dd �Z$e%d!d"��Z&e%d#d$��Z'd%d&�Z(d'd(�Z)d)d*�Z*�fd+d,�Z+�Z,S)-�
ScheduledScanz#Store scheduled scan configurations))�daily�Daily)�weekly�Weekly)�monthly�Monthly)�	quarterly�	QuarterlyrB))�active�Active)�paused�Paused)�disabled�Disabled�scheduled_scansr��zName for this scheduled scan)r�	help_textzJSON array of domains to scan)r�rKr�rLrCz!Time of day to run the scan (UTC)Tz1Day of week for weekly scans (0=Monday, 6=Sunday))rr
r�z%Day of month for monthly scans (1-31)r�rPrrrzJSON array of email addresses�r
r�Fc@rQ)zScheduledScan.Meta�ai_scanner_scheduled_scansz-created_atNrSr!r!r!r"r#�rUr#cCsd|j�d|j�d�S)NzScheduled Scan: rVrW)�name�	frequencyr'r!r!r"r)��zScheduledScan.__str__cCr[)zParse domains JSON)�domainsr]r^r_r'r!r!r"�domain_list�razScheduledScan.domain_listcCr[)zParse notification emails JSON)�notification_emailsr]r^r_r'r!r!r"�notification_email_list�raz%ScheduledScan.notification_email_listcCrd)zSet domains from listN)r]rer��r(r�r!r!r"�set_domains�rhzScheduledScan.set_domainscCrd)z!Set notification emails from listN)r]rer�)r(�
email_listr!r!r"�set_notification_emails�rhz%ScheduledScan.set_notification_emailscCsHddlm}ddlm}m}ddl}|��}|jdkr5|j|jj	|jj
ddd�}||kr3||dd�7}|S|jd	kr_|j|��}|dkrI|d
7}|||d�}|j|jj	|jj
ddd�}|S|jdkr�|j
}|j}	t|j|�||	�d�}
|j|
|jj	|jj
ddd�}||kr�|	d
kr�|d7}d}	n|	d7}	t|j|�||	�d�}
|j||	|
d�}|S|jdk�r|j|jj	|jj
ddd�}|j}	|j
}|	d7}	|	d
kr�|d7}|	d
8}	t|jp�d|�||	�d�}
|j||	|
d�}||k�r|	d7}	|	d
k�r|d7}|	d
8}	t|j�pd|�||	�d�}
|j||	|
d�}|S||dd�}|S)z*Calculate next run time based on frequencyrr|)�datetime�	timedeltaNr�)�hour�minute�second�microsecondr)�daysr��r�)�dayr�r�r�r��)�year�monthr�r��)�weeks)r~r}r�r��calendarrr��replace�time_of_dayr�r��day_of_week�weekdayr�r��min�day_of_month�
monthrange)r(r}r�r�r�r�next_run�
days_aheadr�r�r�r!r!r"�calculate_next_run�sb
8
�0
��

�z ScheduledScan.calculate_next_runcs0|jr|jdkr
|��|_t�j|i|��dS)z#Override save to calculate next_runr�N)r�rZr��super�save)r(�args�kwargs��	__class__r!r"r�s
zScheduledScan.save)-rrrr*�FREQUENCY_CHOICESrl�STATUS_CHOICESrrmrr,r%r-r�rsr�r�rn�	TimeFieldr�rpr�r�rZr3�last_runr�r4r5r1�email_notificationsr��notify_on_threats�notify_on_completion�notify_on_failurer#r)rwr�r�r�r�r�r��
__classcell__r!r!r�r"r�psB
	
	Fr�c@s�eZdZdZgd�Zejeejdd�Z	ej
dd�Zejdedd	�Z
ejdd
d�Zejdd
�Zejdd
�Zejdd
�Zejdddd�Zejddd�Zejddd�Zej
ddd�Zej
ddd�ZGdd�d�Zdd�Zedd��Zedd��Zdd�Zdd �Z d!S)"�ScheduledScanExecutionz.Track individual executions of scheduled scansr7�
executionsrTrrKr8rLz'JSON array of domains that were scannedr�rrrrNrrzJSON array of scan IDs createdrOrPc@rQ)zScheduledScanExecution.Meta�ai_scanner_scheduled_executionsz-execution_timeNrSr!r!r!r"r#!rUr#cCsd|jj�d|j��S)Nz
Execution of z at )�scheduled_scanr��execution_timer'r!r!r"r)%r�zScheduledScanExecution.__str__cCr[)zParse domains scanned JSON)�domains_scannedr]r^r_r'r!r!r"�scanned_domains(raz&ScheduledScanExecution.scanned_domainscCr[)zParse scan IDs JSON)�scan_idsr]r^r_r'r!r!r"�scan_id_list2raz#ScheduledScanExecution.scan_id_listcCrd)zSet scanned domains from listN)r]rer�r�r!r!r"�set_scanned_domains<rhz*ScheduledScanExecution.set_scanned_domainscCrd)zSet scan IDs from listN)r]rer�)r(r�r!r!r"�set_scan_ids@rhz#ScheduledScanExecution.set_scan_idsN)!rrrr*r�rrmr�r,r�r3r�r-rZrsr�rp�total_scans�successful_scans�failed_scansr/�
total_costr�rtrurvr#r)rwr�r�r�r�r!r!r!r"r�
s.
	
	r�)
�	django.dbr�loginSystem.modelsrr]�
status_modelsr�Modelrr6rxr�r�r!r!r!r"�<module>sB