
    Zd                         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e          Z G 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                        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Zdd	Zd
 Zdee         defdZ xZS )AuthenticationThreadzgA Thread for running a zmq Authenticator

    This is run in the background by ThreadAuthenticator
    pipeloopauthenticatorNpollerreturnc                     t                                                       || _        |j        | _        || _        t                      | _        d S N)super__init__r   logr   r   started)selfr   r   	__class__s      /lib/python3.11/site-packages/zmq/auth/thread.pyr   zAuthenticationThread.__init__   sC    
 	* $	ww    c                 r   t          j                    }	 |                    |                                            | j        r | j                                         d| _        |                                 dS # | j        r | j                                         d| _        |                                 w xY w)z*Start the Authentication Agent thread taskN)asyncionew_event_looprun_until_complete_runr   close)r   r   s     r   runzAuthenticationThread.run*   s     %''	##DIIKK000y !	!!! 	JJLLLLL	 y !	!!! 	JJLLLLs   'A9 9=B6c                   K   t           j                                        | _        | j                            | j        t           j                   | j                            | j        j        t           j                   | j	        
                                 	 t          | j                                         d {V           }| j        |v r0| j                                        }|                     |          rd S | j        j        |v r>| j        j                                        }| j                            |           d {V  r   )zmqr   Pollerr   registerr   POLLINr   
zap_socketr   setdictpollrecv_multipart_handle_pipe_messagehandle_zap_message)r   eventsmsgs      r   r   zAuthenticationThread._run7   s0     k((**TY
333T/:CJGGG	A 0 0 2 222222233FyF""i..00,,S11 F!,66(3BBDD(;;C@@@@@@@@@	Ar   r/   c                     |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/   commands      r   r,   z)AuthenticationThread._handle_pipe_messageG   sd    a&5w???l""4 HNN>HHHINN8$$$ur   r   N)__name__
__module____qualname____doc__r#   Socket__annotations__r   AbstractEventLoopr	   r   r   r$   r   r!   r   r   bytesboolr,   __classcell__r   s   @r   r   r      s          
 *

####    +/FHS['(///
$
 j
 
	
 
 
 
 
 
   A A A U         r   r   c                        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Z
d fdZd fdZdefdZddZ xZS )ThreadAuthenticatorz-Run ZAP authentication in a background threadz
zmq.Socketr    pipe_endpointthreadNutf-8contextzzmq.Contextencodingr   c                     t                                          |||           d | _        dt          |            d| _        d | _        d S )N)rH   rI   r   z	inproc://z.inproc)r   r   r   idrE   rF   )r   rH   rI   r   r   s       r   r   zThreadAuthenticator.__init__\   sO     	8EEE	:D:::r   r   c                 f   t                                                       | j                            t          j        t          j                  | _        d| j        _        | j        	                    | j
                   | j                            t          j        t          j                  }d|_        |                    | j
                   t          | |          | _        | j                                         | j        j                            d          st!          d          dS )zStart the authentication thread)socket_classr   )r   r   
   )timeoutz$Authenticator thread failed to startN)r   startrH   socketr#   PAIRr;   r   lingerbindrE   connectr   rF   r   waitRuntimeError)r   thread_piper   s     r   rP   zThreadAuthenticator.startg   s     	 L''sz'JJ			t)***l))#()LLD.///*KPPP{"'''33 	GEFFF	G 	Gr   c                 2   | j         rn| j                             d           |                                 r| j                                         d| _        | j                                          d| _         t                                                       dS )zStop the authentication threadr1   N)r   r4   is_aliverF   joinr    r   stop)r   r   s    r   r\   zThreadAuthenticator.stopx   sz    9 	INN<(((}} #  """DKIOODIr   c                 \    t          | j        o| j                                                  S )z$Is the ZAP thread currently running?)r?   rF   rZ   r   s    r   rZ   zThreadAuthenticator.is_alive   s%    DK:DK$8$8$:$:;;;r   c                 .    |                                   d S r   )r\   r^   s    r   __del__zThreadAuthenticator.__del__   s    		r   )NrG   Nr6   )r7   r8   r9   r:   r<   rE   strr   r   r   r   rP   r\   r?   rZ   r`   r@   rA   s   @r   rC   rC   U   s        77
M3     ,0		 	-(	 	 		 	 	 	 	 	G G G G G G"	 	 	 	 	 	<$ < < < <       r   rC   )r:   r   	threadingr   r   typingr   r   r   r#   zmq.asynciobaser	   r   rC   __all__ r   r   <module>rh      s      # # # # # # # # & & & & & & & & & & 



          ? ? ? ? ?6 ? ? ?D3 3 3 3 3- 3 3 3l !
!r   