§ ;Š»jŽ&ãóÞ—ddlZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z ddl mZdZd„Zd „Zd Zd Zd Zd Zddefd„Zd„Zefd„Zd„Zd„Zdefd„Zd„ZGd„de ¦«ZdS)éN)ÚDict)Ú mysql_lib)ÚNoDBAccessDataÚ NotSupported)ÚGeneralPanelPluginV1)ÚFeatureÚ ISPManagercó@—tj d¦«S)Nú/usr/local/mgr5/sbin/mgrctl)ÚosÚpathÚisfile©óú¡/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/ispmanager.pyÚ _is_5_versionrs€Ý Œ7�>Š>Ð7Ñ 8Ô 8Ð8rcó\—tj d¦«p t¦«S)Nú/usr/local/ispmgr/bin/ispmgr)r r rrrrrÚdetectrs €Ý Œ7�>Š>Ð8Ñ 9Ô 9Ð L½]¹_¼_ÐLrz!/usr/local/ispmgr/etc/ispmgr.confz)/usr/local/mgr5/etc/ispmgr.conf.d/db.confz(\S+) "([^"]+)" {([^}]+)}z (\S+)\s+(\S+)cóZ‡—i}dŠ|r›gŠ|D]–}| ¦«}t|¦«dkr?| t|g¦«¦«‰ |d¦«Œht|¦«dkr‰ |d¦«Œ—t |d¬¦«5}g}t jt|  ¦«¦«D]¯\} } } t jt| ¦«} | |kr‰|d|fvrƒtˆfd„| D¦«¦«} t|  ¦«¦«  t|   ¦«¦«¦«r| | ¦«Œ° ddd¦«n #1swxYwY|S)aK /usr/local/ispmgr/etc/ispmgr.conf parser :param sectype: Type sector for example: Service or DbServer or Account :param secname: Name sector. May be different :param seckeys: Name key for retrieving and filtering :param path: path to config file default /usr/local/ispmgr/etc/ispmgr.conf :return: list Néréúutf-8©Úencodingcó*•—g|]\}}‰�|‰v¯ ||f‘ŒS©Nr)Ú.0ÚkÚvÚseckeys_extracteds €rú zconf_pars..;s?ø€ðWðWðWÙ#' 1 aØ"3Ð";¸qÐDUÐ?UÐ?Uð!" 1˜và?UÐ?UÐ?Ur)ÚsplitÚlenÚupdateÚdictÚappendÚopenÚreÚfindallÚSECTION_PATTERNÚreadÚKEYWORDS_PATTERNÚsetÚitemsÚissubset)ÚsectypeÚsecnameÚseckeysr Úseckeys_filterÚkey_valÚkey_val_splitedÚfÚ result_listÚstypeÚsnameÚsbodyÚblstÚresultr!s @rÚ conf_parsr>"sø€ð€NØÐØð=ØÐØð =ð =ˆGØ%Ÿmšm™oœoˆOÝ�?Ñ#Ô# qÒ(Ð(Ø×%Ò%¥d¨OÐ+<Ñ&=Ô&=Ñ>Ô>Ð>Ø!×(Ò(¨¸Ô);Ñ<Ô<Ð<Ð<Ý�_Ñ%Ô%¨Ò*Ð*Ø!×(Ò(¨¸Ô);Ñ<Ô<Ð<øÝ ˆd˜WÐ %Ñ %Ô %ð /¨Øˆ Ý#%¤:­o¸q¿vºv¹x¼xÑ#HÔ#Hð /ð /Ñ ˆE�5˜%Ý”:Õ.°Ñ6Ô6ˆDؘÒРG°°g¨Ð$>Ð$>ÝðWðWðWðWØ+/ðWñWôWñXôX�õ�~×+Ò+Ñ-Ô-Ñ.Ô.×7Ò7½¸F¿LºL¹N¼NÑ8KÔ8KÑLÔLð/Ø×&Ò& vÑ.Ô.Ð.øð /ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð ÐsÂ4CF Æ F$Æ'F$có¦— ttd¬¦«5}ttjt | ¦«¦«¦«}|d|d|dddœcddd¦«S#1swxYwYdS#t$r}tdt ›�¦«|‚d}~wt$r}td t ›�¦«|‚d}~wwxYw) NrrÚ DBPasswordÚDBUserÚDBHostÚmysql)ÚpassÚloginÚhostÚdbzCan not open config file z1Can not find database access data in config file ) r(Ú ISP5_DB_CONFr&r)r*r-r,ÚIOErrorrÚ IndexError)Údb_confÚcnfÚes rÚ _db_access_5rNEsD€ð Ý •,¨Ð 1Ñ 1Ô 1ð m°WÝ•r”zÕ"2°G·L²L±N´NÑCÔCÑDÔDˆCØ  Ô-¸¸H¼ ÈsÐS[Ì}ÐdkÐlÐlð mð mð mð mñ mô mð mð mð mð mð mð møøøð mð mð mð mð mð møõ ðTðTðTÝÐKÕ9IÐKÐKÑLÔLÐRSÐSøøøøÝ ðððÝØ RÕ@PÐ RÐ Rñ ô àð øøøøðøøøsG‚B˜AA7Á* BÁ7A;Á;BÁ>A;Á?B CÂB&Â& CÂ3C à Ccó—t¦«rt¦«Si}tdd|¬¦«}|D]<} |d|d<|d|d<|d|d <d |d <|cS#t$rYŒ9wxYwt d |›�¦«‚) NÚDbServer)ÚHostnameÚPasswordz Type mysqlÚUser)r1r3r rRrDrSrErQrFrCrGz?Can not find database access data for localhost in config file )rrNr>ÚKeyErrorr)Ú _conf_pathÚaccessÚ access_listÚaccess_from_confs rÚ db_accessrYRsÁ€Ý�„ðå‰~Œ~Ðà €FÝ JÐ8fÐmwÐxÑxÔx€KØ'ððÐð Ø-¨jÔ9ˆF�6‰NØ.¨vÔ6ˆF�7‰OØ-¨jÔ9ˆF�6‰NØ"ˆF�4‰L؈MˆMˆMøÝð ð ð Ø ˆDð øøøå ØVÈ*ÐVÐVñ ô ðs¶'A Á A-Á,A-có—| dd¦«}|d}|d}d}tj|||d¬¦«}| ¦«5}| |¦«cddd¦«S#1swxYwYdS)NrFÚ localhostrErDz5SELECT db.Db, db.User FROM db GROUP BY db.User, db.DbrC)rFÚuserÚpasswdrG)ÚgetrÚMySQLConnectorÚconnectÚ execute_query)rVÚdbhostÚdbloginÚdbpassÚsqlÚ connectorrGs rÚ_dbname_dblogin_pairsrggsÓ€Ø �ZŠZ˜  Ñ ,Ô ,€FØ�WŒo€GØ �FŒ^€FØ A€CÝÔ(¨f¸7Ø06¸7ðDñDôD€Ià × Ò Ñ Ô ð% Ø×Ò Ñ$Ô$ð%ð%ð%ð%ñ%ô%ð%ð%ð%ð%ð%ð%øøøð%ð%ð%ð%ð%ð%sÁA7Á7A;Á>A;có*—tdddidœ¦«‚)Nz&%(action)s is not currently supported.Úactionz1Getting all users registered in the Control Panel)ÚmessageÚcontext)rrrrÚcpusersrlrs*€Ý Ø;ØÐQÐRððñ ô ðrc #óVK—td„tj¦«D¦«¦«}t|d¬¦«5}t |¦«D]Á\}}| d¦«r§| ¦«}t|¦«dkr€|dd…\}} | t|¦«¦«} | €td|›d |›d |›�¦«n'#t$rtd |›d |›�¦«d} YnwxYw| r |€| |vr|| fV—ŒÂ ddd¦«dS#1swxYwYdS) z— Extract (database name <=> control panel login) pairs from ISPmanager config file :param cplogin_lst: :param _conf_path: :return: có.—g|]}|d|df‘ŒS)rrr)rÚ grp_tuples rr"z._dbname_cplogin_pairs_iter..€s%€ÐZÐZÐZ¸i˜i¨œl¨I°a¬LÐ9ÐZÐZÐZrrrz DbAssign érNz)WARNING: can not find group name with id z; line z in file zWARNING: can not pars line ) r&ÚgrpÚgetgrallr(Ú enumerateÚ startswithr#r$r^ÚintÚprintÚ ValueError) Ú cplogin_lstrUÚgrpid_login_dictr7Ú line_numbÚlineÚ line_splitedÚdbnameÚuser_uidÚcplogins rÚ_dbname_cplogin_pairs_iterr€ysÝèè€õÐZÐZÍ3Ì<É>Ì>ÐZÑZÔZÑ[Ô[ÐÝ ˆj 7Ð +Ñ +Ô +ð.¨qÝ(¨™|œ|ð .ð .‰OˆI�tØ�Š˜{Ñ+Ô+ð .Ø#Ÿzšz™|œ|� Ý�|Ñ$Ô$¨Ò)Ð)Ø'3°A°B°BÔ'7Ñ$�F˜Hð'Ø"2×"6Ò"6µs¸8±}´}Ñ"EÔ"E˜Ø"˜?Ý!ð#KÈhð#Kð#KØ*3ð#Kð#KØ>Hð#Kð#KñLôLðLøøå%ð'ð'ð'ÝÐ\¸IÐ\Ð\ÐPZÐ\Ð\Ñ]Ô]Ð]Ø"&˜˜˜ð'øøøðð. KÐ$;¸wÈ+Ð?UÐ?UØ$ g˜oÐ-Ð-Ð-øð .ð.ð.ð.ñ.ô.ð.ð.ð.ð.ð.ð.ð.øøøð.ð.ð.ð.ð.ð.s6¾ADÂÃ;DÃ=C>Ã>DÄD"Ä%D"có—d|›d�S)Nzhttps://z:1500r)Údomains rÚget_user_login_urlrƒ“s€Ø #�fÐ #Ð #Ð #Ð#rcój‡—eZdZˆfd„Zd„Zd„Zd„Zed„¦«Zd„Z d„Z de e fd „Z ˆxZS) Ú PanelPlugincóH•—t¦« ¦«dSr)ÚsuperÚ__init__)ÚselfÚ __class__s €rrˆzPanelPlugin.__init__˜sø€Ý ‰Œ×ÒÑÔÐÐÐrcó—tS)z4 Return panel name :return: )Ú __cpname__©r‰s rÚ getCPNamezPanelPlugin.getCPName›s €õ Ðrc󤇗d„}ˆfd„}d„Š tj d¦«r |¦«S|¦«S#t$rYdSwxYw)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 có.—tjddgtjtjd¬¦«5}| ¦«\}}ddd¦«n #1swxYwY| dd¦« ¦«d}t |dd œS) zK Handle ISP Manager v4 specific version retrieval. rz-vT©ÚstdoutÚstderrÚtextNú Úr©ÚnameÚversionÚadditional_info)Ú subprocessÚPopenÚPIPEÚ communicateÚreplacer#rŒ)ÚprocÚoutÚ_r™s rÚ_get_isp_manager_v4_descriptionzGPanelPlugin.get_cp_description.._get_isp_manager_v4_description°sÑ€õÔ!Ø/°Ð6Ý!”Ý!”Øð ñôð ,ð Ø×)Ò)Ñ+Ô+‘��Qð  ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð—k’k $¨Ñ+Ô+×1Ò1Ñ3Ô3°AÔ6ˆGÝ&°7ÈtÐTÐTÐ Ts¯AÁAÁAcód•—gd¢}|D]\}}‰|¦«}|�d||dœcSŒtd¦«‚)zV Handle ISP Manager v5 specific checks and version retrieval. ))zispmanager-business-commonÚMaster)zispmanager-node-commonÚNode)zispmanager-lite-commonÚLiteNz ISP Managerr—z'Failed to detect version of ISP manager)Ú RuntimeError)ÚpackagesÚpackageÚ node_typer™Ú_query_package_versions €rÚ_get_isp_manager_v5_descriptionzGPanelPlugin.get_cp_description.._get_isp_manager_v5_description¿sxø€ðððˆHð '/ð ð Ñ"�˜Ø0Ð0°Ñ9Ô9�ØÐ&à -Ø#*Ø+4ðððððð'õ ÐHÑIÔIÐ Ircó"—tjdddd|gtjtjd¬¦«5}| ¦«\}}|jdks|s ddd¦«dS ddd¦«n #1swxYwY| ¦«S) zC Query the version of a package using rpm. z/bin/rpmz-qz --queryformatz [%{VERSION}]Tr‘rN)r›rœr�ržÚ returncodeÚstrip)Ú package_namer r™r¢s rr¬z>PanelPlugin.get_cp_description.._query_package_versionÒsó€õÔ!ؘT ?°NÀLÐQÝ!”Ý!”Øð ñôð ð Ø!×-Ò-Ñ/Ô/‘ �˜Ø”? aÒ'Ð'¨wÐ'Øð ð ð ñ ô ð ð ð ð(ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð—=’=‘?”?Ð "s²&A2Á2A6Á9A6r N)r r rÚ Exception)r‰r£r­r¬s @rÚget_cp_descriptionzPanelPlugin.get_cp_description¢s ø€ð Uð Uð Uð Jð Jð Jð Jð Jð& #ð #ð #ð ÝŒw�~Š~Ð;Ñ<Ô<ð 9à6Ð6Ñ8Ô8Ð8ð7Ð6Ñ8Ô8Ð8øÝð ð ð Ø�4�4ð øøøsŽ(A· AÁ AÁAcó—t¦«S)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 )rYr�s rrYzPanelPlugin.db_accessës€õ‰{Œ{Ðrcó—gS)z¢ Return aliases from user domain :param str|unicode cpuser: user login :param str|unicode domain: :return list of aliases r)Úcpuserr‚s rÚ useraliaseszPanelPlugin.useraliasesös €ðˆ rcó—t¦«S)z¥ Generates a list of cpusers registered in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )rlr�s rrlzPanelPlugin.cpuserss€õ‰yŒyÐrcó —t|¦«S)z` Get login url for current panel; :type domain: str :rtype: str )rƒ)r‰r‚s rrƒzPanelPlugin.get_user_login_url s€õ " &Ñ)Ô)Ð)rÚreturncót—tjtjtjtjtjgSr)rÚ RUBY_SELECTORÚPYTHON_SELECTORÚNODEJS_SELECTORÚRESELLER_LIMITSÚWPOSr�s rÚget_unsupported_cl_featuresz'PanelPlugin.get_unsupported_cl_featuress)€å Ô !Ý Ô #Ý Ô #Ý Ô #Ý ŒLð  ð r)Ú__name__Ú __module__Ú __qualname__rˆrŽr³rYÚ staticmethodr·rlrƒÚlistrrÁÚ __classcell__)rŠs@rr…r…—sÁø€€€€€ðððððððððGðGðGðR ð ð ðððñ„\ððððð*ð*ð*ð ¨T°'¬]ð ð ð ð ð ð ð ð rr…)r)r rqr›ÚtypingrÚclcommonrÚclcommon.cpapi.cpapiexceptionsrrÚclcommon.cpapi.GeneralPanelrÚclcommon.featuresrrŒrrÚ ISP_DB_CONFrHr+r-r>rNrYrgrlr€rƒr…rrrúrÎs˜ðð € € € Ø € € € Ø € € € ØÐÐÐØÐÐÐÐÐàÐÐÐÐÐØGÐGÐGÐGÐGÐGÐGÐGØ<Ð<Ð<Ð<Ð<Ð<Ø%Ð%Ð%Ð%Ð%Ð%à € ð9ð9ð9ð MðMðMð2€ Ø:€ à.€Ø#Ðð $¨T¸ ð ð ð ð ðF ð ð ð%ððððð*%ð%ð%ðððð,0¸Kð.ð.ð.ð.ð4$ð$ð$ðA ðA ðA ðA ðA Ð&ñA ôA ðA ðA ðA r