403Webshell
Server IP : 192.158.238.246  /  Your IP : 18.118.212.165
Web Server : LiteSpeed
System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64
User : jenniferflocom ( 1321)
PHP Version : 8.1.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python37/lib/python3.7/site-packages/clselector/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python37/lib/python3.7/site-packages/clselector/__pycache__/cl_selector.cpython-37.pyc
B

��d��@s�ddlmZddlmZddlmZddlZddlZddlZddlZddlm	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lm Z m!Z!m"Z"ddl#m$Z$m%Z%ddl&m'Z'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6m7Z7m8Z8ddl5m9Z9ddl:m;Z;m<Z<m=Z=ddl>m=Z?dZ@dd�ZAGdd�deB�ZCdS) �)�print_function)�absolute_import)�divisionN)�AnyStr)�	iteritems)�ClPwd)�FormattedException)�
MailHelper)�is_ascii_string)�CloudlinuxLicenseLib)�clselectctl)�get_abs_rel�mkdir_p�run_process_in_cagefs)�BaseSelectorError�AcquireApplicationLockError)�print_dictionary�replace_params)�
CONFIG_DIR)�
PkgManager)�is_clpassenger_active)�defaultdict)�MIMEText)�mkstemp�)�NODEJS�PYTHON�PHP)�parse_cloudlinux_selector_opts)�CloudlinuxSelectorLib�OK_RES_DICT�ClSelectExcept)r!z.lockcCs
t||�S)N)�open)�	file_name�mode�r%�G/opt/alt/python37/lib/python3.7/site-packages/clselector/cl_selector.py�_open;sr'c@s�eZdZdd�Zdd�Zd]dd�Zdd	�Zd
d�Zedd
��Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd^d5d6�Zed7d8��Zd_d:d;�Ze d<d=��Z!e d>d?��Z"d@dA�Z#e$j%dBdC��Z&dDdE�Z'dFdG�Z(dHdI�Z)dJdK�Z*dLdM�Z+dNdO�Z,dPdQ�Z-dRdS�Z.dTdU�Z/dVdW�Z0dXdY�Z1edZd[��Z2d\S)`�CloudlinuxSelectorcCsLd|_i|_d|_t��dk|_d|_d|_d|_d|_	tj
�td�|_
dS)NFrz--background�zcloudlinux-selector_bkg.pid)�_is_json�_opts�
_selector_lib�os�geteuid�
_is_root_user�_lock�_is_bkg_option_present�_bkg_option�_nj_ver_move_from�path�joinr�_pid_file_name)�selfr%r%r&�__init__AszCloudlinuxSelector.__init__cCs�|jdttgkrdSt|jd|jdg�r2dSt|jd|jd|jd|jd|jd	|jd
|jd|jd|jd
|jd|jd|jd|jd|jd|jdg�r�dSdS)zx
        Check if cloudlinux-selector called with application operations
        :return:  True if lock is need
        z
--interpreterFzchange-version-multiple�create�start�restart�destroy�migrate�stopzinstall-moduleszuninstall-modulesz
run-scriptz
--app-modez
--env-varsz--new-app-rootz--new-domainz
--new-app-uriz
--new-versionz--startup-fileT)r+rr�any)r7r%r%r&�is_app_lock_neededMs,z%CloudlinuxSelector.is_app_lock_neededFc

Cs�|��sdS|jd|jd}}|jjj||||d�\}}tj�|�sPdStj�|t	�}y*t
|d�|_t�
|j��tjtjB�WnFtk
r�}z(|jtjkr�d}	t||	d��t|��Wdd}~XYnXdS)z[
        Acquire lock for application if this lock is needed
        :return: None
        Nz--userz
--app-root)�chk_app_root�chk_envza+z6Disk quota exceeded. Please, free space and try again.)�reason)r@r+r,�apps_manager�get_app_foldersr-r4�existsr5�LOCKr"r0�fcntl�flock�fileno�LOCK_EX�LOCK_NB�IOError�errno�EDQUOTr)
r7�ignore_missing_app_root�ignore_missing_doc_root�username�app_root�_�app_venv�	lock_file�erCr%r%r&�acquire_app_lock_if_neededks"	z-CloudlinuxSelector.acquire_app_lock_if_neededcCs|jr|jdr|��dS)Nz
--new-version)r/r+�send_notification)r7r%r%r&�send_notification_if_needed�sz.CloudlinuxSelector.send_notification_if_neededc
Cs�d}t||jd�}d}d|jd|d<||d<yBtj|jddd	�d
}|d
}||d<t�}|�||g|�Wntttjj	fk
r�YnXdS)NzqNodeJS version for your application %s  was changed by admin. Please verify that application functions correctly.z
--app-rootz%CloudlinuxNodejsNotify@noresponse.comz<NodeJS version for your application %s  was changed by adminZSubjectZFromz--user)�mail�dns�locale�reseller)�keylsrZTo)
rr+�cpapi�cpinfor	Zsendmail�
IndexError�KeyError�cpapiexceptions�NotSupported)r7ZMSG_TEMP�msg�meZcp_userinfoZuser_data_emailZ
mailhelperr%r%r&rY�sz$CloudlinuxSelector.send_notificationcCs |sdSdd�|���d�D�S)Nr%cSsg|]}|r|�qSr%r%)�.0�moduler%r%r&�
<listcomp>�sz4CloudlinuxSelector.parse_modules.<locals>.<listcomp>�,)�strip�split)Zmodules_optionsr%r%r&�
parse_modules�sz CloudlinuxSelector.parse_modulescCsd|k|_|j|k|_|jr(|�|j��z��yZt�}|��sRd|_|�ddi�S|�|�|_t	|jd�|_
|j
��|j
�|j�r�|�
��:t|jd|j
j|�}|d}|�|d�|��Wd	QRX|S|j
�|j��r4d
d|jd|j
jg|}|�
��$tj|id�}|��|��Wd	QRX|jS|j|jd
|jd
d�|jd�r�|�|jd|jd�\}}|dk�r�||jd<n|�t|d��|jd�r�|���n�|jd�r�|���n�|jd�r�|���n�|jd�r�|���n�|jd
�r|���np|jd�r,|���nX|jd�rD|� ��n@|jd�r\|�!��n(|jd�rt|�"��n|jd�r�|�#�n�|jd�r�|�$�n�|jd�r�|�%�n�|jd�s�|jd�r�|�&�n�|jd�s�|jd �r�|�'�n�|jd!�r8|�(|j
�)|jd|jd"|jd#|jd$��nL|jd%�rN|�*�n6|jd&�rf|j
�+�n|jd'�r||�,�n|�-�W�n^t.j/t.j0t.j1fk
�r�}	z|�tt2|	�d��Wd	d	}	~	XY�nt.j3t.j4fk
�r"}	z.|jd&�s
|�t|	j5|	j6d(��t7d)�Wd	d	}	~	XYn�t8k
�r~}	z>|	j9�rX|�t|	j5|	j6|	j9d*��n|�t|	j5|	j6d(��Wd	d	}	~	XYnjt:k
�r�}
zJt;�<�}t;�=t>|
�|
�}t?|t@��r�d+�A|�}
n|}
|�t|
|d,��Wd	d	}
~
XYnXWd	|j�rytB�|jC�WnYnXXd)S)-z$
        Run command action
        z--jsonT�resultzCloudlinux license isn't validz
--interpreterz--user�
returncode�outputNz
/usr/bin/sudoz-u)�envr<)rPrQz--passenger-log-file�OK)ro�setr=zimport-applicationsr9r:r;r>zread-configzsave-configzinstall-moduleszuninstall-moduleszinstall-versionzuninstall-versionzenable-versionzdisable-versionz
run-scriptz
--app-rootz
--script-namez
<script_args>zchange-version-multiplezmake-defaults-config�setup)ro�contextr)rorv�details�
)rorw)Dr*r2r1�removerZget_license_status�_error_and_exit�_parse_argsr+rr,�check_selector_is_available�should_be_runned_as_user�_lock_interpreter_if_neededr�CLOUDLINUX_SELECTOR_UTILITY�_print_raw_datarZ�should_run_user_without_cagefs�
subprocess�Popen�communicaterprX�!_passenger_log_filename_validator�dict�run_set�run_migrate_application�run_import_applications�
run_create�run_destroy�	run_start�run_restart�run_stop�run_read_config�run_save_config�run_install_modules�run_uninstall_modules�run_manage_version�run_disable_or_enable_version�_print_data�
run_script�_start_change_all_apps_versions�replace_mysqli�	run_setup�run_get�ClSelectExcept_old�ConfigNotFound�	WrongData�NoSuchAlternativeVersion�str�NativeNotInstalled�MissingCagefsPackage�messagerv�exitrrw�	Exception�	traceback�
format_exc�format_exception_only�type�
isinstance�listr5r-r6)r7�argvZlicencerorpZuser_run_cmd�processr��log_filenamerW�errrfZlist_err_msg�err_msgr%r%r&�run�s�











&& zCloudlinuxSelector.runcCs�|jddk	r*|�|j�|jd���n�|jddk	rT|�|j�|jd���n~|jdrz|�|j�|jd���nX|jddk	r�|�|j�|jd���n.|jddk	r�|�|j�|jd���n|jddk	�r|jddk	�r|�|j�|jd|jd��n�|jddk	�rR|jddk	�rR|�|j�	|jd|jd��n�|j
�sb|j�r�|�|jd	|jd
|jd|jd|jd
|jd|jd|jd|jd|jd|jd|jd|jd�
dS)Nz--default-versionz--current-versionz--reset-extensionsz	--versionz--selector-statusz--supported-versionsz--extensionsz	--optionsz--userz
--app-rootz
--app-modez
--env-varsz--new-app-rootz--new-domainz
--new-app-uriz
--new-versionz--startup-filez--skip-web-checkz
--entry-pointz--config-filesz--passenger-log-file)
r+r�r,�set_default_version�set_current_version�reset_extensions�set_selector_status�set_supported_versions�set_extensions�set_options�
_is_nodejs�
_is_python�
run_change)r7r%r%r&r�,s*
 " "zCloudlinuxSelector.run_setcCs|j��dS)N)r,�setup_selector)r7r%r%r&r�DszCloudlinuxSelector.run_setupc
Csf|dkr|�ddi�|dk	rV|j�|||�}|}|d��dkrV|�|�t�d�|dk	sf|dk	r�|j�||||�}|d��dkr�|�|�t�d�t|||	||dk	|
dk	f��r|dk	r�dd�|�	d	�D�}|j�
|||||	|||
�}|d��dk�r|�|�t�d�|dk	�rX|j�||||
�}|d��dk�rX|�|�t�d�|�i�dS)
a�
        Call selectorctl to change application parameter
        :param config_files: names of config files (such as requirements.txt or etc) (only for python)
        :param entry_point: the specified entrypoint for application (only for python)
        :param user: application owner
        :param app_root: application main directory (application name)
        :param app_mode: application mode
        :param env_vars: dict with environment variables
        :param new_app_root: new application main directory (new application name)
        :param new_domain:  new application domain
        :param new_app_uri: new application uri
        :param new_version: new version for nodejs interpreter
        :param startup_file: new startup file for application
        :param skip_web_check: skip check web application after change it's properties
        :param passenger_log_file: Passenger log filename
        :return: None
        NrozERROR: User is not specified�statusrsrcSsg|]}|dkr|�qS)r)r%)rh�itemr%r%r&rjpsz1CloudlinuxSelector.run_change.<locals>.<listcomp>rk)rzr,�relocate�upperr��sysr��transitr?rm�
set_variables�change_version)r7�userrS�app_mode�env_vars�new_app_root�
new_domain�new_app_uri�new_version�startup_file�skip_web_check�entry_point�config_files�passenger_log_file�rr%r%r&r�Gs:









zCloudlinuxSelector.run_changecCs|�|j���dS)N)r�r,r�)r7r%r%r&r��sz*CloudlinuxSelector.run_import_applicationscCs$|�|j�|jd|jd��dS)Nz--userz
--app-root)r�r,r�r+)r7r%r%r&r��s
z*CloudlinuxSelector.run_migrate_applicationcCsN|jdr|�|j����n,|jdr<|�|j����n|jdrX|�|j���n�|jdr||�|j�|jd��n�|jdtkr�|�|j���n�dt	�i}|jdt
kr�|�|j�|jd��|�
�\}}|dk	r�|dk	r�||d<||d	<n(|jdtk�r"|�|j�|jd��d
|k�r@|j||d
d�n
|�|�dS)Nz--get-default-versionz--get-selector-statusz--get-supported-versionsz--get-current-versionz--userz
--interpreterZpassenger_active�remaining_apps_count�total_apps_countro)ro)r+r�r,�get_default_version�get_selector_status�get_supported_versions�get_current_versionr�get_fullrr�update�get_apps_users_info�_get_apps_count_from_pid_filer)r7�resr�r�r%r%r&r��s,






zCloudlinuxSelector.run_getcCs�|�|jd�r*|�dd|jdid��t�s\|jdtkrDd}nd}|�dd	|id��|�|j�|jd
|jd|jd|jd|jd
|jd|jd|jd|jd|jd�
�dS)Nz	--versionzTCan't create application: Nodejs version %(version)s is locked by background process�version)rorvz
--interpreterz9https://docs.cloudlinux.com/python_selector/#installationz8https://docs.cloudlinux.com/index.html?installation.htmlz`Application creation not allowed, Phusion Passenger seems absent, please see %(url)s for details�urlz
--app-rootz	--app-uriz--userz--domainz
--app-modez--startup-filez
--env-varsz
--entry-pointz--passenger-log-file)�(_is_version_locked_by_background_processr+rzrrr�r,�
create_app)r7r�r%r%r&r��s.zCloudlinuxSelector.run_createcCs$|�|j�|jd|jd��dS)Nz
--app-rootz--user)r�r,�destroy_appr+)r7r%r%r&r��szCloudlinuxSelector.run_destroycCs$|�|j�|jd|jd��dS)Nz
--app-rootz--user)r�r,�	start_appr+)r7r%r%r&r��szCloudlinuxSelector.run_startcCs$|�|j�|jd|jd��dS)Nz
--app-rootz--user)r�r,�restart_appr+)r7r%r%r&r��szCloudlinuxSelector.run_restartcCs$|�|j�|jd|jd��dS)Nz
--app-rootz--user)r�r,�stop_appr+)r7r%r%r&r��szCloudlinuxSelector.run_stopcCs,|�|j�|jd|jd|jd��dS)Nz
--app-rootz
--config-filez--user)r�r,�read_app_configr+)r7r%r%r&r��s
z"CloudlinuxSelector.run_read_configc	Cs4|�|j�|jd|jd|jd|jd��dS)Nz
--app-rootz
--config-filez	--contentz--user)r�r,�save_app_configr+)r7r%r%r&r��sz"CloudlinuxSelector.run_save_configcCsL|�|jj|jd|jd|jd|jd|jd|�|jd�d��dS)Nz
--app-rootz--userz--domainz--skip-web-checkz--requirements-filez	--modules)r��domainr��	spec_file�modules)r�r,�install_modulesr+rn)r7r%r%r&r��sz&CloudlinuxSelector.run_install_modulesc	CsD|�|jj|jd|�|jd�|jd|jd|jdd��dS)Nz
--app-rootz	--modulesz--userz--domainz--skip-web-check)r�r�r�r�)r�r,�uninstall_modulesr+rn)r7r%r%r&r��sz(CloudlinuxSelector.run_uninstall_modulesc
Csf|jd}|jd}y|�|j�||��Wn4tk
r`}z|�dt|�i�Wdd}~XYnXdS)zM
        Disable or enable interpreter version
        :return: None
        z	--versionzenable-versionroN)r+r�r,�set_version_statusrrzr�)r7r��target_version_statusrWr%r%r&r��s

z0CloudlinuxSelector.run_disable_or_enable_versionc
Cs�t|jd�}y,|jdr*|jj�|�}n|jj�|�}Wn*tk
rd}zt|�}Wdd}~XYnX|dkrz|�t�n$t	|t
�r�|�|�n|�d|i�dS)Nz	--versionzinstall-versionro)r�r+r,�selector_manager�install_version�uninstall_versionr�r�r r�r�rz)r7�verr�rWr%r%r&r�
s

z%CloudlinuxSelector.run_manage_versionc	CsRt||j|jd�\}}|s(|�t|��|ddkr�|dr�yt�}|�|d�Wn,tjk
r�tdd|did���YnX|St	j
�d�s�|d	s�|d
r�|�ddd
��t�
|d|d�\|d<}x~dD]v}|�|�s�q�t|d||�\}}yt�|�Wn8tk
�r@}z|�tt|�d��Wdd}~XYnX|||<q�W|S)z%
        Parse CLI arguments
        )Zas_from_rootz
--interpreter�phpz--userzNo such user (%s)r�)r�rvz/usr/local/cpanelzimport-applicationsr=�successz?Import/migrate of Python Selector applications is not supported)ro�warningz--domain)z
--app-rootz--new-app-root)roN)rr*r/rzrr�get_pw_by_name�NoSuchUserExceptionr!r-r4�isdirr�$safely_resolve_username_and_doc_root�getr
r�check_directory�
ValueErrorr�r�)	r7r�r��data�pwdrTZapp_root_arg�	directoryrWr%r%r&r{s<


 zCloudlinuxSelector._parse_argsrcCs�d|kr|d|d<|d=|jr>|�dt��i�t|d�nBy tt|d�|�di��Wn tk
r~td|�YnXt�	|�dS)z�
        Print error and exit
        :param dict message: Dictionary with keys "result" as string and optional "context" as dict
        r�ro�	timestampTrvz	Error: %sN)
r*r��timer�printr�r�rcr�r�)r7r��
error_coder%r%r&rzUs z"CloudlinuxSelector._error_and_exitcCst|�dS)z�
        Print raw data.
        Function should be used in case if you want
        to print a json string as an output from other utilities
        N)r)r�r%r%r&r�gs	z"CloudlinuxSelector._print_raw_datar�cCs�t|t�r�|��}d|kr0t|dt�r0|d}|�d|�|d��dkrvd|d<|jdtkr�|j��r�d|d<nd|kr�d|kr�|d|d<|d=|�	d	t
�
�i�t||jp�|�d
S)z�
        Output data wrapper
        :param: `dict` data - data for output to stdout
        :param: `bool` force_json - always output json format
        r�r��okr�roz
--interpreterzbMultiPHP system default PHP version is alt-php. PHP Selector does not work and should be disabled!r�r�N)
r�r��copy�
setdefault�lowerr+rr,�check_multiphp_system_defaultr�r�rr*)r7r�Z
force_jsonror%r%r&r�rs

zCloudlinuxSelector._print_datacCs|jd��tkS)Nz
--interpreter)r+rr)r7r%r%r&r��szCloudlinuxSelector._is_nodejscCs|jd��tkS)Nz
--interpreter)r+rr)r7r%r%r&r��szCloudlinuxSelector._is_pythoncCs(|jdttgkr$|jd}t|�SdS)Nz
--interpreterz
--new-versionF)r+rr�bool)r7r�r%r%r&�_is_interpreter_lock_needed�s
z.CloudlinuxSelector._is_interpreter_lock_neededc	cs>|��r4|jj}|�|jd��dVWdQRXndVdS)z{
        Wrapper over contextmanager of PkgManager in order not
        to try acquire lock when it is not needed.
        z
--new-versionN)rr,rD�acquire_interpreter_lockr+)r7Zmgrr%r%r&r~�s
z.CloudlinuxSelector._lock_interpreter_if_neededcCsJ|jd}|jd}|j�|�}|j�|�}||krB|�ddi�||fS)z�
        Retrives NodeJS versions from arguments and converts them to major versions
        :return: Cortege (from_version, to_version)
        z--from-versionz
--new-versionroz4--from-version and --new-version should be different)r+r,�get_major_version_from_shortrz)r7�from_version�
to_versionr%r%r&�_get_nj_versions�s

z#CloudlinuxSelector._get_nj_versionscCsX|��\}}t�}|j}||kr4|�dd|id��|jsP|��rP|�ddi�||fS)z�
        Checks arguments and environment before start group applications move
        :return: Cortege (from_version, to_version)
        zXCan't move NodeJS applications to Nodejs version %(version)s. No such version installed.r�)rorvroz+Another background process already started.)r
r�installed_versionsrzr1�&_is_background_process_already_running)r7rr�pkg_managerZinstalled_nj_versionsr%r%r&� _check_environment_for_move_apps�sz3CloudlinuxSelector._check_environment_for_move_appscCs�|��\}}|jsFd|jj|||jf}tj|ddd�|�t�dS|�	|�\}}|r`|dkrddS|�
|||�|�|||�dS)zM
        Change all applications all users versions
        :return:
        zi%s change-version-multiple --json --interpreter=nodejs --from-version=%s --new-version=%s %s >/dev/null &Tz	/bin/bash)�shell�
executableNr)rr1r,rr2r�r�r�r �_get_all_apps_by_version�_write_pid_file�_move_apps_by_list)r7rr�commandZusers_apps_listr�r%r%r&r��s
z2CloudlinuxSelector._start_change_all_apps_versionsc	
Cstxnt|�D]b\}}xX|D]P}|jjdddtd|d|d|g}t�|�}|��|d8}|�|�t�	d�qWq
Wd	S)
a�
        Move applications from list from one NodeJS version to another
        :type dict
        :param apps_dict: Application list. List example:
            {'cltest1': [u'modjsapp_root'], 'cltest2': [u'app2', u'main_app']}
        :param to_version: Move applications to this version
        :param total_apps_count: Total applications count for move
        :return: None
        rtz--jsonz
--interpreterz--userz
--app-rootz
--new-versionr�N)
rr,rrr�r�r��_change_pid_filer��sleep)	r7Z	apps_dictrr��	user_nameZ
user_app_listrS�cmdr�r%r%r&r�s



z%CloudlinuxSelector._move_apps_by_listc
Cs�tt�}|jj��}d}x�t|�D]|\}}yT|jj�|j|j|j	�}x6t|�D]*\}}	|	d|krN||�
|�|d7}qNWWq"ttt
tfk
r�w"Yq"Xq"W||fS)aB
        Retrives list of all NodeJS applications for all users, which uses supplied version of NodeJS
        :param from_version: Required NodeJS version
        :return: Cortege: (application_list, application_count). Example:
            ({'cltest1': [u'modjsapp_root'], 'cltest2': [u'app2', u'main_app']}, 3)
        r�nodejs_versionr)rr�r,rD�get_users_dictr�read_user_selector_config_json�pw_dir�pw_uid�pw_gid�appendr�	TypeErrorrc�AttributeError)
r7rZusers_apps_dict�	user_infor�r�
user_pw_entry�
user_app_datarS�app_infor%r%r&rs z+CloudlinuxSelector._get_all_apps_by_versioncCs2y t�t|jd��}|d|_dSYnXdS)z]
        Determine is background process already working
        :return: True|False
        r�rTF)�json�loadr'r6r3)r7r�r%r%r&r!s
z9CloudlinuxSelector._is_background_process_already_runningcCsH|jdtkrdS|j�|�}|j�|�}|��}|rD||jkrDdSdS)z�
        Checks if NodeJS version blocked by background operation
        :param nj_version: NodeJS version to check
        :return: True - version is locked, False - not locked
        z
--interpreterFT)r+rr,�resolve_versionr
rr3)r7Z
nj_versionZis_bkg_process_presentr%r%r&r�/sz;CloudlinuxSelector._is_version_locked_by_background_processc
CsHt�t��t|�t|�||tt���d�t|jd��t�	|jd�dS)a
        Creates pid file for background process move version from version to version
        :param from_version: Move from NJ version
        :param to_version: Move to NJ version
        :param total_apps_count: Total application count to move
        :return: None
        )�pidrrr�r�r��wi�N)
r*�dumpr-�getpidr��floatr�r'r6�chmod)r7rrr�r%r%r&r?sz"CloudlinuxSelector._write_pid_filecCs"t|jd�}t�|�}|��|S)zc
        Reads pid file and returns it's content as dictionary
        :return: Dictionary
        r�)r'r6r*r+�close)r7�f�pid_datar%r%r&�_read_pid_fileRs
z!CloudlinuxSelector._read_pid_filec
CspyP|��}||d<ttd�\}}t�|t|d��t�||j�t�	|jd�Wnt
ttfk
rjdSXdS)z�
        Creates pid file for background process move version from version to version
        :param remaining_apps_count: Remaining application count to move
        :return: None
        r�)�dirr.i�N)
r6rrr*r/r'r-�renamer6r2�OSErrorrMrc)r7r�r5rTZtemp_file_namer%r%r&r\sz#CloudlinuxSelector._change_pid_filec
CsNy.t|jd�}t�|�}|��|d|dfStttfk
rHdSXdS)z�
        Retrieves application counts from pid file
        :return: Cortege (remaining_apps_count, total_apps_count)
            If no background process started, returns None, None
        r�r�r�)NNN)r'r6r*r+r3r9rMrc)r7r4r5r%r%r&r�ns
z0CloudlinuxSelector._get_apps_count_from_pid_filec
Cs�t�}|�|�}y�t|�sdStj�|�r.dS|�tjj�sJtj�||�}tj�	|�}|�|tj�r�tj�
|�}tj�|�s�t|�d|fSWn2t
tfk
r�}zdt|�dfSd}~XYnXdS)a�
        Validates passenger log file name
        :param username: User's name
        :param log_filename: passenger log file name to validate
        :return: tuple: (message, log_filename).
            message: "OK" - filename is valid, any other string - invalid, error text
            log_filename: corrected log filename - simlink dereferencing, appends user's homedir for relative paths, etc
        )zAERROR: Passenger log filename should contain only english lettersN)zDERROR: Passenger log file should be a filename, not a directory nameNrsz%sN)z9ERROR: Passenger log file should be placed in user's homeN)r�get_homedirr
r-r4r��
startswith�sepr5�realpath�dirnamerFrr9rMr�)rRr�r��user_homedirZlog_realpathr>�excr%r%r&r�|s$

z4CloudlinuxSelector._passenger_log_filename_validatorN)FF)r)Fr�)3�__name__�
__module__�__qualname__r8r@rXrZrY�staticmethodrnr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r{rzr�r��propertyr�r�r�
contextlib�contextmanagerr~r
rr�rrrr�rr6rr�r�r%r%r%r&r(?s\ 
9#;



 
r()D�
__future__rrrrHr�r�rN�clcommon.cpapir`rFr*r-r�r��typingr�future.utilsr�clcommonrZclcommon.clexceptionrZclcommon.mail_helperr	Zclcommon.clfuncr
Z	cllicenser�clselectrZclselect.utilsr
rr�clselect.baseclselectrrZ	cli_utilsrr�clselect.clselectnodejsrZ"clselect.clselectnodejs.pkgmanagerrZ clselector.clpassenger_detectlibr�collectionsrZemail.mime.textr�tempfilerZcl_selector_arg_parserrrr�selectorlibrr r!Zclselect.clselectexceptr�rGr'�objectr(r%r%r%r&�<module>sH

Youez - 2016 - github.com/yon3zu
LinuXploit