}CeCddlmZddlmZddlmZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZmZmZddlmZmZdd lmZmZmZmZdd lmZd Zd Zd ZdZGddZ dS))absolute_import)division)print_functionN)getpwuid)Dict)ALL_CL_FEATURESSOLO_CL_FEATURESADMIN_CL_FEATURESUBUNTU_CL_FEATURESCONTAINER_CL_FEATURES) NotSupportedCPAPIExternalProgramFailed)is_cl_solo_editionis_cl_admin_edition is_container is_ubuntu) acquire_lockcfd}|S)Nc2tdjz)Nz"%s" api not supported)r __name__)akwfuncs /builddir/build/BUILDROOT/alt-python27-cllib-3.3.7-2.el7.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/GeneralPanel/general_panel.py _exceptionz"_not_supported.._exception+s3dmCDDD)rrs` r_not_supportedr*s'EEEEE rz%/usr/bin/getcontrolpaneluserspackagesz/var/lve/panel_users_countz /var/clcpapicLeZdZdZdZedZedZedZdZ dZ d7d Z d Z d8d Z d7d Zd7dZd7dZdZdZdZedZedZedZedZed9dZe d:dZedZedZedZedZed8dZed8d Z ed!Z!ed"Z"ed#Z#ed$Z$ed%Z%ed&Z&eed'Z'd(e(e)e*ffd)Z+ed*Z,ed+Z-ed,Z.ed-e/d(e)fd.Z0ed/e)d0e)d(e)fd1Z1ed2Z2ed(e/fd3Z3d4Z4d5Z5d6Z6d S);GeneralPanelPluginV1ct|_dSN)GET_CP_PACKAGE_SCRIPT_custom_script_nameselfs r__init__zGeneralPanelPluginV1.__init__8s#8   rcdSr"rr%s rinvalidate_cpapi_cachez+GeneralPanelPluginV1.invalidate_cpapi_cache<s rc&|D]$}tj|sdS%tj|sdS|D]E}tj|tj|krdSFdS)NFT)ospathexistsgetmtime) cpapi_cache panel_markersmarkers ris_cache_validz#GeneralPanelPluginV1.is_cache_valid?s#  F7>>&)) uu w~~k** 5#  Fw''"'*:*:;*G*GGGuuHtrct|dz5t|dd5}tjd|i|ddddn #1swxYwYddddS#1swxYwYdS)Nz.lockwsurrogateescapeerrorsdata)indent)ropenjsondump) actual_data cache_filefs rrewrite_cpapi_cachez(GeneralPanelPluginV1.rewrite_cpapi_cacheMs *w. / / > >j#.?@@@ >A 6;/1==== > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >s4A$A  A$ A A$A A$$A(+A(c fd}|S)Ncfd}|S)Nctjtjdz}t |d}tj|r{|ry t|dd5}tj |d}dddn #1swxYwYnV#t$r&|i|}t ||Yn'wxYw|i|}t |||S)Nz.cache panel_parkerrr5r6r8) r+r,joinCPAPI_CACHE_STORAGErr r2r-r;r<load ExceptionrA)argskwargsr? cache_validr@r8decorator_kwargsrs rwrapperzCGeneralPanelPluginV1.cache_call..decorator..wrapperVs]W\\*=t}x?WXX 2AA*N^_mNnoo 7>>*-- O+ OS!*c:KLLL8PQ#'9Q<<#7D888888888888888$SSS#tT4V44,@@zRRRRRS  4000D(<.decoratorUs)      Nrr)rNrPs` r cache_callzGeneralPanelPluginV1.cache_callSs$     "rcdS)zV Return panel name :rtype: str :return: Name of panel GeneralPanelrr%s r getCPNamezGeneralPanelPluginV1.getCPNamehs ~rctj|jg|ztjtjd}|\}}|||fS)zv Just wraps long script calls. :param args: arguments to pass :return: stdout, stderr T)stdoutstderrtext) subprocessPopenr$PIPE communicate)r&rKpouterrs r_run_long_scriptz%GeneralPanelPluginV1._run_long_scriptpsS  d67$>$.OJO"& ( ( (]]__ cC{rFc g}|dg\}}}|r|jdkrt|pd|z|dD]}|dkr|||S)z Return list of available admin's packages :param raise_exc: raise exception on exit code != 0 :return: List of packages. For example ['BusinessPackage', 'Package2'] z--list-packagesrz,Failed to get information about packages: %s )r` returncoderstripsplitappend)r& raise_exc packages_listrVrWr]lines radmin_packagesz#GeneralPanelPluginV1.admin_packages|s  113D2EFF  p**,V-n7ehn7noo oLLNN((.. + +Drzz$$T***rc(i}|dt|zg\}}}|dD]=}d|vr|d}|d|d|t |d<>|S)Nz--list-reseller-users=rb,packageresellerr)r`strrerfint)r&rqreseller_usersr^_rjs rget_reseller_usersz'GeneralPanelPluginV1.get_reseller_userss))+Cc(mm+S*TUU QIIKK%%d++ & &D$::c??D7$,&,&N3tAw<< ( (rNcVt} dt|zg}|%|dt|z||\}}}|d}|t |dz =n#t ttf$rYnwxYw|S)a Retrieves uid list for package :param package_name: Package name :param reseller_name: Reseller name. None for admin's package :rtype: List :return: List of uids Example: [1000, 1002, 1006, 1007, 1008] z --package=Nz --reseller=rbrn) listrrrgr`rflenOSErrorIOErrorAttributeError)r& package_name reseller_nameuid_listrKrVrus rget_uids_list_by_packagez-GeneralPanelPluginV1.get_uids_list_by_packages66  3|#4#445D( M#m*<*<<===0066LFAq||D))HX*++.1    D sA;B B&%B&cBi}|dg\}}}|r|jdkrtd|zd|vr_|dD]I}|dd}t |dkr|d|t |d<J|S) Nz --list-allrz2Failed to get list of users and their packages: %szerror:rb rn)r`rdrrfryrs)r&rhuid_package_mapr^rur]rjs rlist_allzGeneralPanelPluginV1.list_alls))<.99 Q  L**,DsJLL L 3   $ < <zz#q))t99>>48GOCQLL1rcVi}|dg\}}}|r|jdkrt|pd|z|dD]C}d|vr|d}|d|dd|t |d<D|S) Nz --list-usersrz)Failed to get information about users: %srbrmrnrro)r`rdrrerfrs)r&rhusersr^r_r]rjs r list_userszGeneralPanelPluginV1.list_userss++^,<== S!  g**,S-e4_be4eff fIIKK%%d++ L LD$::c??D.21g47"K"KE#d1g,,   rctjt}|dg\}}}|r|jdkrt |pd|z|d}|D]n}|}|s|dd}t|dkrC|d|d} } ||  | o|S)a  Return dictionary, contains available resellers packages, grouped by resellers :return: Dictionary. Example: {'res1': ['BusinessPackage', 'UltraPackage', 'Package'], 'res2': ['SimplePackage', 'Package'] } z--list-resellers-packagesrz4Failed to get information about reseller package: %srbrrnr) collections defaultdictrxr`rdrrfreryrg) r&rhresellers_packagesr^r_r]linesrj line_partsres_name pack_names rrz'GeneralPanelPluginV1.resellers_packagess)4T::++-H,IJJ S!  U**,SMPSSUU U  $ ; ;D::< domain Nrrs rreseller_domainsz%GeneralPanelPluginV1.reseller_domainsurrcdS)z Get login url for current panel; :type domain: str :rtype: str :return: Panel login URL Nrrs rget_user_login_urlz'GeneralPanelPluginV1.get_user_login_urlrrcdS)z Get dict reseller => id Optional method for panels without hard link reseller <=> system user :rtype: dict[str,int] - {'res1': id1} :return: Nrr%s rget_reseller_id_pairsz*GeneralPanelPluginV1.get_reseller_id_pairsrrcdS)a Retrives dictionary information about php versions for each domain { 'domain.com': { 'php_version_id': 'ea-php70' 'php_handler': lsapi | fpm | cgi | fastcgi }} :rtype: dict Nrr%s rget_domains_php_infoz)GeneralPanelPluginV1.get_domains_php_infos  rcdS)zW Retrives list of php versions installed in panel :rtype: list Nrr%s rget_installed_php_versionsz/GeneralPanelPluginV1.get_installed_php_versionsrrcdS)z\ Retrives dictionary with system information about php :rtype: dict Nrr%s rget_system_php_infoz(GeneralPanelPluginV1.get_system_php_inforrcdS)z :rtype: str Nrr%s rget_admin_localez%GeneralPanelPluginV1.get_admin_locales rcdS)ze Retrive encoding name, used for package/reseller names, from panel :return: Nrrrrget_encoding_namez&GeneralPanelPluginV1.get_encoding_namerrreturnctrtStrtSt drt St drtStS)zg Return list of cloudlinux features that can be used on current control panel. Tskip_jwt_check) rr rr rr rr rr%s rget_supported_cl_featuresz.GeneralPanelPluginV1.get_supported_cl_featuress` >> )( ( ;; &% % T 2 2 2 $# # d 3 3 3 %$ $rcdgS)zl Retrieves active httpd's ports from httpd's config :return: list of apache's ports Prrrrget_apache_ports_listz*GeneralPanelPluginV1.get_apache_ports_lists t rcdS)zX Retrieves Apache's connections number (from mod_status) For CM rOKrrrrget_apache_connections_numberz2GeneralPanelPluginV1.get_apache_connections_numbers wrcdS)z Get current maximum request apache workers from httpd's config :return: tuple (max_req_num, message) max_req_num - Maximum request apache workers number or 0 if error message - OK/Trace rrrrrget_apache_max_request_workersz3GeneralPanelPluginV1.get_apache_max_request_workerss wruidcP t|jS#t$rYnwxYwdS)zd Get "main" panel username by uid. :param uid: uid :return Username zN/A)rpw_nameKeyError)rs rget_main_username_by_uidz-GeneralPanelPluginV1.get_main_username_by_uids; C==( (    D us  ##rrcdSNrcr)rrs rget_user_emails_listz)GeneralPanelPluginV1.get_user_emails_listrrcdSrr)rs rpanel_login_linkz%GeneralPanelPluginV1.panel_login_linkrrctjtrRt td5}|}dddn #1swxYwY|rt |SdS)zB Get users count :return: number of users rFNr)r+r,isfilePANEL_USERS_COUNT_FILEr;readrs)r@counts rget_hosting_accounts_countz/GeneralPanelPluginV1.get_hosting_accounts_counts 7>>0 1 1 ",c22 !a ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! "5zz!qsAA"Actjd}t|t t d gS)Nz/usr/sbin/lvectlTr)r+r,r-allrr)r&is_binary_existss ris_feature_lve_supportedz-GeneralPanelPluginV1.is_feature_lve_supportedsL7>>*<==  "$777 7    rc|S)zs 99% of control panels log-in user with same username as system user has, except for Plesk rrs rget_customer_loginz'GeneralPanelPluginV1.get_customer_logins rc td)zX Get ip of the server that is configured in control panel to be "main". zZUnable to detect main ip for this server. Contact CloudLinux support and report the issue.)r r%s r get_server_ipz"GeneralPanelPluginV1.get_server_ip sNOO Or)Fr")NF)NrT)7r __module__ __qualname__r'r) staticmethodr2rArQrTr`rkrvrrrrrrrrrrrrrrrrrrrtrrrrrrrrrrrboolrrrrrsrrrrrrrrrrr r 6s999     \ >>\> \(      *        """"<!!!)))  ^   ^   ^   ^     ^  (Y $   ^ &  ^   ^   ^   ^    ^    ^   ^   ^    ^    ^   ^   ^   ^\  4T ?    \\\ c c   \ sCC\\    \    OOOOOrr )! __future__rrrr<r+rYrpwdrtypingrclcommon.constrr r r r clcommon.cpapi.cpapiexceptionsr rclcommon.lib.cleditionrrrr clcommon.lockrrr#rrHr rrrrs'&&&&&%%%%%% '&&&&& @5$oOoOoOoOoOoOoOoOoOoOr