
    1yik                         d dl Z d dlmZmZmZmZmZ d dlmZ	 d dl
mZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZ  G d	 d
      Zy)    N)AnyListDictOptionalUnion)_msgs)commandInt)SimpleErrorOK	casematchSimpleString)VersionType)
FakeServer)AccessControlList
ClientInfoget_categoriesget_commands_by_categoryc            
           e Zd Zdededdf fdZedeeef   fd       Zede	fd       Z
ded	ee   defd
ZdededdfdZ edeefeef      dedefd       Z eddef      dedefd       Z eddef      dedee   fd       Z eddef      dedefd       Z edefef      dededefd       Z eddd      dee   fd       Z edefd      dedefd       Z edefd      dedeeeee   f      fd       Z eddd      dee   fd        Z ed!dd      defd"       Z ed#dd      defd$       Z ed%dd      defd&       Z ed'def      dedeeeeeef      f   fd(       Z  xZ!S ))AclCommandsMixinargskwargsreturnNc                 8    t        t        | 
  |i | |  |  |  y N)superr   __init__)selfr   r   	__class__s      e/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/acl_mixin.py__initzAclCommandsMixin.__init   s!    .??    c                 .    | j                   j                  S r   )_serverconfigr   s    r    _server_configzAclCommandsMixin._server_config   s    ||"""r"   c                 .    | j                   j                  S r   )r$   aclr&   s    r    _aclzAclCommandsMixin._acl   s    ||r"   usernamepasswordc                 V    | j                   j                  |      j                  |      S r   )r*   get_user_aclcheck_password)r   r+   r,   s      r    _check_user_passwordz%AclCommandsMixin._check_user_password   s"    yy%%h/>>xHHr"   c                    | j                   j                  |      }|D ]  }t        |d      r|j                          !t        |d      r|j	                          >t        |d      rd|_        Rt        |d      rd|_        ft        |d      r|j                          t        |d      r|j                          t        |d	      rd
}net        |d      rd}nVt        |d      rd}nGt        |d      rd}n8|d   t        d      k(  r'|d   t        d      k(  r|j                  |dd        |d   }|t        d      k(  r|j                  |dd         =|t        d      k(  r|j                  |dd         a|t        d      k(  r|j                  |dd         |t        d      k(  r|j                  |dd         |t        d      k(  s|t        d      k(  r|j                  |       |t        d      k(  r|j                  |dd         |t        d      k(  s|j!                  |dd         " y )Ns   resetchannelss	   resetkeyss   onTs   offFs   nopasss   resets
   nocommandss   -@alls   allcommandss   +@alls   allkeyss   ~*s   allchannelss   &*r   ()   ><#!+-~&)r*   r.   r   reset_channels_patternsreset_key_patternsenabled
set_nopassresetordadd_selectoradd_passwordremove_passwordadd_password_hexremove_password_hexadd_command_or_categoryadd_key_patternadd_channel_pattern)r   r+   r   user_aclargprefixs         r    _set_user_aclzAclCommandsMixin._set_user_acl   s   99))(3 -	6C./0023-++-3&#' 3'#( 3	*##%3) 3.3/3
+3/Q3s8#B3s8(;%%c!Bi0VFS!%%c!"g.3s8#((QR13s8#))#ab'23s8#,,SW53s8#vS'90053s8#((QR13s8#,,SW5[-	6r"   
CONFIG SET)namefixedrepeatc                     t        |      dz  dk7  r(t        t        j                  j	                  d            t        dt        |      d      D ]  }||dz      | j                  ||   <    t        S )N   r   rP   r5   )lenr   msgsWRONG_ARGS_MSG6formatranger'   r   )r   r   is      r    
config_setzAclCommandsMixin.config_setO   sk    t9q=Ad2299,GHHq#d)Q' 	7A+/A;DQ(	7	r"   AUTH c                    dt        |      cxk  rdk  s*n t        t        j                  j	                  d            t        |      dk(  rd n|d   }t        |      dk(  r|d   n|d   }||dk(  r4|| j
                  j                  dd      k(  rd| j                  d	<   t        S |xs d}t        |      dk\  r5| j                  ||      r#|j                         | j                  d	<   t        S | j                  j                  d
d
d|| j                  j                                t        t        j                        )Nr5   rU   r]   r   s   defaults   requirepassr"   defaultusers   auths   AUTH)rV   r   rW   rX   rY   r'   get_client_infor   r0   decoder*   add_log_recordas_bytesAUTH_FAILURE)r   r   r+   r,   s       r    _authzAclCommandsMixin._authW   s   CI""d2299&ABBt9>4tAw!$i1n47$q'J 6XI\I\I`I`aoqtIu=u(1Df%I)zt9>d77(K(0(9Df%I		  '7HdFWFWF`F`Fbc$++,,r"   zACL CATcategoryc                     t        |      dk(  rt               }|S t        |d         }|D cg c]  }|j                  dd       }}|S c c}w )Nr          |)rV   r   r   replace)r   ri   rescmds       r    acl_catzAclCommandsMixin.acl_catg   sU    x=A "C 
 +8A;7C69:s3;;tT*:C:
 ;s   A
zACL GENPASSc                     t        |      dkD  rt        j                  |d         nd}||dz  z   }|dz  }t        j                  |      j                         S )Nr            )rV   r
   rd   secrets	token_hexencode)r   r   bitsnbytess       r    acl_genpasszAclCommandsMixin.acl_genpassp   sP    &)$i!mszz$q'"dQhai  (//11r"   zACL SETUSERc                 4     | j                   |g|  t        S r   )rO   r   )r   r+   r   s      r    acl_setuserzAclCommandsMixin.acl_setuserw   s    8+d+	r"   zACL LISTc                 6    | j                   j                         S r   )r*   as_rulesr&   s    r    acl_listzAclCommandsMixin.acl_list|   s    yy!!##r"   zACL DELUSERc                 D    | j                   j                  |       t        S r   )r*   del_userr   )r   r+   s     r    acl_deluserzAclCommandsMixin.acl_deluser   s    		8$	r"   zACL GETUSERc                 X    | j                   j                  |      j                         }|S r   )r*   r.   as_array)r   r+   rn   s      r    acl_getuserzAclCommandsMixin.acl_getuser   s$    ii$$X.779
r"   z	ACL USERSc                 :    | j                   j                         }|S r   )r*   	get_users)r   rn   s     r    	acl_userszAclCommandsMixin.acl_users   s    ii!!#
r"   z
ACL WHOAMIc                 .    | j                   j                  S r   )rc   ra   r&   s    r    
acl_whoamizAclCommandsMixin.acl_whoami   s      %%%r"   zACL SAVEc                 6   d| j                   vrt        t        j                        | j                   d   }t	        |d      5 }|j                  dj                  | j                  j                                      d d d        t        S # 1 sw Y   t        S xY w)N   aclfilewb   
)
r'   r   rW   MISSING_ACLFILE_CONFIGopenwritejoinr*   r~   r   )r   acl_filenamefs      r    acl_savezAclCommandsMixin.acl_save   sy    T000d99::**:6,% 	6GGEJJtyy11345	6		6	s   9B

BzACL LOADc                 n   d| j                   vrt        t        j                        | j                   d   }t	        |d      5 }|j                         }|D ]  }|j                  d      s|j                  d      }g }d}|t        |      k  rn||   }|j                  d      r3|j                  d      s"|dz  }|d||   z   z  }|j                  d      s"|j                  |       |dz  }|t        |      k  rn | j                  |d   g|dd     	 d d d        t        S # 1 sw Y   t        S xY w)	Nr   rbs   user rk   r5      (   )r   )r'   r   rW   r   r   	readlines
startswithsplitrV   endswithappendrO   r   )	r   r   r   
rules_listrulesplitted
componentsr[   current_components	            r    acl_loadzAclCommandsMixin.acl_load   sI   T000d99::**:6,% 	CJ" Cx0::d+
#h-'(0%(33D9"3"<"<T"BFA-1CC- #4"<"<T"B %%&78FA #h-' #"":a=B:ab>BC	C$ 	%	C$ 	s   BD&$D&<D&&D4zACL LOGc                    t        |      dk(  r/t        |d   d      r | j                  j                          t        S t        |      dk(  rt        j                  |d         nd}| j                  j                  |      S )Nr5   r   s   RESET)rV   r   r*   	reset_logr   r
   rd   log)r   r   counts      r    acl_logzAclCommandsMixin.acl_log   s`    t9>iQ:II!I'*4yA~

47#1yy}}U##r"   )"__name__
__module____qualname__r   _AclCommandsMixin__initpropertyr   bytesr'   r   r*   r   boolr0   rO   r	   r   r\   rh   r   rp   rz   r|   r   r   r   r   r   r   r   r   strr   __classcell__)r   s   @r    r   r      s   &C &3 &4 & #UE\ 2 # #  '    IU Ihuo IRV I/6e /6E /6d /6b ,ueneU^L ,  M &E84-5 -\ - 5- )2uh7 4;  8 -r5(;2 25 2 <2 -xAE % L  B *Br2$$u+ $ 3$ -x;E l  < -x;E d5U9K3L.M  < +R34;  4 ,b4&E & 5& *Br2,  3 *Br2,  30 )2uh7$U $u\4S#X;O-O'P $ 8$r"   r   )ru   typingr   r   r   r   r   	fakeredisr   rW   fakeredis._commandsr	   r
   fakeredis._helpersr   r   r   r   fakeredis._typingr   fakeredis._serverr   fakeredis.modelr   r   r   r   r   r^   r"   r    <module>r      s2     3 3 # , G G ) ( c co$ o$r"   