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

�*Ud-�@s�dZddlZddlZddlZddlZddlmZddlmZddl	Z	ddl
mZddlm
Z
dd	lmZdd
lmZmZGdd�de�ZdS)
zS
This module contains classes implementing X-Ray Manager behaviour
for DirectAdmin
�N)�ChainMap)�glob�)�BaseManager�)�XRayManagerError)�
DomainInfo)�user_mode_verification�with_fpm_reload_restrictedcseZdZdZdZdZdZdZdZddd	d
ddd
dddd�
Z	e
d�dd�Zee
d�dd�Zeed�dd��Zeed�dd��Zeed�dd��Zeed�dd��Zeed�d d!��Zeed�d"d#��Zeeeed$�d%d&���Zeed'�d(d)�Zeed*�d+d,�Zed-d'��fd.d/�Z�ZS)0�DirectAdminManagerzG
    Class implementing an X-Ray manager behaviour for DirectAdmin
    z//usr/local/directadmin/custombuild/options.confz2/usr/local/directadmin/data/users/*/domains/*.confz8/usr/local/directadmin/data/users/*/domains/*.subdomainsz6/usr/local/directadmin/data/users/*/domains/*.pointerszI/usr/local/directadmin/data/users/*/domains/*.subdomains.docroot.overridez/usr/local/php54/lib/php.conf.dz/usr/local/php55/lib/php.conf.dz/usr/local/php56/lib/php.conf.dz/usr/local/php70/lib/php.conf.dz/usr/local/php71/lib/php.conf.dz/usr/local/php72/lib/php.conf.dz/usr/local/php73/lib/php.conf.dz/usr/local/php74/lib/php.conf.dz/usr/local/php80/lib/php.conf.dz/usr/local/php81/lib/php.conf.d)
Zphp54Zphp55Zphp56Zphp70Zphp71Zphp72Zphp73Zphp74Zphp80Zphp81)�returncCst|j|j�S)z�
        Get supported PHP versions
        :return: a chained map with basic supported versions
                and DirectAdmin supported versions
        )r�VERSIONS�VERSIONS_DA)�self�r�I/opt/alt/python37/lib/python3.7/site-packages/xray/manager/directadmin.py�supported_versions7sz%DirectAdminManager.supported_versions)�filenamerc
s��fdd�}y,t�|�d��}dd�|��D�SQRXWnLtk
r�}z.|jjd�t|�d�d	�td
����|�Wdd}~XYnXdS)z~
        Read lines from file
        :param filename: a name of file to read
        :return: list of stripped lines
        c	s,t�d��}t�|���}WdQRX|dS)z0
            Retrieve file encoding
            �rbN�encoding)�open�chardet�detect�read)�f�result)rrr�get_file_encodingGsz<DirectAdminManager.file_readlines.<locals>.get_file_encoding)rcSsg|]}|���qSr)�strip)�.0�linerrr�
<listcomp>Qsz5DirectAdminManager.file_readlines.<locals>.<listcomp>NzFailed to read [DA conf] file)�fname�err)�extrazFailed to read file )r�	readlines�OSError�logger�error�strr)rrrr�er)rr�file_readlines@sz!DirectAdminManager.file_readlinescCs�t�}|�|j�}dd�}xxtt||d�||d��dd�D]V\}}|\}}d|kr:dd	�|�d
�d�d����d
|k|�d
�dd�|t|�<q:W|S)z�
        Retrieve DirectAdmin PHP settings
        :return: dict of format {'1': {ver, fpm}, '2': {ver, fpm}...}
                where '1', '2' etc is an ordinal number of a handler as
                it is defined in options.conf
        cs�fdd�|D�S)z�
            Filter PHP release|mode items in seq by marker
            :param seq: initial sequence
            :param marker: should be contained in seq item
            :return: all items from seq containing marker
            cs*g|]"}�|krd|kr|�d�s|�qS)�php�#)�
startswith)r�l)�markerrrr jszHDirectAdminManager.php_options.<locals>.inner_filter.<locals>.<listcomp>r)�seqr/r)r/r�inner_filtercsz4DirectAdminManager.php_options.<locals>.inner_filter�release�moder)�start�nor+��=����.�fpm)�verr:�handler)�dictr*�da_options_conf�	enumerate�zip�join�splitr()rZparsed_options�optsr1�index�or2r3rrr�php_optionsXs

zDirectAdminManager.php_optionscCs<t�}x0t|j�D]"}tj�|��d�d}|||<qW|S)z;
        Retrieve main domains configuration files
        z.confr)r=r�da_domain_pattern�os�path�basenamerB)r�domainsZdom_conf�namerrr�main_domainsys
zDirectAdminManager.main_domainscCspt�}xdt|j�D]V}xP|�|�D]B}tj�|��d�d�}|�d|��}|�d�d�d�||<q"WqW|S)z9
        Retrieve subdomains configuration files
        z.subdomainsrr9z.conf)r=r�da_subdomain_patternr*rHrIrJrB)r�
subdomainsZsub_confZsubdomZ
sub_parentZsub_namerrrrO�s zDirectAdminManager.subdomainsc	
Cs�t�}x�t|j�D]�}|�d�d}x�|�|�D]�}|�d�}|d}|d}|dkrXq0|�d�||<y6x0|�|�d��D]}|�d�||�d|��<qzWWq0tk
r�Yq0Xq0WqW|S)	z6
        Retrieve aliases configuration files
        z	.pointersrr7r8�pointerz.confz.subdomainsr9)r=r�da_alias_patternrBr*r)	r�aliasesZ
alias_confZparent_domain_name�aliasZ
alias_infoZ
alias_name�_type�subrrrrR�s"
 zDirectAdminManager.aliasesc	Cs�t�}x�t|j�D]x}xr|�|�D]d}tj�|�jddd�\}}t�	d|�}|dk	r"t
j�|��d�d�}|�d|��}|�
�||<q"WqW|S)	zJ
        Retrieve subdomains_docroot_override configuration files
        r7r)�maxsplitz(?<=php1_select=)\d(?=&)Nz.subdomains.docroot.overriderr9)r=r�da_docroot_override_patternr*�urllib�parse�unquoterB�re�searchrHrIrJ�group)	rZsub_php_setZsub_doc_overrideZ
subdomlineZ
subdompart�dataZphp_select_valueZdomnameZ
subdomnamerrr�subdomains_php_settings�sz*DirectAdminManager.subdomains_php_settingscCs.t�}x"|j|j|jfD]}|�|�qW|S)z�
        Retrieve all domains and subdomains, existing on DA server,
        including aliases
        in the form of dict {domain_name: domain_config}
        :return: {domain_name: domain_config} including subdomains
        )r=rMrOrR�update)rZda_sitesZbunchrrr�	all_sites�szDirectAdminManager.all_sites)�domain_namercs�y|j|}Wn<tk
rJ|jjdd|id�td|�d�dd��YnX|�|��ttd��fd	d
�}|j}|j�	|�p�|d�}t
|||d|d
�||d|d�}|j�d||j|j
�|S)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
        zRDomain does not exist on the server or is a pointer (no task allowed for pointers)rb)r#zDomain 'zN' does not exist on this server or is a pointer (no task allowed for pointers)iV)�errno)�itemrcs>�fdd��D�}y|d�d�dStk
r8dSXdS)z�
            Get config value of item (e.g. item=value)
            :param item: key to get value of
            :return: value of item
            csg|]}�|kr|���qSr)r)rr)rdrrr �szIDirectAdminManager.get_domain_info.<locals>.find_item.<locals>.<listcomp>rr7r8�1N)rB�
IndexError)rd�found)r^)rdr�	find_item�s
z5DirectAdminManager.get_domain_info.<locals>.find_item�php1_selectr;�usernamer:)rL�panel_php_version�user�	panel_fpmr<z@Retrieved domain info: domain %s owned by %s uses php version %s)ra�KeyErrorr&�warningrr*r(rFr_�getr�inforlr<)rrb�domain_confrhrCZphp_selected�domain_infor)r^r�get_domain_info�s.	



z"DirectAdminManager.get_domain_info)rsrcCs&d}|j|jd}|jdko$||kS)z�
        Check if selector is enabled specifically for DirectAdmin
        Required to be implemented by child classes
        :param domain_info: a DomainInfo object
        :return: True if yes, False otherwise
        )�suphp�lsphp�fastcgir<re)rFr<)rrsZcompatible_handlers�current_handlerrrr�panel_specific_selector_enabled�sz2DirectAdminManager.panel_specific_selector_enabled)�dom_inforcCsd|jdd���S)z�
        Get DirectAdmin FPM service name
        :param dom_info: a DomainInfo object
        :return: FPM service name
        zphp-fpm���N)rk)rrzrrr�fpm_service_name	sz#DirectAdminManager.fpm_service_nameNc
s�y"tjd|jdd�gddd�Wn>|jk
r`}z|jjdt|�|d�d�Wdd}~XYnX|j|jd	d
kr�y&tjddd
gddd�|j�	d�Wn>|jk
r�}z|jjdt|�|d�d�Wdd}~XYnXt
��|�dS)z�
        Copy xray.so for current version, create ini_location directory
        Reload FPM service or kill all *php* processes of user
        :param domain_info: a DomainInfo object
        z"/usr/share/alt-php-xray/da_cp_xrayr{NT)�capture_output�textzFailed to copy xray.so)r"rq)r#r<Zmod_phpz/usr/sbin/service�httpd�restartzhttpd restartedzFailed to restart httpd)�
subprocess�runrk�subprocess_errorsr&r'r(rFr<rq�super�php_procs_reload)rrsr))�	__class__rrr�s(
z#DirectAdminManager.php_procs_reload) �__name__�
__module__�__qualname__�__doc__r>rGrNrQrWrrrr(�listr*�propertyr=rFrMrOrRr_rar	r
rrt�boolryr|r��
__classcell__rr)r�rrsH	 

0r)r�rHr[r��urllib.parserX�collectionsrrr�baserZinternal.exceptionsrZinternal.typesrZinternal.user_plugin_utilsr	r
rrrrr�<module>s