Ë
    +Œ:j"  ã                   óÈ   — 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m	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZ ej*                  edf   Z G d„ d	e«      Z G d
„ d«      Zy)é    N)Ú	parsedate)ÚURLÚHeaders)ÚHTTPException)ÚFileResponseÚRedirectResponseÚResponse)ÚReceiveÚScopeÚSendzos.PathLike[str]c                   ó(   ‡ — e Zd ZdZdefˆ fd„Zˆ xZS )ÚNotModifiedResponse)zcache-controlzcontent-locationÚdateÚetagÚexpiresÚvaryÚheadersc           	      ó”   •— t         ‰| �  d|j                  «       D ��ci c]  \  }}|| j                  v r||“Œ c}}¬«       y c c}}w )Ni0  )Ústatus_coder   )ÚsuperÚ__init__ÚitemsÚNOT_MODIFIED_HEADERS)Úselfr   ÚnameÚvalueÚ	__class__s       €úW/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/starlette/staticfiles.pyr   zNotModifiedResponse.__init__   sQ   ø€ Ü‰ÑØð $+§=¡=£?÷á�D˜%Ø˜4×4Ñ4Ñ4ð �e‘óð 	õ 	
ùós   ŸA)Ú__name__Ú
__module__Ú__qualname__r   r   r   Ú__classcell__)r   s   @r   r   r      s   ø„ ðÐð
 ÷ 
ñ 
ó    r   c                   ój  — e Zd Zddddddœdej                  e   dej                  ej                  ej                  eej                  eef   f         de
de
d	e
d
dfd„Z	 	 ddej                  e   dej                  ej                  ej                  eej                  eef   f         d
ej                  e   fd„Zdededed
dfd„Zded
efd„Zdeded
efd„Zded
ej                  eej                  ej*                     f   fd„Z	 ddedej*                  deded
ef
d„Zdd„Zdeded
e
fd„Zy) ÚStaticFilesNFT)Ú	directoryÚpackagesÚhtmlÚ	check_dirÚfollow_symlinkr&   r'   r(   r)   r*   Úreturnc                óà   — || _         || _        | j                  ||«      | _        || _        d| _        || _        |r2|�/t        j                  j                  |«      st        d|› d�«      ‚y y y )NFúDirectory 'z' does not exist)r&   r'   Úget_directoriesÚall_directoriesr(   Úconfig_checkedr*   ÚosÚpathÚisdirÚRuntimeError)r   r&   r'   r(   r)   r*   s         r   r   zStaticFiles.__init__'   su   € ð #ˆŒØ ˆŒØ#×3Ñ3°I¸xÓHˆÔØˆŒ	Ø#ˆÔØ,ˆÔÙ˜Ð.´r·w±w·}±}ÀYÔ7OÜ ¨Y¨KÐ7GÐHÓIÐIð 8PÐ.ˆ9r#   c                 ó  — g }|�|j                  |«       |xs g D ]ã  }t        |t        «      r|\  }}nd}t        j                  j                  |«      }|€J d|›d�«       ‚|j                  €J d|›d�«       ‚t        j                  j                  t        j                  j                  |j                  d|«      «      }t        j                  j                  |«      sJ d|›d|›d�«       ‚|j                  |«       Œå |S )z�
        Given `directory` and `packages` arguments, return a list of all the
        directories that should be used for serving static files from.
        ÚstaticszPackage z could not be found.z..r-   z' in package )ÚappendÚ
isinstanceÚtupleÚ	importlibÚutilÚ	find_specÚoriginr1   r2   ÚnormpathÚjoinr3   )r   r&   r'   ÚdirectoriesÚpackageÚstatics_dirÚspecÚpackage_directorys           r   r.   zStaticFiles.get_directories;   s  € ð ˆØÐ Ø×Ñ˜yÔ)à’~ 2ò 	2ˆGÜ˜'¤5Ô)Ø'.Ñ$�™à'�Ü—>‘>×+Ñ+¨GÓ4ˆDØÐ#ÐO x°¨{Ð:NÐ%OÓOÐ#Ø—;‘;Ð*ÐV¨h°w°kÐAUÐ,VÓVÐ*Ü "§¡× 0Ñ 0Ü—‘—‘˜TŸ[™[¨$°Ó<ó!Ðô —7‘7—=‘=Ø!ôð Yà˜[˜O¨=¸¸ÐCWÐXóYð ð ×ÑÐ0Õ1ð	2ð  Ðr#   ÚscopeÚreceiveÚsendc              ƒ   óü   K  — |d   dk(  sJ ‚| j                   s| j                  «       ƒ d{  –—†  d| _         | j                  |«      }| j                  ||«      ƒ d{  –—† } ||||«      ƒ d{  –—†  y7 ŒI7 Œ7 Œ	­w)z'
        The ASGI entry point.
        ÚtypeÚhttpNT)r0   Úcheck_configÚget_pathÚget_response)r   rE   rF   rG   r2   Úresponses         r   Ú__call__zStaticFiles.__call__\   s�   è ø€ ð �V‰} Ò&Ð&Ð&à×"Ò"Ø×#Ñ#Ó%×%Ð%Ø"&ˆDÔà�}‰}˜UÓ#ˆØ×*Ñ*¨4°Ó7×7ˆÙ�u˜g tÓ,×,Ñ,ð &øð 8øØ,ús3   ‚*A<¬A6­1A<ÁA8ÁA<Á0A:Á1A<Á8A<Á:A<c                 ó˜   — t         j                  j                  t        j                  j                  |d   j	                  d«      Ž «      S )z�
        Given the ASGI scope, return the `path` string to serve up,
        with OS specific path separators, and any '..', '.' components removed.
        r2   ú/)r1   r2   r>   r?   Úsplit)r   rE   s     r   rL   zStaticFiles.get_pathj   s5   € ô
 �w‰w×Ñ¤§¡§¡¨e°F©m×.AÑ.AÀ#Ó.FÐ GÓHÐHr#   r2   c              ƒ   óZ  K  — |d   dvrt        d¬«      ‚	 t        j                  j                  | j                  |«      ƒ d{  –—† \  }}|r2t        j                  |j                  «      r| j                  |||«      S |rÿt        j                  |j                  «      rà| j                  rÔt        j                  j                  |d«      }t        j                  j                  | j                  |«      ƒ d{  –—† \  }}|�}t        j                  |j                  «      r^|d   j!                  d	«      s7t#        |¬
«      }|j%                  |j                  d	z   ¬«      }t'        |¬«      S | j                  |||«      S | j                  rht        j                  j                  | j                  d«      ƒ d{  –—† \  }}|r1t        j                  |j                  «      rt)        |||d   d¬«      S t        d¬«      ‚7 �Œ½# t
        $ r t        d¬«      ‚t        $ r ‚ w xY w7 �Œ,7 Œn­w)z`
        Returns an HTTP response, given the incoming path, method and request headers.
        Úmethod)ÚGETÚHEADi•  )r   Ni‘  z
index.htmlr2   rQ   ©rE   )r2   )Úurlz404.htmli”  )Ústat_resultrT   r   )r   ÚanyioÚ	to_threadÚrun_syncÚlookup_pathÚPermissionErrorÚOSErrorÚstatÚS_ISREGÚst_modeÚfile_responseÚS_ISDIRr(   r1   r2   r?   Úendswithr   Úreplacer   r   )r   r2   rE   Ú	full_pathrY   Ú
index_pathrX   s          r   rM   zStaticFiles.get_responseq   sæ  è ø€ ð �‰? /Ñ1Ü¨CÔ0Ð0ð	Ü+0¯?©?×+CÑ+CØ× Ñ  $ó,÷ &Ñ"ˆI�{ñ œ4Ÿ<™<¨×(;Ñ(;Ô<à×%Ñ% i°¸eÓDÐDáœTŸ\™\¨+×*=Ñ*=Ô>À4Ç9Â9ô Ÿ™Ÿ™ d¨LÓ9ˆJÜ+0¯?©?×+CÑ+CØ× Ñ  *ó,÷ &Ñ"ˆI�{ð Ð&¬4¯<©<¸×8KÑ8KÔ+LØ˜V‘}×-Ñ-¨cÔ2ä EÔ*�CØŸ+™+¨3¯8©8°c©>˜+Ó:�CÜ+°Ô4Ð4Ø×)Ñ)¨)°[À%ÓHÐHà�9Š9ä+0¯?©?×+CÑ+CØ× Ñ  *ó,÷ &Ñ"ˆI�{ñ œtŸ|™|¨K×,?Ñ,?Ô@Ü#ØØ +Ø  ™?Ø #ô	ð ô ¨Ô,Ð,ðO&úô ò 	1Ü¨CÔ0Ð0Üò 	Øð	úð&ùð&úsO   ‚H+—-H ÁHÁH ÁB.H+Ã:H&Ã;B?H+Æ:H)Æ;AH+ÈH ÈH#È#H+È)H+c                 óà  — | j                   D ]Ê  }t        j                  j                  ||«      }| j                  r t        j                  j                  |«      }nt        j                  j                  |«      }t        j                  j                  |«      }t        j                  j                  ||g«      |k7  rŒ²	 |t        j                  |«      fc S  y# t        t        f$ r Y Œßw xY w)N)Ú N)r/   r1   r2   r?   r*   ÚabspathÚrealpathÚ
commonpathr`   ÚFileNotFoundErrorÚNotADirectoryError)r   r2   r&   Újoined_pathrg   s        r   r]   zStaticFiles.lookup_path¢   sÉ   € ð ×-Ñ-ò 	ˆIÜŸ'™'Ÿ,™, y°$Ó7ˆKØ×"Ò"ÜŸG™GŸO™O¨KÓ8‘	äŸG™G×,Ñ,¨[Ó9�	ÜŸ™×(Ñ(¨Ó3ˆIÜ�w‰w×!Ñ! 9¨iÐ"8Ó9¸YÒFð ðØ ¤"§'¡'¨)Ó"4Ð4Ò4ð	ð øô &Ô'9Ð:ò Ùðús   Ã CÃC-Ã,C-rg   rY   r   c                 ó¨   — |d   }t        |¬«      }t        ||||¬«      }| j                  |j                  |«      rt	        |j                  «      S |S )NrT   rW   )r   rY   rT   )r   r   Úis_not_modifiedr   r   )r   rg   rY   rE   r   rT   Úrequest_headersrN   s           r   rc   zStaticFiles.file_response¶   sY   € ð �x‘ˆÜ!¨Ô.ˆäØ ;¸KÐPVô
ˆð ×Ñ × 0Ñ 0°/ÔBÜ& x×'7Ñ'7Ó8Ð8Øˆr#   c              ƒ   ó¨  K  — | j                   €y	 t        j                  j                  t        j
                  | j                   «      ƒ d{  –—† }t        j                  |j                  «      s9t        j                  |j                  «      st        d| j                   › d�«      ‚yy7 Œ]# t        $ r t        d| j                   › d�«      ‚w xY w­w)zÇ
        Perform a one-off configuration check that StaticFiles is actually
        pointed at a directory, so that we can raise loud errors rather than
        just returning 404 responses.
        NzStaticFiles directory 'z' does not exist.zStaticFiles path 'z' is not a directory.)r&   rZ   r[   r\   r1   r`   rn   r4   rd   rb   ÚS_ISLNK)r   rY   s     r   rK   zStaticFiles.check_configÇ   s»   è ø€ ð �>‰>Ð!Øð	Ü %§¡× 8Ñ 8¼¿¹À$Ç.Á.Ó Q×QˆKô
 —‘˜[×0Ñ0Ô1´T·\±\À+×BUÑBUÔ5VÜØ$ T§^¡^Ð$4Ð4IÐJóð ð 6WÐ1ð RùÜ ò 	ÜØ)¨$¯.©.Ð)9Ð9JÐKóð ð	üs/   ‚C‘;B, ÁB*ÁB, ÁACÂ*B, Â,#CÃCÚresponse_headersrs   c                 ó²   — 	 |d   }|d   }||k(  ry	 	 t        |d   «      }t        |d   «      }|�|�||k\  ryy# t         $ r Y Œ3w xY w# t         $ r Y yw xY w)z�
        Given the request and response headers, return `True` if an HTTP
        "Not Modified" response could be returned instead.
        zif-none-matchr   Tzif-modified-sincezlast-modifiedF)ÚKeyErrorr   )r   rv   rs   Úif_none_matchr   Úif_modified_sinceÚlast_modifieds          r   rr   zStaticFiles.is_not_modifiedÛ   s—   € ð	Ø+¨OÑ<ˆMØ# FÑ+ˆDØ Ò$Øð %ð

	Ü )¨/Ð:MÑ*NÓ OÐÜ%Ð&6°Ñ&GÓHˆMà!Ð-Ø!Ð-Ø%¨Ò6àð øô ò 	Ùð	ûô ò 	Øàð	ús    ‚; ”%A
 »	AÁAÁ
	AÁA)NN)éÈ   )r+   N)r   r    r!   ÚtypingÚOptionalÚPathLikeÚListÚUnionÚstrÚTupleÚboolr   r.   r   r
   r   rO   rL   r	   rM   r1   rY   r]   Úintrc   rK   r   rr   © r#   r   r%   r%   &   sæ  „ ð 04ð ØØØ$òJð —?‘? 8Ñ,ðJð —/‘/Ø�K‰K˜Ÿ™ S¨&¯,©,°s¸C°xÑ*@Ð%@ÑAÑBñ
ð	Jð ðJð ðJð ðJð 
óJð, 04ð ñà—?‘? 8Ñ,ðð —/‘/Ø�K‰K˜Ÿ™ S¨&¯,©,°s¸C°xÑ*@Ð%@ÑAÑBñ
ðð 
�‰�XÑ	óðB- Eð -°Gð -À4ð -ÈDó -ðI˜eð I¨ó Ið/- sð /-°5ð /-¸Xó /-ðbØðà	�‰�c˜6Ÿ?™?¨2¯>©>Ñ:Ð:Ñ	;óð2 ñàðð —^‘^ðð ð	ð
 ðð 
óó"ð(Ø 'ðØ:Aðà	ôr#   r%   )Úimportlib.utilr:   r1   r`   r}   Úemail.utilsr   rZ   Ústarlette.datastructuresr   r   Ústarlette.exceptionsr   Ústarlette.responsesr   r   r	   Ústarlette.typesr
   r   r   r�   r‚   r   r   r%   r†   r#   r   ú<module>r�      sU   ðÛ Û 	Û Û Ý !ã ç 1Ý .ß HÑ Hß 0Ñ 0à�<‰<˜Ð/Ð/Ñ0€ô
˜(ô 
÷*Pò Pr#   