wo4hp5ddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddlm Z mZmZmZmZddlZddlmZddlmZddlmZddlmZmZmZdd lmZd Ze d Z ej!e"Z#d Z$ed de%fdZ&dZ'Gdde(Z)Gdde(Z*Gdde)Z+ddZ,GddZ-GddZ.dZ/dS)N) defaultdict)Path) parse_qsl urlencodeurljoinurlparse urlunparse)ANTIVIRUS_MODE) LicenseCLN) HostingPanel) CheckRunErrorasync_lru_cache check_run) get_hostnamei,z/usr/sbin/ie-configzpwget -qq -O - https://repo.imunify360.cloudlinux.com/defence360/imunifyemail-deploy.sh | bash -s 'is-supported')maxsizereturncK ttdd{VnM#t$r@}|jdkr*tdt |Yd}~dSd}~wwxYwdS)NT)shelldzimunify-email check failed F)rIE_SUPPORTED_CMDr returncodeloggererrorstr)es R/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/internals/cln.pyis_imunify_email_supportedrs(55555555555  <3   LL?s1vv?? @ @ @uuuuu 4s! A+5A&&A+cKtrdStsdS tt tdgd{V}n#t $rYdSwxYwd|vS)zTry to get imunify-email statusFstatusNz&spamfilter exim configuration: enabled)r _IMUNIFY_EMAIL_CONFIG_EXECUTABLEexistsrrr decode)outputs rget_imunify_email_statusr%*su + 2 2 4 4u 1 2 2H =         uu 3v}} FFs)A A A ceZdZddZdZdS)CLNErrorNc"||_||_dSNmessager )selfr r+s r__init__zCLNError.__init__:s  cR|jr|jSd|jS)Nz#Unexpected status code from CLN: {})r+formatr r,s r__str__zCLNError.__str__>s* < < 4;;DKHHHr.)NN)__name__ __module__ __qualname__r-r2r.rr'r'9s<IIIIIr.r'ceZdZdS)InvalidLicenseErrorN)r3r4r5r6r.rr8r8EsDr.r8c*eZdZdZdZdZdZdZdS)BackupNotFoundi@c||_dSr)url)r,r=s rr-zBackupNotFound.__init__Ls r.cdS)NzBackup not found in CLNr6r1s rr2zBackupNotFound.__str__Os((r.c "|jdSt|j}tt|j}||d<t |j|j|j |j t||j fS)N used_space) r=rdictrquery _disk_usager schemenetlocpathparamsrfragment)r,purBs radd_used_spacezBackupNotFound.add_used_spaceRs 8  F dh  Yrx(())"..00l   %       r.cNd}tj}t}|D]i}|j|vr^d|jvrU|jds;|tj|jjz }| |jjt||j z S)Nrnoautoz /dev/loop) psutildisk_partitionssetdeviceopts startswith disk_usage mountpointusedaddroundGB)r, total_used partitions processedps rrCzBackupNotFound._disk_usagees +-- EE  ( (A**QV++,,[99,f/ ==BB  ah'''Z$')***r.N)r3r4r5rXr-r2rJrCr6r.rr:r:IsU B)))   & + + + + +r.r:c  i}|||d<|t|tr|dddint|tr.|d}|dddinJt j|d}|dddi||d < t j t jj |fi|| }|5|j d kr|j dfcdddS|j d vr | } |j tj|fcdddS#tj$r'}t#d |d|j |j |d}~wwxYw#t$j$rt)dwxYwt#|j #1swxYwYdS#t$j$rt)dt*$r}t-|dr|j dkrt#|j |d}|jwt0d||||j |j | } n"#t$j$rt)dwxYw| d}t#||j |t0d|||||d}~wwxYw)z!To be used by RestCLN._request().Nheaders Content-typezapplication/octet-streamzutf-8ztext/plain; charset=utf-8asciiz!application/x-www-form-urlencodeddata)timeout)zNon-json data from CLN: z for code=r*zTimed out reading responsezTimed out receiving responsecodeiz,CLN.post(url=%r, data=%r, headers=%r): %d %szTimed out reading error messagereplace)errorsz5CLN.post(url=%r, data=%r, headers=%r, timeout=%r): %s) isinstancebytes setdefaultrencodeurllibparserrequesturlopenRequestrfreadjsonloadsr#JSONDecodeErrorr'socketrb TimeoutErrorOSErrorhasattrfprwarningreason) r=rar^rbkwargsrespcontentrr+ resp_datas r _post_requestrts F#y  dE " "    N,FG    c " " ;;w''D   N,GH    <))$//66w??D   !DE   v<*~%% N "3 1 1& 1 17&  L * *yCy$ * * * * * * * *j((!"iikkG !#y$*W^^5E5E*F*FF * * * * * * * * /!!!&!57!5!5)-!5!5$(9  ! !! ~EEE&'CDDDEty)))+ * * * * * * * * * *G >;;;9:::  1f   v||qv&&A-GtBFH J !II~JJJ&'HIIIJ$**)*<<716::: A NNG     ?sz 6G:G-& G-0F7,E>>F4 "F//F44G-7GG--G14G1:'L !A"LJLJ88ALL ceZdZdZdZdZdZej de eZ e e dZ e e dZe e dZe e d Ze e d Ze e d Zd Zd ZeddeddZedZededefdZe ddededefdZededefdZedefdZededefdZ eddZ!dS)RestCLNzhttps://{domain}/api/im/zcln.cloudlinux.comzipv6.cln.cloudlinux.comIM360_CLN_API_BASE_URLdomainregister unregistercheckinzab/credentialsz ab/removezab/checkokzok-trialN)rar^rbcrKtjdt||||d{VSr))asyncioget_event_looprun_in_executorr)clsr=rar^rbs r_requestzRestCLN._requestsR+--== -dGW         r.cKt|j|jd}ddi} |||d{V\}}ns#t $rf}|jdkrOt|j|jd}|||d{V\}}n|Yd}~nd}~wwxYw|S)NrrkeyIPLrai)r_URL_PATH_TEMPLATEr0_IPV4_DOMAIN_NAMErr'r _IPV6_DOMAIN_NAME)rv4_license_urlra_token cln_errorv6_license_urls rprocess_ipl_licencezRestCLN.process_ipl_licences  " ) )1F ) G G   u~  \\.t\DDDDDDDDHAuu 3&&!(*11"42 """%n4!H!HHHHHHH555555  s A C!ACCrrcK|dkr|d{VS||jd|id{V\}}|S)z Register server with key :param key: registration key :return: license token in case of success rNrr)rr _REGISTER_URL)rrrrs rrzRestCLN.registersl %<<0022222222 2c&7uclKKKKKKKK5 r. server_id users_counthostnamec"K|p t}td{V}t} |d{V}nH#t$r;}t dt|d|j}Yd}~nd}~wwxYw|||||dtd{Vidd}tj |} t d| | |j| d d i d{V\} } | S) z Update license token :param str server_id: server id :param int users_count: users count :param str hostname: current server hostname :return: dict new license token NzFailed to get panel version: %sT)exc_infoIM_EMAIL)userspanel imunifyEmailsupported_features)idrimzCLN checkin: %sr_zapplication/json)rar^)rr%r name ExceptionrrrNAMErrsdumpsinfor _CHECKIN_URL) rrrrimunify_email_statusr panel_namerreqrarrs rrzRestCLN.checkins~-|~~%=%?%??????? $$zz||++++++JJ $ $ $ LL13q66D    JJJJJJ  $ $# 4&@&B&B B B B B B B'    z# %t,,,  #%78&        5  sA B1BBcXK||jd|id{V\}}|S)zl Creates Acronis Backup account and get user & password :param server_id: server id rrN)r_ACRONIS_CREDENTIALS_URL)rrrcredss racronis_credentialszRestCLN.acronis_credentials6sV   (i/@&        5 r.cRK||jd|id{VdS)zT Removes Acronis Backup account :param server_id: server id rrN)r_ACRONIS_REMOVE_URLrrs racronis_removezRestCLN.acronis_removeAs> ll32$ 9JlKKKKKKKKKKKr.cK||jd|id{V\}}|dkrtd|S)z If Acronis account exists return backup size in GB or if backups not exists URL for backups :param server_id: server id rrNrer<)r_ACRONIS_CHECK_URLr:)rrr responses r acronis_checkzRestCLN.acronis_checkIsq"%  "$ ):"." "        S== T*** *r.c|K|ptj}||jd|id{VdS)z< Unregister server id :return: None rrN)r get_server_idr_UNREGISTER_URLrs rrzRestCLN.unregisterWsQ ;!9!;!; ll3.dI5FlGGGGGGGGGGGr.r))"r3r4r5r_BASE_DOMAIN_NAMErrosenvirongetr0 _BASE_URLrrrrrrrSTATUS_OK_PAID_LICENSESTATUS_OK_TRIAL_LICENSE classmethod_TIMEOUTrrrrArintrrrrrr6r.rrrs=3,1  !!):!;;IGIz22Mgi66O79i00L&wy2BCC!')[99 J77!()-tX    [ [,     [   ++++ +++[+Z#$[LSLLL[L C D   [ HHH[HHHr.rceZdZeeZedZedZedZ edZ edZ edZ dS)CLNcF|j||dSr)) _CALLBACKSrV)r method_name coro_callbacks radd_callback_forzCLN.add_callback_fords# {#'' 66666r.c K|j|D]h} |d{V#tj$rt$r9}td|||Yd}~ad}~wwxYwdS)Nz;Error '{!r}' happened when run callback {} forCLN {} method)rrCancelledErrorrr exceptionr0)rrcallbackrs rrun_callbacks_forzCLN.run_callbacks_forhs{3  H hjj        )        $$*F1h $D$D   s$A6/A11A6c,|dS)NIMAVP)rR)rrs r is_avp_keyzCLN.is_avp_keyus~~g&&&r.cK||rtstdt|d{V}t j|s5t|dd{Vtdt j|| dd{VdS)Nz4Imunify360 can not be registered with ImunifyAV+ keyrz"License is invalid for this serverr) rr r8rrr is_validrupdater)rrlicenses rrz CLN.registerys >>#   ~ %F  ((--------"7++ L$$WT]33 3 3 3 3 3 3 3%&JKK K'"""##J///////////r.cKtd{Vtj|dd{VdS)Nr)rrr deleter)rs rrzCLN.unregisterse  """""""""##L11111111111r.c$KtjrtjStjdrtjSt|dtjd{V}td|| t d{Vntj || dd{VtjS)z>Refreshes token and returns new one on success, None otherwiseis_alternativerNzGot new token from CLN: %s refresh_token) r is_free get_tokenrrrrrrrrrr)rr new_tokens rrzCLN.refresh_tokens      *')) )   ! ! % %&6 7 7 *')) )!//%+z7MNNNNNNNN  0)<<<  .."" " " " " " " " "  i ( ( (##O444444444#%%%r.N) r3r4r5rrOrrrrrrrrr6r.rrrasS!!J77[7  [ ''[' 0 0[ 022[2 &&[&&&r.rcHdD]}t||dS)N)rrr)r)rr)corors rsubscribe_to_license_changesrs7B>>  [====>>r.)NNN)0rrsloggingrrv urllib.errorrm urllib.parseurllib.request collectionsrpathlibrrrrrr rM defence360agent.contracts.configr !defence360agent.contracts.licenser +defence360agent.subsys.panels.hosting_panelr defence360agent.utilsr rrdefence360agent.utils.commonrrr! getLoggerr3rrboolrr%rr'r8r:rrrrr6r.rrs  ######LLLLLLLLLLLLLL ;;;;;;888888DDDDDDKKKKKKKKKK555555 #'4(=#>#>  8 $ $ $ G G G I I I I Iy I I I     )   (+(+(+(+(+X(+(+(+VR*R*R*R*jUHUHUHUHUHUHUHUHp@&@&@&@&@&@&@&@&F>>>>>r.