}Cea(ddlmZddlmZddlmZddlZddlZddlZddlmZddl m Z ddl m Z m Z ddlmZdd lmZd Zd Zd Zd ZdZdZdZddefdZdZefdZdZdZdefdZdZGddeZ dS))print_function)absolute_import)divisionN)Dict) mysql_lib) NotSupportedNoDBAccessData)GeneralPanelPluginV1)Feature ISPManagerc@tjdS)N/usr/local/mgr5/sbin/mgrctl)ospathisfile/builddir/build/BUILDROOT/alt-python27-cllib-3.3.7-2.el7.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)rrrrrrrdetectrs 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+)ct}d|rt|D]}|}t|dkr?|t|g|dht|dkr|dt |}t}tjt| D]\} } } tjt| } | |kr|d|fvrtfd| D} t| t| r|| ||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 Nrc*g|]\}}|v ||fSNr).0kvseckeys_extracteds r zconf_pars..>s?SSS#q!/71@Q;Q;Qq6;Q;Q;Qr)dictlistsplitlenupdateappendopenrefindallSECTION_PATTERNreadKEYWORDS_PATTERNsetitemsissubsetclose)sectypesecnameseckeysrseckeys_filterkey_valkey_val_splited conf_stream result_liststypesnamesbodyblstresultr!s @r conf_parsr@%sVVN= FF = =G%mmooO?##q((%%dO+<&=&=>>>!(();<<<<_%%**!(();<<<t**K&&K!z/;;K;K;M;MNN++uez*E22 G  D'? : :SSSS'+SSSTTF>''))**33C 4G4GHH +""6*** rc tt5}ttjt |}|d|d|dddcdddS#1swxYwYdS#t$rtdt t$rtdt wxYw)N 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_confcnfs r _db_access_5rOIs.j ,   m7rz"2GLLNNCCDDC -H sS[}dkll m m m m m m m m m m m m m m m m m m RRRn>N>NPQQQ jjjnVfVfhiiijs0BAA5( B5A99B<A9=BACctrtSt}tdd|}|D]<} |d|d<|d|d<|d|d <d |d <|cS#t$rY9wxYwt d |) NDbServer)HostnamePasswordz Type mysqlUser)r3r5rrSrFrTrGrRrHrErIz?Can not find database access data for localhost in config file )rrOr#r@KeyErrorr ) _conf_pathaccess access_listaccess_from_confs r db_accessrZTs~~ VVFJ8fmwxxxK' -j9F6N.v6F7O-j9F6N"F4LMMM    D  .`j`jl m mms'A,, A98A9c|dd}|d}|d}d}tj|||d}|5}||cdddS#1swxYwYdS)NrH localhostrGrFz5SELECT db.Db, db.User FROM db GROUP BY db.User, db.DbrE)rHuserpasswdrI)getrMySQLConnectorconnect execute_query)rWdbhostdblogindbpasssql connectorrIs r_dbname_dblogin_pairsrhgs 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)rrrrcpusersrmrs* ;QR  rc#>Kt|}tdtjD}t |D]\}}|dr|}t|dkr||dd\}} |t|} | td|||fzn&#t$rtd||fzd} YnwxYw| r || |vr|| fV| dS)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%ZZZiilIaL9ZZZrz DbAssign rNz?WARNING: can not find group name with id %s; line %d in file %sz(WARNING: can not pars line %d in file %s) r)r#grpgetgrall enumerate startswithr%r&r_intprint ValueErrorr2) cplogin_lstrVr9grpid_login_dict line_numbline line_spliteddbnameuser_uidcplogins r_dbname_cplogin_pairs_iterrysfz""KZZ3<>>ZZZ[[$[11** 4 ??; ' ' *::<$$%v%v%v,6OJOZ^%`` !  A<1$$J$"(()v)v)v0: ^b)ddA$%MMOOMJ|q(( (&,,iii#-?:?QU-WW)*  A<1,,J,"+,U"V"VV+1LL(. $,LL$$&Dd%KT^Tc,6O$%HHQ [[r2288::1= &:R^__ _ 44s F FFctS)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 )rZrs rrZzPanelPlugin.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 )rmrs rrmzPanelPlugin.cpuserssyyrc t|S)z` Get login url for current panel; :type domain: str :rtype: str )r)rrs rrzPanelPlugin.get_user_login_urls "&)))rreturnc6tt|}i|tjdtjdtjdtjdtjdtj dtj dtj dtj di S)NTF) rrget_supported_cl_featuresr PHP_SELECTOR RUBY_SELECTORPYTHON_SELECTORNODEJS_SELECTORLSAPIGOVERNORCAGEFSRESELLER_LIMITSWPOS)rsupported_featuresrs rrz%PanelPlugin.get_supported_cl_featuress";55OOQQ      $  !5  #U  #U M4  d ND  #U L%   r)__name__ __module__ __qualname__rrrrZ staticmethodrrmrrstrboolr __classcell__)rs@rrrs,,,,,333j   \***  4T ?           rr)! __future__rrrr*rrrtypingrclcommonrclcommon.cpapi.cpapiexceptionsrr clcommon.cpapi.GeneralPanelr clcommon.constr rrr ISP_DB_CONFrJr,r.r@rOrZrhrmrrrrrrrs&%%%%%&&&&&& GGGGGGGG<<<<<<""""""  999 MMM2 : .# $T !!!!Hjjj%nnnn&%%%,0K6999s s s s s &s s s s s r