γbE~ddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z mZddlmZmZddlmZmZmZmZdd lmZdd lmZdd lmZdd lmZdd l m!Z!ddl"m#Z#ddl$m%Z%m&Z&e#e'ej(Z)d.dZ*d/dZ+d0dZ,ej-dej.Z/d1dZ0d2d Z1d0d!Z2e!d"Z3d#Z4Gd$d%e Z5d3d'Z6d0d(Z7d0d)Z8d.d*Z9d+Z:e!d4d-Z;dS)5) annotationsN)Path)List) TypedDict)InvalidVersionVersionparse) find_wp_pathsget_wp_cache_plugin) userdomainsget_main_username_by_uidget_installed_php_versions getCPName)_) WposError) WposDaemonPHP)cached_in_scope) setup_logging)daemon_communicate_get_data_from_info_json) console_levelreturndictcttj}i}t|D].\}}||g|/|S)N)r osgeteuidr setdefaultappend)userresultdomaindoc_roots !py/clwpos/data_collector_utils.py_get_doc_roots_infor&"sb #BJLL 1 1D F'--77(B''..v6666 Musernamestrboolct|}td|D}|D]5\}}tt||}t|rdS6dS)z5Check if user has at least one WordPress installationc3&K|] }|dV dS)N).0is r% zhas_wps../s&((QAaD((((((r'excludesTF)r listr len)r(_infor3r#r$wpss r%has_wpsr8+sx  ! !E((%(((((H!=H===>> s88 44  5r' user_infoci}|D]:\}}t|}|tt||d}|||<;|S)Nr2)domainswp_paths)itemsr4r )r9r<r$r;r3items r%_add_wp_path_infor?8skH&__..""' ??]8hGGGHH  " Or'z+wp_version\s*=\s*(?:'|")([^"']+)(?:'|")\s*;content str | Nonect|} |r'|dndS#t$rYdSwxYw)zW Simply search a value of `wp_version` variable in PHP code without evaluation r-N)_WP_VERSION_REsearchgroupstrip IndexError)r@matchs r%"_get_wp_info_from_version_php_coderIHsd  ! !' * *E).8u{{1~~##%%%D8 tts*A AAr$wp_pathcXt||}d}|dz } |dd}t|}|std}n!#t$rd}td}YnwxYwd}|r0 t |}n#t $rtd}YnwxYw|||d S) z0Convert WP path to {"path": str, "version": str}Nzwp-includes/version.phpzutf-8ignore)errorsz'wp-includes/version.php file is invalidz'wp-includes/version.php file is missingz3wp-includes/version.php contains invalid identifier)pathversionversion_missing_reason)r read_textrIrOSError parse_versionr)r$rJabsolute_wp_pathrP version_phpversion_php_code version_rawrOs r%_wp_inforXSsHg..!"%>>KR&000JJ 99IJJ  R%&'P%Q%Q " NNN !"#L!M!MNG^ ^#K00GG ^ ^ ^%&'\%]%] " " " ^"8  s#AA/.A/7BB#"B#c|D]+\}|d}fd|D|d<,|S)Nr<c0g|]}t|Sr.)rX)r/rJr$s r% z _add_wp_info..ts#TTT7 ; ;TTTr'r7)r=pop)r9 doc_root_infor<r$s @r% _add_wp_infor^qs]#,??#4#4UU- $$Z00TTTT8TTT e r'c tdtjidS#t$rt dcYSwxYw)a( uid param is used for caching each distinct uid @return: [ { "account": "rm3", "documentroot": "/home/example/public_html", "version": "ea-php72", "handler": "php-fpm", "vhost": "otherchars.rm3.tld" } ] commanddatavhost_versions)rr%DAEMON_PHP_GET_VHOST_VERSIONS_COMMANDrr)uids r%_php_get_vhost_versionsrexsS:!9j.^"_``aghh :::'(899999:s #??c:tdkr|dkrdSdS)a 1. If handler is not set to lsphp -> php version selected in PHP Selector will not be applied: https://cloudlinux.zendesk.com/hc/en-us/articles/4414030658962-PHP-Selector-does-not-apply-on-a-server-with-DirectAdmin-panel DirectAdmin PHP Selector could override CloudLinux PHP selector, even loaded .ini could not give 100% So let's do not even try apply selector, if it has no sense DirectAdminlsapiFT)r)handlers r%_is_php_selector_applicablerjs'{{m##7(:(:u 4r'cBeZdZUded<ded<ded<ded<ded<dS) Infor)vhostaccountrrOri documentrootN)__name__ __module__ __qualname____annotations__r.r'r%rlrlsJJJJLLLLLLLLLr'rl List[Info]c t}ttj}g}|D] t fd|D}n#t dd|xYwt ds|n|}|tdd|dd|S) a Returns php info, example: [{'vhost': 'sub.wposuser.com', 'account': 'stackoverflow', 'version': 'ea-php80', 'handler': 'php-fpm', 'documentroot': '/home/stackoverflow/public_html'}, ...................................................................] c3>K|]}|jdk|VdS)rON) identifier)r/rO vhost_datas r%r1zphp_info..sF@@#%I)>>>>>>>@@r'rOz version is not known rirmrnro)rmrnrOriro) !get_cached_php_installed_versionsrerrnext RuntimeErrorrjapply_php_selectorr rl)installed_php_versionsvhosts_php_descriptionr" php_version version_usedrxs @r%php_infors@?@@4RZ\\BB F,   @@@@@'=@@@@@KK @9%%%'='= ?@@ @+FjQZF[*\*\2{{//11   dW%y) y)#N3         Ms AA/ct}|D]P}|d|vr$tdd|di0|d|dd||dd<Q|S)z. Updates user_info dict with php data roa Documentroot %(documentroot)s is missing in user information. This might indicate that hosting account information was changed by the control panel during data processing. Usually this is not fatal, try again later and contact CloudLinux support if the issue persists.rOri)rOriphp)rloggerwarning)r9r"r>s r%_add_phprsZZF    y 0 0 NNO +D,@A  C C C II2 2 $~&'.. r'c|D]K\}}|dD]=}tt||dd}||d<>L|S)z Search for 'object-cache.php' files in 'wp-content/plugins' directory in order to find what plugin is being used for object caching. r7rNz object-cache object_cache)r=r rjoinpath)r9r$r]wpplugins r%_add_object_cache_inforsw $-??#4#4((-& ( (B(h)@)@F)L)Ln]]F!'B~   ( r'cft}tttfD] }||}|S)a Collect info about user. @return { '/home/user/public_html': { 'domains': ['domain.com'], 'wps': [ { 'path': 'wp_path_1', 'version': '5.7.2', 'object_cache': 'redis-cache' }, { 'path': 'wp_path_2', 'version': None, 'object_cache': 'redis-cache' } ], 'php': { 'version': 'ea-php74', 'handler': 'cgi', 'redis_extension': False } } } )r&r?r^r)r9funcs r% get_user_infors:4$%%I"L(;$$DOO r'ctjrA tdtjidS#t $rt dcYSwxYwtS)z- @return: [ "ea-php74" ] r`rainstalled_versions)rrrr)DAEMON_PHP_GET_INSTALLED_VERSIONS_COMMANDrrrr.r'r%_php_get_installed_versionsrs  z||B B%:O'  B B B+,@AA A A A B % ' ''s 6AA List[PHP]c:t}d|D}|S)zY List all installed php version on the system :return: installed php version c g|];}t|d|d|d|d|d|d.,si     &|4#I.' 6&&&       r')r)r"r}s r%ryry$s8 ) * *F   &    "!r')rr)r(r)rr*)r9rrr)r@r)rrA)r$r)rJr)rr)rrt)rr)< __future__rloggingrrepathlibrtypingrtyping_extensionsrpackaging.versionrrr rSclcommon.clwpos_libr r clcommon.cpapir r rrclwposrclwpos.cl_wpos_exceptionsr clwpos.daemonrclwpos.php.baserclwpos.scoped_cacherclwpos.logsetupr clwpos.utilsrrrpWARNINGrr&r8r?compile MULTILINErCrIrXr^rerjrlrrrrrryr.r'r%rs#""""" ''''''MMMMMMMMMMBBBBBBBBgggggggggggg//////$$$$$$//////)))))) xw ? ? ?        NPRP\]]<:::$   9"    F0    D ( ( ( """"""r'