o
    `j                     @   sz   d dl Z zd dlZd dlZd dlZd dlZW n ey!   dZY nw ddlmZ d dlm	Z	 e 
eZG dd deZdS )    N   )SaslMechanism)KafkaConfigurationErrorc                   @   sH   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )SaslMechanismSSPIr         c                 K   s   t d u rtdd|vrd|vrtdd| _d| _|dd d ur*t|d | _n|ddp5|dd}|d d	 | | _d
}tj	tj
B tjB tjB }t j|| j|d| _| jd | _d S )NzNo GSSAPI lib available (sspi)sasl_kerberos_namesasl_kerberos_service_namezWsasl_kerberos_service_name or sasl_kerberos_name required for GSSAPI sasl configurationFsasl_kerberos_domain_name host/Kerberos)	targetspnscflags)sspiRuntimeErrorr   _is_done_is_authenticatedgetstrauth_idsspiconISC_REQ_MUTUAL_AUTHISC_REQ_INTEGRITYISC_REQ_SEQUENCE_DETECTISC_REQ_CONFIDENTIALITY
ClientAuth_client_ctxstep_next_token)selfconfigkerberos_domain_nameschemeflags r&   Q/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/net/sasl/sspi.py__init__   s*   zSaslMechanismSSPI.__init__c                 C   s   | j jr
d| _d| _| jpdS )NT    )r   authenticatedr   r   r    r!   r&   r&   r'   
auth_bytes2   s   
zSaslMechanismSSPI.auth_bytesc           	      C   s   t dt| | jjs8| j|\}}t|dkr.t|d jr.t d |d j| _d S t d d| _d S | jrE|dkrCt	dd S | j
|\}}| j}|d }t||@ |d d | jdg}| jd|d	| _d S )
Nz$Received token from server (size %s)r   zGot token from contextzGot no token, exchange finishedr)   z:Unexpected receive auth_bytes after sasl/gssapi completionr   zutf-8F)logdebuglenr   r*   	authorizeBufferr    r   
ValueErrorunwrapSASL_QOP_AUTHbytesr   encodewrapjoin)	r!   r,   errorauthmsg_was_encryptedclient_flagsserver_flagsmessage_partsr&   r&   r'   receive<   s(   






zSaslMechanismSSPI.receivec                 C      | j S N)r   r+   r&   r&   r'   is_doneh      zSaslMechanismSSPI.is_donec                 C   rA   rB   )r   r+   r&   r&   r'   is_authenticatedk   rD   z"SaslMechanismSSPI.is_authenticatedc                 C   s   d| j j| j jf S )Nz4Authenticated as %s to %s via SASL / SSPI/GSSAPI \o/)r   initiator_nameservice_namer+   r&   r&   r'   auth_detailsn   s   zSaslMechanismSSPI.auth_detailsN)__name__
__module____qualname__r4   SASL_QOP_AUTH_INTSASL_QOP_AUTH_CONFr(   r,   r@   rC   rE   rH   r&   r&   r&   r'   r      s    
,r   )loggingr   
pywintypesr   win32securityImportErrorabcr   kafka.errorsr   	getLoggerrI   r-   r   r&   r&   r&   r'   <module>   s    
