§ ;Š»jz+ãóº—ddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z ddl mZej d ¦«d kZGd „d e ¦«ZdS) éN)ÚFeature)Ú exec_utility)Ú defaultdict)ÚClPwd)Úlvectl_custompanel_script)ÚGeneralPanelPluginV1)ÚCPAPIExternalProgramFailedÚ USE_ENCHANCED_CUSTOM_LONG_SCRIPTÚ1c󼇗eZdZˆfd„Zd„Zd„Z dd„Z dˆfd „ Zd „Zdˆfd „ Z d „Z d„Z d„Z d„Z d„Zdd„Zdd„Zd„Zd„Zˆfd„Zdd„Zdeefd„ZˆxZS)Ú PanelPlugincó|•—t¦« ¦«t¦«|_d|_dS)NÚUnknown)ÚsuperÚ__init__rÚ_custom_script_nameÚ_cp_name)ÚselfÚ __class__s €ú¦/builddir/build/BUILDROOT/alt-python27-cllib-3.4.44-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/plugins/backward_plugin.pyrzPanelPlugin.__init__s2ø€Ý ‰Œ×ÒÑÔÐÝ#<Ñ#>Ô#>ˆÔ Ø!ˆŒ ˆ ˆ ócó—|jS)z4 Return panel name :return: )r©rs rÚ getCPNamezPanelPlugin.getCPNames €ð Œ}Ðrcó*—|j� |jdddœSdS)zÆ Retrieve panel name and it's version :return: dict: { 'name': 'panel_name', 'version': 'panel_version', 'additional_info': 'add_info'} or None if can't get info NÚ0)ÚnameÚversionÚadditional_info)rrrs rÚget_cp_descriptionzPanelPlugin.get_cp_description s$€ð Ô #Ð /Ø œM°cÈdÐSÐSÐ SàˆtrN©ÚcploginÚpackageÚmailÚresellerÚdnsÚlocaleTcó2—| |||¬¦«S)N)ÚkeylsÚsearch_sys_users)Ú_cpinfo)rÚcpuserr)r*s rÚcpinfozPanelPlugin.cpinfo,s€à�|Š|˜F¨%ÐBRˆ|ÑSÔSÐSr©r"r#r$r%r&r'ÚuidFc óø•— tr#t¦« |¬¦«}n| |¬¦«}n+#tt t ttf$ri}YnwxYwt¦«}tt¦«}|  ¦«D]…\}} |  |¦«d} n#tj$r d|›d�} YnwxYwt| t¦«r| d} | d} n| } d} | | d| dd|dœ|| <Œv#t $rYŒ‚wxYwg} g}t|t"¦«r|g}nOt|t$t&f¦«rt%|¦«}n#|€!t%| ¦«¦«}|D]S} | |vrŒ|| }g}|D]}| ||¦«Œ|  t'|¦«¦«ŒTt'| ¦«S) aþ Retrives specified info about panel users :param str|unicode|list|tuple|None cpuser: user login :param keyls: List or cortege of data which is necessary to obtain the user, values can 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 userid - uid :param search_sys_users: :param raise_exc: hack for clquota that raises exception in case of exit code != 0 :return: returns a tuple of tuples of data in the same sequence as specified keys in keylst Examples: cpinfo('cltest1') (('cltest1', 'default', '', 'root', 'cltest1.com', 'en'),) cpinfo() (('res1usr1', 'res1_pack1', '', 'res1', 'res1usr1.com', 'en'), ('res1', 'default', '', 'root', 'res1.com', 'en'), ('res2', 'default', '', 'res2', 'res2.com', 'en'), ('cltest1', 'default', '', 'root', 'cltest1.com', 'en'), ('system', 'undefined', None, 'root', '', 'en')) :rtype: tuple ©Ú raise_excrz::r#r%ÚNr.)r rÚ list_usersÚlist_allÚOSErrorÚIOErrorÚ IndexErrorÚAttributeErrorr rrÚdictÚitemsÚ get_namesÚNoSuchUserExceptionÚ isinstanceÚ ExceptionÚstrÚlistÚtupleÚkeysÚappend)rr,r)r*r2Úall_users_dataÚcl_pwdÚ users_dictr/ÚvalueÚ user_namer#r%Úout_listÚuser_name_listÚ user_dataÚuser_data_listÚdata_keyrs €rr+zPanelPlugin._cpinfo0sbø€ð8 Ý/ð DÝ!&¡¤×!3Ò!3¸iÐ!3Ñ!HÔ!H��ð"&§¢¸ Ñ!CÔ!C�øøÝ�¥*­nÕ>XÐYð ð ð ØˆNˆNˆNð øøøå‘”ˆå ¥Ñ&Ô&ˆ Ø(×.Ò.Ñ0Ô0ð ð ‰JˆC�ð )Ø"×,Ò,¨SÑ1Ô1°!Ô4� � øÝÔ,ð )ð )ð )ð) ˜L˜L˜L� � � ð )øøøõ˜%¥Ñ&Ô&ð Ø  Ô*�Ø  Ô,��à�Ø�ð Ø4=Ø4;Ø15Ø5=Ø04Ø37Ø03ð )+ð)+� ˜9Ñ%Ð%øõð ð ð à�ð øøøðˆØˆÝ �f�cÑ "Ô "ð 5Ø$˜XˆNˆNÝ ˜¥¥u  Ñ .Ô .ð 5Ý! &™\œ\ˆNˆNØ ˆ^Ý! *§/¢/Ñ"3Ô"3Ñ4Ô4ˆNØ'ð 3ð 3ˆIà  Ð*Ð*ØØ" 9Ô-ˆI؈NØ!ð ;ð ;�Ø×%Ò% i°Ô&9Ñ:Ô:Ð:Ð:Ø �OŠO�E .Ñ1Ô1Ñ 2Ô 2Ð 2Ð 2Ý�X‰ŒÐs6ƒAAÁ%A,Á+A,Â+CÃCÃCÄ DÄ D(Ä'D(cóú—d} t|jdt|¦«zg¦«\}}| d¦« d¦«}n##t t ttf$rYnwxYwd|fS)z™ Retrieves reseller name and package name by uid :param user_id: User id :return: Cortege: (Reseller_name, Package_name) r3z --userid=ú r) rrr@ÚsplitÚpopr6r7r8r9)rÚuser_idÚ package_nameÚ_Ústdouts rÚreseller_package_by_uidz#PanelPlugin.reseller_package_by_uid†sˆ€ð ˆ ð Ý$ TÔ%=À ÍCÐPWÉLÌLÑ@XÐ?YÑZÔZ‰IˆAˆvØ!Ÿ<š<¨Ñ-Ô-×1Ò1°!Ñ4Ô4ˆLˆLøÝ�¥*­nÐ=ð ð ð Ø ˆDð øøøà�<ÐÐs„AAÁA6Á5A6c󲕗tsiS t¦« |¬¦«S#ttt t tf$ricYSwxYw)a  Return dictionary, contains available resellers packages, grouped by resellers :return: Dictionary. Example: {'res1': ['BusinessPackage', 'UltraPackage', 'Package'], 'res2': ['SimplePackage', 'Package'] } r1)r rÚresellers_packagesr6r7r8r9r )rr2rs €rrYzPanelPlugin.resellers_packages™sbø€õ0ð ØˆIð Ý‘7”7×-Ò-¸ Ð-ÑBÔBÐ BøÝ�¥*­nÕ>XÐYð ð ð ØˆIˆIˆIð øøøsŒ!.®%AÁAcóÄ—tst¦«Sd„| ¦« ¦«D¦«}tt |¦«¦«S)z¾ Generates a list of resellers in the control panel :return: list/tuple of cpusers registered in the control panel :rtype: tuple :raise: NotSupported có—g|] }|d‘Œ S)r%©)Ú.0rHs rú z)PanelPlugin.resellers..¶s€ÐTÐTÐT°˜%  Ô+ÐTÐTÐTr)r rBr4ÚvaluesÚset)rÚresellers_lists rÚ resellerszPanelPlugin.resellers­sT€õ0ð Ý‘7”7ˆNØTÐT¸¿ºÑ9JÔ9J×9QÒ9QÑ9SÔ9SÐTÑTÔTˆÝ•S˜Ñ(Ô(Ñ)Ô)Ð)rcó—gS)z| Gets admin emails list :rtype: List :return: List: ['admin1@mail.com', 'admin2@mail.com' ] r\rs rÚget_admin_emails_listz!PanelPlugin.get_admin_emails_list¹ó €ð ˆ rcó—dS)zb Return document root for domain :return: Cortege: (document_root, owner) r\r\©rÚdomains rÚdocrootzPanelPlugin.docrootÁs €ð ˆrrcó—gS)zñ 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\)rr,s rÚ userdomainszPanelPlugin.userdomainsÈó €ðˆ rcó—gS)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 r\rs rÚhomedirszPanelPlugin.homedirsÒrercó—gS)z« Return reseller users :param resellername: reseller name; autodetect name if None :rtype: List :return list[str]: user names list r\©rÚ resellernames rÚreseller_userszPanelPlugin.reseller_usersÚó €ðˆ rcó—iS)zÎ Return reseller users and their main domains :param resellername: reseller name; autodetect name if None :rtype: List :return dict[str, str]: pairs user <==> domain r\rps rÚreseller_domainszPanelPlugin.reseller_domainsãrsrcó—dS)z� Get login url for current panel; :type domain: str :rtype: str :return: Panel login URL r3r\rgs rÚget_user_login_urlzPanelPlugin.get_user_login_urlìs €ðˆrrcó—iS)z¾ Get dict reseller => id Optional method for panels without hard link reseller <=> system user :rtype: dict[str,int] - {'res1': id1} :return: r\rs rÚget_reseller_id_pairsz!PanelPlugin.get_reseller_id_pairsõrlrcó°•—tsiS t¦« |¦«S#ttt t tf$ricYSwxYw©N)r rÚget_reseller_usersr6r7r8r9r )rr%rs €rr|zPanelPlugin.get_reseller_userss]ø€Ý/ð ØˆIð Ý‘7”7×-Ò-¨hÑ7Ô7Ð 7øÝ�¥*­nÕ>XÐYð ð ð ØˆIˆIˆIð øøøsŒ -­%AÁAcó~—tt¦«}| dd¬¦«}|D]\}}}||dœ||<Œ|S)a  Return list of triples :rtype: dict :return: Dictionary. Example: {1000: {'reseller': '', 'package': 'Package1'}, 1001: {'reseller': '', 'package': 'BusinessPackage'}, } )r/r%r#T)r)r2)r%r#)rr:r+)rr2Úpackages_usersÚ users_infor/r%r#s rr4zPanelPlugin.list_users s[€õ%¥TÑ*Ô*ˆØ—\’\Ð(FÐRV�\ÑWÔWˆ Ø&0ð Mð MÑ "ˆC�˜7Ø/7ÀGÐ"LÐ"LˆN˜3Ñ Ð ØÐrÚreturncó—gS)zg Return list of cloudlinux features that can be used on current control panel. r\rs rÚget_unsupported_cl_featuresz'PanelPlugin.get_unsupported_cl_featuresrer)Nr!T)Nr.TF)Fr{)Ú__name__Ú __module__Ú __qualname__rrr r-r+rWrYrbrdrirkrnrrrurwryr|r4rArr‚Ú __classcell__)rs@rr r s¯ø€€€€€ð"ð"ð"ð"ð"ð ððð ð ð ð)dØ $ðTðTðTðTð*lØ16ðRðRðRðRðRðRðl  ð  ð  ð& ð ð ð ð ð ð( *ð *ð *ðððððððððððððððððððððððððððððððð ð ð ð ð¨T°'¬]ððððððððrr )ÚosÚclcommon.featuresrÚclcommon.utilsrÚ collectionsrÚclcommonrÚclcommon.clcustomscriptrÚclcommon.cpapi.GeneralPanelrÚclcommon.cpapi.cpapiexceptionsr ÚenvironÚgetr r r\rrúr‘sêðð € € € à%Ð%Ð%Ð%Ð%Ð%Ø'Ð'Ð'Ð'Ð'Ð'Ø#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØ=Ð=Ð=Ð=Ð=Ð=Ø<Ð<Ð<Ð<Ð<Ð<ØEÐEÐEÐEÐEÐEð $&¤:§>¢>Ð2TÑ#UÔ#UÐY\Ò#\Ð ðNðNðNðNðNÐ&ñNôNðNðNðNr