a~bܞddlmZddlmZmZddlmZddlmZddl m Z ddl m Z ddl mZddl mZmZdd lmZeeZd Ze d Zd ZGd deZd!dZd"dZddd#dZddd$dZGdd ZdS)%) annotations)AbstractEventLoopEvent)Callable) getLogger)Path)Any)r)InotifyWatcher)recurring_check)cphulklfdmodsecossecz$/etc/imunify360/rules/disabled-rules ceZdZdS)_RuleParsingErrorN)__name__ __module__ __qualname__W/opt/imunify360/venv/lib/python3.11/site-packages/im360/subsys/shared_disabled_rules.pyrrsDrrlinestrreturntuple[str, int]cd|vrtd|dd}t|dkr tdt|d|d}|t vrtd |d |d } t |}n&#t$r}td |d |d}~wwxYw||fS) N:z#Delimiter ':' is not found in rule:)maxsplitz'Wrong amount of fields, 3 expected but z found:rzUnknown plugin ID value 'z':zInvalid rule ID value ')rsplitlenstriplower _PLUGIN_NAMESint ValueError)rfields plugin_id rule_valuerule_iderrors r _parse_ruler0s $ EFFF ZZaZ ( (F 6{{a Jc&kk J J J   q !!''))I %% KI K K KLLLJj//  6j 6 6 6    g s/B?? C" CC"pathrdict[str, set[int]]c |std|iSi}|d5}t |dD]\}}|x}s t |\}}||t |e#t$r4}t d||t|Yd}~d}~wt$rtd||YwxYw dddn #1swxYwY|S)Nz4Config '%s' with shared disabled rules is not found.rt)moder#)startz %s:%d: %s.z%s:%d)is_filelogdebugopen enumerater&r0 setdefaultsetaddrwarningr Exception exception) r1result rules_fileline_noraw_linerr,r.r/s r _load_rulesrF3s <<>> B     F   A!*:Q!?!?!? A A GX$NN,,,D  A%0%6%6" 7!!)SUU3377@@@@%     JJ   6 6 6 gtW55555 6 AAAAAAAAAAAAAAAA" MsH .D69C 6D6 D& *C:5D6:)D&#D6%D&&D66D:=D:Nr1 Path | Noneset[int]cnt|ptdtS)Nr)rF _DEFAULT_PATHgetr=rGs r$get_shared_disabled_modsec_rules_idsrMOs+ t,} - - 1 1(CEE B BBrlist[dict[str, Any]]cg}t|ptD]&\}|fd|D'|S)z Returns list of the rules, extracted from "disabled-rules" file in the format, like {"plugin": "modsec", "rule_id": 1234} c3"K|] }|dV dS))pluginr.Nr).0r. plugin_names r z1get_shared_disabled_rules_list..`s?  #w 7 7      r)rFrKitemsextend)r1rules plugin_rulesrSs @rget_shared_disabled_rules_listrYUs#%E%0  && egg  ! \      '        LrcleZdZddddd Zdd Zdd ZeddZdZddZ ddZ dS)DisabledRulesWatcherN)r1 on_change_cblooprr1rr\Callable[..., None]c||_t|_|pt|_|jjd|_i|_d|_ d|_ | |dS)Nascii) _DisabledRulesWatcher__cbr_DisabledRulesWatcher__eventrK_DisabledRulesWatcher__pathnameencode_DisabledRulesWatcher__name_DisabledRulesWatcher__rules_DisabledRulesWatcher__watcher_DisabledRulesWatcher__task_DisabledRulesWatcher__start)selfr]r1r\s r__init__zDisabledRulesWatcher.__init__hsi! ww +m k&--g66    Trc|jjx}std|dSt |j|_t||j|_ |j t| dtjtjztjz|||_dS)Nz4Shared disabled rules directory '%s' does not exist.) coro_callbackr`)rcparentis_dirr8r/rFrgr #_DisabledRulesWatcher__on_io_notifyrhwatchrrer CLOSE_WRITEMOVED_TODELETE create_task%_DisabledRulesWatcher__process_eventsri)rkr]dir_paths r__startzDisabledRulesWatcher.__startxs K..6688  IIF    F"4;//  T5HIII  MM  ) )  '"2 2W^ C   &&t'<'<'>'>?? rio_eventIEventc`K|j|jkr|jdSdSN)rdrfrbr=)rkrzs r__on_io_notifyz#DisabledRulesWatcher.__on_io_notifys9 =DK ' ' L        ( 'rrc&K |jd{V|jn#|jwxYwt|j|_|j|dSdSr})rbwaitclearrFrcrgrarks r__process_eventsz%DisabledRulesWatcher.__process_eventss !,##%% % % % % % % % L   DL   "4;// 9 IIKKKKK ! s =Ac|j|j|j|jdSdSr})ricancelrhclosers rrzDisabledRulesWatcher.closesH ; " K   > % N " " " " " & %rr,rr.r)rboolcT||j|tvSr})rgrLr=)rkr,r.s rmatchzDisabledRulesWatcher.matchs#$,**9cee<<<rs"""""",,,,,,,,$$$$$$;;;;;;<<<<<<<<111111i ;<<         *: CCCCCC $:4:4:4:4:4:4:4:4:4:4r