File: //usr/local/CyberCP/aiScanner/__pycache__/api.cpython-310.pyc
o
��h�j � @ s� d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl m
Z
d dlmZ d dl
mZ ddlmZmZ d d lmZ G d
d� de�Zdd
� Zdd� Zee
dg�dd� ��Zee
dg�dd� ��Zee
dg�dd� ��Zee
dg�dd� ��ZdS )� N)�JsonResponse)�csrf_exempt)�require_http_methods��Websites)�
Administrator� )�FileAccessToken�ScanHistory)�CyberCPLogFileWriterc @ s e Zd ZdZdS )�
SecurityErrorz(Custom exception for security violationsN)�__name__�
__module__�__qualname__�__doc__� r r �#/usr/local/CyberCP/aiScanner/api.pyr s r c
C s� zW| r| � d�st�d| r| dd� nd� d�� W dS z'tjj| |dd �}|�� r6t�d
|� �� W W dS t�d|� �� |dfW W S tjyW t�d
|� �� Y W dS w tyt } zt�dt |�� �� W Y d}~dS d}~ww )z�
Implement proper token validation
- Check token format
- Verify token hasn't expired
- Confirm token is for the correct scan
- Log access attempts
�cp_z[API] Invalid token format: N� �Nonez...)NzInvalid token formatT)�token�scan_history__scan_id� is_activez[API] Token expired for scan )Nz
Token expiredz,[API] Token validated successfully for scan z[API] Token not found for scan )Nz
Invalid tokenz[API] Token validation error: )NzToken validation failed)
�
startswith�logging�writeToFiler �objects�get�
is_expired�DoesNotExist� Exception�str)r �scan_id�
file_token�er r r �validate_access_token s0 "����r% c
C sz z'|rt j�| |�d��}n| }t j�|�}t j�| �} |�| �s%td��|W S ty< } z tdt|�� ���d}~ww )zc
Ensure requested path is within allowed directory
Prevent directory traversal attacks
�/zPath outside allowed directoryzPath security check failed: N) �os�path�join�strip�abspathr r r r! )� base_path�requested_path� full_pathr$ r r r �secure_path_check9 s
��r/ �POSTc
C s� �z2t �| j�}|�d�}|�d�}|�dd�}t�d|� d|� �� |r'|s0tddid d
�W S t||�\}}|rBtd|idd
�W S z�tj j|j
d�}|j}d
} d
}
tj
�|dd�}zKddlm} d|� d�}
|j|
|jdd�}|d r�|d }ddl}|�d|�}|r�|�d�} t�d| � �� nt�dt|�dkr�|d nd� �� W n ty� } zt�dt|�� �� W Y d}~nd}~ww z(ddl}|jddgdddd �}|jdkr�ddl}|�d!|j�}|r�|�d�}
W n ty� Y nw d|j
||
| |d"�d#d$g|j�d%�d&�}t�d'|j
� �� t|�W W S tj�y3 t�d(|j
� �� tdd)id*d
� Y W S w t j �yF tdd+id d
� Y S t�yj } zt�d,t|�� �� tdd-id.d
�W Y d}~S d}~ww )/aH
POST /api/ai-scanner/authenticate
Request Body:
{
"access_token": "cp_access_abc123...",
"scan_id": "550e8400-e29b-41d4-a716-446655440000",
"worker_id": "scanner-1.domain.com"
}
Response:
{
"success": true,
"site_info": {
"domain": "client-domain.com",
"wp_path": "/home/client/public_html",
"php_version": "8.1",
"wp_version": "6.3.1"
},
"permissions": ["read_files", "list_directories"],
"expires_at": "2024-12-25T11:00:00Z"
}
�access_tokenr"