
     h                        d dl m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 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 G d de          Z G d de          ZdS )    )annotationsN)Any)ParseResulturlparse)HttpRequestHttpResponse)patch_vary_headers)MiddlewareMixin)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-Agec                  &    e Zd ZddZddZddZdS )CorsPostCsrfMiddlewarerequestr   returnNonec                v    t           j        r*d|j        v r#|j        d         }||j        d<   |j        d= dS dS dS )zj
        Put the HTTP_REFERER back to its original value and delete the
        temporary storage
        ORIGINAL_HTTP_REFERERHTTP_REFERERN)r   CORS_REPLACE_HTTPS_REFERERMETA)selfr   http_referers      R/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/corsheaders/middleware.py_https_referer_replace_reversez5CorsPostCsrfMiddleware._https_referer_replace_reverse   sV    
 * 	6/F',/V/V"<(?@L+7GL(4555	6 	6/V/V    c                0    |                      |           d S Nr   r   r   s     r   process_requestz&CorsPostCsrfMiddleware.process_request!   s    ++G444tr   callbackr   callback_argscallback_kwargsc                0    |                      |           d S r   r   r   r   r!   r"   r#   s        r   process_viewz#CorsPostCsrfMiddleware.process_view%   s     	++G444tr   Nr   r   r   r   
r   r   r!   r   r"   r   r#   r   r   r   )__name__
__module____qualname__r   r    r&    r   r   r   r      sP        6 6 6 6        r   r   c                  V    e Zd ZddZddZddZddZddZd dZd!dZ	d!dZ
d"dZdS )#CorsMiddlewarer   r   r   r   c                   |j                             d          }|                                r|rd|j         vrt          |          }t          j        s|                     ||          sdS 	 |j         d         }d|j         d         z  }|j                                         |_         ||j         d<   ||j         d<   dS # t          $ r Y dS w xY wdS dS dS )a  
        When https is enabled, django CSRF checking includes referer checking
        which breaks when using CORS. This function updates the HTTP_REFERER
        header to make sure it matches HTTP_HOST, provided that our cors logic
        succeeds
        HTTP_ORIGINr   Nr   zhttps://%s/	HTTP_HOST)	r   get	is_securer   r   CORS_ALLOW_ALL_ORIGINSorigin_found_in_white_listscopyKeyError)r   r   originurlr   	http_hosts         r   _https_referer_replacez%CorsMiddleware._https_referer_replace1   s    !!-00 		 (w|;; 6""C/88EE &|N;)GL,EE	&|00228D45/8^,,,   '	 	 	 	 <;s   .AB? ?
CCHttpResponse | Nonec                    |                      |          |_        |j        rJt          j        r|                     |           |j        dk    rd|j        v rt                      }d|d<   |S dS )a  
        If CORS preflight header, then create an
        empty body response (200 OK) and return it

        Django won't bother calling any other request
        view/exception middleware along with the requested view;
        it will call any response middlewares
        OPTIONS"HTTP_ACCESS_CONTROL_REQUEST_METHOD0zContent-LengthN)
is_enabled_cors_enabledr   r   r;   methodr   r   )r   r   responses      r   r    zCorsMiddleware.process_requestP   s|     !% 8 8  
	 . 5++G444 )++8GLHH'>>-0)*tr   r!   r   r"   r#   c                V    |j         r!t          j        r|                     |           dS )z9
        Do the referer replacement here as well
        N)rB   r   r   r;   r%   s        r   r&   zCorsMiddleware.process_viewg   s2       	1T%D 	1''000tr   rD   r   c                   t          |dd          }||                     |          }|s|S t          |dg           |j                            d          }|s|S 	 t          |          }n# t          $ r |cY S w xY wt          j        r
d|t          <   t          j
        s-|                     ||          s|                     |          s|S t          j
        rt          j        sd|t          <   n
||t          <   t          t          j                  r'd                    t          j                  |t"          <   |j        dk    r{d                    t          j                  |t(          <   d                    t          j                  |t,          <   t          j        r!t1          t          j                  |t2          <   |S )	z1
        Add the respective CORS headers
        rB   NOriginr0   true*z, r>   )getattrrA   r	   r   r2   r   
ValueErrorr   CORS_ALLOW_CREDENTIALS ACCESS_CONTROL_ALLOW_CREDENTIALSr4   r5   check_signalACCESS_CONTROL_ALLOW_ORIGINlenCORS_EXPOSE_HEADERSjoinACCESS_CONTROL_EXPOSE_HEADERSrC   CORS_ALLOW_HEADERSACCESS_CONTROL_ALLOW_HEADERSCORS_ALLOW_METHODSACCESS_CONTROL_ALLOW_METHODSCORS_PREFLIGHT_MAX_AGEstrACCESS_CONTROL_MAX_AGE)r   r   rD   enabledr8   r9   s         r   process_responsezCorsMiddleware.process_responseu   s    '?D99?oog..G 	O8hZ000!!-00 	O	6""CC 	 	 	OOO	 & 	@9?H56 +	44VSAA	 %%g..	
 O& 	;t/J 	;47H0114:H01t'(( 	6:ii(7 7H23 >Y&&59YYt?V5W5WH1259YYt?V5W5WH12* T36t7R3S3S/0s   A- -A<;A<r8   rY   r9   r   boolc                ~    |dk    r|t           j        v p)|                     |          p|                     |          S )Nnull)r   CORS_ALLOWED_ORIGINS_url_in_whitelistregex_domain_match)r   r8   r9   s      r   r5   z*CorsMiddleware.origin_found_in_white_lists   sH    vE&D,E"E /%%c**/&&v..	
r   c                N    t          fdt          j        D                       S )Nc              3  B   K   | ]}t          j        |          V  d S r   )rematch).0domain_patternr8   s     r   	<genexpr>z4CorsMiddleware.regex_domain_match.<locals>.<genexpr>   sC       
 
 H^V,,
 
 
 
 
 
r   )anyr   CORS_ALLOWED_ORIGIN_REGEXES)r   r8   s    `r   rb   z!CorsMiddleware.regex_domain_match   s>     
 
 
 
"&"B
 
 
 
 
 	
r   c                    t          t          j        t          j        |j                            p|                     |          S r   )r]   re   rf   r   CORS_URLS_REGEX	path_inforN   r   s     r   rA   zCorsMiddleware.is_enabled   s?    HT)7+<==
 
 (w''	(r   c                `    t          j        d |          }t          d |D                       S )N)senderr   c              3      K   | ]	\  }}|V  
d S r   r,   )rg   functionreturn_values      r   ri   z.CorsMiddleware.check_signal.<locals>.<genexpr>   s'      OO$:Hl<OOOOOOr   )r   sendrj   )r   r   signal_responsess      r   rN   zCorsMiddleware.check_signal   s6    05T7SSSOO>NOOOOOOr   c                f    d t           j        D             }t          fd|D                       S )Nc                ,    g | ]}t          |          S r,   )r   )rg   os     r   
<listcomp>z4CorsMiddleware._url_in_whitelist.<locals>.<listcomp>   s    BBB18A;;BBBr   c              3  X   K   | ]$}|j         j         k    o|j        j        k    V  %d S r   )schemenetloc)rg   r8   r9   s     r   ri   z3CorsMiddleware._url_in_whitelist.<locals>.<genexpr>   sN       
 
 MSZ'GFMSZ,G
 
 
 
 
 
r   )r   r`   rj   )r   r9   originss    ` r   ra   z CorsMiddleware._url_in_whitelist   sQ    BB(ABBB 
 
 
 
!
 
 
 
 
 	
r   Nr'   )r   r   r   r<   r(   )r   r   rD   r   r   r   )r8   rY   r9   r   r   r]   )r8   rY   r   r]   )r   r   r   r]   )r9   r   r   r]   )r)   r*   r+   r;   r    r&   r\   r5   rb   rA   rN   ra   r,   r   r   r.   r.   0   s           >   .   2 2 2 2h
 
 
 

 
 
 
( ( ( (
P P P P
 
 
 
 
 
r   r.   )
__future__r   re   typingr   urllib.parser   r   django.httpr   r   django.utils.cacher	   django.utils.deprecationr
   corsheaders.confr   corsheaders.signalsr   rO   rS   rM   rU   rW   rZ   r   r.   r,   r   r   <module>r      s6   " " " " " " 				       . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 4 4 4 4 4 ! ! ! ! ! ! 5 5 5 5 5 5;  ? #E  = = 1     _   4T
 T
 T
 T
 T
_ T
 T
 T
 T
 T
r   