
    Mh              
       t   d Z 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Zddlm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlZddlmZmZ dZd	gZd
 eD             Z ej        ej                            ddej         d                    Zej                            de          dedeeef         ddfd            Z ej                            de          dedeeef         ddfd            Z! ej"        d          dej#        de	eeef         ddf         fd            Z$d Z%	 ddedede&de
e'         fdZ(dS )z@Integration tests of authorization running under jupyter-server.    N)	GeneratorOptionalTuple)	HTTPErrorURLError)urlopen   )KNOWN_SERVERSextra_node_rootsz	127.0.0.1z/lsp/statusc                     g | ]}d | S )z/lsp/ws/ ).0lss     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_lsp/tests/test_auth.py
<listcomp>r      s    555___555    JLSP_TEST_SUBPROCESS_PREFIXz["z", "-m"]routea_server_url_and_tokenreturnc                 :   |\  }}t          ||            t          ||  d| d          }|J d|              d}	 t          j        |                    d                     n## t          j        j        $ r}|}Y d}~nd}~ww xY w|rJ d|  d|             dS )zBVerify a REST route only provides access to an authenticated user.z?token=   Nzno response received from utf-8zthe response for z was not JSON: )verify_responsejsonloadsdecodedecoderJSONDecodeError)r   r   base_urltokenraw_bodydecode_errorerrs          r   test_auth_restr%      s     -OHeHe$$$xE)A)A%)A)A3GGH!Ee!E!EL
8??7++,,,,<'   UUUUU|UUUUUUUs   'A& &B:BBc                 2    t          |d         |            dS )zFVerify a WebSocket does not provide access to an unauthenticated user.r   N)r   )r   r   s     r   test_auth_websocketr'   .   s      *1-u55555r   module)scopetmp_path_factoryc              #   j  K   t          t          j                              }t                      }|                     d          }|                     d          }|dz  }|j                            d           dddd}||d}i t                      }|d	|i|d
}	|                    t          j
        |	          d           g t          dd| d}
t          d|
           t          t          j                  }|                    t          |          t          |          t          |j                             t#          j        |
t          |          |t"          j                  }dt(           d| }d}d}|sX|rV	 t+          | d          }n># t,          $ r1 t          d| dd           |dz  }t/          j        d           Y nw xY w|s|V|st3          d          ||fV  	 t          d           t+          | d| g            np# t,          $ rc t          d           |                                 |                    d            |                                 |                                 Y nw xY w|                                 |j        
J d"            d!S )#z+Start a temporary, isolated jupyter server.root_dirhomezetc/jupyter/jupyter_config.jsonT)parentsF)jupyter_lsp
jupyterlab	nbclassic)jpserver_extensionsr!   r!   )	ServerAppIdentityProviderLanguageServerManagerr   )encodingjupyter_serverz--port=z--no-browserzserver args)HOMEUSERPROFILEJUPYTER_CONFIG_DIR)cwdenvstdinzhttp://:   z/favicon.ico[z
 / 20] ...)flushr	   zthe server did not startzshutting down with API...z/api/shutdown?token=)datazshutting down the hard way...s   y
Nz%jupyter-server probably still running)struuiduuid4get_unused_portmktempparentmkdirr   
write_textr   dumpsSUBPROCESS_PREFIXprintdictosenvironupdate
subprocessPopenPIPE	LOCALHOSTr   r   timesleepRuntimeError	terminatecommunicatewaitkill
returncode)r*   r!   portr,   r-   server_conf
extensionsapplsmconfig_dataargsr<   procurlretriesoks                   r   r   r   4   s'     
 
ED&&z22H""6**D::KT***!%UOOJ",u
=
=C
 
 C$e,!$ K 4:k22WEEESS 0S2BD2B2BSNSD	-
rz

CJJYYII{122    
 Dc(mmJOTTTD
&I
&
&
&
&CG	B W 	C---..BB 	 	 	)g)))6666qLGJqMMMMM	  W   75666
u*)***333E33"=====   -...   				 	IIKKK?&&(O&&&&&s%   F 8GG8%H A*J
Jc                     t          j         t           j        t           j                  } |                     t          df           |                     d           |                                 d         }|                                  |S )zGet an unused port by trying to listen to any random port.

    Probably could introduce race conditions if inside a tight loop.
    r   r	   )socketAF_INETSOCK_STREAMbindrU   listengetsocknameclose)sockr^   s     r   rF   rF   n   sg    
 =);<<DIIy!nKKNNNa DJJLLLKr     r    expect_codec                    d}d}|  | }	 t          |          }|                                }|                                }n+# t          $ r}|                                }Y d}~nd}~ww xY w||k    sJ d| d| d|             |S )z2Verify that a response returns the expected error.NzHTTP z (not expected z) for )r   getcodereadr   )r    r   rs   bodycoderf   resr$   s           r   r   r   {   s     DD
u

Ccll{{}}xxzz   {{}}; U U U[ U UPS U UKs   7A 
A,A''A,)rr   ))__doc__r   rO   rj   rR   sysrV   rD   typingr   r   r   urllib.errorr   r   urllib.requestr   pytestconftestr
   r   rU   REST_ROUTES	WS_ROUTESr   rP   get
executablerL   markparametrizerC   r%   r'   fixtureTempPathFactoryr   rF   intbytesr   r   r   r   <module>r      sl   F F  				      



   - - - - - - - - - - , , , , , , , , " " " " " "  5 5 5 5 5 5 5 5	o55}555	DJJNN02S2S2S2STT  
 +..V# VuS#X V4 V V V /.V& ),,6s 6E#s(O 6PT 6 6 6 -,6
 h6P,6PuS#Xd*+6P 6P 6P  6Pr
 
 
 36 ,/e_     r   