o
    Þ­j½  ã                   @  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   FNéX  Ú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   úV/var/www/html/CropPilot/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_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   j   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    