HEX
Server: LiteSpeed
System: Linux ws4.angoweb.net 5.14.0-611.13.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 11 04:57:59 EST 2025 x86_64
User: tswangoe (2287)
PHP: 8.1.33
Disabled: show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/xray/manager/__pycache__/cpanel.cpython-37.pyc
B

�*UdF"�@s�dZddlZddlZddlmZddlmZddlmZddlm	Z	ddl
mZd	d
lm
Z
d	dlmZd	dlmZmZGd
d�de�ZdS)zN
This module contains classes implementing X-Ray Manager behaviour
for cPanel
�N)�ChainMap)�quote)�get_cl_version)�is_litespeed_running�)�BaseManager�)�XRayManagerError)�
DomainInfo)�user_mode_verification�with_fpm_reload_restrictedc	@s�eZdZdZdddddddd	d
�Zye�dkr>ded
<ded<Wnek
rTYnXed�dd�Ze	e
ed�dd��Ze
e
d�dd�Ze
e
d�dd�Zd*e
eed�dd�Zeee
ed�dd ���Ze
ed!�d"d#�Zeed$�d%d&�Zee
d'�d(d)�ZdS)+�
CPanelManagerzB
    Class implementing an X-Ray manager behaviour for cPanel
    z#/opt/cpanel/ea-php54/root/etc/php.dz#/opt/cpanel/ea-php55/root/etc/php.dz#/opt/cpanel/ea-php56/root/etc/php.dz#/opt/cpanel/ea-php70/root/etc/php.dz#/opt/cpanel/ea-php71/root/etc/php.dz#/opt/cpanel/ea-php72/root/etc/php.dz#/opt/cpanel/ea-php73/root/etc/php.dz#/opt/cpanel/ea-php74/root/etc/php.d)zea-php54zea-php55zea-php56zea-php70zea-php71zea-php72zea-php73zea-php74�cl6z#/opt/cpanel/ea-php80/root/etc/php.dzea-php80z#/opt/cpanel/ea-php81/root/etc/php.dzea-php81)�returncCst|j|j�S)z�
        Get supported PHP versions
        :return: a chained map with basic supported versions
                and cPanel supported versions
        )r�VERSIONS�VERSIONS_cPanel)�self�r�D/opt/alt/python37/lib/python3.7/site-packages/xray/manager/cpanel.py�supported_versions4sz CPanelManager.supported_versions)�cmdrcKs.d|g}dd�|��D�}ddg}|||S)z�
        Generate WHMAPI command arguments list from given parameters
        :param cmd: api command itself
        :param kwargs: additional arguments
        :return: list
        z/usr/sbin/whmapi1cSs"g|]\}}t|�d|����qS)�=)r)�.0�k�vrrr�
<listcomp>Fsz4CPanelManager.generate_args_list.<locals>.<listcomp>z--output�json)�items)r�kwargsZmain_api�
additionalZ
output_formatrrr�generate_args_list=sz CPanelManager.generate_args_listc
Ks|j|f|�}tj|ddd�}yt�|j�}WnTtjjk
r�}z2|jj	d||jd�d�t
d|�d|���|�Wdd}~XYnXy4|d	d
s�|jj	dd|id�t
|d	d
��WnTtk
�r}z4|jj	d|dt�|j�id�t
d|�d��|�Wdd}~XYnX|S)z�
        Run whmapi1 command and load json result
        :param cmd: valid whmapi command
        :kwargs: keyword arguments
        :return: loaded result, e.g. dict
        T)�capture_output�textz1Failed to parse JSON from a WHMAPI command output)�commandZresult_json)�extraz$Failed to parse JSON from a WHMAPI 'z' command output: N�metadata�resultz
WHMAPI failedr�reasonz1Failed to retrieve WHMAPI info: no %s field foundz#Failed to retrieve WHMAPI info: no z field found)r �
subprocess�runr�loads�stdout�decoder�JSONDecodeError�logger�errorr	�KeyError)rrr�argsr&Z
loaded_result�errr�whmapi_commandJs.&"zCPanelManager.whmapi_command)�domain_namerc
Cs�y|jd|d�}WnDtk
rV}z&dt|�krFtd|�d�dd�|�Wdd}~XYn^Xy|d	d
dStk
r�}z,|jjd|d
|id�td|�d��|�Wdd}~XYnXdS)z�
        Try to resolve domain_name if it is an alias
        :param domain_name: original domain name
        :return: resolved domain name alias
        Zdomainuserdata)�domainz#system does not have a domain namedzDomain 'z' does not exist on this serveriV)�errnoN�data�userdata�
servernamez*Failed to resolve alias: no %s field foundr)r$zFailed to resolve alias: no z field found)r3r	�strr0r.r/)rr4r&r2rrr�
resolve_aliasjs
zCPanelManager.resolve_aliasN)�name�domains_datarcs�x`�fdd�|D�D]J}|j�d�|d|d�t|r<|n�|d|dt�sX|dndd�SW|jjd	d
�id�td��d
�dd��dS)a
        Try to find given name among known domains
        :param name: name  of domain to find
        :param domains_data: list of known domains
        :param original_name: original domain name (in case of alias resolving)
        :return: a DomainInfo object
        c3s|]}|d�kr|VqdS)�vhostNr)r�item)r<rr�	<genexpr>�sz-CPanelManager.check_domain.<locals>.<genexpr>z@Retrieved domain info: domain %s owned by %s uses php version %s�account�version�php_fpmF)r<�panel_php_version�user�	panel_fpmz#Domain does not exist on the serverr4)r$zDomain 'z' does not exist on this serveriV)r6N)r.�infor
r�warningr	)rr<r=�
original_namer5r)r<r�check_domain�s	zCPanelManager.check_domainc
Cs�|�d�}y|dd}WnJtk
rd}z,|jjd|d|id�td|�d��|�Wd	d	}~XYnXy|�||�}Wn.tk
r�|�|�}|j|||d
�}YnX|S)a
        Retrieve information about given domain from control panel environment:
        PHP version, user of domain.
        Try to resolve alias if domain was not found in API response
        :param domain_name: name of domain
        :return: a DomainInfo object
        �php_get_vhost_versionsr7�versionsz1Failed to retrieve domain info: no %s field foundr)r$z#Failed to retrieve domain info: no z field foundN)rI)r3r0r.r/r	rJr;)rr4r&�
domain_phpr2�_info�aliasrrr�get_domain_info�s 

"
zCPanelManager.get_domain_info)�domain_php_versionrc
Csv|�d�}y|dd}WnJtk
rd}z,|jjd|d|id�td|�d��|�Wd	d	}~XYnXd
|kot||kS)a$
        Check if given domain uses system default version.
        And system default is not alt-php.
        If yes, then it means that selector could be applied for given domain
        :param domain_php_version: PHP version of domain
        :return: True if yes, False otherwise
        �php_get_system_default_versionr7rBz@Failed to retrieve system default PHP version: no %s field foundr)r$z2Failed to retrieve system default PHP version: no z field foundNzalt-php)r3r0r.r/r	)rrQr&�default_phpr2rrr�&domain_default_version_allows_selector�s
"z4CPanelManager.domain_default_version_allows_selector)�domain_inforcCs|�|j�o|jS)z�
        Check if selector is enabled specifically for panel
        Required to be implemented by child classes
        :param domain_info: a DomainInfo object
        :return: True if yes, False otherwise
        )rTrDrF)rrUrrr�panel_specific_selector_enabled�sz-CPanelManager.panel_specific_selector_enabled)�dom_inforcCs|j�d�S)z|
        Get cPanel FPM service name
        :param dom_info: a DomainInfo object
        :return: FPM service name
        z-php-fpm)rD)rrWrrr�fpm_service_name�szCPanelManager.fpm_service_name)N)�__name__�
__module__�__qualname__�__doc__rr�	TypeErrorrr�staticmethodr:�listr �dictr3r;r
rJrrrP�boolrTrVrXrrrrr
s6
	 
r
)r\rr(�collectionsrZpipesr�clcommon.utilsrr�baserZinternal.exceptionsr	Zinternal.typesr
Zinternal.user_plugin_utilsrrr
rrrr�<module>s