yo4hdZddlZddlmZddlmZmZmZddlm Z ddl m Z m Z m Z ejeZdZe e de d Zd eeeeffd Zd eeeeffd Zd eeeeefffdZd eefdZd eefdZd eefdZd efdZd efdZd eefdZdZdS)z/Gather information from Plesk via DB querries. N) defaultdict)DictListSequencePanelException) CheckRunError check_runretry_oncKt|i|)Nr)argskwargss \/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/subsys/panels/plesk/api.pyraise_panel_exceptionrs $ )& ) ))) max_trieson_errorc^Ktdddd|gd{VS)Npleskdbz-Nz-e)r decodequerys r _run_queryrs=WdD$>?? ? ? ? ? ? ? G G I IIrreturncKtdd{V}tt}t |ddd|dddD]&\}}|dkr|||'|S)z'Return mapping: user -> user's domains.zselect login, name from domains left join hosting on dom_id = domains.id right join sys_users on hosting.sys_user_id = sys_users.idNrNULL)rsplitrlistzipappend)resultresult_mappinguserdomains rget_user_to_domainr)s L         egg  !&&NF14a4L&A,7700 f V   4 ' ' / / / rcKtdd{V}dt|ddd|dddDS)zReturn mapping: domain -> user.zselect name, login from domains left join hosting on dom_id = domains.id left join sys_users on hosting.sys_user_id = sys_users.idNci|] \}}||g Sr,).0r(r's r z&get_domain_to_user..3s O O O|vtFTF O O Orrrr)rr!r#)r%s rget_domain_to_userr/(s~ K         egg  P Os6!$Q$<1/N/N O O OOrcKi}tdd{V}|dD]:}|s|d\}}}||ddd||<;|S)z{ Returns dict with user to email and locale pairs Not used, because MyImunify implemented for cPanel only yet z9SELECT CONCAT(login, ';',email, ';',locale) FROM clients;N ;-_)emaillocale)rr!replace) user_detailsresultsrecordr'r5r6s rget_user_detailsr;6s LCG--%%    $ll3//eVnnS#..  T rcTKtdd{VS)zReturn: list of domainszselect name from domainsNrr!r,rr get_domainsr>Ms5788 8 8 8 8 8 8 ? ? A AArcTKtdd{VS)z#Return: users that created by PleskzSELECT sys_users.login FROM sys_users JOIN hosting ON hosting.sys_user_id=sys_users.id JOIN domains ON hosting.dom_id=domains.id AND domains.webspace_id=0Nr=r,rr get_usersr@SsI C         egg rcrKtdd{V}d|dD}|S)a Returns [ ['admin', 'john.smith@tardis.gal', 'NULL', 'en-US', 'admin', 'NULL', 'NULL', 'NULL', '0'], ['user0', 'NULL', 'admin', 'en-US', 'client', '1', 'user0.com', '/var/www/vhosts/user0.com/httpdocs', '1'] ] There is only 1 return type. NULL is converted to 'NULL' Each possible empty string should be covered with IF(clients.email='', NULL, clients.email) or it will break data structure ar SELECT clients.login, IF(clients.email='', NULL, clients.email), parent.login, IF(clients.locale='', NULL, clients.locale), clients.type, domains.name, hosting.www_root, clients.status=16 suspended FROM clients LEFT JOIN clients parent ON parent.id=clients.parent_id LEFT JOIN domains ON domains.cl_id=clients.id LEFT JOIN hosting ON domains.id=hosting.dom_id; Nc:g|]}||Sr,r!r-strings r z*get_users_for_patchman..vs% J J J6 Jfllnn J J Jrr1r=)raw_datatupless rget_users_for_patchmanrI_sa          HK J8>>$+?+? J J JF MrcJKttdd{VS)z=Return: count active customers with at least one (any) domainz_select count(distinct cl_id) from clients c join domains d on d.cl_id = c.id where c.status = 0N)intrr,rr"count_customers_with_subscriptionsrLzsJ  0          rcnKtdd{V}d|dDS)Nz-SELECT email FROM clients WHERE type='admin';cg|]}||Sr,r,)r-r5s rrFz$get_admin_emails..s ; ; ;eU ;E ; ; ;rr1r=)emailss rget_admin_emailsrPsFMNN N N N N N NF ; ;v||D11 ; ; ;;rcXKd}t|d{VS)Nz.SELECT DISTINCT hosting.www_root FROM hosting;r=rs r list_docrootsrRs7 .s% F F Fv Ffllnn F F Frr1r=)sqldataretvals rlist_docroots_domains_usersrXsT D C D F F4::d+;+; F F FF Mr) __doc__logging collectionsrtypingrrr"defence360agent.subsys.panels.baserdefence360agent.utilsr r r getLogger__name__loggerrrstrr)r/r;r>r@rIrKrLr"rPrRrXr,rrrcs######''''''''''======DDDDDDDDDD  8 $ $*** -1/DEEEJJFEJ$sDI~"6" P$sDI~"6 P P P PS$sCx.%8 9.B49BBBB c    d3i6#<<<<< -Xc]----     r