o
    ùT·j  ã                   @  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)Ú
Collection)ÚHeadersÚMutableHeaders)ÚPlainTextResponseÚResponse)ÚASGIAppÚMessageÚReceiveÚScopeÚSend)ÚDELETEÚGETÚHEADÚOPTIONSÚPATCHÚPOSTÚPUTÚQUERY>   úContent-TypeúAccept-LanguageúContent-LanguageÚAcceptc                   @  sh   e Zd Z								d3d4dd„Zd5dd„Zd6d"d#„Zd7d'd(„Zd8d)d*„Zd9d-d.„Ze	d:d1d2„ƒZ
dS );ÚCORSMiddleware© ©r   FNéX  Úappr   Úallow_originsúCollection[str]Úallow_methodsÚallow_headersÚallow_credentialsÚboolÚallow_origin_regexú
str | NoneÚallow_private_networkÚ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< ddi}|s?d|d< | d |¡t|	ƒd	œ¡ ttt|ƒB ƒ}|r_|s_d |¡|d
< |red|d< || _	|| _
|| _dd„ |D ƒ| _|| _|| _|| _|| _|
| _|| _|| _|| _d S )NÚ*úAccess-Control-Allow-OriginÚtruez Access-Control-Allow-Credentialsú, zAccess-Control-Expose-HeadersÚVaryzmOrigin, Access-Control-Request-Method, Access-Control-Request-Headers, Access-Control-Request-Private-Network)zAccess-Control-Allow-MethodszAccess-Control-Max-AgeúAccess-Control-Allow-Headersc                 S  ó   g | ]}|  ¡ ‘qS r   ©Úlower©Ú.0Úhr   r   ú\/home/dinkstrade/pdmp-scanner/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_headersr"   Úpreflight_explicit_allow_originr$   r&   Úsimple_headersÚpreflight_headers)Úselfr   r   r    r!   r"   r$   r&   r'   r(   Úcompiled_allow_origin_regexrD   rE   rF   rG   rH   r   r   r8   Ú__init__   sR   

ÿþÿ
zCORSMiddleware.__init__Úscoper   Úreceiver
   Úsendr   c                 Ã  s˜   �|d dkr|   |||¡I d H  d S |d }t|d�}| d¡}|d ur>|dkr>d|v r>| j|d�}||||ƒI d H  d S | j||||d�I d H  d S )	NÚtypeÚhttpÚmethod©rL   Úoriginr   úaccess-control-request-method)Úrequest_headers)r   r   ÚgetÚpreflight_responseÚsimple_response)rI   rL   rM   rN   rQ   ÚheadersrS   Úresponser   r   r8   Ú__call__M   s   €

zCORSMiddleware.__call__rS   r@   c                 C  s.   | j rdS | jd ur| j |¡rdS || jv S )NT)rD   r$   Ú	fullmatchr   )rI   rS   r   r   r8   Úis_allowed_origin]   s
   
z CORSMiddleware.is_allowed_originrU   r   r   c           
      C  s  |d }|d }|  d¡}|  d¡}t| jƒ}g }| j|d�r'| jr&||d< n| d¡ || jvr6| d¡ | jrB|d urB||d< n|d urad	d
„ | d¡D ƒD ]}| 	¡ | j
vr`| d¡  nqP|d urr| jrmd|d< n| d¡ |r‚dd |¡ }	t|	d|d�S tdd|d�S )NrS   rT   zaccess-control-request-headersz&access-control-request-private-network©rS   r-   rQ   r1   c                 S  r2   r   r3   r5   r   r   r8   r9      r:   z5CORSMiddleware.preflight_response.<locals>.<listcomp>ú,rY   r.   z$Access-Control-Allow-Private-Networkzprivate-networkzDisallowed CORS r/   i�  )Ústatus_coderY   ÚOKéÈ   )rV   ÚdictrH   r]   rF   Úappendr    rE   ÚsplitÚstripr!   r&   r>   r   )
rI   rU   Úrequested_originÚrequested_methodÚrequested_headersÚrequested_private_networkrY   ÚfailuresÚheaderÚfailure_textr   r   r8   rW   f   s:   


€




þ

z!CORSMiddleware.preflight_responsec                 Ã  s,   �t j| j||d�}|  |||¡I d H  d S )N)rN   rU   )Ú	functoolsÚpartialrN   r   )rI   rL   rM   rN   rU   r   r   r8   rX   “   s   €zCORSMiddleware.simple_responseÚmessager	   c                 Ã  sÌ   �|d dkr||ƒI d H  d S |  dg ¡ t|d�}| d¡}|d ur*| | j¡ |d ur;| jr;| jr;|  ||¡ n"|d urO| jsO| j|d�rO|  ||¡ nd 	g | 
d¡¢d‘¡|d< ||ƒI d H  d S )	NrO   zhttp.response.startrY   rR   ÚOriginr^   r/   r0   )Ú
setdefaultr   rV   r?   rG   rD   r"   Úallow_explicit_originr]   r>   Úgetlist)rI   rp   rN   rU   rY   rS   r   r   r8   rN   —   s   €

zCORSMiddleware.sendrY   r   c                 C  s(   || d< d  g |  d¡¢d‘¡| d< d S )Nr-   r/   r0   rq   )r>   rt   )rY   rS   r   r   r8   rs   ®   s    z$CORSMiddleware.allow_explicit_origin)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+   )rL   r   rM   r
   rN   r   r*   r+   )rS   r@   r*   r#   )rU   r   r*   r   )
rL   r   rM   r
   rN   r   rU   r   r*   r+   )rp   r	   rN   r   rU   r   r*   r+   )rY   r   rS   r@   r*   r+   )Ú__name__Ú
__module__Ú__qualname__rK   r[   r]   rW   rX   rN   Ústaticmethodrs   r   r   r   r8   r      s"    ö
=

	
-
r   )Ú
__future__r   rn   r<   Úcollections.abcr   Ústarlette.datastructuresr   r   Ústarlette.responsesr   r   Ústarlette.typesr   r	   r
   r   r   r;   rB   r   r   r   r   r8   Ú<module>   s    