ZSs}ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z ddl mZddlmZddlmZejdZeGdd ZGd d ZdS) N) dataclass)OptionalDictList)drop_user_privileges) socket_utils)run_in_cagefs_if_neededz^[1-9][0-9]*\ZceZdZUeed<eed<eed<eed<eed<eed<dZe eed<dZ e eed <dS) EnableFeatureTaskuiddomainwp_pathfeature ignore_errorstimeout_timestampN advice_idpid) __name__ __module__ __qualname__int__annotations__strlistboolrrr(py/clwpos/daemon_subscription_handler.pyr r s HHH KKK LLLMMM $Ix}###C#rr ceZdZdZdZdZdZddZdZdZ d Z dd e j d e j fd Z d e j d e defdZd e j dedefdZdS)PendingSubscriptionWatcherzr Listen to set-suite and user events in order to automatically enable module when suite is purchased. Nclt|_|ptjt|_dSN)dict_pending_enable_taskslogging getLoggerr_logger)selfloggers r__init__z#PendingSubscriptionWatcher.__init__:s-JN"<!28!>>F L  Df M M M M, U U U L " "$@AB18 U U U U U U U U O O O L " "#M N N N N N O =#((4..99999s,AC,&B'CCc ||jr-|dddt|jgdS|jrl|jD]b}|jd|ddd|d|jd |jg}|jr| d ||cdStjd dS) Nz&/opt/alt/php-xray/cl-smart-advice-userapplyz --advice_idz*activate feature in background: feature=%szcloudlinux-awp-userenablez --featurez--domainz --wp-pathz--ignore-errorsz;Task does not have any advice or domain specified, skipping) rrHrr rr*r6rrappendr()r+taskfcmds r_run_enable_commandz.PendingSubscriptionWatcher._run_enable_commandas > X  % %8's4>22'     [ X\ / / !!"NPQRRR)8   %2JJ0111))#.... / / LV W W W W Wrclient_socket_obj daemon_socketc| |t|jD]\}}t|D]}t j}|rh|jd|||_t j |d|jd|| | || | ddl m }ttj|jjdd||j fd|jD}|D]} |jd|  fd |jD|_|js-t jd t jddS||t jd#t jdwxYw||jvr|j|s|j|=d d i} t-j|| dS) Nz!background process forked: pid=%drz#background process finished: pid=%d)get_allowed_modulesT)effective_or_realset_envcg|]}|v| Srr.0rNallowed_featuress r zEPendingSubscriptionWatcher.suite_allowed_callback..s$%[%[%[AJZAZAZaAZAZAZrzCunable to activate feature in background: feature=%s is not allowedcg|]}|v| SrrrXs rr[zEPendingSubscriptionWatcher.suite_allowed_callback..s$'Y'Y'Ya1HXCXCXCXCXCXrresultsuccess)r9rr'r/r1forkr*r6rwaitpidr4closeclwpos.feature_suitesrTrpwdgetpwuidr pw_namer_exitrPr(send_dict_to_socket_connection_and_close) r+rQrRr tasksrMfprT disallowedrNresponserZs @rsuite_allowed_callbackz1PendingSubscriptionWatcher.suite_allowed_callbackvso ##%%%t9??AABB$ 4$ 4JC U  $ $WYY$L%%&I2NNN!DHJr1%%%L%%&KRPPPLL&&&&$(4)//111)//111MMMMMM,S\$(-C-C-K?CTSSSS+>+>tx+H+H(%[%[%[%[%[%[%[ !+xxA L--.suvwwww'Y'Y'Y'Y4<'Y'Y'Y #|#HQKKK" 00666  d0009STW9X0.s3 i  =>OQYZZZZZsCG*?G**H user_requestr cT|ddlm}m}ddlm}d|D}|dd}|D]&} | |vr dd| zd } tj|| dS'| d } | Et| } t | sdd d } tj|| dS|d } | 4t| |jkrdd d } tj|| dS| r3d| dvrddd } tj|| dS|d} t| | dukrddd } tj|| dS| r@||}d||D}| |vrddd } tj|| dS||jvr g|j|<|j|}|D]u}|j| krh|j| kr]t'|jt'|kr8|j| kr-|j|dkrddi} tj|| dSvt||jkrddd } tj|| dS|j|t3|| | ||d| t5t7j|jz|jd|j|ddi} tj|| dS)Nr)get_main_username_by_uid userdomains)ALL_OPTIMIZATION_FEATURESc6h|]}|Sr)to_interface_name)rYrNs r zFPendingSubscriptionWatcher.add_pending_upgrade_task..s$SSSA!--//SSSrr,errorzunknown feature: %s)r]contextrzinvalid advice_id formatrzwp_path is too longz../z1invalid wp_path: must not contain '..' componentsr z'domain and wp_path must be set togetherch|]\}}|Srr)rYd_s rrtzFPendingSubscriptionWatcher.add_pending_upgrade_task..s@@@$!QA@@@rz"domain does not belong to the userrr]r^ztoo many pending tasks)r r rrrrrz7Successfully added pending upgrade subscription task %s)r9clcommon.cpapirorp%clwpos.optimization_features.featuresrqsplitrrggetr _ADVICE_ID_REmatchlen_MAX_WP_PATH_LENGTHrr'r rsetrrr_MAX_PENDING_TASKS_PER_UIDrLr rr0_FEATURE_STATUS_CHECK_TIMEOUTr*r6)r+rQrmr rorprqknown_featuresrequested_featuresrNrkrrr username user_domainspendingexistings radd_pending_upgrade_taskz3PendingSubscriptionWatcher.add_pending_upgrade_tasks ##%%%HHHHHHHHSSSSSSSS9RSSS))4::3??#  A&&,3@UXY@Y!Z!ZEFWYabbb' !$$[11  II &&y11 ,3@Z![![EFWYabbby)  3w<<$2J#J#J(/OQYZZZZZrrc||j|g}dtt fd|Dd}t j||dS)Nr^c3*K|] }|jvVdSr%)r)rYr8rs r zEPendingSubscriptionWatcher.get_upgrade_task_status..s+bbL<+? ?bbbbbbr)r]r)r9r'rranyrrg)r+rQr rr7rks ` rget_upgrade_task_statusz2PendingSubscriptionWatcher.get_upgrade_task_statuss ##%%%266sB??  CbbbbTabbbbbcc   =>OQYZZZZZrr%)rrr__doc__rrrr-r9rHrPsocketrlr&rrrrrrrr r .s$ %(!!#====iii( : : :XXX,?C-[-[ -[.4m-[-[-[-[^U[&-U[W[U[beU[U[U[U[n[[S[[^[[[[[[rr )r(r1rcrerr>r0 dataclassesrtypingrrrclcommon.clpwdrclwposr clwpos.utilsr compilerr r rrrrs9  !!!!!!''''''''''//////000000 ,--   4V[V[V[V[V[V[V[V[V[V[r