j.(ddlmZddlmZddlmZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl mZddlmZdd lmZdd lmZmZdd lmZmZdd lmZdd lmZddlmZddlm Z ddl!m"Z"ddl m#Z#mZgdZ$eddZ%eddZ&ej'dZ(dZ)dZ*dZ+dZ,dZ-d$dZ.dZ/d$dZ0d Z1d!Z2d"Z3d#Z4dS)%)absolute_import)print_function)divisionN) namedtuple)List) iteritems) clpassenger)cpusers getCPName)drop_privilegesClPwd)is_no_php_binaries_on_cpanel)ClSelectExcept) NodeManager) PythonManager) get_abs_rel)Optionalr) public_htmlrubyvenv virtualenvz .cl.selectorz.cagefswwwnodevenvApplicationSummaryuserversiondoc_root interpreter app_statusInterpreterSummaryr version_fullenabled installedz \A[-\w./]*\Zc|stdd|vrtdtj|rtd|ddkrtdd|dvrtd |t vrtd |zt jd |}|td dS) NzDirectory must not be empty z#Directory should not contain spacesz+Directory should be relative to user's home/z-Directory should not contain a trailing slash..z(Directory must not contain ".." segmentszDirectory "%s" not allowedz\A[-\.\w\/]+\Zz*Directory name contains invalid characters) ValueErrorospathisabssplitDISABLED_DIRECTORY_NAMESrematch) directory all_valids K/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectctl.pycheck_directoryr6(s 86777 i>??? w}}YIGHHH}HIII ys####CDDD,,,5 ABBB*I66IEFFFc|dvrdSt|stdd|dvsd|vrtd|dS)N).r:zAlias is not validr*r)z./)ALIAS_VALID_REr2r+r/strip)aliass r5 get_aliasr><sy r    & &/-... u{{345==-... ;;s  r7cV|ddddS)N_r)z//replace)prefixs r5 get_directoryrDMs& >>#s # # + +D# 6 66r7cV|ddddS)Nr@__r)rA)r3s r5 get_prefixrGQs(   S$ ' ' / /S 9 99r7c|s,tj}tj|j}|dkrt d|S)Nrootz8User parameter must be specified if current user is root)r,geteuidpwdgetpwuidpw_namer+)r current_euids r5get_userrOUsD 2z|| |L))1 v~~STTT Kr7c|dvrtj|Stj|otj|S)z Application is valid only if binary and app_root exists :param binary_path: path to binary in virtual environment :param app_root: path to root directory of application :return: result of checking :rtype: bool nodejspython)r,r-isdirisfile)rapp_root binary_paths r5_verify_applicationrX^sK***w}}X&&& 7>>+ & & B27==+B+BBr7c d}g}tj}tD]:} tjr@ddlm}||df}ttdtd|}t|5tj || t|||dddn #1swxYwY#tj$rYt"$rht%jt(}|d||t-jt1t-jfzY8wxYw|S)z8Find and return all apps for given interpreter on serverNr) userdomainsT)as_rootc|r|dndS)Nr)xs r5z-server_applications_summary..~sa&9addTr7z]DEBUG: user %s present in panel but doesn't exist in system. Process euid=%d. Trace: %s at %s)r,rJr detectis_da"clcommon.cpapi.plugins.directadminrZlistfiltermapr rKgetpwnamextend _user_applications_short_summaryrNoSuchUserExceptionKeyErrorlogging getLogger__name__error traceback format_excstr extract_stack)r domains_data applicationseuidrrZ domains_listloggers r5server_applications_summaryrxksLL :<>>? #99(   !&& W W T"""##4T; UUWWW W W W W W W W W W W W W W W W (    H _ _ _&x00F LLxi&:&<&\>\]^ _ _ _ _ _  _ s=A"C 9C CC CC CE.A-EEc #BK|}|dvr |dkrddlm}nddlm}||}n#tj$rYdSwxYwt |D]j\}} t||\}} n#tj$rY+wxYwt||r+t||d|z|d||d VkdSt tj || D]\} }|d |kr|d |d }} t||| r{tj tj tj | } t|| |d|d d VdS)a Return generator with all applications for given user and interpreter. To increase performance, only a small part of the information about the applications is given. :param user: name of panel user :param interpreter: name of interpreter (python, ruby, etc) :param domains_docroots_data: total data about users domains :return: Generator[ApplicationSummary] rQrRr )ApplicationsManagerNz %s_versiondomainr r)userdomains_datarbinaryr3docrootstarted)clselectnodejs.apps_managerrzclselectpython.apps_managerget_user_config_datar WrongDatarrrXrr summaryr,r-basenamedirname) rrdomains_docroots_datar|rz config_dataappdatarVr@dummyr} it_versions r5rhrhs5-*** h&&LLLLLLLLLLLLL--//DDTJJKK'    FF ";//  IC )$44 !!!+    ";99 (  !;<!(^ +#L1   %[%8P`%a%a%abb ` `KE4M"k11 $H~tK/@HF";&AA `W--bgoobgoof>U>U.V.VWW (dJQUV_Q`59-5HU^`````` ` `s!0;A A&A::B  B cj|dkrtjS|dkrtjSdS)z-Return default version for given interpreter rRrSN)rdefault_versionr)rs r5get_default_versionrs7h}},,h.. 4r7c#K|dkr#td}n7|dkr#td}ntt |dD]\}}|ddk}|dkr6t t |dd }n0d|dd d }t|||d Vd S) z.Return generator for interpreters all versionsrRT)installed_interpreters_onlyrSavailable_versionsstatusr$r9rNr") r get_summaryrNotImplementedErrorrrqintr/joinr!)r interpretersr version_infor$ major_versions r5_iter_interpretersrsh"}}00T0RR  $22t2TT !###!*<8L+M!N!Noox(I5 ( " "GMM#$6$6q$9 : :;;MM HHW]]3%7%7%;<rDrGrOrXrxrhrrrrr]r7r5rs'&&&&&%%%%%% """"""""""""--------11111111FFFFFF******444444888888!!!!!!!!rrrZ 46rssZ 46ijjO,,GGG("777::: C C C C'''T.`.`.`.`booo& 5 5 5r7