Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/xray/manager/__pycache__/cpanel.cpython-311.pyc
�

��me�#���dZddlZddlZddlmZddlmZddlmZddlm	Z	ddl
mZd	d
lm
Z
d	dlmZd	dlmZmZGd
�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	�@�eZdZdZdddddddd	d
�Z	e��dkrded
<ded<ded<n#e$rYnwxYwdefd�Ze	de
defd���Zde
de
fd�Zde
de
fd�Z	d$de
dedefd�Zeede
defd�����Zde
defd�Zd edefd!�Zd"ede
fd#�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-php81z#/opt/cpanel/ea-php82/root/etc/php.dzea-php82�returnc�6�t|j|j��S)z�
        Get supported PHP versions
        :return: a chained map with basic supported versions
                and cPanel supported versions
        )r�VERSIONS�VERSIONS_cPanel)�selfs �J/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/manager/cpanel.py�supported_versionsz CPanelManager.supported_versions5s ����
��,�.�.�	.��cmdc�^�d|g}d�|���D��}ddg}||z|zS)z�
        Generate WHMAPI command arguments list from given parameters
        :param cmd: api command itself
        :param kwargs: additional arguments
        :return: list
        z/usr/sbin/whmapi1c�<�g|]\}}t|�d|������S)�=r)�.0�k�vs   r�
<listcomp>z4CPanelManager.generate_args_list.<locals>.<listcomp>Gs.��C�C�C�D�A�q�e�q�J�J�1�J�J�'�'�C�C�Crz--output�json)�items)r�kwargs�main_api�
additional�
output_formats     r�generate_args_listz CPanelManager.generate_args_list>sC��(��-��C�C�F�L�L�N�N�C�C�C�
�#�V�,�
��*�$�}�4�4rc	��|j|fi|��}tj|dd���}	tj|j��}nX#tjj$rA}|j�	d||jd����td|�d|��d�	��|�d
}~wwxYw	|dds;|j�	d
d|i���t|ddd�	���n^#t$rQ}|j�	d|dtj|j��i���td|�d�d�	��|�d
}~wwxYw|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)�command�result_json��extraz$Failed to parse JSON from a WHMAPI 'z' command output: F��
needs_loggingN�metadata�resultz
WHMAPI failedr"�reasonz1Failed to retrieve WHMAPI info: no %s field foundz#Failed to retrieve WHMAPI info: no � field found)r(�
subprocess�runr"�loads�stdout�decoder�JSONDecodeError�logger�errorr�KeyError)rrr$�argsr3�
loaded_result�es       r�whmapi_commandzCPanelManager.whmapi_commandKs���'�t�&�s�5�5�f�5�5�����T��E�E�E��	o� �J�v�}�5�5�M�M���|�+�	o�	o�	o��K���C�"%�&,�m�5�5�
�
6�
6�
6�#�Q�s�Q�Q�a�Q�Q�af�h�h�h�mn�
o�����	o����
	c� ��,�X�6�
a���!�!�/�)/��(?�"�A�A�A�&�}�Z�'@��'J�Z_�`�`�`�`�
a���	c�	c�	c��K���C�Q��t�z�&�-�8�8�9�
�
;�
;�
;�#�E�a�E�E�E�UZ�\�\�\�ab�
c�����		c�����s1�A�B�<B�B�A	C$�$
D?�.AD:�:D?�domain_namec��	|�d|���}	|dddS#t$r:}|j�d|d|i���t	d	|�d
�d���|�d
}~wwxYw#t$rQ}dt|��vr5|j�dd|i���t	d|�d�dd���|�Yd
}~d
Sd
}~wwxYw)z�
        Try to resolve domain_name if it is an alias
        :param domain_name: original domain name
        :return: resolved domain name alias
        �domainuserdata)�domain�data�userdata�
servernamez*Failed to resolve alias: no %s field foundr"r.zFailed to resolve alias: no r5Fr0Nz#system does not have a domain named�#Domain does not exist on the serverrC�Domain '�' does not exist on this server�V��errnor1)rBr>r<r=r�str�warning)rrCr3rAs    r�
resolve_aliaszCPanelManager.resolve_aliasks[��	`��(�(�)9�+�(�N�N�F�
`��f�~�j�1�,�?�?���
`�
`�
`���!�!�@�!�!�6�*�"�,�,�,�'�B�1�B�B�B�RW�Y�Y�Y�^_�`�����	
`����� �	<�	<�	<�4��A���>�>���#�#�$I�+8�+�*F�$�H�H�H�&�K�{�K�K�K��e�5�5�5�:;�<�?�>�>�>�>�>�����	<���s,�A5�.�
A2�5A-�-A2�5
C�?AC�CN�name�domains_datac�T���fd�|D��D]e}|j�d�|d|d��t|r|n�|d|dt��s|dnd���cS|j�dd	�i�
��td��d�d
d����)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
        c3�4�K�|]}|d�k�|V��dS)�vhostN�)r�itemrSs  �r�	<genexpr>z-CPanelManager.check_domain.<locals>.<genexpr>�s=�����.�.���G�}��,�,��,�,�,�,�.�.rz@Retrieved domain info: domain %s owned by %s uses php version %s�account�version�php_fpmF)rS�panel_php_version�user�	panel_fpmrJrCr.rKrLrMrN)r<�inforrrQr)rrSrT�
original_namerFs `   r�check_domainzCPanelManager.check_domain�s#���.�.�.�.��.�.�.�		W�		W�F��K���R��f�Y�'��	�):�
<�
<�
<��M�#K�=�=�t�06�y�0A�#)�)�#4�4H�4J�4J�)V��"+�)-�)-�PU�	W�W�W�
W�
W�
W�
	
����A�#0�$�"7�	�	9�	9�	9��<�t�<�<�<�D�X]�_�_�_�	_rc��|�d��}	|dd}nG#t$r:}|j�d|d|i���t	d|�d�d	�
��|�d}~wwxYw	|�||��}n=#t$r0|�|��}|�|||���}YnwxYw|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_versionsrG�versionsz1Failed to retrieve domain info: no %s field foundr"r.z#Failed to retrieve domain info: no r5Fr0N)rb)rBr>r<r=rrcrR)rrCr3�
domain_phprA�_info�aliass       r�get_domain_infozCPanelManager.get_domain_info�s+���$�$�%=�>�>��	c����
�3�J�J���	c�	c�	c��K���C�Q��v�&�
�
(�
(�
(�#�E�a�E�E�E�UZ�\�\�\�ab�
c�����		c����	A��%�%�k�:�>�>�E�E���	A�	A�	A��&�&�{�3�3�E��%�%�e�Z�4?�&�A�A�E�E�E�	A����
�s&�&�
A*�5A%�%A*�.B�7B?�>B?�domain_php_versionc���|�d��}	|dd}nG#t$r:}|j�d|d|i���t	d|�d�d	�
��|�d}~wwxYwd|vo||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_versionrGr\z@Failed to retrieve system default PHP version: no %s field foundr"r.z2Failed to retrieve system default PHP version: no r5Fr0Nzalt-php)rBr>r<r=r)rrkr3�default_phprAs     r�&domain_default_version_allows_selectorz4CPanelManager.domain_default_version_allows_selector�s����$�$�%E�F�F��	r� ��.��3�K�K���	r�	r�	r��K���R��&�&�)�
�
+�
+�
+�#�T�Q�T�T�T�di�k�k�k�pq�
r�����		r������+�Q��?Q�0Q�Qs�&�
A*�5A%�%A*�domain_infoc�F�|�|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
        )ror^r`)rrps  r�panel_specific_selector_enabledz-CPanelManager.panel_specific_selector_enabled�s2���:�:��)�+�+�I�3>�3H�/H�	Ir�dom_infoc��|j�d�S)z|
        Get cPanel FPM service name
        :param dom_info: a DomainInfo object
        :return: FPM service name
        z-php-fpm)r^)rrss  r�fpm_service_namezCPanelManager.fpm_service_name�s���,�6�6�6�6r)N)�__name__�
__module__�__qualname__�__doc__rr�	TypeErrorrr�staticmethodrP�listr(�dictrBrRrrcr
rrj�boolrorrrurXrrrrs��������
:�9�9�9�9�9�9�9�	�	�O�
��>���u�$�$�*O�O�J�'�*O�O�J�'�*O�O�J�'����
�
�
���
����.�H�.�.�.�.��
5��
5�$�
5�
5�
5��\�
5��#��D�����@`��`��`�`�`�`�4$(�_�_��_�D�_�,6�_�_�_�_�0���3��:���� �����6R��R�QU�R�R�R�R�&I�:�I�$�I�I�I�I�7��7��7�7�7�7�7�7s�1�9�9r)ryr"r6�collectionsr�pipesr�clcommon.utilsrr�baser	�internal.exceptionsr�internal.typesr�internal.user_plugin_utilsr
rrrXrr�<module>r�s
������������ � � � � � �������)�)�)�)�)�)�/�/�/�/�/�/�������2�2�2�2�2�2�'�'�'�'�'�'���������7�7�7�7�7�K�7�7�7�7�7r