
    <ik                         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dS )    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                 T     t          t          |           j        |i | |  |  |  d S N)superr   __init__)selfr   r   	__class__s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/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                 \    | j                             |                              |          S r   )r*   get_user_aclcheck_password)r   r+   r,   s      r    _check_user_passwordz%AclCommandsMixin._check_user_password   s&    y%%h//>>xHHHr"   c                    | j                             |          }|D ]}t          |d          r|                                 (t          |d          r|                                 Mt          |d          rd|_        et          |d          rd|_        }t          |d          r|                                 t          |d          r|                                 t          |d	          rd
}nt          |d          rd}nwt          |d          rd}ndt          |d          rd}nQ|d         t          d          k    r8|d         t          d          k    r|	                    |dd                    d|d         }|t          d          k    r|
                    |dd                     |t          d          k    r|                    |dd                     |t          d          k    r|                    |dd                     |t          d          k    r|                    |dd                     4|t          d          k    s|t          d          k    r|                    |           q|t          d          k    r|                    |dd                     |t          d          k    r|                    |dd                     d S )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   9))(33 -	6 -	6C.// 002223-- ++---3&& #' 3'' #( 3	** ##%%%3))    3.. 
3// 3
++ 3// Q3s88##B3s88(;(;%%c!B$i000VFS!!%%c!""g....3s88##((QRR11113s88##))#abb'22223s88##,,SW55553s88##vS'9'90055553s88##((QRR11113s88##,,SW555[-	6 -	6r"   
CONFIG SET)namefixedrepeatc                    t          |          dz  dk    r,t          t          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   sx    t99q=Ad299,GGHHHq#d))Q'' 	7 	7A+/A;DQ((	r"   AUTH c                    dt          |          cxk    rdk    s.n t          t          j                            d                    t          |          dk    rd n|d         }t          |          dk    r|d         n|d         }||dk    r0|| j                            dd          k    rd| j        d	<   t          S |pd}t          |          dk    r9| 	                    ||          r#|
                                | j        d	<   t          S | j                            d
d
d|| 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   sH   CII""""""""d299&AABBBt99>>44tAw!$ii1nn477$q'J 6 6XI\I`I`aoqtIuIu=u=u(1Df%I)zt99>>d77(KK>(0(9(9Df%I	  '7HdFWF`F`FbFbccc$+,,,r"   zACL CATcategoryc                     t          |          dk    rt                      }n!t          |d                   }d |D             }|S )Nr   c                 :    g | ]}|                     d d          S )       |)replace).0cmds     r    
<listcomp>z,AclCommandsMixin.acl_cat.<locals>.<listcomp>m   s&    :::s3;;tT**:::r"   )rV   r   r   )r   ri   ress      r    acl_catzAclCommandsMixin.acl_catg   sI    x==A ""CC*8A;77C::c:::C
r"   zACL GENPASSc                     t          |          dk    rt          j        |d                   nd}||dz  z   }|dz  }t          j        |                                          S )Nr            )rV   r
   rd   secrets	token_hexencode)r   r   bitsnbytess       r    acl_genpasszAclCommandsMixin.acl_genpassp   s[    &)$ii!mmsz$q'"""dQhai ((//111r"   zACL SETUSERc                 ,     | j         |g|R   t          S r   )rO   r   )r   r+   r   s      r    acl_setuserzAclCommandsMixin.acl_setuserw   s"    8+d++++	r"   zACL LISTc                 4    | j                                         S r   )r*   as_rulesr&   s    r    acl_listzAclCommandsMixin.acl_list|   s    y!!###r"   zACL DELUSERc                 D    | j                             |           t          S r   )r*   del_userr   )r   r+   s     r    acl_deluserzAclCommandsMixin.acl_deluser   s    	8$$$	r"   zACL GETUSERc                 ^    | j                             |                                          }|S r   )r*   r.   as_array)r   r+   rr   s      r    acl_getuserzAclCommandsMixin.acl_getuser   s(    i$$X..7799
r"   z	ACL USERSc                 8    | j                                         }|S r   )r*   	get_users)r   rr   s     r    	acl_userszAclCommandsMixin.acl_users   s    i!!##
r"   z
ACL WHOAMIc                     | j         j        S r   )rc   ra   r&   s    r    
acl_whoamizAclCommandsMixin.acl_whoami   s     %%r"   zACL SAVEc                 <   d| j         vrt          t          j                  | j         d         }t	          |d          5 }|                    d                    | j                                                             d d d            n# 1 swxY w Y   t          S )N   aclfilewb   
)
r'   r   rW   MISSING_ACLFILE_CONFIGopenwritejoinr*   r   r   )r   acl_filenamefs      r    acl_savezAclCommandsMixin.acl_save   s    T000d9:::*:6,%% 	6GGEJJty113344555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	s    A BBBzACL LOADc                    d| j         vrt          t          j                  | j         d         }t	          |d          5 }|                                }|D ]}|                    d          s|                    d          }g }d}|t          |          k     r||         }|                    d          r=|	                    d          s(|dz  }|d||         z   z  }|	                    d          (|
                    |           |dz  }|t          |          k      | j        |d         g|dd          R   	 d d d            n# 1 swxY w Y   t          S )	Nr   rbs   user rl   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   s   T000d9:::*:6,%% 	CJ" C Cx00 ::d++
#h--''(0%(33D99 D"3"<"<T"B"B DFA-1CC- #4"<"<T"B"B D %%&7888FA #h--'' #":a=B:abb>BBBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C$ 	s    C?EEEzACL LOGc                 &   t          |          dk    r6t          |d         d          r | j                                         t          S t          |          dk    rt          j        |d                   nd}| j                            |          S )Nr5   r   s   RESET)rV   r   r*   	reset_logr   r
   rd   log)r   r   counts      r    acl_logzAclCommandsMixin.acl_log   sv    t99>>iQ::>I!!!I'*4yyA~~
47###1y}}U###r"   )"__name__
__module____qualname__r   _AclCommandsMixin__initpropertyr   bytesr'   r   r*   r   boolr0   rO   r	   r   r\   rh   r   rs   r}   r   r   r   r   r   r   r   r   r   strr   __classcell__)r   s   @r    r   r      s}       &C &3 &4 & & & & & & #UE\ 2 # # # X#  '       X IU Ihuo IRV I I I I/6e /6E /6d /6 /6 /6 /6b W,ueneU^LLL ,    ML W&E8444-5 -\ - - - 54- W)2uh777 4;    87 W-r5(;;;2 25 2 2 2 <;2 W-xAAAE % L    BA W*Br222$$u+ $ $ $ 32$ W-x;;;E l    <; W-x;;;E d5U9K3L.M    <; W+R3334;    43 W,b444&E & & & 54& W*Br222,    32 W*Br222,    320 W)2uh777$U $u\4S#X;O-O'P $ $ $ 87$ $ $ $ $r"   r   )rx   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      s
    3 3 3 3 3 3 3 3 3 3 3 3 3 3 # # # # # # , , , , , , , , G G G G G G G G G G G G ) ) ) ) ) ) ( ( ( ( ( ( c c c c c c c c c c c co$ o$ o$ o$ o$ o$ o$ o$ o$ o$r"   