o
     h                     @  s   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
 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                   @  sf   e Zd Z							d2d3ddZd4ddZd5d!d"Zd6d&d'Zd7d(d)Zd8d,d-Ze	d9d0d1Z
dS ):CORSMiddleware r   FNX  appr   allow_originsSequence[str]allow_methodsallow_headersallow_credentialsboolallow_origin_regex
str | Noneexpose_headersmax_ageintreturnNonec	                 C  s  d|v rt }d }	|d urt|}	d|v }
d|v }|
 p|}i }|
r&d|d< |r,d|d< |r5d||d< i }|r>d|d< nd|d< |d|t|d	 ttt|B }|rb|sbd||d
< |rhd|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                 S     g | ]}|  qS r   lower.0hr   r   [/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/starlette/middleware/cors.py
<listcomp>C       z+CORSMiddleware.__init__.<locals>.<listcomp>)ALL_METHODSrecompilejoinupdatestrsortedSAFELISTED_HEADERSsetr   r   r   r    allow_all_originsallow_all_headerspreflight_explicit_allow_originr#   simple_headerspreflight_headers)selfr   r   r   r    r!   r#   r%   r&   compiled_allow_origin_regexrC   rD   rE   rF   rG   r   r   r7   __init__   sN   



zCORSMiddleware.__init__scoper   receiver
   sendr   c                   s   |d dkr|  |||I d H  d S |d }t|d}|d}|d u r1|  |||I d H  d S |dkrJd|v rJ| j|d}||||I d H  d S | j||||dI d H  d S )	NtypehttpmethodrK   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)rH   rK   rL   rM   rP   headersrR   responser   r   r7   __call__K   s   

zCORSMiddleware.__call__rR   r?   c                 C  s.   | j rdS | jd ur| j|rdS || jv S )NT)rC   r#   	fullmatchr   )rH   rR   r   r   r7   is_allowed_origin_   s
   
z CORSMiddleware.is_allowed_originrT   r   r   c           	      C  s   |d }|d }| d}t| j}g }| j|dr"| jr!||d< n|d || jvr1|d | jr=|d ur=||d< n|d ur\dd	 |d
D D ]}|	 | j
vr[|d  nqK|rldd| }t|d|dS tdd|dS )NrR   rS   zaccess-control-request-headersrR   r+   rP   r0   c                 S  r1   r   r2   r4   r   r   r7   r8      r9   z5CORSMiddleware.preflight_response.<locals>.<listcomp>,rX   zDisallowed CORS r-   i  )status_coderX   OK   )rU   dictrG   r\   rE   appendr   rD   splitstripr    r=   r   )	rH   rT   requested_originrequested_methodrequested_headersrX   failuresheaderfailure_textr   r   r7   rV   h   s0   






z!CORSMiddleware.preflight_responsec                   s,   t j| j||d}| |||I d H  d S )N)rM   rT   )	functoolspartialrM   r   )rH   rK   rL   rM   rT   r   r   r7   rW      s   zCORSMiddleware.simple_responsemessager	   c                   s   |d dkr||I d H  d S | dg  t|d}|| j |d }d|v }| jr5|r5| || n| jsD| j|drD| || ||I d H  d S )NrN   zhttp.response.startrX   rQ   r.   cookier]   )
setdefaultr   r>   rF   rC   allow_explicit_originr\   )rH   rn   rM   rT   rX   rR   
has_cookier   r   r7   rM      s   

zCORSMiddleware.sendrX   r   c                 C  s   || d< |  d d S )Nr+   r.   )add_vary_header)rX   rR   r   r   r7   rq      s   z$CORSMiddleware.allow_explicit_origin)r   r   r   FNr   r   )r   r   r   r   r   r   r    r   r!   r"   r#   r$   r%   r   r&   r'   r(   r)   )rK   r   rL   r
   rM   r   r(   r)   )rR   r?   r(   r"   )rT   r   r(   r   )
rK   r   rL   r
   rM   r   rT   r   r(   r)   )rn   r	   rM   r   rT   r   r(   r)   )rX   r   rR   r?   r(   r)   )__name__
__module____qualname__rJ   rZ   r\   rV   rW   rM   staticmethodrq   r   r   r   r7   r      s     
;

	
&
r   )
__future__r   rl   r;   collections.abcr   starlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr   r	   r
   r   r   r:   rA   r   r   r   r   r7   <module>   s    