o
    Þ­j¹  ã                   @  sf   d dl mZ d dl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 )	é    )ÚannotationsN)Ú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útyping.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   ú]/var/www/html/CropPilot/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__   s6   €

ÿÿ€

zTrustedHostMiddleware.__call__)NT)r   r   r   r   r   r   r   r   )r   r
   r    r	   r!   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r5   r   r   r   r   r      s
    ür   )Ú
__future__r   ÚtypingÚstarlette.datastructuresr   r   Ústarlette.responsesr   r   r   Ústarlette.typesr   r	   r
   r   r   r   r   r   r   r   Ú<module>   s    