o
    é’OjU  ã                   @  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                   @  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úSequence[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< 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/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/starlette/middleware/cors.pyÚ
<listcomp>D   ó    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 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©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__N   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_originb   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   k   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�}| | j¡ |d }| jr2| jr2|  ||¡ n| jsA| j|d�rA|  ||¡ ||ƒI d H  d S )NrO   zhttp.response.startrY   rR   r/   r^   )Ú
setdefaultr   r?   rG   rD   r!   Úallow_explicit_originr]   )rI   rp   rN   rU   rY   rS   r   r   r8   rN   œ   s   €
zCORSMiddleware.sendrY   r   c                 C  s   || d< |   d¡ d S )Nr,   r/   )Úadd_vary_header)rY   rS   r   r   r8   rr   °   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   Ústaticmethodrr   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    