§ WèÄjþãó°—dZddlZddlZddlmcmZddlmZddl m Z ddl m Z ddlmZddlmZmZdd lmZdd lmZmZd d lmZGd „de¦«ZdS)zM This module contains classes implementing X-Ray Manager behaviour for Plesk éN)ÚChainMap)ÚClassVar)Úgettext)Ú phpinfo_utilsé)ÚXRayManagerErrorÚXRayMissingDomain)Ú DomainInfo)Úuser_mode_verificationÚwith_fpm_reload_restrictedé)Ú BaseManagercóÖ—eZdZUdZdddddddd d d d d ddddœZeeeefed<de fd„Z e e dede fd„¦«¦«Zedefd„¦«Zde defd„Zde defd„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.dz/opt/plesk/php/8.4/etc/php.dz/opt/plesk/php/8.5/etc/php.dz/opt/plesk/php/8.6/etc/php.d)z plesk-php54z plesk-php55z plesk-php56z plesk-php70z plesk-php71z plesk-php72z plesk-php73z plesk-php74z plesk-php80z plesk-php81z plesk-php82z plesk-php83z plesk-php84z plesk-php85z plesk-php86ÚVERSIONS_PleskÚreturncó6—t|j|j¦«S)z– Get supported PHP versions :return: a chained map with basic supported versions and Plesk supported versions )rÚVERSIONSr)Úselfs úI/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/manager/plesk.pyÚsupported_versionszPleskManager.supported_versions4s€õ ˜œ  tÔ':Ñ;Ô;Ð;óÚ domain_namec óü‡—d„}tˆfd„| ¦«D¦«d¦«}|€-|j dd‰i¬¦«t ‰¦«‚|\}}}|j d‰||¦«|jrStj|‰||¦«¬¦«}t‰|  d ¦«|j d ||j |¬ ¦«St‰||¦«|d |v|¬ ¦«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 cóº—d|vrd}nSd|vrd| d¦«d›�}n0d | 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Úvers rÚresolve_lsphp_versionz;PleskManager.get_domain_info..resolve_lsphp_versionFsf€ð  Ð"Ð"Ø!��ؘA��Ø2 §¢¨¡ ¤ ¨RÔ 0Ð2Ð2��à—h’h˜qŸwšw s™|œ|¨B¨Q¨BÔ/Ñ0Ô0�؈Jrc3óR•K—|]!}|d‰ks|dd‰›�k¯|V—Œ"dS)rzwww.N©)Ú.0Úitemrs €rú z/PleskManager.get_domain_info..UsJøèè€Ð kÐ k�d°°a´¸KÒ1GÐ1GÈ4ÐPQÌ7ÐVjÐ]hÐVjÐVjÒKjÐKjˆTÐKjÐKjÐKjÐKjÐ kÐ krNz#Domain does not exist on the serverr)Úextraz@Retrieved domain info: domain %s owned by %s uses php version %s)ÚdomainÚtrusted_php_versionz plesk-phpT)ÚnameÚpanel_php_versionÚphp_ini_scan_dirÚis_selector_appliedÚuserÚ panel_fpmÚhandlerÚfpm)r,r-r0r1r2) ÚnextÚquery_dbÚloggerÚwarningr ÚinfoÚ phpinfo_moderÚget_php_configurationr Úget_full_php_versionÚabsolute_ini_scan_dirÚ is_php_fpm)rrr#Ú domain_dataÚ_domainr0r2Úconfigs ` rÚget_domain_infozPleskManager.get_domain_info<soø€ð ð ð õØ kÐ kÐ kÐ k˜dŸmšm™oœoÐ kÑ kÔ kØ ñ ô ˆ ð Ð Ø ŒK× Ò Ø5Ø$ kÐ2ð ñ ô ð õ$ KÑ0Ô0Ð 0à!,ш��wØ Œ ×ÒØ NØ Ø Ø ñ  ô ð ð Ô ð Ý"Ô8ØØ"ð %:Ð$9¸'Ñ$BÔ$BðñôˆFõØ Ø"(×"=Ò"=¸kÑ"JÔ"JØ!'Ô!=ð%)ØØ Ô+Øð ñ ô ð õØ Ø"7Ð"7¸Ñ"@Ô"@ØØ 7Ð*Øð ñôð rc#óŽK—d„}d}tjdd|dgdd|¦«¬¦«}|jdkr+tt d ¦«|j|jfz¦«‚ t jd  |j ¦«¦«}|  d ¦«D]W}|  d ¦«j }|  d ¦«j }|  d¦«j }|||fV—ŒXdS#t j $r7}tt d¦«t|j ¦«z¦«|‚d}~wwxYw)z¤ Query Plesk database through plesk db utility and yeild parsed xml result :return: tuple(domain_name, domain_user, domain_handler) cóR—dtj dd¦«vrddiSdS)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%rrÚcheck_path_envz-PleskManager.query_db..check_path_envŽs/€ð¥¤§¢°¸Ñ!;Ô!;Ð;Ð;Ø  Ð+Ð+à�trzÁ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Úenvrz(plesk db query failed (exit code %d): %srEÚ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Ú returncoderÚ_ÚstderrÚETÚ fromstringr ÚstdoutÚiterÚfindrLÚ ParseErrorÚstr) rIÚqueryÚresultÚrootrNrÚ user_namer2Úes rr5zPleskManager.query_db†syèè€ð ð ð ðXˆÝ”Ø   e¨WÐ 5ØØØ�Ñ Ô ð  ñ ô ˆð Ô  Ò !Ð !Ý"¥1Ð%OÑ#PÔ#PÐTZÔTeÐgmÔgtÐSuÑ#uÑvÔvÐ vð rÝ”= §¢¨¬Ñ!7Ô!7Ñ8Ô8ˆDØ—y’y Ñ'Ô'ð 6ð 6�Ø!ŸhšhÐ'>Ñ?Ô?ÔD� ØŸHšHÐ%=Ñ>Ô>ÔC� ØŸ(š(Ð#DÑEÔEÔJ�Ø! 9¨gÐ5Ð5Ð5Ð5Ð5ð  6ð 6øõ Œ}ð rð rð rÝ"¥1Ð%SÑ#TÔ#TÕWZÐ[aÔ[hÑWiÔWiÑ#iÑjÔjÐpqÐ qøøøøð røøøsÁ#BC>Ã>EÄ 2D?Ä?EÚ domain_infocóV‡—ˆfd„}d‰jvrd‰jvp |¦«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 cóB•—‰jr‰jdd…‰jvSdS)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_versionr2)r`s€rÚsame_php_in_both_selectorszPPleskManager.panel_specific_selector_enabled..same_php_in_both_selectors´s0ø€ðÔ/ð TØ"Ô7¸¸¸Ô<À Ô@SÐSÐSØ�5rrÚcustom)r2r1)rr`res ` rÚpanel_specific_selector_enabledz,PleskManager.panel_specific_selector_enabled­sUø€ð ð ð ð ð ð �kÔ)Ð )Ð )ؘ{Ô2Ð2ÐRÐ6PÐ6PÑ6RÔ6RÐ RØÔ(Ð(Ð(rÚdom_infocó—|jS)z{ Get Plesk FPM service name :param dom_info: a DomainInfo object :return: FPM service name )r2)rrhs rÚfpm_service_namezPleskManager.fpm_service_nameÃs €ð ÔÐrN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrÚdictrZÚ__annotations__rrr r r rAÚ staticmethodÚtupler5Úboolrgrjr%rrrrsF€€€€€€ððð 6Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5Ø5ð0ð0€N�H˜T # s (œ^Ô,ððñð$< Hð<ð<ð<ð<ð ØðF¨3ðF°:ðFðFðFñÔñ ÔðFðPð$r�eð$rð$rð$rñ„\ð$rðL)¸:ð)È$ð)ð)ð)ð)ð, ¨ð ¸ð ð ð ð ð ð rr)rnrFrOÚxml.etree.ElementTreeÚetreeÚ ElementTreerTÚ collectionsrÚtypingrÚxrayrrRÚ xray.internalrÚinternal.exceptionsrr Úinternal.typesr Úinternal.user_plugin_utilsr r Úbaserrr%rrúrs-ðð ðð  € € € ØÐÐÐØ"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø Ð Ð Ð Ð Ð ØÐÐÐÐÐàÐÐÐÐÐØ'Ð'Ð'Ð'Ð'Ð'àEÐEÐEÐEÐEÐEÐEÐEØ'Ð'Ð'Ð'Ð'Ð'ðððððððððÐÐÐÐÐðl ðl ðl ðl ðl �;ñl ôl ðl ðl ðl r