
    iU                        d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZmZmZmZ dZh dZ G d	 d
          ZdS )    )annotationsN)Sequence)HeadersMutableHeaders)PlainTextResponseResponse)ASGIAppMessageReceiveScopeSend)DELETEGETHEADOPTIONSPATCHPOSTPUT>   Content-TypeAccept-LanguageContent-LanguageAcceptc                  h    e Zd Z	 	 	 	 	 	 	 	 d,d-dZd.dZd/d Zd0d$Zd1d%Zd2d(Ze	d3d+            Z
dS )4CORSMiddleware r   FNX  appr	   allow_originsSequence[str]allow_methodsallow_headersallow_credentialsboolallow_origin_regex
str | Noneallow_private_networkexpose_headersmax_ageintreturnNonec
                   d|v rt           }d }
|t          j        |          }
d|v }d|v }| p|}i }|rd|d<   |rd|d<   |rd                    |          |d<   i }|rd|d<   nd|d<   |                    d                    |          t          |	          d	           t          t          t          |          z            }|r|sd                    |          |d
<   |rd|d<   || _	        || _
        || _        d |D             | _        || _        || _        || _        || _        |
| _        || _        || _        || _        d S )N*Access-Control-Allow-Origintruez Access-Control-Allow-Credentials, zAccess-Control-Expose-HeadersOriginVary)zAccess-Control-Allow-MethodszAccess-Control-Max-AgeAccess-Control-Allow-Headersc                6    g | ]}|                                 S r   lower.0hs     Z/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/starlette/middleware/cors.py
<listcomp>z+CORSMiddleware.__init__.<locals>.<listcomp>D   s     ???Aaggii???    )ALL_METHODSrecompilejoinupdatestrsortedSAFELISTED_HEADERSsetr   r   r!   r"   allow_all_originsallow_all_headersr#   preflight_explicit_allow_originr%   r'   simple_headerspreflight_headers)selfr   r   r!   r"   r#   r%   r'   r(   r)   compiled_allow_origin_regexrG   rH   rI   rJ   rK   s                   r;   __init__zCORSMiddleware.__init__   s    -'M&*#)*,*5G*H*H'=0=0.?*?*TCT')+ 	@<?N89 	HAGN=> 	X>Bii>W>WN:;,.* 	C(0f%%?B;<  04		-0H0H*-g,, 	
 	
 	
 1C4F4FFGG 	Y!2 	Y@D		-@X@X<= 	KDJ@A**?????!2!2!2/N,"=%:",!2r=   scoper   receiver   sendr   c                  K   |d         dk    r|                      |||           d {V  d S |d         }t          |          }|                    d          }||                      |||           d {V  d S |dk    r/d|v r+|                     |          } ||||           d {V  d S |                     ||||           d {V  d S )	NtypehttpmethodrO   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)rL   rO   rP   rQ   rU   headersrW   responses           r;   __call__zCORSMiddleware.__call__N   s*     =F""((5'4000000000Fx&&&X&&>((5'4000000000FY#Bg#M#M..w.GGH(5'4000000000F""5'4"QQQQQQQQQQQr=   rW   rC   c                l    | j         rdS | j        | j                            |          rdS || j        v S )NT)rG   r%   	fullmatchr   )rL   rW   s     r;   is_allowed_originz CORSMiddleware.is_allowed_originb   sE    ! 	4".43J3T3TU[3\3\.4+++r=   rY   r   r   c                   |d         }|d         }|                     d          }|                     d          }t          | j                  }g }|                     |          r| j        r||d<   n|                    d           || j        vr|                    d           | j        r|||d<   nV|Td	 |                    d
          D             D ]4}|	                                | j
        vr|                    d            n5|"| j        rd|d<   n|                    d           |r*dd                    |          z   }	t          |	d|          S t          dd|          S )NrW   rX   zaccess-control-request-headersz&access-control-request-private-networkrW   r/   rU   r4   c                6    g | ]}|                                 S r   r6   r8   s     r;   r<   z5CORSMiddleware.preflight_response.<locals>.<listcomp>   s     KKK17799KKKr=   ,r]   r0   z$Access-Control-Allow-Private-Networkzprivate-networkzDisallowed CORS r1   i  )status_coder]   OK   )rZ   dictrK   rb   rI   appendr!   rH   splitstripr"   r'   rA   r   )
rL   rY   requested_originrequested_methodrequested_headersrequested_private_networkr]   failuresheaderfailure_texts
             r;   r[   z!CORSMiddleware.preflight_responsek   s   *84*+JK+//0PQQ$3$7$78`$a$a!t-.. !!)9!:: 	&3 J :J56OOH%%%4#555OOH%%% ! 	&7&C6GG233*KK.?.E.Ec.J.JKKK  <<>>);;;OOI...E < %0) 3BH>?? 1222
  	U-		(0C0CCL$\sGTTTT 3HHHHr=   c                |   K   t          j        | j        ||          }|                     |||           d {V  d S )N)rQ   rY   )	functoolspartialrQ   r   )rL   rO   rP   rQ   rY   s        r;   r\   zCORSMiddleware.simple_response   sM       WWWhhugt,,,,,,,,,,,r=   messager
   c                  K   |d         dk    r ||           d {V  d S |                     dg            t          |          }|                    | j                   |d         }| j        r| j        r|                     ||           n3| j        s,|                     |          r|                     ||            ||           d {V  d S )NrS   zhttp.response.startr]   rV   r2   rd   )
setdefaultr   rB   rJ   rG   r#   allow_explicit_originrb   )rL   rx   rQ   rY   r]   rW   s         r;   rQ   zCORSMiddleware.send   s     6?333$w--F9b))) w///t*+++ * ! 	8d&< 	8&&w7777 ' 	8D,B,B&,B,Q,Q 	8&&w777d7mmr=   r]   r   c                :    || d<   |                      d           d S )Nr/   r2   )add_vary_header)r]   rW   s     r;   r{   z$CORSMiddleware.allow_explicit_origin   s'    17-.)))))r=   )r   r   r   FNFr   r   )r   r	   r   r    r!   r    r"   r    r#   r$   r%   r&   r'   r$   r(   r    r)   r*   r+   r,   )rO   r   rP   r   rQ   r   r+   r,   )rW   rC   r+   r$   )rY   r   r+   r   )
rO   r   rP   r   rQ   r   rY   r   r+   r,   )rx   r
   rQ   r   rY   r   r+   r,   )r]   r   rW   rC   r+   r,   )__name__
__module____qualname__rN   r_   rb   r[   r\   rQ   staticmethodr{   r   r=   r;   r   r      s         (*'/')"')-&+(*<3 <3 <3 <3 <3|R R R R(, , , ,+I +I +I +IZ- - - -   ( * * * \* * *r=   r   )
__future__r   rv   r?   collections.abcr   starlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr	   r
   r   r   r   r>   rE   r   r   r=   r;   <module>r      s    " " " " " "     				 $ $ $ $ $ $ < < < < < < < < ; ; ; ; ; ; ; ; B B B B B B B B B B B B B BJVVV d* d* d* d* d* d* d* d* d* d*r=   