o
    `j                     @  s   d Z ddlmZ ddlmZ ddlZddlZddlZddlm	Z	 ddl
mZ ddl
mZ ddlmZmZ e	r<ddlmZ eeZG d	d
 d
ZG dd deZG dd dZG dd dZdS )zUser management mixin for KafkaAdminClient.

Also defines ScramMechanism, UserCredentialDeletion,
and UserCredentialUpsertion data classes.
    )annotations)IntEnumN)TYPE_CHECKING)IllegalArgumentError) AlterUserScramCredentialsRequest#DescribeUserScramCredentialsRequest)KafkaConnectionManagerc                   @  s>   e Zd ZU dZded< dd Zdd Zdd	d
ZdddZdS )UserAdminMixinz=Mixin providing user management methods for KafkaAdminClient.r   _managerc           	        s   g }g }|D ]2}t |tr||jt|jf qt |tr1||jt|j|j|j|j	f qt
dt|j t||d}| j|I d H }i }|jD ]}|jrV|jnd ||j< qN|S )NzWalterations must be UserScramCredentialDeletion or UserScramCredentialUpsertion, got %s)	deletions
upsertions)
isinstanceUserScramCredentialDeletionappenduserint	mechanismUserScramCredentialUpsertion
iterationssaltsalted_passwordr   type__name__r   r
   sendresults
error_codeerror_message)	selfalterationsr   r   altrequestresponseretresult r$   P/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/admin/_users.py#_async_alter_user_scram_credentials    s8   


z2UserAdminMixin._async_alter_user_scram_credentialsc                 C     | j | j|S )ao  Alter SCRAM credentials for one or more users.

        Arguments:
            alterations: A list of UserScramCredentialDeletion and/or
                UserScramCredentialUpsertion objects describing the
                credentials to delete and/or insert/update.

        Returns:
            A dict mapping user name -> error message (or None on success).
        )r
   runr&   )r   r   r$   r$   r%   alter_user_scram_credentials>   s   z+UserAdminMixin.alter_user_scram_credentialsNc                   s   |d u rd }ndd |D }t |d}| j|I d H }t|j}|tjur0|d|jf i }|jD ]}|jrD|jg d||j	< q5d dd |j
D d||j	< q5|S )Nc                 S  s   g | ]}|fqS r$   r$   ).0r   r$   r$   r%   
<listcomp>O   s    zIUserAdminMixin._async_describe_user_scram_credentials.<locals>.<listcomp>)usersz.DescribeUserScramCredentialsRequest failed: %s)errorcredential_infosc                 S  s   g | ]}t |j|jd qS ))r   r   )ScramMechanismr   r   )r*   cir$   r$   r%   r+   c   s    )r   r
   r   Errorsfor_coder   NoErrorr   r   r   r.   )r   r,   users_fieldr    r!   
error_typer"   r#   r$   r$   r%   &_async_describe_user_scram_credentialsK   s2   



z5UserAdminMixin._async_describe_user_scram_credentialsc                 C  r'   )a  Describe SCRAM credentials for one or more users.

        Arguments:
            users (list of str, optional): User names to describe. If None,
                describe all users with SCRAM credentials.

        Returns:
            A dict mapping user name to a dict with keys
            ``'error'`` (None or error message) and ``'credential_infos'``
            (list of {'mechanism': ScramMechanism, 'iterations': int}).
        )r
   r(   r6   )r   r,   r$   r$   r%   describe_user_scram_credentialsm   s   z.UserAdminMixin.describe_user_scram_credentials)N)	r   
__module____qualname____doc____annotations__r&   r)   r6   r7   r$   r$   r$   r%   r	      s   
 
"r	   c                   @  s$   e Zd ZdZdZdZedd ZdS )r/   r         c                 C  s   t jdt jdi|  S )Nsha256sha512)r/   SCRAM_SHA_256SCRAM_SHA_512r   r$   r$   r%   	hash_name   s
   zScramMechanism.hash_nameN)r   r8   r9   UNKNOWNr@   rA   propertyrC   r$   r$   r$   r%   r/   |   s    r/   c                   @  s    e Zd ZdZdd Zdd ZdS )r   zSpecifies that a SCRAM credential should be deleted.

    Arguments:
        user (str): The user name.
        mechanism (ScramMechanism or int or str): The SCRAM mechanism to
            delete for this user.
    c                 C  sB   t |tst |trt| dd }nt|}|| _|| _d S )N-_)r   r/   strupperreplacer   r   )r   r   r   r$   r$   r%   __init__   s   


z$UserScramCredentialDeletion.__init__c                 C  s   d| j  d| jj dS )NzUserScramCredentialDeletion(, ))r   r   namerB   r$   r$   r%   __repr__   s   z$UserScramCredentialDeletion.__repr__N)r   r8   r9   r:   rK   rO   r$   r$   r$   r%   r      s    	r   c                   @  s&   e Zd ZdZdZdddZdd ZdS )	r   aH  Specifies that a SCRAM credential should be inserted or updated.

    Arguments:
        user (str): The user name.
        mechanism (ScramMechanism or int or str): The SCRAM mechanism.
        password (bytes or str): The plaintext password. The salted
            password sent to the broker is derived via PBKDF2-HMAC using
            the given salt and iteration count.

    Keyword Arguments:
        iterations (int, optional): PBKDF2 iteration count. Default: 4096.
        salt (bytes, optional): Salt to use. If omitted, a random 24-byte
            salt is generated.
    i   Nc                 C  s   t |tst |trt| dd }nt|}|tjkr"td|| _|| _|d ur.|n| j	| _
|d ur8|ntd| _t |trH|d}t|j|| j| j
| _d S )NrF   rG   z#SCRAM mechanism must not be UNKNOWN   zutf-8)r   r/   rH   rI   rJ   rD   r   r   r   DEFAULT_ITERATIONSr   osurandomr   encodehashlibpbkdf2_hmacrC   r   )r   r   r   passwordr   r   r$   r$   r%   rK      s   





z%UserScramCredentialUpsertion.__init__c                 C  s    d| j  d| jj d| j dS )NzUserScramCredentialUpsertion(rL   z, iterations=rM   )r   r   rN   r   rB   r$   r$   r%   rO      s
   
z%UserScramCredentialUpsertion.__repr__)NN)r   r8   r9   r:   rQ   rK   rO   r$   r$   r$   r%   r      s
    
r   )r:   
__future__r   enumr   rU   loggingrR   typingr   kafka.errorserrorsr1   r   kafka.protocol.adminr   r   kafka.net.managerr   	getLoggerr   logr	   r/   r   r   r$   r$   r$   r%   <module>   s"    
`