wo4h ddlZddlmZddlmZmZddlmZddlm Z ddl m Z ddl m Z dd lmZejeZd ed ed ed efdZd edeed edeefdZd ed efdZdeed efdZdZdS)N)chain)ListAny)hooks)FeatureManagementPerms)instance)execute_iterable_expression)featuresuserfeaturevaluereturncKtj5}tj|}|||t j|}|||}|rt d|||n1t d|||| |cdddS#1swxYwYdS)zSets a `feature` to `value` for a given `user`. Calls appropriate hook and returns its (bool) result. Logs the result of setting change. If hook fails rollbacks changes to database. z!Applied setting %s=%s for user %sz)Failed to apply setting %s=%s for user %sN) rdbatomicrget_perm set_featurerget_hookloggerinfoerrorrollback)r r rtrxpermhookoks ]/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/feature_management/utils.pyrrs%     %.t44 %(((~g&& T$    KK3WeT     LL;     LLNNN#sBC  CCusersexisting_userscKggd}|D]p}||vrtd|"t|||d{Vr|d|U|d|q|S)N) succeededfailedzNo such user: %sr"r#)rwarningrappend)r rrr resultr s r update_usersr'(s , ,F** ~ % % NN-t 4 4 4 T7E22 2 2 2 2 2 2 * ;  & &t , , , , 8  # #D ) ) ) ) McKtj}|||tj|}|d|SN)r get_defaultrrr)r rrrs rupdate_defaultr,:sK ! - / /DWe$$$ >' " "D 4e  r(cKt|}tjtj}tt |}||z }|tj|r;t d|d}t|t|||z }|rt d||D]U}tj |}tD]7}||} tj|} | || 8Vt#|pt#|S)z1Synchronize existing permissions with panel userszRemove permissions of users %sctjtj|Sr*)rdeletewherer in_)perms_to_removes r expressionzsync_users..expressionNs7)02288&+//@@ r(zAdd permissions to users %s)setrselectr rtuplesremoveDEFAULTrrr listrr get_featurerrbool) r panel_users perm_usersr2r3 perms_to_addr rr rcallbacks r sync_usersr@As[e**K'./E/JKKJUJ--//011J ;.O19:::G 4oFFF    $J_0E0EFFF+LA 1<@@@""%.t44 " "G$$W--E~g..H HT5 ! ! ! ! "    6o!6!66r(cJKtttjtjtjtjk}|D].}|jD]\}}t|||d{V/dS)zlSets feature values for all existing users in feature management database to given values in `features`.N) r9rrr5r r0r8r6itemsr)r rr r rs rreset_featuresrCds  # *+A+F G G U&+/E/MMVXX    E44,hn.. 4 4NGUdGU33 3 3 3 3 3 3 3 3 444r()logging itertoolsrtypingrr"defence360agent.feature_managementr(defence360agent.feature_management.modelrdefence360agent.modelrdefence360agent.utilsr lookupr getLogger__name__rstrr;rr'r,r@rCr(rrPsr444444KKKKKK******======  8 $ $C#cd4 c+.@DS $#c 7DI 7$ 7 7 7 7F44444r(