
    h                         S r SSKrSSKJrJr  SSKJrJrJr  SSK	r	SSK
r	SSKJr   " S S\5      r " S	 S
\5      rS
/rg)z>ZAP Authenticator in a Python Thread.

.. versionadded:: 14.1
    N)EventThread)AnyListOptional   )Authenticatorc                      ^  \ rS rSr% Sr\R                  \S'   \R                  \S'   \
\S'   Sr\\R                  R                     \S'   S\
S\R                  SS4U 4S	 jjrSS
 jrS rS\\   S\4S jrSrU =r$ )AuthenticationThread   z_A Thread for running a zmq Authenticator

This is run in the background by ThreadAuthenticator
pipeloopauthenticatorNpollerreturnc                 x   > [         TU ]  SS9  Xl        UR                  U l        X l        [        5       U l        g )NT)daemon)super__init__r   logr   r   started)selfr   r   	__class__s      bC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\zmq/auth/thread.pyr   AuthenticationThread.__init__   s6    
 	%* $$	w    c                    [         R                  " 5       n UR                  U R                  5       5        U R                  (       a!  U R                  R                  5         SU l        UR                  5         g! U R                  (       a!  U R                  R                  5         SU l        UR                  5         f = f)z*Start the Authentication Agent thread taskN)asyncionew_event_looprun_until_complete_runr   close)r   r   s     r   runAuthenticationThread.run*   sy     %%'	##DIIK0yy		! 	JJL	 yy		! 	JJLs   A9 9AB=c                   #    [         R                  R                  5       U l        U R                  R	                  U R
                  [         R                  5        U R                  R	                  U R                  R                  [         R                  5        U R                  R                  5          [        U R                  R                  5       I S h  vN 5      nU R
                  U;   a1  U R
                  R                  5       nU R                  U5      (       a  g U R                  R                  U;   aG  U R                  R                  R                  5       nU R                  R                  U5      I S h  vN   M   N N7fN)zmqr   Pollerr   registerr   POLLINr   
zap_socketr   setdictpollrecv_multipart_handle_pipe_messagehandle_zap_message)r   eventsmsgs      r   r!   AuthenticationThread._run7   s    kk((*TYY

3T//::CJJG 0 0 223FyyF"ii..0,,S11!!,,6((33BBD((;;C@@@ 2 As%   CFFB%F;F<FFr3   c                     US   nU R                   R                  SU5        US:X  a  gU R                   R                  SU5        U R                  R	                  S5        g)Nr   zauth received API command %r	   TERMINATETz!Invalid auth command from API: %rs   ERRORF)r   debugerrorr   send)r   r3   commands      r   r0   )AuthenticationThread._handle_pipe_messageG   sQ    a&5w?l" HHNN>HIINN8$r   )r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r'   Socket__annotations__r   AbstractEventLoopr	   r   r   r(   r   r#   r!   r   bytesboolr0   __static_attributes____classcell__r   s   @r   r   r      s    
 **

#
##  +/FHS[[''(/
$
 jj
 
	
A U   r   r   c                      ^  \ rS rSr% SrS\S'   Sr\\S'   \\S'      SS\	S	   S
\S\
4U 4S jjjrSU 4S jjrSU 4S jjrS\4S jrSS jrSrU =r$ )ThreadAuthenticatorU   z-Run ZAP authentication in a background threadz
zmq.Socketr    pipe_endpointthreadcontextzzmq.Contextencodingr   c                 f   > [         TU ]  XUS9  S U l        S[        U 5       S3U l        S U l        g )N)rP   rQ   r   z	inproc://z.inproc)r   r   r   idrN   rO   )r   rP   rQ   r   r   s       r   r   ThreadAuthenticator.__init__\   s:     	E	(D
':r   r   c                 j  > [         TU ]  5         U R                  R                  [        R
                  [        R                  S9U l        SU R                  l        U R                  R                  U R                  5        U R                  R                  [        R
                  [        R                  S9nSUl        UR                  U R                  5        [        XS9U l        U R                  R                  5         U R                  R                  R                  SS9(       d  [!        S5      eg)zStart the authentication thread)socket_classr   )r   r   
   )timeoutz$Authenticator thread failed to startN)r   startrP   socketr'   PAIRrB   r   lingerbindrN   connectr   rO   r   waitRuntimeError)r   thread_piper   s     r   rY   ThreadAuthenticator.startg   s     	 LL''szz'J					t))*ll))#(()LD../*P{{""'''3EFF 4r   c                 (  > U R                   (       ar  U R                   R                  S5        U R                  5       (       a  U R                  R	                  5         SU l        U R                   R                  5         SU l         [        TU ]  5         g)zStop the authentication threadr6   N)r   r9   is_aliverO   joinr"   r   stop)r   r   s    r   rf   ThreadAuthenticator.stopx   sZ    99IINN<(}}  "DKIIOODIr   c                 n    [        U R                  =(       a    U R                  R                  5       5      $ )z$Is the ZAP thread currently running?)rF   rO   rd   r   s    r   rd   ThreadAuthenticator.is_alive   s#    DKK:DKK$8$8$:;;r   c                 $    U R                  5         g r&   )rf   ri   s    r   __del__ThreadAuthenticator.__del__   s    		r   )r   rN   rO   )Nzutf-8Nr<   )r=   r>   r?   r@   rA   rC   rN   strr   r   r   r   rY   rf   rF   rd   rl   rG   rH   rI   s   @r   rK   rK   U   ss    7
M3   ,0		-(	 	 		 	G"	<$ < r   rK   )rA   r   	threadingr   r   typingr   r   r   r'   zmq.asynciobaser	   r   rK   __all__ r   r   <module>ru      sE     # & & 
  ?6 ?D3- 3l !
!r   