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__/aiScannerManager.cpython-310.pyc
o

��hR��@s�ddlZddlZddlZddlZddlmZmZddlmZmZddl	m
Z
ddlmZddl
mZddlmZddlmZdd	lmZd
dlmZmZmZddlmZdd
lmZGdd�d�ZdS)�N)�datetime�	timedelta)�render�redirect)�JsonResponse)�timezone)�settings)�reverse)�messages)�
Administrator�)�AIScannerSettings�ScanHistory�FileAccessToken)�
ACLManager)�CyberCPLogFileWriterc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(S))�AIScannerManagerz,https://platform.cyberpersons.com/ai-scannercCs
t|_dS)N)�logging�logger��self�r�0/usr/local/CyberCP/aiScanner/aiScannerManager.py�__init__s
zAIScannerManager.__init__c
Cs��z
tjj|d�}t�|�}z|�dd�dkrt��WWSWnttfy/|j�	d�Ynwt
jj|ddd�d	�\}}|��}|d
dkrTt
j���d�dd
�}nt�|�}	t
jj|	d��d�dd
�}|j}
|j�	d|
���|jr�|j�	d�|�|j�}|j�	d|���|dur�||_|��|}
|j�	d|
���n	|j�	d|
���t��}|�|�}
zt�||�}|j�	dt|��d|j���Wnty�}z|j�	dt|����g}WYd}~nd}~ww|j�	d|j���|||||
||j|
|d�	}|j�	d�t|d|�WSt�yM}z2ddl}|j�	dt|����|j�	d|� ����t|ddt|���dggddd��WYd}~Sd}~ww)zMain AI Scanner page��pk�aiScannerAccessrrzO[AIScannerManager.scannerHome] aiScannerAccess field not found, allowing access�F)�balance�is_payment_configured��admin�defaultsr!z-started_atN�
)�	admin__inz/[AIScannerManager.scannerHome] Stored balance: z;[AIScannerManager.scannerHome] Fetching balance from API...z5[AIScannerManager.scannerHome] API returned balance: z3[AIScannerManager.scannerHome] Updated balance to: zP[AIScannerManager.scannerHome] API balance call failed, keeping stored balance: z%[AIScannerManager.scannerHome] Found z websites for z8[AIScannerManager.scannerHome] Error fetching websites: z4[AIScannerManager.scannerHome] Building context for )	r!�scanner_settings�pricing_data�recent_scans�current_balance�websitesr�vps_info�	server_ipzM[AIScannerManager.scannerHome] Context built successfully, rendering templatezaiScanner/scanner.htmlz&[AIScannerManager.scannerHome] Error: z*[AIScannerManager.scannerHome] Traceback: z Failed to load AI Scanner page: )�errorrr)r'r(r&)!r�objects�getr�	loadedACL�	loadError�AttributeError�KeyErrorr�writeToFiler
�
get_or_create�get_ai_scanner_pricingr�all�order_by�loadUserObjects�filterrr�get_account_balance�api_key�save�fetchIP�check_vps_free_scans�findWebsiteObjects�len�userName�	Exception�strr�	traceback�
format_exc)r�request�userIDr!�
currentACLr%�createdr&r'�user_adminsr(�api_balancer+r*r)�e�contextrDrrr�scannerHomes�
��
�

"������zAIScannerManager.scannerHomec

Cs�z�|jdkrtddd��WStjj|d�}t�|�}z|�dd�dkr,tdd	d��WWSWnttfy8Ynw|�	�}|�
d
�d}t|d�rO|jrO|jn|j
�d|��}|j�d
|j
�d|�d|���|j�d|�d|���|�||�}|r�|j�d|���td|d|dd��WS|j�d|���tddd��WSty�}	z|j�dt|	����tddd��WYd}	~	Sd}	~	ww)z#Setup payment method for AI scanner�POSTF�Invalid request method��successr,rrrr�
Access denied�:�email�@z'[AIScannerManager.setupPayment] Admin: z	, Email: z, Host: z=[AIScannerManager.setupPayment] Attempting payment setup for z on z=[AIScannerManager.setupPayment] Payment setup successful for T�payment_url�token)rRrWrXz9[AIScannerManager.setupPayment] Payment setup failed for z=Failed to setup payment. Please check the logs and try again.z'[AIScannerManager.setupPayment] Error: �Internal server errorN)�methodrrr-r.rr/r1r2�get_host�split�hasattrrUrArr3�setup_ai_scanner_paymentrBrC)
rrFrGr!rH�cyberpanel_host�cyberpanel_domain�admin_email�
setup_datarLrrr�setupPaymentzsF

��& 
�
���zAIScannerManager.setupPaymentc
Cs��z�tjj|d�}|j�d�}|j�dt|j����|dk�r5|j�d�}|j�dd�}|j�d�d	k}|j�d
d�}|j�d|rH|dd
�nd�d��|j�d|���|j�d|�d|���|�r(zz|rmt|�nd}	tjj	|||	dd�d�\}
}|s�||
_
|	|
_d|
_|
�
�|j�d�n|j�d�|
��|j�d|
j
r�|
j
dd
�nd�d|
j�d|
j���|r�t�|d|�d|�d��n
t�|d|�d��|j�d |j�d!|���Wn�t�y}z|j�d"t|����t�|d#�WYd}~n�d}~wt�y'}z|j�d$t|����t�|d%�WYd}~n�d}~ww|j�d&�t�|d'�n�|d(k�r�|j�d�}|�r�z-tjj	||ddd�d�\}
}|�s_||
_
d|
_|
�
�t�|d)�|j�d*|j���WnMt�y�}z|j�d+t|����t�|d,�WYd}~n.d}~wwt�|d-�n"|d.v�r�|j�d/d0�}
t�|d1|
���|j�d2|j�d3|
���td4�WSt�y�}z|j�d5t|����t�|d6�td4�WYd}~Sd}~ww)7z Handle return from payment setupr�statusz1[AIScannerManager.setupComplete] All URL params: rRr;rz0.00�charged�true�amountz*[AIScannerManager.setupComplete] API Key: N��Nonez...z3[AIScannerManager.setupComplete] Balance from URL: z*[AIScannerManager.setupComplete] Charged: z
, Amount: rT)r;rrr zB[AIScannerManager.setupComplete] Updated existing scanner settingsz=[AIScannerManager.setupComplete] Created new scanner settingsz8[AIScannerManager.setupComplete] Final state - API Key: z..., Balance: z, Configured: zPayment setup successful! $z! charged to your card. You have $z credit.z$Payment setup successful! You have $z/[AIScannerManager] Payment setup completed for z with balance $z;[AIScannerManager.setupComplete] Balance conversion error: z3Payment setup completed but balance format invalid.z6[AIScannerManager.setupComplete] Database save error: z4Payment setup completed but failed to save settings.zH[AIScannerManager.setupComplete] No API key received in success callbackz1Payment setup completed but API key not received.�partial_successzJPayment method added but initial charge failed. Please add funds manually.z-[AIScannerManager] Partial payment setup for z=[AIScannerManager.setupComplete] Partial success save error: z&Payment method setup partially failed.z2Payment method setup failed - no API key received.��failed�	cancelledr,r,zPayment setup failedzPayment setup failed: z,[AIScannerManager] Payment setup failed for �: �
aiScannerHomez([AIScannerManager.setupComplete] Error: z'An error occurred during payment setup.)rr-r.�GETrr3�dict�floatr
r4r;rrr<�refresh_from_dbr
rRrA�
ValueErrorrCr,rB�warningr)rrFrGr!rdr;rrerg�
balance_floatr%rIrLr,rrr�
setupComplete�s�
$�
�	6���
�
�	��

��zAIScannerManager.setupCompletec
Csr�z�|jdkrtddd��WStjj|d�}t�|�}z|�dd�dkr-tdd	d��WWSWnttfy9Ynwt�	�}|�
|�}d
}d
}|�d�r�|�d�r�|�d
d�dkr�|j�d|���|�
|�}|r|�d�}|�dd�}	|j�d|	�d��n|j�d�tddd��WSd
}
|s�ztjj|d�}
|
jr�|
js�tddd��WWSWntjy�tddd��YWSwt�|j�}|�d�}|�dd�}
|s�tddd��WSddlm}zt�|||�s�tddd��WWS|jj|d�}Wn|j�y	tddd��YWSwd t��jd
d!���}|��}tjj||||
d"d#�}tjj|||d$|�d%�t� �t!d&d'�d(�d)|�"��d*�}d)|�"��d+�}|�rP|n|
j}|�#|||
|||||�}|�r�d,|_$|�%�|�rwd-|�dd��d.�}nd/}td0||d1��WSd2|_$d3|_&|�%�tdd4d��WSt'�y�}z|j�d5t(|����tdd6d��WYd
}~Sd
}~ww)7zStart a new AI security scanrOFrPrQrrrrrSNrR�is_vps�free_scans_availablezR[AIScannerManager.startScan] VPS eligible for free scans, getting API key for IP: r;�free_scans_remainingz3[AIScannerManager.startScan] VPS API key obtained, z free scans remainingz6[AIScannerManager.startScan] Failed to get VPS API keyz)Failed to authenticate VPS for free scans�r!�Payment not configured�Scanner not configured�domain�	scan_type�fullzDomain is required)�WebsiteszAccess denied to this domain)r~zDomain not found�cp_��pending)r!�scan_idr~rrdz/home/z/public_html�)�hours)rX�scan_historyr~�wp_path�
expires_at�https://z/api/ai-scanner/callbackz/api/ai-scanner/�runningz$Free VPS scan started successfully! z free scans remaining.zScan started successfullyT)rRr��messagerlz'Failed to submit scan to AI Scanner APIzFailed to start scanz$[AIScannerManager.startScan] Error: rY))rZrrr-r.rr/r1r2r=r>rr3�get_or_create_vps_api_keyr
rr;�DoesNotExist�json�loads�body�websiteFunctions.modelsr��checkOwnership�uuid�uuid4�hex�generate_file_access_tokenr�createrr�nowrr[�submit_wordpress_scanrdr<�
error_messagerBrC)rrFrGr!rHr+r*�vps_api_key�vps_key_datarzr%�datar~rr��websiter��file_access_tokenr��callback_url�file_access_base_url�api_key_to_use�
scan_responser�rLrrr�	startScans�

��

�

��
��	
�	�
���zAIScannerManager.startScanc	
Cs�z�|jdkrtddd��WStjj|d�}t�|�}z|�dd�dkr,tdd	d��WWSWnttfy8Ynwzt	jj|d
�}|j
rG|jsPtddd��WWSWnt	jyctddd��YWSw|�
|j�}|d
ur�|j}||_|��|j�d|�d|�d|j���tdt|�d|d��d��WStddd��WSty�}z|j�dt|����tddd��WYd
}~Sd
}~ww)z Refresh account balance from APIrOFrPrQrrrrrSr{r|r}Nz8[AIScannerManager.refreshBalance] Updated balance from $z to $� for TzBalance refreshed: $z.4f)rRrr�z Failed to fetch balance from APIz)[AIScannerManager.refreshBalance] Error: rY)rZrrr-r.rr/r1r2r
rr;r�r:rr<rr3rArrrBrC)	rrFrGr!rHr%rK�old_balancerLrrr�refreshBalance�sJ

���� 

���zAIScannerManager.refreshBalancec
Cs|�z|jdkrtddd��WStjj|d�}t�|�}z|�dd�dkr-tdd	d��WWSWnttfy9YnwzDt	jj|d
�}|j
rH|jszt��}|�
|�}|�d�rq|�|�}|rh|�d�rh|�d�}	ntdd
d��WWStddd��WWS|j}	Wn>t	jy�t��}|�
|�}|�d�r�|�|�}|r�|�d�r�|�d�}	ntdd
d��YWStddd��YWSYnw|��}
|
�d�d}t|d�r�|jr�|jn|j�d|��}|j�d|j�d��|�|	||
�}
|
�r|j�d|���td|
d|
�dd�d��WS|j�d|���tddd��WSt�y=}z|j�dt|����tddd��WYd}~Sd}~ww) z%Add a new payment method for the userrOFrPrQrrrrrSr{rxr;zFailed to authenticate VPSz$Initial payment setup required firstr}rTrUrVzF[AIScannerManager.addPaymentMethod] Setting up new payment method for z (API key authentication)zH[AIScannerManager.addPaymentMethod] Payment method setup successful for T�	setup_urlrX�)rRr�rXzD[AIScannerManager.addPaymentMethod] Payment method setup failed for z1Failed to setup payment method. Please try again.z+[AIScannerManager.addPaymentMethod] Error: rYN)rZrrr-r.rr/r1r2r
rr;r=r>r�r�r[r\r]rUrArr3�setup_add_payment_methodrBrC)rrFrGr!rHr%r+r*r�r�r_r`rarbrLrrr�addPaymentMethod�st

��


�


��&

�
���z!AIScannerManager.addPaymentMethodc
Cs�z�tjj|d�}t�|�}z|�dd�dkr"t�|d�td�WWSWntt	fy.Ynw|j
�d�}|j�dt
|j
����|d	kr�|j
�d
�}|j
�d�}|j
�d�}|j�d
|�d|�d|�d��|r�t�|d|�d|�d��|j�d|j�d|�d|���n(t�|d�n!|dvr�|j
�dd�}	t�|d|	���|j�d|j�d|	���td�WSty�}
z|j�dt|
����t�|d�td�WYd}
~
Sd}
~
ww) z(Handle return from adding payment methodrrrrzAccess denied to AI Scanner�	dashboardrdz9[AIScannerManager.paymentMethodComplete] All URL params: rR�payment_method_id�
card_last4�
card_brandz?[AIScannerManager.paymentMethodComplete] Payment method added: z (z ****�)z'Payment method added successfully! New z card ending in �.z,[AIScannerManager] Payment method added for rnz"Payment method added successfully!rkr,zFailed to add payment methodzFailed to add payment method: z1[AIScannerManager] Payment method add failed for roz0[AIScannerManager.paymentMethodComplete] Error: z.An error occurred while adding payment method.N)rr-r.rr/r
r,rr1r2rprr3rqrRrArBrC)rrFrGr!rHrdr�r�r�r,rLrrr�paymentMethodComplete"sB
�� "
��z&AIScannerManager.paymentMethodCompletec

Csz�|jdkrtddd��WSt�|j�}|�d�}|�d�}|s(tddd��WSz	tjj|d�}WntjyL|j	�
d	|���tdd
d��YWSw||_t�
�|_|dkr�|�dg�}|�d
i�}|�dd�}|�dd�}	|�|�|�|�||_|	|_t|�|_|jj}
|r�|
j|kr�|
j|8_|
��|j	�
d|�d|�dt|����n|dkr�|�dd�}||_|j	�
d|�d|���|��tjj|d�jdd�tddi�WSt�y}z|j	�
dt|����tddd��WYd}~Sd}~ww) z0Handle scan results callback from AI Scanner APIrOFrPrQr�rdzScan ID required)r�z0[AIScannerManager.scanCallback] Scan not found: zScan not found�	completed�findings�summary�cost_usdr�
files_scannedz#[AIScannerManager] Scan completed: z	, Cost: $z
, Issues: rlr,zScan failedz [AIScannerManager] Scan failed: z	, Error: )r�)�	is_activerRTz'[AIScannerManager.scanCallback] Error: rYN)rZrr�r�r�r.rr-r�rr3rdrr��completed_at�set_findings�set_summaryr�r�r@�issues_foundr!�ai_scanner_settingsrr<r�rr9�updaterBrC)
rrFr�r�rdr�r�r�r�r�r%r�rLrrr�scanCallbackQsV


�



$��zAIScannerManager.scanCallbackc
Csnztj|j�d�dd�}|jdkr|��WSWdSty6}z|j�dt|����WYd}~dSd}~ww)z'Get current pricing from AI Scanner APIz
/api/plan/r#)�timeout��Nz1[AIScannerManager.get_ai_scanner_pricing] Error: �	�requestsr.�AI_SCANNER_API_BASE�status_coder�rBrr3rC)r�responserLrrrr5�s

��z'AIScannerManager.get_ai_scanner_pricingc
Cs.zx||�d�dd|�d�d�}|j�d|j�d��|j�d|���tj|j�d�|d	d
�}|j�d|j���|j�d|j���|jd
krl|��}|�	d�r\|d|dd�WS|j�d|�	dd����WdS|j�d|j���WdSt
y�}z|j�dt|����WYd}~dSd}~ww)z(Setup payment method with AI Scanner APIrTrr�z/aiscanner/setup-complete/)rUr~�
return_urlz@[AIScannerManager.setup_ai_scanner_payment] Sending request to: z/cyberpanel/setup-payment/z5[AIScannerManager.setup_ai_scanner_payment] Payload: r#�r�r�z=[AIScannerManager.setup_ai_scanner_payment] Response status: z>[AIScannerManager.setup_ai_scanner_payment] Response content: r�rRrWrX)rWrXzH[AIScannerManager.setup_ai_scanner_payment] API returned success=false: r,�
Unknown errorzA[AIScannerManager.setup_ai_scanner_payment] Non-200 status code: Nz7[AIScannerManager.setup_ai_scanner_payment] Exception: �r\rr3r�r��postr��textr�r.rBrC)r�
user_emailr_�payloadr�r�rLrrrr^�s:
�
�

����z)AIScannerManager.setup_ai_scanner_paymentc
CsXz�|j�d|j�d��tj|j�d�d|idd�}|j�d|j���|j�d|j���|jdkr�|��}|�d	�r^t|�d
|�dd���}|�d
d�}|j�d|�d|�d��|WS|�d
d�}|j�d|�dd��d|�d��|dkr~t|�WSWdS|j�d|j���WdSt	y�}z|j�dt
|����WYd}~dSd}~ww)zGet current account balancez@[AIScannerManager.get_account_balance] Requesting balance from: z/api/account/balance/�	X-API-Keyr#��headersr�z8[AIScannerManager.get_account_balance] Response status: z9[AIScannerManager.get_account_balance] Response content: r�rR�balance_usdrr�authenticated_via�unknownz7[AIScannerManager.get_account_balance] Parsed balance: z (auth: r�zC[AIScannerManager.get_account_balance] API returned success=false: r,r�z (balance hint: z<[AIScannerManager.get_account_balance] Non-200 status code: Nz2[AIScannerManager.get_account_balance] Exception: )rr3r�r�r.r�r�r�rrrBrC)rr;r�r�r�auth_method�balance_hintrLrrrr:�s8
�

"
���z$AIScannerManager.get_account_balancec	
Cs<z||||||||d�}	|j�d|�d|���|j�d|	���tj|j�d�d|i|	dd�}
|j�d	|
j���|j�d
|
j���|
jdkrs|
��}|�d�rc|�d
�}|j�d|���|WS|j�d|�dd����WdS|j�d|
j���WdSt	y�}
z|j�dt
|
����WYd}
~
dSd}
~
ww)z%Submit scan request to AI Scanner API)r~�site_urlr�cyberpanel_callbackr�r�r�r+z9[AIScannerManager.submit_wordpress_scan] Submitting scan r�z2[AIScannerManager.submit_wordpress_scan] Payload: z/api/scan/submit-v2/r�r#�r�r�r�z:[AIScannerManager.submit_wordpress_scan] Response status: z;[AIScannerManager.submit_wordpress_scan] Response content: r�rRr�zD[AIScannerManager.submit_wordpress_scan] Platform assigned scan ID: zJ[AIScannerManager.submit_wordpress_scan] Platform returned success=false: r,r�z>[AIScannerManager.submit_wordpress_scan] Non-200 status code: Nz0[AIScannerManager.submit_wordpress_scan] Error: �rr3r�r�r�r�r�r�r.rBrC)rr;r~rr�r�r�r�r+r�r�r��platform_scan_idrLrrrr��sF�
�


���z&AIScannerManager.submit_wordpress_scanc
C�zztj|j�d|�d�d|idd�}|jdkr|��WSWdSty<}z|j�dt|����WYd}~dSd}~ww)	z#Get scan status from AI Scanner API�
/api/scan/z/status/r�r#r�r�Nz*[AIScannerManager.get_scan_status] Error: r��rr;r�r�rLrrr�get_scan_status��

��z AIScannerManager.get_scan_statusc
Cr�)	z$Get scan results from AI Scanner APIr�z	/results/r�r#r�r�Nz+[AIScannerManager.get_scan_results] Error: r�r�rrr�get_scan_results r�z!AIScannerManager.get_scan_resultsc
Cs�zC|j�d|���tjdd|idd�}|j�d|j���|jdkr3|��}|j�d|���|WS|j�d	|j���d
d
dd�WStyh}z|j�d
t|����d
d
t|�d�WYd}~Sd}~ww)zFCheck if server IP belongs to VPS hosting and has free scans availablezH[AIScannerManager.check_vps_free_scans] Checking VPS free scans for IP: zFhttps://platform.cyberpersons.com/ai-scanner/api/vps/check-free-scans/�ipr#r�z9[AIScannerManager.check_vps_free_scans] Response status: r�z7[AIScannerManager.check_vps_free_scans] Response data: z3[AIScannerManager.check_vps_free_scans] API error: FzAPI call failed)rRrxr,z/[AIScannerManager.check_vps_free_scans] Error: N)	rr3r�r�r�r�r�rBrC)rr+r�r�rLrrrr>0s&�
��z%AIScannerManager.check_vps_free_scansc
Cs8z}|�d�dd|�d�dd�}|j�d|j�d��|j�d	|���tj|j�d�d
|i|dd�}|j�d
|j���|j�d|j���|jdkrq|��}|�	d�ra|d|�	dd�d�WS|j�d|�	dd����WdS|j�d|j���WdSt
y�}z|j�dt|����WYd}~dSd}~ww)z3Setup additional payment method with AI Scanner APIrTrr�z#/aiscanner/payment-method-complete/�add_payment_method)r~r��actionz@[AIScannerManager.setup_add_payment_method] Sending request to: z/cyberpanel/add-payment-method/z5[AIScannerManager.setup_add_payment_method] Payload: r�r#r�z=[AIScannerManager.setup_add_payment_method] Response status: z>[AIScannerManager.setup_add_payment_method] Response content: r�rRr�rXr�)r�rXzH[AIScannerManager.setup_add_payment_method] API returned success=false: r,r�zA[AIScannerManager.setup_add_payment_method] Non-200 status code: Nz7[AIScannerManager.setup_add_payment_method] Exception: r�)rr;r�r_r�r�r�rLrrrr�Hs<
�
�


����z)AIScannerManager.setup_add_payment_methodc
Cs$zsd|i}|j�d|���tj|j�d�|ddidd�}|j�d|j���|j�d	|j���|jd
krg|��}|�d�rW|�d�|�d
�|�d�|�d�|�d�d�WS|j�d|�dd����WdS|j�d|j���WdSt	y�}z|j�dt
|����WYd}~dSd}~ww)z,Get API key for VPS free scans from platformr+zL[AIScannerManager.get_or_create_vps_api_key] Requesting VPS API key for IP: z/api/vps/generate-api-key/zContent-Typezapplication/jsonr#)r�r�r�z>[AIScannerManager.get_or_create_vps_api_key] Response status: z?[AIScannerManager.get_or_create_vps_api_key] Response content: r�rRr;rz�account_type�vps_name�vps_id)r;rzr�r�r�zI[AIScannerManager.get_or_create_vps_api_key] API returned success=false: r,r�zB[AIScannerManager.get_or_create_vps_api_key] Non-200 status code: Nz8[AIScannerManager.get_or_create_vps_api_key] Exception: r�)rr+r�r�r�rLrrrr�os:
�

����z*AIScannerManager.get_or_create_vps_api_keycCsdt�d���S)z!Generate secure file access tokenr�� )�secrets�
token_urlsaferrrrr��sz+AIScannerManager.generate_file_access_tokenN)�__name__�
__module__�__qualname__r�rrNrcrwr�r�r�r�r�r5r^r:r�r�r�r>r�r�r�rrrrrs,b0i
1U/>&%+'%r)r�r�r�r�rr�django.shortcutsrr�django.httpr�django.utilsr�django.confr�django.urlsr	�django.contribr
�loginSystem.modelsr�modelsr
rr�plogical.aclr�plogical.CyberCPLogFileWriterrrrrrrr�<module>s