o
    Zh                     @   sv   d Z ddlZddlmZmZ ddlmZmZmZ ddl	Z	ddl
Z	ddlmZ G dd deZG d	d
 d
eZd
gZdS )z>ZAP Authenticator in a Python Thread.

.. versionadded:: 14.1
    N)EventThread)AnyListOptional   )Authenticatorc                       s   e Zd ZU dZejed< ejed< e	ed< dZ
eejj ed< de	dejddf fdd	Zdd
dZdd Zdee defddZ  ZS )AuthenticationThreadzgA Thread for running a zmq Authenticator

    This is run in the background by ThreadAuthenticator
    pipeloopauthenticatorNpollerreturnc                    s.   t  jdd || _|j| _|| _t | _d S )NT)daemon)super__init__r   logr
   r   started)selfr   r
   	__class__ F/var/www/html/lang_env/lib/python3.10/site-packages/zmq/auth/thread.pyr      s
   zAuthenticationThread.__init__c                 C   s\   t  }z||   W | jr| j  d| _|  dS | jr)| j  d| _|  w )z*Start the Authentication Agent thread taskN)asyncioZnew_event_loopZrun_until_complete_runr
   close)r   r   r   r   r   run*   s   


zAuthenticationThread.runc                    s   t j | _| j| jt j | j| jjt j | j	
  	 t| j I d H }| j|v r;| j }| |r;d S | jj|v rP| jj }| j|I d H  q N)zmqr   Pollerr   registerr
   POLLINr   Z
zap_socketr   setdictpollZrecv_multipart_handle_pipe_messageZhandle_zap_message)r   eventsmsgr   r   r   r   7   s   



zAuthenticationThread._runr'   c                 C   s@   |d }| j d| |dkrdS | j d| | jd dS )Nr   zauth received API command %r	   TERMINATETz!Invalid auth command from API: %rs   ERRORF)r   debugerrorr
   send)r   r'   commandr   r   r   r%   G   s   z)AuthenticationThread._handle_pipe_messager   N)__name__
__module____qualname____doc__r   Socket__annotations__r   ZAbstractEventLoopr   r   r   r   r   r   r   r   bytesboolr%   __classcell__r   r   r   r   r	      s    
 


r	   c                       s   e Zd ZU dZded< dZeed< eed< 			dd	ed
 dede	f fddZ
d fddZd fddZdefddZdddZ  ZS )ThreadAuthenticatorz-Run ZAP authentication in a background threadz
zmq.Socketr
    pipe_endpointthreadNutf-8contextzzmq.Contextencodingr   c                    s4   t  j|||d d | _dt|  d| _d | _d S )N)r<   r=   r   z	inproc://z.inproc)r   r   r
   idr9   r:   )r   r<   r=   r   r   r   r   r   \   s   
zThreadAuthenticator.__init__r   c                    s   t    | jjtjtjd| _d| j_| j	| j
 | jjtjtjd}d|_|| j
 t| |d| _| j  | jjjddsFtddS )zStart the authentication thread)Zsocket_classr   )r   r
   
   )timeoutz$Authenticator thread failed to startN)r   startr<   socketr   ZPAIRr2   r
   Zlingerbindr9   connectr	   r:   r   waitRuntimeError)r   Zthread_piper   r   r   rA   g   s   

zThreadAuthenticator.startc                    sH   | j r| j d |  r| j  d| _| j   d| _ t   dS )zStop the authentication threadr(   N)r
   r+   is_aliver:   joinr   r   stopr   r   r   r   rI   x   s   

zThreadAuthenticator.stopc                 C   s   t | jo| j S )z$Is the ZAP thread currently running?)r5   r:   rG   rJ   r   r   r   rG      s   zThreadAuthenticator.is_alivec                 C   s   |    d S r   )rI   rJ   r   r   r   __del__   s   zThreadAuthenticator.__del__)Nr;   Nr-   )r.   r/   r0   r1   r3   r9   strr	   r   r   r   rA   rI   r5   rG   rK   r6   r   r   r   r   r7   U   s&   
 r7   )r1   r   	threadingr   r   typingr   r   r   r   Zzmq.asynciobaser   r	   r7   __all__r   r   r   r   <module>   s    B
6