*vhC&nddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z ddl Z ddl Z ddlmZmZddlmZddlmZddlmZddlmZdd lmZmZmZmZd d lmZej e!Z"ej#$e%d zZ&d Z'dZ(ej)eddZ*ej+d de,de j-fdZ.dZ/dZ0ee*dde,fdZ1de,de,fdZ2dZ3dZ4dZ5de e,fd Z6Gd!d"ej7Z8Gd#d$ej9Z:dS)%N) defaultdict)DictListSet)ClIntegrationConfigIntegrationConfig) JWTIssueris_generic_panel_installed)int_from_envvar)UserType) CheckRunError check_runget_non_system_users timed_cache)basez$/users_script_schemas/schema-{}.yamlz$/etc/sysconfig/imunify360/auth.adminmetadata-IMUNIFY360_EXPIRATION_FOR_INTEGRATION_SCRIPTSZ)seconds)maxsizescriptreturnctt|5}tj|}|t ur ddi|t <t j|cdddS#1swxYwYdS)z%Returns a validator for given script.requiredTN)open_SCHEMA_PATH_TMPLformatyaml safe_loadMETADATAcerberus Validator)r schema_fileschemas `/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/subsys/panels/generic/panel.py_get_validatorr(.s &&v.. / /*; ,,  ! ! *D1F8 !&)) ******************s=A22A69A6c2dtDS)Nc8g|]}t|jS)name)dictpw_name).0pws r' z*get_users_default_impl..9s% C C CbDbj ! ! ! C C C)rr2r'get_users_default_implr48s C C,@,B,B C C CCr2cf|}d|vr||dvr|d|SdS)Nintegration_scripts)to_dict)clrds r'_get_conf_pathr:<s@ A!!f2G0H&H&H&'// 4r2 ) expirationrcKtt|}|stt|}|std|zt ||d{VS)Nzl%s not found neither in /etc/sysconfig/imunify360/integration.conf nor in /opt/cpvendor/etc/integration.ini.)r:rrIntegrationScriptError_get_integration_data)rpaths r'get_integration_datarACs +--v 6 6D =133V<<  $ 8:@ A   'vt44 4 4 4 4 4 44r2r@cxK t|dd{V}n6#t$r)}td||d}~wwxYw t j|}n1#ttjf$r}td|z|d}~wwxYwt|tstd|ztt}| |std|d|j|td d krJ|td }d |tvr|d |td zz }t|t|}| |std |d|j|dS)NT)shellzMIntegrations script {script} failed with exit code {e.returncode} {e.stderr})rez"Cannot decode output of %s as JSONz%s should return dictz Validation error in metadata of z script: resultokmessagez: %szValidation error in data)rrr>rjsonloadsdecodeUnicodeDecodeErrorJSONDecodeError isinstancer-r(r"validateerrors)rr@stdoutrDrHmetadata_validatormetadata_error validators r'r?r?Rs  T222222222    $ v33    z&--//**  4 5$ 04 7    dD ! !E$%\}}|dr1||dg}||?d|DS#t $r+t dtcYSwxYw)Ndomainsownercg|] \}}||d S)r,rVr3)r/kvs r'r1z$_get_client_data..s$DDDdaq))DDDr2z:Applying default implementation of users and domains lists) get_users_integration_datarAitems setdefaultappendr>loggerwarningr4)usersrVrZr[ user_domainss r'_get_client_datard{s (022222222,Y77777777MMOO ' 'DAqz '$//' B?? ##A&&&DDekkmmDDDD !((( H   &''''' (sBB2CCcKtdd{V}i}|D]3}|dstd|(g||d<4|S)Nrbusernamez#Found user with an empty username: )rAr`ra)rb users_dictusers r'r\r\s|&w// / / / / / /EJ..J . NNGGG H H H H+-JtJ' ( ( r2cK tdd{VS#t$rtdicYSwxYw)NrVzCould not parse domains lists)rAr>r`rar3r2r'get_domain_datarjsb))444444444 !6777 s&AAc Kd}dh}tjt|tt |t|tt |dd{V}d|D}|st d|||z} tt5}| | dddn #1swxYwYn0#t$r#t dtYnwxYwt|S)NadminsrootT)return_exceptionscRh|]$}t|t|D] }|d %Sr+)rNlist)r/rladmins r' z!get_admin_list..sW  fd # #   f r2zDError occurred during extracting admins from integration configs: %sz&Failed to retrieve admins list from %s)asynciogatherr?r:rrr`rarADMIN_LIST_FILE_PATHupdateread splitlinesOSErrorrp) script_name admins_setadmins_from_integration_scripts custom_adminsadmin_list_files r'get_admin_listrsKJ,3N  !##       #%%    ---''''''#"5M   + +   -J & ' ' C?   o2244??AA B B B C C C C C C C C C C C C C C C     46J         s6$D 8:C>2 D >DD DD *D76D7ceZdZfdZxZS)r>chtj|t|dSN)super__init__r`ra)selfargskwargs __class__s r'rzIntegrationScriptError.__init__s/$tr2)__name__ __module__ __qualname__r __classcell__)rs@r'r>r>s8r2r>c\eZdZdZejZeZe dZ ddZ ddZ e dZ e dZdZd eefd Zd eeeeffd Zd eeeeefffd Zd eeeeffd ZdefdZd eefdZd eeeffdZd efdZdS) GenericPanelzb Panel, UI to which is provided by imunify{-antivirus,360-firewall}-generic.{rpm,deb} ctSrr )clss r' is_installedzGenericPanel.is_installeds)+++r2Nc KdSrr3)rr,s r'enable_imunify360_pluginz%GenericPanel.enable_imunify360_plugin  r2c KdSrr3)r plugin_names r'disable_imunify360_pluginz&GenericPanel.disable_imunify360_pluginrr2cnK tdd{V}djdi|S#t$rYdSwxYw)N panel_infoz{name} {version}0r3)rArr>rinfos r'versionzGenericPanel.versionsf -l;;;;;;;;D,%,44t44 4%   33 s !& 44czK tdd{V}djdi|S#t$r |jcYSwxYw)Nrz{name}r3)rArr>NAMErs r'r,zGenericPanel.namesh -l;;;;;;;;D"8?**T** *%   8OOO s !&::cKtd{V}g}|D]7}||dt8|S)NrV)rdextendgettuple)rrbrErhs r'get_user_domainszGenericPanel.get_user_domainssc&(((((((( 8 8D MM$((9egg66 7 7 7 7 r2rcFKtd{V}d|DS)Ncg|] }|d Sr+r3r/rhs r'r1z*GenericPanel.get_users..s///V ///r2rdrrbs r' get_userszGenericPanel.get_userss7&((((((((//////r2cKtd{V}tt}|D]<}|dgD]#}|||d$=|S)NrVr,)rdrrprr_)rrbrErhdomains r'get_domain_to_ownerz GenericPanel.get_domain_to_owners&((((((((T"" 4 4D((9b11 4 4v%%d6l3333 4 r2cK|d{Vtd{Vtdd{V}dtffd fd|DS)Nrb user_infoc|ddkrtjjS|dvrtjjStjjS)Nrfrm)rr UserLevelADMINRESSELER REGULAR_USER)rrls r'user_info_to_levelz9GenericPanel.get_user_details..user_info_to_levelsR}}Z((F22~++}}Z((F22~..>. .r2c i|]q}|dv|d|dd|ddt|drS)rfemail locale_code)rlocalelevel)rint)r/rr usernamess r' z1GenericPanel.get_user_details..s   xx ##y00 HHZ '2..((="55//5566## 100r2)rrrAr)r user_datarlrrs @@@r'get_user_detailszGenericPanel.get_user_details s..******** %''''''''.w77777777  /$ / / / / / /     "     r2cFKtd{V}d|DS)NcHi|]}|d|dg SrY)rrs r'rz5GenericPanel.get_domains_per_user..%s,HHH$V dhhy"55HHHr2rrs r'get_domains_per_userz!GenericPanel.get_domains_per_user"s7&((((((((HH%HHHHr2rHc|jdkrf|dddgkrX|ddd}tj|}|d|dtjkr|dndfS|jdfS) Nrcommandloginpamparamsjwt user_type user_name)_uidpopr parse_tokenr NON_ROOTrh)rprotocolrHtoken parsed_tokens r' authenticatezGenericPanel.authenticate's =A  $y/gu5E"E"EN&&ud33E$077L , ,0AAA[))  =$& &r2ct}d|vr7d|dvr-t|ddStS)Nmalwarebasedir)rr7setsplit)rconfs r'basedirszGenericPanel.basedirs3s^ ""**,,   d9o!=!=tIy17799:: :uu r2cjKtd{V}d|DS)Nc&i|]\}}|d|S) document_rootr3)r/rr[s r'rz.GenericPanel.list_docroots..;s#LLLyvq/"FLLLr2)rjr])rrVs r' list_docrootszGenericPanel.list_docroots9s?'))))))))LLGMMOOLLLLr2c KdS)z8 Returns panel url :return: str rr3)rrfs r'panel_user_linkzGenericPanel.panel_user_link=s rr2r)rrr__doc__rGENERIC_PANEL_NAMErr> exception classmethodrrrrr,rrstrrrrrrr-rrrrrr3r2r'rrs  "D&I,,[,        [[0c00004T#Y+? S$sCx.-@(A    0IDd3i,@IIII '4 ' ' ' '#c( MT#s(^MMMMr2r);rsdatetime functoolsrIloggingos collectionsrtypingrrrr#r $defence360agent.api.integration_confrrdefence360agent.api.jwt_issuerr 3defence360agent.application.determine_hosting_panelr defence360agent.contracts.configr defence360agent.rpc_tools.lookupr defence360agent.utilsrrrrrr getLoggerrr`r@dirname__file__rrur" timedelta'EXPIRATION_TIME_FOR_INTEGRATION_SCRIPTS lru_cacherr$r(r4r:rAr?rdr\rjrPanelExceptionr> AbstractPanelrr3r2r'rs3  ######"""""""""" 544444=<<<<<555555  8 $ $GOOH FF> *<(*< O7  +++'Q*3*8#5*** *DDD ?LLL 5s 5 5 5ML 5&&3&&&&R((("   *d3i****ZT0 nnnnn4%nnnnnr2