| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/manager/__pycache__/plesk.cpython-311.pyc |
�
��med � � � d Z ddlZddlZddlmc mZ ddlmZ ddl m
Z
ddlmZ ddl
mZ dd lmZmZ G 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
� � e Zd ZdZdddddddd d
ddd
d�Zdefd�Zeede de
fd�� � � � Zede
fd�� � Zde
defd�Zde
de fd�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.dz/opt/plesk/php/8.2/etc/php.dz/opt/plesk/php/8.3/etc/php.d)zplesk-php54zplesk-php55zplesk-php56zplesk-php70zplesk-php71zplesk-php72zplesk-php73zplesk-php74zplesk-php80zplesk-php81zplesk-php82zplesk-php83�returnc �6 � t | j | j � � S )z�
Get supported PHP versions
:return: a chained map with basic supported versions
and Plesk supported versions
)r �VERSIONS�VERSIONS_Plesk)�selfs �I/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/manager/plesk.py�supported_versionszPleskManager.supported_versions/ s � � ��
��+�-� -� -� �domain_namec �: �� d� }�fd�| � � � D � � D ]C\ }}}| j � d�||� � t � ||� � |d|v |�� � c S | j � dd�i�� � t d �� d
�dd�
� � �)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
c � � d| v rd}nSd| v rd| � d� � d � �}n0d� | � d� � dd� � � }|S ) z�
Resolve version for lsphp handlers
:param h: original Plesk php handler id
:return: resolved alt-php* version
zlsphp-customz alt-php56�lsphpzalt-php�-���Nr )�split�join)�h�vers r �resolve_lsphp_versionz;PleskManager.get_domain_info.<locals>.resolve_lsphp_versionB sf � � ��"�"�!����A���2�������R� 0�2�2����h�h�q�w�w�s�|�|�B�Q�B�/�0�0���Jr c 3 �4 �K � | ]}|d �k �|V � �dS )r N� )�.0�itemr s �r � <genexpr>z/PleskManager.get_domain_info.<locals>.<genexpr>P s= �� � � � &>� &>�t�&*�1�g��&<�&<� '+�&<�&<�&<�&<�&>� &>r 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 F)�errno�
needs_logging)�query_db�logger�infor �warningr )r r r �domainr( r* s ` r �get_domain_infozPleskManager.get_domain_info8 s �� � � � �&>� &>� &>� &>�t�}�}��� &>� &>� &>� /� /�!�F�D�'��K���R��T�7�
,�
,�
,� �;�0E�0E�g�0N�0N�#'�(-��(8�&-� /� /� /�
/�
/�
/�
����A�#0�+�">� � @� @� @��C�{�C�C�C��e�-� -� -� -r c # � K � d� } d}t j dd|dgdd | � � �� � } t j d� |j � � � � }|� d � � D ]W}|� d
� � j }|� d� � j }|� d� � j }|||fV � �XdS # t j $ r*}t d
t |j � � z � � |�d}~ww xY w)z�
Query Plesk database through plesk db utility
and yeild parsed xml result
:return: tuple(domain_name, domain_user, domain_handler)
c �R � dt j � dd� � vrddiS dS )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�getr! r r �check_path_envz-PleskManager.query_db.<locals>.check_path_envh s/ � � �������!;�!;�;�;��
�+�+��tr z�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�envr7 �rowz./field[@name='name']z./field[@name='login']z./field[@name='php_handler_id']z,Failed to parse XML from plesk db output: %sN)�
subprocess�run�ET�
fromstringr �stdout�iter�findr>