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__/plesk.cpython-37.pyc
B

�*Ud��@szdZddlZddlZddlmmZddlmZddl	m
Z
ddlmZddl
mZdd	lmZmZGd
d�de
�ZdS)zM
This module contains classes implementing X-Ray Manager behaviour
for Plesk
�N)�ChainMap�)�BaseManager�)�XRayManagerError)�
DomainInfo)�user_mode_verification�with_fpm_reload_restrictedc@s�eZdZdZdddddddd	d
dd�
Zed
�dd�Zeee	e
d�dd���Zee
d
�dd��Ze
ed�dd�Ze
e	d�dd�ZdS)�PleskManagerzA
    Class implementing an X-Ray manager behaviour for Plesk
    z/opt/plesk/php/5.4/etc/php.dz/opt/plesk/php/5.5/etc/php.dz/opt/plesk/php/5.6/etc/php.dz/opt/plesk/php/7.0/etc/php.dz/opt/plesk/php/7.1/etc/php.dz/opt/plesk/php/7.2/etc/php.dz/opt/plesk/php/7.3/etc/php.dz/opt/plesk/php/7.4/etc/php.dz/opt/plesk/php/8.0/etc/php.dz/opt/plesk/php/8.1/etc/php.d)
zplesk-php54zplesk-php55zplesk-php56zplesk-php70zplesk-php71zplesk-php72zplesk-php73zplesk-php74zplesk-php80zplesk-php81)�returncCst|j|j�S)z�
        Get supported PHP versions
        :return: a chained map with basic supported versions
                and Plesk supported versions
        )r�VERSIONS�VERSIONS_Plesk)�self�r�C/opt/alt/python37/lib/python3.7/site-packages/xray/manager/plesk.py�supported_versions-szPleskManager.supported_versions)�domain_namercs�dd�}xN�fdd�|��D�D]4\}}}|j�d�||�t�||�|d|k|d�SW|jjdd	�id
�td��d�d
d��dS)z�
        Retrieve information about given domain from control panel environment:
        PHP version, user of domain, fpm status
        :param domain_name: name of domain
        :return: a DomainInfo object
        cSsHd|krd}n6d|kr,d|�d�d��}nd�|�d�dd��}|S)	z�
            Resolve version for lsphp handlers
            :param h: original Plesk php handler id
            :return: resolved alt-php* version
            zlsphp-customz	alt-php56�lsphpzalt-php�-���Nr)�split�join)�h�verrrr�resolve_lsphp_version@sz;PleskManager.get_domain_info.<locals>.resolve_lsphp_versionc3s|]}|d�kr|VqdS)rNr)�.0�item)rrr�	<genexpr>Nsz/PleskManager.get_domain_info.<locals>.<genexpr>z@Retrieved domain info: domain %s owned by %s uses php version %s�fpm)�name�panel_php_version�user�	panel_fpm�handlerz#Domain does not exist on the serverr)�extrazDomain 'z' does not exist on this serveriV)�errnoN)�query_db�logger�infor�warningr)rrr�domainr!r#r)rr�get_domain_info6s
"


zPleskManager.get_domain_infoc	
cs�dd�}d}tjdd|dgdd|�d�}yZt�d	�|j��}xB|�d
�D]4}|�d�j}|�d�j}|�d
�j}|||fVqHWWn6tj	k
r�}zt
d|j���|�Wdd}~XYnXdS)z�
        Query Plesk database through plesk db utility
        and yeild parsed xml result
        :return: tuple(domain_name, domain_user, domain_handler)
        cSs"dtj�dd�krddiSdSdS)a
            plesk db utility needs to be able to find mysql executable,
            which resides in /usr/bin.
            If we do not have it in PATH, the error will be thrown:
            'exec: "mysql": executable file not found in $PATH'
            z/usr/bin�PATH�N)�os�environ�getrrrr�check_path_envfsz-PleskManager.query_db.<locals>.check_path_envz�select d.name,s.login,h.php_handler_id from (select id, name from domains union select dom_id, name from domain_aliases) d join hosting h on d.id=h.dom_id join sys_users s on h.sys_user_id=s.idz/usr/sbin/plesk�dbz--xmlT)�capture_output�text�envr-�rowz./field[@name='name']z./field[@name='login']z./field[@name='php_handler_id']z*Failed to parse XML from plesk db output: N)�
subprocess�run�ET�
fromstringr�stdout�iter�findr4�
ParseErrorr)	r1�query�result�rootr6r�	user_namer#�errrr&^s$
zPleskManager.query_db)�domain_inforcs.�fdd�}d�jkr&d�jkp$|�S�jS)z�
        Check if selector is enabled specifically for Plesk panel
        :param domain_info: a DomainInfo object
        :return: True if yes, False otherwise
        cs�jr�jdd��jkSdS)z�
            Checks if php selector and cloudlinux selector have
            the same php version.
            :param domain_info: a DomainInfo object
            :return: digits as string or None
            ���NF)�selector_php_versionr#r)rDrr�same_php_in_both_selectors�szPPleskManager.panel_specific_selector_enabled.<locals>.same_php_in_both_selectorsr�custom)r#r")rrDrGr)rDr�panel_specific_selector_enabled�s


z,PleskManager.panel_specific_selector_enabled)�dom_inforcCs|jS)z{
        Get Plesk FPM service name
        :param dom_info: a DomainInfo object
        :return: FPM service name
        )r#)rrJrrr�fpm_service_name�szPleskManager.fpm_service_nameN)�__name__�
__module__�__qualname__�__doc__r
rrrr	�strrr+�staticmethod�tupler&�boolrIrKrrrrr
s&	&%r
)rOr.r7�xml.etree.ElementTree�etree�ElementTreer9�collectionsr�baserZinternal.exceptionsrZinternal.typesrZinternal.user_plugin_utilsrr	r
rrrr�<module>s