Ѡg&ddlZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z ddl mZdZdZd Zd Zd Zd Zd ZddefdZdZefdZdZdZdefdZdZGdde ZdS)N)Dict) mysql_lib) NotSupportedNoDBAccessData)GeneralPanelPluginV1)Feature ISPManagerc@tjdS)N/usr/local/mgr5/sbin/mgrctl)ospathisfile/builddir/build/BUILDROOT/alt-python27-cllib-3.4.22-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/plugins/ispmanager.py _is_5_versionrs 7>>7 8 88rc\tjdp tS)N/usr/local/ispmgr/bin/ispmgr)r r rrrrrdetectrs 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+)cZi}d|rg|D]}|}t|dkr?|t|g|dht|dkr|dt |d5}g}t jt| D]\} } } t jt| } | |kr|d|fvrtfd| D} t|  t| r||  dddn #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 Nrutf-8encodingc*g|]\}}|v ||fSNr).0kvseckeys_extracteds r zconf_pars..;s?WWW#'1a"3";qDU?U?U!"1v?U?U?Ur)splitlenupdatedictappendopenrefindallSECTION_PATTERNreadKEYWORDS_PATTERNsetitemsissubset)sectypesecnameseckeysr seckeys_filterkey_valkey_val_splitedf result_liststypesnamesbodyblstresultr!s @r conf_parsr>"sN= = =G%mmooO?##q((%%dO+<&=&=>>>!(();<<<<_%%**!(();<<< dW % % % / #%:oqvvxx#H#H / / E5%:.66DGg$>$>WWWW+/WWWXX~++--..77FLLNN8K8KLL/&&v... / / / / / / / / / / / / / / / / s4CF  F$'F$c ttd5}ttjt |}|d|d|dddcdddS#1swxYwYdS#t$r}tdt |d}~wt$r}td t |d}~wwxYw) Nrr DBPasswordDBUserDBHostmysql)passloginhostdbzCan not open config file z1Can not find database access data in config file ) r( ISP5_DB_CONFr&r)r*r-r,IOErrorr IndexError)db_confcnfes r _db_access_5rNEsD  , 1 1 1 mWrz"2GLLNNCCDDC -H sS[}dkll m m m m m m m m m m m m m m m m m m TTTK9IKKLLRSS  R@P R R   sGBAA7* B7A;;B>A;?B CB&& C3C  CctrtSi}tdd|}|D]<} |d|d<|d|d<|d|d <d |d <|cS#t$rY9wxYwt d |) NDbServer)HostnamePasswordz Type mysqlUser)r1r3r rRrDrSrErQrFrCrGz?Can not find database access data for localhost in config file )rrNr>KeyErrorr) _conf_pathaccess access_listaccess_from_confs r db_accessrYRs~~ FJ8fmwxxxK' -j9F6N.v6F7O-j9F6N"F4LMMM    D  V*VV  s'A  A-,A-c|dd}|d}|d}d}tj|||d}|5}||cdddS#1swxYwYdS)NrF localhostrErDz5SELECT db.Db, db.User FROM db GROUP BY db.User, db.DbrC)rFuserpasswdrG)getrMySQLConnectorconnect execute_query)rVdbhostdblogindbpasssql connectorrGs r_dbname_dblogin_pairsrggs ZZ , ,FWoG F^F AC(f7067DDDI     %$$%%%%%%%%%%%%%%%%%%sA77A;>A;c*tdddid)Nz&%(action)s is not currently supported.actionz1Getting all users registered in the Control Panel)messagecontext)rrrrcpusersrlrs* ;QR  rc #VKtdtjD}t|d5}t |D]\}}|dr|}t|dkr|dd\}} |t|} | td|d |d |n'#t$rtd |d |d} YnwxYw| r || |vr|| fV ddddS#1swxYwYdS) z Extract (database name <=> control panel login) pairs from ISPmanager config file :param cplogin_lst: :param _conf_path: :return: c.g|]}|d|dfS)rrr)r grp_tuples rr"z._dbname_cplogin_pairs_iter..s%ZZZiilIaL9ZZZrrrz DbAssign rNz)WARNING: can not find group name with id z; line z in file zWARNING: can not pars line ) r&grpgetgrallr( enumerate startswithr#r$r^intprint ValueError) cplogin_lstrUgrpid_login_dictr7 line_numbline line_spliteddbnameuser_uidcplogins r_dbname_cplogin_pairs_iterrysZZ3<>>ZZZ[[ j7 + + +.q(|| . .OIt{++ .#zz|| |$$))'3ABB'7$FH'"2"6"6s8}}"E"E"?!#Kh#K#K*3#K#K>H#K#KLLL%'''\I\\PZ\\]]]"&'.K$;w+?U?U$go--- ...................s6AD;D=C>>DD"%D"cd|dS)Nzhttps://z:1500r)domains rget_user_login_urlrs #f # # ##rcneZdZfdZdZdZdZedZdZ dZ de e d ffd Z xZS) PanelPlugincHtdSr)super__init__)self __class__s rrzPanelPlugin.__init__s rctS)z4 Return panel name :return: ) __cpname__rs r getCPNamezPanelPlugin.getCPNames rcd}fd}d tjdr |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.tjddgtjtjd5}|\}}dddn #1swxYwY|ddd}t |dd S) zK Handle ISP Manager v4 specific version retrieval. rz-vTstdoutstderrtextN rnameversionadditional_info) subprocessPopenPIPE communicatereplacer#r)procout_rs r_get_isp_manager_v4_descriptionzGPanelPlugin.get_cp_description.._get_isp_manager_v4_descriptions!/6!!  , ))++Q  , , , , , , , , , , , , , , ,kk$++1133A6G&7tTT TsAAAcdgd}|D]\}}|}|d||dcStd)zV Handle ISP Manager v5 specific checks and version retrieval. ))zispmanager-business-commonMaster)zispmanager-node-commonNode)zispmanager-lite-commonLiteNz ISP Managerrz'Failed to detect version of ISP manager) RuntimeError)packagespackage node_typer_query_package_versions r_get_isp_manager_v5_descriptionzGPanelPlugin.get_cp_description.._get_isp_manager_v5_descriptionsxH '/  "0099& -#*+4' HII Irc"tjdddd|gtjtjd5}|\}}|jdks|s ddddS dddn #1swxYwY|S) zC Query the version of a package using rpm. z/bin/rpmz-qz --queryformatz [%{VERSION}]TrrN)rrrr returncodestrip) package_namerrrs rrz>PanelPlugin.get_cp_description.._query_package_versions!T?NLQ!!  !--// ?a''w'        (               ==?? "s&A22A69A6r N)r r r Exception)rrrrs @rget_cp_descriptionzPanelPlugin.get_cp_descriptions U U U J J J J J& # # # w~~;<< 96688876888   44 s(A A AActS)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 )rYrs rrYzPanelPlugin.db_accesss{{rcgS)z Return aliases from user domain :param str|unicode cpuser: user login :param str|unicode domain: :return list of aliases r)cpuserrs r useraliaseszPanelPlugin.useraliasess  rctS)z Generates a list of cpusers registered in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )rlrs rrlzPanelPlugin.cpuserssyyrc t|S)z` Get login url for current panel; :type domain: str :rtype: str )r)rrs rrzPanelPlugin.get_user_login_url s "&)))rreturn.cttjtjtjtjtjfSr)r RUBY_SELECTORPYTHON_SELECTORNODEJS_SELECTORRESELLER_LIMITSWPOSrs rget_unsupported_cl_featuresz'PanelPlugin.get_unsupported_cl_featuress)  !  #  #  # L   r)__name__ __module__ __qualname__rrrrY staticmethodrrlrtuplerr __classcell__)rs@rrrsGGGR   \*** U7C<-@        rr)r)r rqrtypingrclcommonrclcommon.cpapi.cpapiexceptionsrrclcommon.cpapi.GeneralPanelrclcommon.featuresrrrr ISP_DB_CONFrHr+r-r>rNrYrgrlrrrrrrrs GGGGGGGG<<<<<<%%%%%%  999 MMM2 : .# $T    F   %*%%%,0K....4$$$A A A A A &A A A A A r