o
    ùT·j˜	  ã                   @  sv   d dl mZ 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)Úparse_host_header)Ú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   úc/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/starlette/middleware/trustedhost.pyÚ__init__   s   €


zTrustedHostMiddleware.__init__Úscoper   Úreceiver   Úsendr   c                 Ã  s4  �| j s
|d dvr|  |||¡I d H  d S t|d�}t| d¡ƒ}|d u r5tddd�|||ƒI d H  d S |j}d}d}| jD ] }	||	ksS|	 d	¡rW| 	|	d
d … ¡rWd} n	d| |	kr_d}q?|rn|  |||¡I d H  d S |r‰| j
r‰t|d�}
|
jd|
j d�}tt|ƒd�}ntddd�}||||ƒI d H  d S )NÚtype)ÚhttpÚ	websocket)r!   ÚhostzInvalid host headeri�  )Ústatus_codeFr   r   Tzwww.)Únetloc)Úurl)r   r   r   r   Úgetr   r'   r   r   Úendswithr   r   Úreplacer)   r   Ústr)r   r!   r"   r#   ÚheadersÚparsed_hostr'   Ú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   N)Ú
__future__r   Úcollections.abcr   Ústarlette._utilsr   Ústarlette.datastructuresr   r   Ústarlette.responsesr   r   r	   Ústarlette.typesr
   r   r   r   r   r   r   r   r   r   Ú<module>   s    