o
    iZ8                     @   sR  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
Z	d dlZ	d dlmZmZ zd dlZW n eyG   dZY nw ejdd Zejdd Zdd	 Zejd
d Zejdd Zejdd Zejdd ZejdG dd dZG dd deZejjejdkoejdk ddG dd deZ dd Z!dS )    N)contextmanager)SkipTest	skip_pypyc                 C   s   t jjS N)zmqasyncioContext)
event_loop r
   N/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/tests/test_auth.pyr         r   c           
      C   s   t | d }tj|d}tj|d}tj|d}t| t| t| tj|d\}}tj|d\}}t|D ]}	|		dr[t
tj||	tj|d qDt|D ]}	|		d	rxt
tj||	tj|d qa||fS )
z$Create CURVE certificates for a testcertscertificatespublic_keysprivate_keysserverclientz.key.z.key_secret)strjoinmkdirospathr   authcreate_certificateslistdirendswithshutilmove)
tmpdirbase_dirkeys_dirpublic_keys_dirsecret_keys_dirserver_public_fileserver_secret_fileclient_public_fileclient_secret_filekey_filer
   r
   r   create_certs   s4   




r)   c                 C   sH   t j| d}t j| d}tj|\}}tj|\}}||||fS )z)Return server and client certificate keyszserver.key_secretzclient.key_secret)r   r   r   r   r   load_certificate)r#   r%   r'   server_publicserver_secretclient_publicclient_secretr
   r
   r   
load_certsC   s
   r/   c                 C   s   | \}}|S r   r
   r)   r"   r#   r
   r
   r   r"   N      r"   c                 C   s   | \}}|S r   r
   r0   r
   r
   r   r#   T   r1   r#   c                 C   s   t | S r   )r/   )r#   r
   r
   r   r   Z   r   r   c                 C  s(   | j }| I dH  dV  |  dS )z+pytest doesn't support async setup/teardownN)instanceasync_setupasync_teardown)requestr	   r2   r
   r
   r   _async_setup_   s
   r6   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd+ddZe	dd Z
e	d,ddZdd Zdd Zdd Zejdg ddd Zejddejjdfddd gd!d" Zejd#dd$gejd%dd&gd'd( Zed)d* ZdS )-AuthTestNc                    sv   t j | _t  dk rtdzt   W n t jy#   tdw t	d
tj |  | _|  I d H  d S )N)   r   zsecurity is new in libzmq 4.0z.security requires libzmq to have curve supportzzmq.auth)r   r   r   contextzmq_version_infor   curve_keypairZMQErrorlogging	getLoggersetLevelDEBUG	make_authr   
start_authselfr
   r
   r   r3   m   s   
zAuthTest.async_setupc                 C   s$   | j r| j   d | _ | j  d S r   )r   stopr9   termrC   r
   r
   r   r4   z   s   
zAuthTest.async_teardownc                 C   s   t  r   )NotImplementedErrorrC   r
   r
   r   rA      s   zAuthTest.make_authc                    s   | j   d S r   )r   startrC   r
   r
   r   rB      s   zAuthTest.start_auth  c           	         s   d}d}| |}|d||f  dg}|dtjI dH  ||tjI dH rHz||tjI dH  W n tjyG   t	dt
 Y dS w dS ||I dH rwz|tjI dH }W n tjyn   t	dt
 Y |S w ||ksuJ d	}|S )
z9Check if client can connect to server using tcp transportFztcp://127.0.0.1z%s:%is   Hello Worldd   Nz#server set POLLOUT, but cannot sendz"client set POLLIN, but cannot recvT)bind_to_random_portconnectpollr   POLLOUTsend_multipartNOBLOCKAgainwarningswarnRuntimeWarningrecv_multipart)	rD   r   r   timeoutresultifaceportmsgrcvd_msgr
   r
   r   can_connect   s2   
zAuthTest.can_connectc              	   c   s    | j tj9}| j tj}d|_d|_d|_d|_||fV  W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S )Nr   i  )r9   socketr   PUSHPULLlingersndtimeorcvtimeorD   r   r   r
   r
   r   	push_pull   s   PzAuthTest.push_pullokc                 c   s    |\}}}}|   4\}}||_||_d|_|d ur2||_||_|dkr)||_n	t \}	}
|
|_||fV  W d    d S 1 sBw   Y  d S )NTre   )rd   curve_publickeycurve_secretkeycurve_servercurve_serverkeyr   r;   )rD   r   
client_keyr+   r,   r-   r.   r   r   privatepublicr
   r
   r   curve_push_pull   s   "zAuthTest.curve_push_pullc                    s   | j   d| _ | j  tj | _|  \}}| ||I dH s&J W d   n1 s0w   Y  |  \}}d|_	| ||I dH sJJ W d   dS 1 sUw   Y  dS )zthreaded auth - NULLN   global)
r   rE   r9   rF   r   r   r   rd   r\   
zap_domainrc   r
   r
   r   	test_null   s   

"zAuthTest.test_nullc                    s   | j d tt | j d W d    n1 sw   Y  |  \}}d|_| j||ddI d H r9J W d    d S 1 sDw   Y  d S )N	127.0.0.1	127.0.0.2rn   rJ   rV   )	r   denypytestraises
ValueErrorallowrd   ro   r\   rc   r
   r
   r   	test_deny   s   "zAuthTest.test_denyc                    s   | j d tt | j d W d    n1 sw   Y  |  \}}d|_| ||I d H s7J W d    d S 1 sBw   Y  d S )Nrq   rr   rn   )	r   rx   ru   rv   rw   rt   rd   ro   r\   rc   r
   r
   r   
test_allow   s   "zAuthTest.test_allowzenabled, password, success))TcorrectT)Fr{   F)T	incorrectFc                    s   |   ?\}}d|_|rd|_|d|_|r"| jjdddid |r0| ||I dH s/J n| j||d	d
I dH r=J W d   n1 sGw   Y  | j  d| _|   \}}| ||I dH sfJ W d   dS 1 sqw   Y  dS )zthreaded auth - PLAINTs   adminascii*adminr{   )domain	passwordsNrJ   rs   )	rd   plain_serverplain_usernameencodeplain_passwordr   configure_plainr\   rE   )rD   enabledpasswordsuccessr   r   r
   r
   r   
test_plain   s$   
"zAuthTest.test_plainzclient_key, location, successT)re   r   T)badr   F)Nr   Fc                    s   | j d | j||d7\}}|r!|dkr|}| j jd|d |r1| j||ddI dH s0J n| j||ddI dH r>J W d   n1 sHw   Y  | j   d| _ |  \}}| ||I dH sgJ W d   dS 1 srw   Y  dS )	threaded auth - CURVErq   rj   r   r~   r   locationrJ   rs   N)r   rx   rm   configure_curver\   rE   rd   )rD   r   r"   rj   r   r   r   r   r
   r
   r   
test_curve	  s"   
"zAuthTest.test_curvekeywrongasync_Fc           
         s   | j d |\} }G  fddd}|r|j|_| }| j j|d | |0\}}	dkr@| ||	I dH s?J n| j||	ddI dH rMJ W d   dS W d   dS 1 s`w   Y  dS )	z2threaded auth - CURVE with callback authenticationrq   c                       s,   e Zd Z fddZdd Zdd ZdS )z9AuthTest.test_curve_callback.<locals>.CredentialsProviderc                    s   dkr	 | _ d S | _ d S )Nre   r   rC   r-   r   r+   r
   r   __init__1  s   

zBAuthTest.test_curve_callback.<locals>.CredentialsProvider.__init__c                 S   s   || j krdS dS )NTFr   rD   r   r   r
   r
   r   callback7  s   
zBAuthTest.test_curve_callback.<locals>.CredentialsProvider.callbackc                    s$   t dI d H  || jkrdS dS )Ng?TF)r   sleepr   r   r
   r
   r   async_callback=  s
   
zHAuthTest.test_curve_callback.<locals>.CredentialsProvider.async_callbackN)__name__
__module____qualname__r   r   r   r
   r   r
   r   CredentialsProvider0  s    r   )credentials_providerre   N   rs   )r   rx   r   r   configure_curve_callbackrm   r\   )
rD   r   r   r   r,   r.   r   providerr   r   r
   r   r   test_curve_callback)  s   "zAuthTest.test_curve_callbackc              
      s  | j d |\}}}}| j jd|d |  \}}||_||_d|_||_||_||_| ||I dH s9J |	dI dH  |j
ddI dH }	|	jdksQJ z|	d	}
W n
 tjyb   Y n
w |
|d
kslJ dd | j _| jtjL}||_||_||_| ||I dH sJ |	dI dH  |j
ddI dH }	|	jdksJ z|	d	}
W n
 tjy   Y nw |
dksJ W d   n1 sw   Y  W d   dS W d   dS 1 sw   Y  dS )r   rq   r~   r   TNs   testF)copyzUser-Idutf8c                 S   s   dS )Ncustomr
   r   r
   r
   r   <lambda>l  s    z-AuthTest.test_curve_user_id.<locals>.<lambda>s   test2r   )r   rx   r   rd   rf   rg   rh   ri   r\   sendrecvbytesgetr   ZMQVersionErrordecodecurve_user_idr9   r]   r^   )rD   r   r"   r+   r,   r-   r.   r   r   rZ   user_idclient2r
   r
   r   test_curve_user_idN  sR   "zAuthTest.test_curve_user_id)rI   )re   )r   r   r   r   r3   r4   rA   rB   r\   r   rd   rm   rp   ry   rz   ru   markparametrizer   r   CURVE_ALLOW_ANYr   r   r   r   r
   r
   r
   r   r7   i   sB    




	#r7   c                   @      e Zd ZdZdd ZdS )TestThreadAuthentication'Test authentication running in a threadc                 C      ddl m} || jS )Nr   )ThreadAuthenticator)zmq.auth.threadr   r9   )rD   r   r
   r
   r   rA        
z"TestThreadAuthentication.make_authNr   r   r   __doc__rA   r
   r
   r
   r   r     s    r   win32)      z(flaky event loop cleanup on windows+py36)reasonc                   @   r   )TestAsyncioAuthenticationr   c                 C   r   )Nr   )AsyncioAuthenticator)zmq.auth.asyncior   r9   )rD   r   r
   r
   r   rA     r   z#TestAsyncioAuthentication.make_authNr   r
   r
   r
   r   r     s    r   c                    s   ddl m} t  ddlm} W d    n1 sw   Y  || }|j| u s,J |dd}tt	 ||d}W d    d S 1 sGw   Y  d S )Nr   )IOLoop)IOLoopAuthenticatorF)make_current)io_loop)
tornado.ioloopr   rR   catch_warningszmq.auth.ioloopr   r9   ru   warnsDeprecationWarning)r9   r	   r   r   r   r   loopr
   r
   r   test_ioloop_authenticator  s   

"r   )"r   r=   r   r   sysrR   
contextlibr   ru   r   zmq.asynciozmq.auth	zmq.testsr   r   tornadoImportErrorfixturer   r)   r/   r"   r#   r   r6   r   usefixturesr7   r   skipifplatformversion_infor   r   r
   r
   r
   r   <module>   sR   

$




	  		