
    Xh              
       |   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eD  cg c]  } d
|  	 c} Z ej0                  ej2                  j5                  ddej6                   d            Zej:                  j=                  de      dedeeef   ddfd       Z ej:                  j=                  de      dedeeef   ddfd       Z! ejD                  d      dejF                  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(yc c} w )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/statusz/lsp/ws/JLSP_TEST_SUBPROCESS_PREFIXz["z", "-m"]routea_server_url_and_tokenreturnc                 &   |\  }}t        ||        t        ||  d| d      }|
J d|         d}	 t        j                  |j                  d             |rJ d|  d|        y# t        j                  j
                  $ r}|}Y d}~4d}~ww xY w)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          O/var/www/html/myenv/lib/python3.12/site-packages/jupyter_lsp/tests/test_auth.pytest_auth_restr      s     -OHeHe$xE7'%)A3GHE#=eW!EEL

8??7+, U0|nUU| <<'' s   $A' 'BBBc                 "    t        |d   |        y)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    module)scopetmp_path_factoryc              #     K   t        t        j                               }t               }| j	                  d      }| j	                  d      }|dz  }|j
                  j                  d       dddd}||d}i t               }|d	|i|d
}	|j                  t        j                  |	      d       g t        dd| d}
t        d|
       t        t        j                        }|j!                  t        |      t        |      t        |j
                               t#        j$                  |
t        |      |t"        j&                        }dt(         d| }d}d}|s|r	 t+        | d      }|s|r|st3        d      ||f 	 t        d       t+        | d| g        |j9                          |j<                  J d"       y!# t,        $ r. t        d| dd       |dz  }t/        j0                  d       Y w xY w# t,        $ rO t        d       |j5                          |j7                  d        |j9                          |j;                          Y w xY ww)#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argsr7   procurlretriesoks                   r   r   r   4   sX    
 

ED&&z2H""6*D::KT*!%UOJ",u
=C
 
 C$e,!$K 4::k2WESS 0SGD62BSNSD	-
rzz
CJJYI{112  
 Dc(mJOOTDI;av
&CG	BW	C5-.B W 566
u*)*3%+E73"= 	IIK??&O(OO&#  	AgYj)6qLGJJqM	  -. 				sU   E#I#&G 4I#9I#H *$I#4HI#HI#AI I#I  I#c                      t        j                   t         j                  t         j                        } | j                  t        df       | j                  d       | j                         d   }| j                          |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bindrP   listengetsocknameclose)sockrY   s     r   rA   rA   n   sZ    
 ==););<DIIy!nKKNa DJJLKr"   r   expect_codec                     d}d}|  | }	 t        |      }|j                         }|j                         }||k(  sJ d| d| d|        |S # t        $ r}|j                         }Y d}~5d}~ww xY w)z2Verify that a response returns the expected error.NzHTTP z (not expected z) for )r   getcodereadr   )r   r   rm   bodycodera   resr   s           r   r   r   {   s     DDJug
Ccl{{}xxz ;U%v_[MPSu UUK  {{}s   +A 	A1A,,A1)i  ))__doc__r   rJ   re   rM   sysrQ   r?   typingr   r   r   urllib.errorr   r   urllib.requestr   pytestconftestr
   r   rP   REST_ROUTES	WS_ROUTESr   rK   get
executablerG   markparametrizer>   r   r!   fixtureTempPathFactoryr   rA   intbytesr   )lss   0r   <module>r      s   F  	   
   - - , "  5	o'45xt_5	DJJJJNN0b8H2ST 
 +.V# VuS#X V4 V /V& ),6s 6E#s(O 6PT 6 -6
 h6P,,6PuS#Xd*+6P  6Pr
 36,/e_O 6s   D9