Ѡg+:dZddlZddlmZddlmZmZddlmZm Z m Z ddl m Z m Z mZmZmZmZmZmZmZddlmZmZdd lmZmZmZe \ZZd Zd:d Zd:d Z dZ!dZ"dZ#dZ$dZ%dZ&d;dZ' dfd.Z?d/Z@d0ZAd1ZBd2ZCed3ZDd4ZEd(e=fd5ZFd6ZGd7ZHd8ZId(e8fd9ZJe eZKeKLZMe!ZNeMjOZOeMjPZPeMjQZQeMjRZReMjSZSeMjTZTeMjUZUeMjVZVeMjWZWeMjXZXeMjYZYeMjZZZeMj[Z[dS)>z< CloudLinux control panel API API for Hosting control panel N) lru_cache) CACHE_CPNAMEUNKNOWN_CP_NAME)Featureget_cl_feature_status_mapget_hosting_accounts_limit) get_cp_plugin_moduledetect_panel_fast CPANEL_NAMEDIRECTADMIN_NAME PLESK_NAMEISPMANAGER_NAMEINTERWORX_NAMEINTEGRATED_NAMEOFFICIAL_PLUGINS) NotSupported NoPanelUser)is_cl_solo_editionCLEditionDetectionError is_containercPtttttt fvS)zH Is current panel has native CL support :return: True/False )_CP_NAMEr r rrr/builddir/build/BUILDROOT/alt-python27-cllib-3.4.22-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/__init__.pyis_cl_supported_panelr2s%   rFc6t|S)z Return list of available admin's packages :param raise_exc: hack for lvemanager :rtype: list :return: List of packages. For example ['BusinessPackage', 'Package2'] ) _panel_classadmin_packages raise_excs rr r @s  & &y 1 11rc4tS)a Return dictionary, contains available resellers packages, grouped by resellers :rtype: dict :return: Dictionary. Example: {'res1': ['BusinessPackage', 'UltraPackage', 'Package'], 'res2': ['SimplePackage', 'Package'] } )rresellers_packagesr!s rr$r$Ks  * * , ,,rctjdkrtStt t krtSttSt}tj trTttd5}| }dddn #1swxYwY|S)zC Return panel name :rtype: str :return: Panel name rNzutf-8)encoding)osgetegidr getCPNamerr_CP_PLUGIN_NAMErrpathisfileropenreadlinestrip)controlpanelname cache_streams rr)r)Ws z||q%%'''(O;;%%'''  & w~~l##? , 1 1 1 ?\+4466<<>>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s4'C''C+.C+c4tS)z Retrieve panel name and it's version :rtype: dict :return: dict: { 'name': 'panel_name', 'version': 'panel_version', 'additional_info': 'add_info'} or None if can't get info )rget_cp_descriptionrrrr3r3qs  * * , ,,rctrtStd}d|D}t |S)z Generates a list of cpusers registered in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )cplogin)keylscg|] }|d S)rr).0user_s r zcpusers..s44458444r)rrcpuserscpinfotuple) users_info _list_userss rr;r;{s[ &##%%%$$=$99J44444K   rc4tS)z Generates a list of resellers in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )r resellersrrrrArAs  ! ! # ##rc4tS)z Generates a set of admins in the control panel :return: set of cpusers registered in the control panel :rtype: set :raise: NotSupported )radminsrrrrCrCs     rc4tS)z Getting root access to mysql database. For example {'login': 'root', 'db': 'mysql', 'host': 'localhost', 'pass': '9pJUv38sAqqW'} :return: root access to mysql database :rtype: dict :raises: NoDBAccessData )r db_accessrrrrErEs  ! ! # ##rc8t||S)a Returs a list of pairs, the database user login - user login control panel For example: (('nata2_someuse', 'nata2'), ('testsome_dfrtbus', 'testsome')) :param list|tuple|None cplogin_lst: list of control panel users :param bool with_system_users: add system users to dbmapping :return: list of pairs, the database user login - user login control panel :rtype: tuple :raises: NotSupported, NoPackage )rdblogin_cplogin_pairs) cplogin_lstwith_system_userss rrGrGs  - -k;L M MMrr5packagemailresellerdnsTc<t|||S)a Retrieves info about panel user(s) :param str|unicode|list|tuple|None cpuser: user login :param keyls: list of data which is necessary to obtain the user, the valuescan be: cplogin - name/login user control panel mail - Email users reseller - name reseller/owner users locale - localization of the user account package - User name of the package dns - domain of the user :param bool search_sys_users: search for cpuser in sys_users or in control panel users (e.g. for Plesk) :return: returns a tuple of tuples of data in the same sequence as specified keys in keylst :rtype: tuple )search_sys_users)rr<)cpuserr6rPs rr<r<s "   vu?O  P PPrctrtS tdS#t$rYdSwxYw)z Gets admin email Note: be careful when modifying this method. It is used in SSA, ask @dkavchuk or someone else from C-Projects team for details :rtype: string :return: string - admin email r)rrget_admin_emailget_admin_emails_list IndexErrorrrrrTrTsb++--- 5577: :   22 sA AAc~d}tr, tS#t$r|cYSwxYw|S)Nen)rrget_admin_localer)DEFAULT_LOCALEs rrYrYsYN" "0022 2 " " "! ! ! ! " s + ::c6t|S)z Return document root for domain :param str|unicode domain: :rtype tuple :return Tuple: (document_root, owner) )rdocrootdomains rr\r\s    ' ''rc8t||Sz Return domain and document root pairs for control panel user first domain is main domain :param str|unicode cpuser: user login :rtype: list :return list of tuples (domain_name, documen_root) )r useraliases)rQr^s rraras  # #FF 3 33rc6t|Sr`)r userdomains)rQs rrcrcs  # #F + ++rc4tS)z Detects and returns list of folders contained the home dirs of users of the cPanel :rtype: list :return: list of folders, which are parent of home dirs of users of the panel )rhomedirsrrrreres  " ""rcztrt|St|\}}|S)z Return domain's owner :param domain: Domain/sub-domain/add-domain name :rtype: str :return: user name or None if domain not found )rr domain_ownerr\)r^_ _domain_owners rrgrgs<1((000vA} rc6t|S)z Return reseller users :param resellername: reseller name; return empty list if None :rtype list :return list[str]: user names list )rreseller_users resellernames rrkrks  & &| 4 44rc6t|S)z Return reseller users and their main domains :param resellername: reseller name; autodetect name if None :rtype disct :return dict[str, str]: pairs user <==> domain )rreseller_domainsrls rroro&s  ( ( 6 66rc6t|S)zM Check if user is reseller; :type username: str :rtype: bool )r is_resellerusernames rrqrq0s  # #H - --rc6t|S)zP Get login url for current panel; :type domain: str :rtype: str )rget_user_login_urlr]s rruru9s  * *6 2 22rc6t|S)z Return True if username is in admin names :param str username: user to check :rtype bool :return: True if user is admin )ris_adminrrs rrwrwBs   * **rcft} |tjS#t$rYdSwxYw)z{ Return True if panel supports reseller limits (LVE10+) :return: bool - True - yes, False - no :rtype bool F)rrRESELLER_LIMITSKeyError)panel_featuress ris_reseller_limits_supportedr|LsD /00Ng566 uus " 00c4tS)z Get dict reseller => id Optional method for panels without hard link reseller <=> system user :rtype: dict[str,int] - {'res1': id1} )rget_reseller_id_pairsrrrr~r~\s  - - / //rc4tS)zY Retrive encoding name, used for package/reseller names, from panel :return: )rget_encoding_namerrrrrhs  ) ) + ++rfeaturereturncv t}|dup||dS#t$rYdSwxYw)z Get if feature is supported by control panel. :param feature: constant from Feature class :return: boolean NF)get_supported_cl_featuresgetr)rfeaturess ris_panel_feature_supportedrpsR,..4?8<<#?#?? "uus '* 88c4tS)zL Retrieves Apache's connections number (from mod_status) For CM )rget_apache_connections_numberrrrrrs  5 5 7 77rc4tS)z` Retrieves active httpd's ports from httpd's config :return: list of apache's ports )rget_apache_ports_listrrrrrs  - - / //rc4tS)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 )rget_apache_max_request_workersrrrrrs  6 6 8 88ruidc6t|S)zT Get "main" panel username by uid. :param uid: uid :return Username )rget_main_username_by_uid)rs rrrs  0 0 5 55rc8t||SN)rget_user_emails_list)rsr^s rrrs  , ,Xv > >>rc6t|Sr)rpanel_login_linkrrs rrrs  ( ( 2 22rc6t|Sr)rpanel_awp_linkrrs rrrs  & &x 0 00rc8tpiS)zK Returns features that are not supported on current control panel. )rget_unsupported_cl_featuresrrrget_unsupported_featuresrs  3 3 5 5 ;;rctS)zd Left here mostly for backwards compatibility. See get_cl_feature_status_map docstring. )rrrrrrs % & &&rcFtdstrdSdS)NT)skip_jwt_checkF)rrrrris_throttling_supportedrs*...,..u 4rc4tS)zY Get panel users count, admin accounts are not counted :return: Users count. )rget_hosting_accounts_countrrrrrs  2 2 4 44rcdt}|sdSt}||kS)zB Check if customer hitting max accounts count per edition F)r rr)max_accounts_limitcurrent_accounts_counts ris_hitting_max_accounts_limitrs;455 u)DDFF !$6 66rctSr)r rrrget_max_accounts_limitrs % ' ''rc t}n"#t$r}td|d}~wwxYwttfd|DS)z| Retrieve users count and admins count, substract the last value from the first one and dump the result on disk zcpusers() method not supportedNc3$K|] }|vdV dS)rNr)r8useradmins_collections r z)count_hosting_accounts..s.IIT47H+H+Hq+H+H+H+HIIr)r;rrCsum) users_listers @rcount_hosting_accountsrsw DYY DDD;< wp2 z/usr/local/cpanel/server.typeFwp2)r'r+islinkreadlink Exception) wp2_markers ris_wp2_environmentrsa1J 7>>* % %u{:;;uDD uus= A  A )F)NF)NrJTr)\__doc__r' functoolsrconstrrclcommon.featuresrrr pluginlibr r r r rrrrrcpapiexceptionsrrclcommon.lib.cleditionrrrrr*rr r$r)r3r;rArCrErGr<rTrYr\rarcrergrkrorqrurwr|r~rboolrrrrintstrrrrrrrrrrrrr _apiplugin PanelPluginrCP_NAMEget_domains_php_infoget_system_php_infolist_all list_usersget_reseller_usersreseller_package_by_uidget_uids_list_by_packageget_installed_php_versionsget_customer_loginget_domain_login get_server_ipinvalidate_cpapi_cachesuspended_users_listrrrrs 00000000                      76666666.-///   2222 - - - -4---   $$$!!!$$$ N N N NP QQQQ($((( 4 4 4,,,###   5557777...333+++    000,,,  D    8880009996#6#6666???333111<<< '' ' 5C5555 7 7 7((( J J J D    " !/ 2 2 %%'' )++$8"6    $ !4&>'@)D!40* %<#8r