o
    é’Oj«  ã                   @  sj   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZ dZG dd„ dƒZd	S )
é    )Úannotations)ÚSequence)ÚURLÚHeaders)ÚPlainTextResponseÚRedirectResponseÚResponse)ÚASGIAppÚReceiveÚScopeÚSendz6Domain wildcard patterns must be like '*.example.com'.c                   @  s&   e Zd Z		dddd„Zddd„ZdS )ÚTrustedHostMiddlewareNTÚappr	   Úallowed_hostsúSequence[str] | NoneÚwww_redirectÚboolÚreturnÚNonec                 C  sx   |d u rdg}|D ] }d|dd … vsJ t ƒ‚| d¡r)|dkr)| d¡s)J t ƒ‚q	|| _t|ƒ| _d|v | _|| _d S )NÚ*é   z*.)ÚENFORCE_DOMAIN_WILDCARDÚ
startswithr   Úlistr   Ú	allow_anyr   )Úselfr   r   r   Úpattern© r   úf/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/starlette/middleware/trustedhost.pyÚ__init__   s   €


zTrustedHostMiddleware.__init__Úscoper   Úreceiver
   Úsendr   c                 Ã  s  �| j s
|d dvr|  |||¡I d H  d S t|d�}| dd¡ d¡d }d}d}| jD ] }||ksA| d	¡rE| |d
d … ¡rEd} n	d| |krMd}q-|r\|  |||¡I d H  d S |rw| jrwt	|d�}	|	j
d|	j d�}
tt|
ƒd�}ntddd�}||||ƒI d H  d S )NÚtype)ÚhttpÚ	websocket)r    ÚhostÚ ú:r   Fr   r   Tzwww.)Únetloc)ÚurlzInvalid host headeri�  )Ústatus_code)r   r   r   ÚgetÚsplitr   r   Úendswithr   r   Úreplacer)   r   Ústrr   )r   r    r!   r"   Úheadersr&   Úis_valid_hostÚfound_www_redirectr   r*   Úredirect_urlÚresponser   r   r   Ú__call__   s.   €

$€

zTrustedHostMiddleware.__call__)NT)r   r	   r   r   r   r   r   r   )r    r   r!   r
   r"   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r6   r   r   r   r   r      s
    ür   N)Ú
__future__r   Úcollections.abcr   Ústarlette.datastructuresr   r   Ústarlette.responsesr   r   r   Ústarlette.typesr	   r
   r   r   r   r   r   r   r   r   Ú<module>   s    