o
    [.d                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d d	lmZ d d
lmZ d dlmZ d dlmZ dZdZdZdZdZdZdZdZG dd dZdS )    )annotationsN)	Awaitable)Callable)SplitResulturlsplit)HttpRequest)HttpResponse)HttpResponseBase)patch_vary_headers)conf)check_request_enabledzaccess-control-allow-originzaccess-control-expose-headersz access-control-allow-credentialszaccess-control-allow-headerszaccess-control-allow-methodszaccess-control-max-agez&access-control-request-private-networkz$access-control-allow-private-networkc                   @  sx   e Zd ZdZdZd&ddZd'ddZd(ddZd)ddZd*ddZ	d+ddZ
d,ddZd-dd Zd-d!d"Zd.d#d$Zd%S )/CorsMiddlewareTget_response`Callable[[HttpRequest], HttpResponseBase] | Callable[[HttpRequest], Awaitable[HttpResponseBase]]returnNonec                 C  s*   || _ t| j rtjj| _d S d | _d S N)r   asyncioiscoroutinefunction
coroutines_is_coroutine)selfr    r   N/var/www/Matress/matenv/lib/python3.10/site-packages/corsheaders/middleware.py__init__    s
   
zCorsMiddleware.__init__requestr   .HttpResponseBase | Awaitable[HttpResponseBase]c                 C  sN   | j r| |S | |}|d u r| |}t|tsJ |}| || |S r   )r   	__acall__check_preflightr   
isinstancer
   add_response_headersr   r   responseresultr   r   r   __call__1   s   


zCorsMiddleware.__call__r
   c                   sF   |  |}|d u r| |}t|trJ |I d H }| || |S r   )r   r   r    r
   r!   r"   r   r   r   r   >   s   


zCorsMiddleware.__acall__HttpResponseBase | Nonec                 C  s8   |  ||_|jr|jdkrd|jv rtddidS dS )zB
        Generate a response for CORS preflight requests.
        OPTIONSzaccess-control-request-methodzcontent-length0)headersN)
is_enabled_cors_enabledmethodr)   r	   r   r   r   r   r   r   G   s   

zCorsMiddleware.check_preflightr#   c                 C  s.  t |dd}|du r| |}|s|S t|d |jd}|s"|S zt|}W n ty3   | Y S w tjr;d|t	< tj
sK| ||sK| |sK|S tj
rVtjsVd|t< n||t< ttjrgdtj|t< |jdkrdtj|t< dtj|t< tjrttj|t< tjr|jtdkrd|t< |S )	z1
        Add the respective CORS headers
        r+   Noriginr/   true*z, r'   )getattrr*   r   r)   getr   
ValueErrorr   CORS_ALLOW_CREDENTIALS ACCESS_CONTROL_ALLOW_CREDENTIALSCORS_ALLOW_ALL_ORIGINSorigin_found_in_white_listscheck_signalACCESS_CONTROL_ALLOW_ORIGINlenCORS_EXPOSE_HEADERSjoinACCESS_CONTROL_EXPOSE_HEADERSr,   CORS_ALLOW_HEADERSACCESS_CONTROL_ALLOW_HEADERSCORS_ALLOW_METHODSACCESS_CONTROL_ALLOW_METHODSCORS_PREFLIGHT_MAX_AGEstrACCESS_CONTROL_MAX_AGECORS_ALLOW_PRIVATE_NETWORK&ACCESS_CONTROL_REQUEST_PRIVATE_NETWORK$ACCESS_CONTROL_ALLOW_PRIVATE_NETWORK)r   r   r#   enabledr/   urlr   r   r   r!   T   sP   





z#CorsMiddleware.add_response_headersr/   rD   rJ   r   boolc                 C  s&   |dkr	|t jv p| |p| |S )Nnull)r   CORS_ALLOWED_ORIGINS_url_in_whitelistregex_domain_match)r   r/   rJ   r   r   r   r8      s
   z*CorsMiddleware.origin_found_in_white_listsc                   s   t  fddtjD S )Nc                 3  s    | ]	}t | V  qd S r   )rematch).0domain_patternr.   r   r   	<genexpr>   s
    

z4CorsMiddleware.regex_domain_match.<locals>.<genexpr>)anyr   CORS_ALLOWED_ORIGIN_REGEXES)r   r/   r   r.   r   rO      s   z!CorsMiddleware.regex_domain_matchc                 C  s   t ttj|jp| |S r   )rK   rP   rQ   r   CORS_URLS_REGEX	path_infor9   r-   r   r   r   r*      s
   zCorsMiddleware.is_enabledc                 C  s    t jd |d}tdd |D S )N)senderr   c                 s  s    | ]\}}|V  qd S r   r   )rR   functionreturn_valuer   r   r   rT      s    z.CorsMiddleware.check_signal.<locals>.<genexpr>)r   sendrU   )r   r   signal_responsesr   r   r   r9      s   zCorsMiddleware.check_signalc                   s&   dd t jD }t fdd|D S )Nc                 S  s   g | ]}t |qS r   r   )rR   or   r   r   
<listcomp>   s    z4CorsMiddleware._url_in_whitelist.<locals>.<listcomp>c                 3  s(    | ]}|j  j ko|j jkV  qd S r   )schemenetloc)rR   r/   rJ   r   r   rT      s
    
z3CorsMiddleware._url_in_whitelist.<locals>.<genexpr>)r   rM   rU   )r   rJ   originsr   rb   r   rN      s   z CorsMiddleware._url_in_whitelistN)r   r   r   r   )r   r   r   r   )r   r   r   r
   )r   r   r   r&   )r   r   r#   r
   r   r
   )r/   rD   rJ   r   r   rK   )r/   rD   r   rK   )r   r   r   rK   )rJ   r   r   rK   )__name__
__module____qualname__sync_capableasync_capabler   r%   r   r   r!   r8   rO   r*   r9   rN   r   r   r   r   r      s    



	

:


r   )
__future__r   r   rP   typingr   r   urllib.parser   r   django.httpr   r	   django.http.responser
   django.utils.cacher   corsheaders.confr   corsheaders.signalsr   r:   r>   r6   r@   rB   rE   rG   rH   r   r   r   r   r   <module>   s,    