yo4hZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z m Z mZmZddlmZddlmZddlmZd d lmZd d lmZd d lmZdZdZejgdzZeje Z!de"fdZ#dee"e"ffdZ$Gddej%Z&Gddej'Z(dS)N)Error) defaultdict)Path)DictListSetTupleUnion) ElementTreeis_plesk_installed) OsReleaseInfo)api) PleskConfig)basez /etc/sw/keys/zext-imunify360)95399084438447returncB||}||jSdS)z%Avoid AttributeError if tag not foundN)findtext)nodetag_nodes ^/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/subsys/panels/plesk/panel.py_safe_get_textr!s& IIcNNE z 2cd}d}|dD]J}t|ddkrt|d}t|ddkrt|d}K||fS)z.Return product name and filename from key datarvalue/struct/membernamefilenamez value/stringkey_product_name)findallr!)keyr&r'datas r _get_key_datar+"sH 122DD $ ' ': 5 5%dN;;H $ ' '+= = =-dNCC  X %%r"ceZdZdS)PleskExceptionN)__name__ __module__ __qualname__r"r r-r-/sDr"r-ceZdZdZgdezddgezdgdgdddZeZedZ e d Z e j dd Ze j dd Zd eefdZdZdZdZd eeeffdZdZd efdZedZd eefdZed efdZed e ed ffdZ!ed efdZ"dZ#d efdZ$d S)Plesk)1434658880z 49152-655351135224)inout)202153443)r;r<r=r7123)tcpudpctSNr clss r is_installedzPlesk.is_installedAs!###r"cKtdd5}|dcdddS#1swxYwYdS)Nz/usr/local/psa/versionrr)openreadsplit)fs r versionz Plesk.versionEs *C 0 0 'A6688>>##A& ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's,A  AANc KdSrCr1)selfr%s r enable_imunify360_pluginzPlesk.enable_imunify360_pluginJ  r"c KdSrCr1)rO plugin_names r disable_imunify360_pluginzPlesk.disable_imunify360_pluginNrQr"rcK tjd{VS#tj$r'}td|gcYd}~Sd}~wwxYw)z$Returns a list of Plesk system usersNzFailed to get users: %s)r get_usersrPanelExceptionloggererror)rOes r rVzPlesk.get_usersRso (((((( ("    LL2A 6 6 6IIIIII sAAAAc Ktjd{V}tt}td}|t jjt jjt jj d|D]\}}}}}} } } |dkrdn|||d<|dkrdn|||d<|||d<|dkrdn|||d<t||||d <tt| ||d <|| d  g||d <| dkr%||d  | | gd t|S) Nc$tjjSrC)r UserLevel REGULAR_USERr1r"r z&Plesk.patchman_users..^s 4>3Nr")adminresellerclientNULLremaillanguageusernameparentlevel suspendeddomains)domainpaths)rget_users_for_patchmanrdictupdaterr]ADMINRESSELERr^intboolgetappendlistvalues) rOtuplesresclient_type_to_levelrfrdrglocale client_typerkhomedirris r patchman_userszPlesk.patchman_usersZs133333333$*+N+NOO##- N3.5               +0F??RRCM' ".4.>.>FCM* %(0CM* %,2f,<,>c ^tjtjt d}|dD]}t|ddkr|dD]}t|\}}|tkrttjtjt d|d}tj | ccSdS) zParse xml of registry and corresponding key file to retrive product key. return: str key or None if not found. z registry.xmlz struct/memberr%activer$keysz1{http://parallels.com/schemas/keys/aps/3}key-bodyN)r parseospathjoinPLESK_KEY_REGISTRYgetrootr(r!r+PLESK_IMUNIFY360_PRODUCT_NAMEbase64 b64decodeencodedecode)rEregistrymemberr)r'r& key_values r _retrieve_keyzPlesk._retrieve_keys,$ GLL+^ < <  &&((00AA M MFff--99!>>*?@@ M MC1>s1C1C.$h'+HHH$2'- " $6!"!" ' %%  &/ 0@0@0B0BCCJJLLLLLLLItr"cK |}n6#tjttf$r}t d|zd}~wwxYw|rt d||St d)zkReturns registration key from registered keys, if possible, raise PleskException if not successful.z$failed to retrieve key with error %sNzkey retrieved %szThe key not found)rr ParseError base64ErrorFileNotFoundErrorr-rXinfo)rEresultrZs r retrieve_keyzPlesk.retrieve_keys  M&&((FF& 5FG M M M !G!!KLL L M   KK*F 3 3 3M0111sA AA cPKtjd{V}d|DS)z1 :return: dict docroot to domain Nci|] \}}}|| Sr1r1).0docrootrkrs r z'Plesk.list_docroots..s-   2GV   r")rlist_docroots_domains_users)rOdocroot_domains_userss r list_docrootszPlesk.list_docrootssJ'*&E&G&G G G G G G G  6K    r"c KdS)z8 Returns panel url :return: str rr1)rOrfs r panel_user_linkzPlesk.panel_user_links rr"rC)%r.r/r0NAMETCP_PORTS_PLESK OPEN_PORTSr- exception classmethodrF staticmethodrMrensure_valid_panelrPrTrstrrVr~rrrrrrrrrrrrrr rrrrr1r"r r3r33sx D877/I6?_4  ,++333   JI$$[$''\'T    T    c&"&"&"P''' ... -c3h---- ... >3>>>>66[6 /#c(////    [ eCI.[6 23 2 2 2[ 2   r"r3))rloggingrbinasciirr collectionsrpathlibrtypingrrrr r xml.etreer 3defence360agent.application.determine_hosting_panelr defence360agent.utilsrrrutilsrrrrTCP_PORTS_COMMONr getLoggerr.rXrr!r+rWr- AbstractPanelr3r1r"r rs  ))))))######00000000000000!!!!!!0/////$ 0'*H*H*HH  8 $ $ &%S/ & & & &     T(   {{{{{D {{{{{r"