o
    ^~#g                     @  s~   d dl mZ d dlZd dlZd dl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)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typing.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/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/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_regexrB   rC   rD   rE   rF   r   r   r6   __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rJ   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)rG   rJ   rK   rL   rO   headersrQ   responser   r   r6   __call__K   s   

zCORSMiddleware.__call__rQ   r>   c                 C  s.   | j rdS | jd ur| j|rdS || jv S )NT)rB   r"   	fullmatchr   )rG   rQ   r   r   r6   is_allowed_origin_   s
   
z CORSMiddleware.is_allowed_originrS   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 )NrQ   rR   zaccess-control-request-headersrQ   r*   rO   r/   c                 S  r0   r   r1   r3   r   r   r6   r7      r8   z5CORSMiddleware.preflight_response.<locals>.<listcomp>,rW   zDisallowed CORS r,   i  )status_coderW   OK   )rT   dictrF   r[   rD   appendr   rC   splitstripr   r<   r   )	rG   rS   requested_originrequested_methodrequested_headersrW   failuresheaderfailure_textr   r   r6   rU   h   s0   






z!CORSMiddleware.preflight_responsec                   s,   t j| j||d}| |||I d H  d S )N)rL   rS   )	functoolspartialrL   r   )rG   rJ   rK   rL   rS   r   r   r6   rV      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 )NrM   zhttp.response.startrW   rP   r-   cookier\   )
setdefaultr   r=   rE   rB   allow_explicit_originr[   )rG   rm   rL   rS   rW   rQ   
has_cookier   r   r6   rL      s   

zCORSMiddleware.sendrW   r   c                 C  s   || d< |  d d S )Nr*   r-   )add_vary_header)rW   rQ   r   r   r6   rp      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(   )rJ   r
   rK   r	   rL   r   r'   r(   )rQ   r>   r'   r!   )rS   r   r'   r   )
rJ   r
   rK   r	   rL   r   rS   r   r'   r(   )rm   r   rL   r   rS   r   r'   r(   )rW   r   rQ   r>   r'   r(   )__name__
__module____qualname__rI   rY   r[   rU   rV   rL   staticmethodrp   r   r   r   r6   r      s     
;

	
&
r   )
__future__r   rk   r:   typingstarlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr   r   r	   r
   r   r9   r@   r   r   r   r   r6   <module>   s    