97 lines
2.4 KiB
PHP
97 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* AJAX-обработчики: health-check прокси.
|
|
*
|
|
* @package AI_Proxy_Manager
|
|
*/
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Класс AJAX-обработчиков плагина.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
class AIPMSP_Ajax {
|
|
|
|
/**
|
|
* Конструктор: регистрирует AJAX-экшены.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'wp_ajax_aipmsp_check_proxy', array( $this, 'check_proxy' ) );
|
|
}
|
|
|
|
/**
|
|
* Проверяет один прокси по запросу из админки.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function check_proxy() {
|
|
// Проверка nonce и прав.
|
|
check_ajax_referer( 'aipmsp_ajax_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error(
|
|
array( 'message' => __( 'Недостаточно прав.', 'ai-proxy-manager' ) ),
|
|
403
|
|
);
|
|
}
|
|
|
|
$ip = isset( $_POST['ip'] ) ? sanitize_text_field( wp_unslash( $_POST['ip'] ) ) : '';
|
|
$port = isset( $_POST['port'] ) ? absint( wp_unslash( $_POST['port'] ) ) : 0;
|
|
$type = isset( $_POST['type'] ) ? AIPMSP_Proxy::sanitize_type( wp_unslash( $_POST['type'] ) ) : 'http';
|
|
|
|
$valid_host = filter_var( $ip, FILTER_VALIDATE_IP ) || AIPMSP_Proxy::is_valid_host( $ip );
|
|
|
|
if ( ! $valid_host || $port < 1 || $port > 65535 ) {
|
|
wp_send_json_error(
|
|
array( 'message' => __( 'Некорректный адрес или порт прокси.', 'ai-proxy-manager' ) )
|
|
);
|
|
}
|
|
|
|
// Находим прокси в сохранённых настройках, чтобы взять зашифрованный пароль/логин.
|
|
$settings = AIPMSP_Proxy::get_settings();
|
|
$proxy = null;
|
|
|
|
foreach ( $settings['proxies'] as $candidate ) {
|
|
if ( $candidate['ip'] === $ip && (int) $candidate['port'] === $port ) {
|
|
$proxy = $candidate;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( null === $proxy ) {
|
|
// Прокси ещё не сохранён — проверяем без авторизации.
|
|
$proxy = array(
|
|
'ip' => $ip,
|
|
'port' => $port,
|
|
'type' => $type,
|
|
'user' => '',
|
|
'pass' => '',
|
|
);
|
|
}
|
|
|
|
$result = AIPMSP_Proxy::health_check( $proxy );
|
|
|
|
if ( $result['success'] ) {
|
|
wp_send_json_success(
|
|
array(
|
|
'message' => $result['message'],
|
|
'time' => $result['time'],
|
|
)
|
|
);
|
|
}
|
|
|
|
wp_send_json_error(
|
|
array(
|
|
'message' => $result['message'],
|
|
'time' => $result['time'],
|
|
)
|
|
);
|
|
}
|
|
}
|