§
    ¤”jà  ã                   ó¦   — 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  G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    N)Úurlparse)Úsettings)ÚPermissionDenied)Úmail_managers)ÚHttpResponsePermanentRedirect)Úis_valid_path)ÚMiddlewareMixin)Úescape_leading_slashesc                   ó.   — e Zd ZdZeZd„ Zd„ Zd„ Zd„ Z	dS )ÚCommonMiddlewarea  
    "Common" middleware for taking care of some basic operations:

        - Forbid access to User-Agents in settings.DISALLOWED_USER_AGENTS

        - URL rewriting: Based on the APPEND_SLASH and PREPEND_WWW settings,
          append missing slashes and/or prepends missing "www."s.

            - If APPEND_SLASH is set and the initial URL doesn't end with a
              slash, and it is not found in urlpatterns, form a new URL by
              appending a slash at the end. If this new URL is found in
              urlpatterns, return an HTTP redirect to this new URL; otherwise
              process the initial URL as usual.

          This behavior can be customized by subclassing CommonMiddleware and
          overriding the response_redirect_class attribute.
    c                 óÚ  — |j                              d¦  «        }|�3t          j        D ]&}|                     |¦  «        rt          d¦  «        ‚Œ'|                     ¦   «         }t          j        rw|rw|                     d¦  «        sd|  	                    |¦  «        r|  
                    |¦  «        }n|                     ¦   «         }|                      |j        › d|› |› �¦  «        S dS dS dS )z‚
        Check for denied User-Agents and rewrite the URL based on
        settings.APPEND_SLASH and settings.PREPEND_WWW
        ÚHTTP_USER_AGENTNzForbidden user agentzwww.z://www.)ÚMETAÚgetr   ÚDISALLOWED_USER_AGENTSÚsearchr   Úget_hostÚPREPEND_WWWÚ
startswithÚshould_redirect_with_slashÚget_full_path_with_slashÚget_full_pathÚresponse_redirect_classÚscheme)ÚselfÚrequestÚ
user_agentÚuser_agent_regexÚhostÚpaths         úg/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/middleware/common.pyÚprocess_requestz CommonMiddleware.process_request"   s(  € ð ”\×%Ò%Ð&7Ñ8Ô8ˆ
ØÐ!Ý$,Ô$Cð Cð CÐ Ø#×*Ò*¨:Ñ6Ô6ð CÝ*Ð+AÑBÔBÐBðCð ×ÒÑ!Ô!ˆåÔð 
	X Dð 
	X°·²ÀÑ1HÔ1Hð 
	Xð
 ×.Ò.¨wÑ7Ô7ð /Ø×4Ò4°WÑ=Ô=��à×,Ò,Ñ.Ô.�à×/Ò/°7´>Ð0VÐ0VÈ$Ð0VÐPTÐ0VÐ0VÑWÔWÐWð
	Xð 
	Xð 
	Xð 
	Xð 
	Xð 
	Xó    c                 ó  — t           j        rr|j                             d¦  «        sXt	          |dd¦  «        }t          |j        |¦  «        s2t          d|j        z  |¦  «        }|r|j        }t	          |dd¦  «        S dS )z˜
        Return True if settings.APPEND_SLASH is True and appending a slash to
        the request path turns an invalid path into a valid one.
        ú/ÚurlconfNz%s/Úshould_append_slashTF)r   ÚAPPEND_SLASHÚ	path_infoÚendswithÚgetattrr   Úfunc)r   r   r&   ÚmatchÚviews        r!   r   z+CommonMiddleware.should_redirect_with_slash>   s�   € õ
 Ô ð 	F¨Ô):×)CÒ)CÀCÑ)HÔ)Hð 	FÝ˜g y°$Ñ7Ô7ˆGÝ  Ô!2°GÑ<Ô<ð FÝ% e¨gÔ.?Ñ&?ÀÑIÔI�Øð FØ œ:�DÝ" 4Ð)>ÀÑEÔEÐEØˆur#   c                 óØ   — |                      d¬¦  «        }t          |¦  «        }t          j        r8|j        dv r/t          d|j        |                     ¦   «         |z   dœz  ¦  «        ‚|S )zÀ
        Return the full path of the request with a trailing slash appended.

        Raise a RuntimeError if settings.DEBUG is True and request.method is
        POST, PUT, or PATCH.
        T)Úforce_append_slash)ÚPOSTÚPUTÚPATCHa"  You called this URL via %(method)s, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining %(method)s data. Change your form to point to %(url)s (note the trailing slash), or set APPEND_SLASH=False in your Django settings.)ÚmethodÚurl)r   r
   r   ÚDEBUGr4   ÚRuntimeErrorr   )r   r   Únew_paths      r!   r   z)CommonMiddleware.get_full_path_with_slashL   s‡   € ð ×(Ò(¸DÐ(ÑAÔAˆå)¨(Ñ3Ô3ˆÝŒ>ð 	˜gœnÐ0HÐHÐHÝðMð &œnØ"×+Ò+Ñ-Ô-°Ñ8ðð ññ
ô 
ð 
ð ˆr#   c                 ó   — |j         dk    r=|                      |¦  «        r(|                      |                      |¦  «        ¦  «        S |j        s>|                     d¦  «        s)t          t          |j        ¦  «        ¦  «        |j	        d<   |S )z¥
        When the status code of the response is 404, it may redirect to a path
        with an appended slash if should_redirect_with_slash() returns True.
        é”  zContent-Length)
Ústatus_coder   r   r   Ú	streamingÚ
has_headerÚstrÚlenÚcontentÚheaders)r   r   Úresponses      r!   Úprocess_responsez!CommonMiddleware.process_responsed   s’   € ð Ô 3Ò&Ð&¨4×+JÒ+JÈ7Ñ+SÔ+SÐ&Ø×/Ò/°×0MÒ0MÈgÑ0VÔ0VÑWÔWÐWð Ô!ð 	L¨(×*=Ò*=Ð>NÑ*OÔ*Oð 	LÝ14µS¸Ô9IÑ5JÔ5JÑ1KÔ1KˆHÔÐ-Ñ.àˆr#   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r   r   rC   © r#   r!   r   r      se   € € € € € ðð ð$ <ÐðXð Xð Xð8ð ð ðð ð ð0ð ð ð ð r#   r   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚBrokenLinkEmailsMiddlewarec                 óÐ  — |j         dk    rÚt          j        sÎ|                     ¦   «         }|                     ¦   «         }|j                             dd¦  «        }|                      ||||¦  «        ss|j                             dd¦  «        }|j                             dd¦  «        }t          d|  	                    ||¦  «        rdnd›d	|›�d
|›d|›d|›d|›d�	d¬¦  «         |S )z=Send broken link emails for relevant 404 NOT FOUND responses.r:   ÚHTTP_REFERERÚ r   z<none>ÚREMOTE_ADDRzBroken z	INTERNAL zlink on z
Referrer: z
Requested URL: z
User agent: z
IP address: ú
T)Úfail_silently)
r;   r   r6   r   r   r   r   Úis_ignorable_requestr   Úis_internal_request)r   r   rB   Údomainr    ÚrefererÚuaÚips           r!   rC   z+BrokenLinkEmailsMiddleware.process_responsew   s  € àÔ 3Ò&Ð&­x¬~Ð&Ø×%Ò%Ñ'Ô'ˆFØ×(Ò(Ñ*Ô*ˆDØ”l×&Ò& ~°rÑ:Ô:ˆGà×,Ò,¨W°d¸FÀGÑLÔLð Ø”\×%Ò%Ð&7¸ÑBÔB�Ø”\×%Ò% m°XÑ>Ô>�Ý�ð
  $×7Ò7¸ÀÑHÔHð$˜K˜Kà!#ð$ð $ð ˜ðð ð +2¨'¨'°4°4°4¸¸¸¸R¸R¸RðAà"&ðñ ô ð ð ˆr#   c                 óp   — t          t          j        dt          j        |¦  «        z  |¦  «        ¦  «        S )ze
        Return True if the referring URL is the same domain as the current
        request.
        z^https?://%s/)ÚboolÚrer-   Úescape)r   rS   rT   s      r!   rR   z.BrokenLinkEmailsMiddleware.is_internal_request‘   s-   € õ •B”H˜_­r¬y¸Ñ/@Ô/@Ñ@À'ÑJÔJÑKÔKÐKr#   c                 ó>  ‡— |sdS t           j        r%‰                     d¦  «        r|‰dd…         k    rdS |                      ||¦  «        sd|v rdS t	          |¦  «        }|j        d|fv r|j        ‰k    rdS t          ˆfd„t           j        D ¦   «         ¦  «        S )z·
        Return True if the given request *shouldn't* notify the site managers
        according to project settings or in situations outlined by the inline
        comments.
        Tr%   Néÿÿÿÿú?rM   c              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S )N)r   )Ú.0ÚpatternÚuris     €r!   ú	<genexpr>zBBrokenLinkEmailsMiddleware.is_ignorable_request.<locals>.<genexpr>²   s/   øè è € ÐRÐR¨7�7—>’> #Ñ&Ô&ÐRÐRÐRÐRÐRÐRr#   )	r   r(   r*   rR   r   Únetlocr    ÚanyÚIGNORABLE_404_URLS)r   r   ra   rS   rT   Úparsed_referers     `   r!   rQ   z/BrokenLinkEmailsMiddleware.is_ignorable_request™   sÉ   ø€ ð ð 	Ø�4õ Ô ð 	 S§\¢\°#Ñ%6Ô%6ð 	¸7ÀcÈ#È2È#ÄhÒ;NÐ;NØ�4ð ×'Ò'¨°Ñ8Ô8ð 	¸SÀG¸^¸^Ø�4õ " 'Ñ*Ô*ˆØÔ  R¨ LÐ0Ð0°^Ô5HÈCÒ5OÐ5OØ�4åÐRÐRÐRÐRµhÔ6QÐRÑRÔRÑRÔRÐRr#   N)rD   rE   rF   rC   rR   rQ   rH   r#   r!   rJ   rJ   v   sI   € € € € € ðð ð ð4Lð Lð LðSð Sð Sð Sð Sr#   rJ   )rY   Úurllib.parser   Údjango.confr   Údjango.core.exceptionsr   Údjango.core.mailr   Údjango.httpr   Údjango.urlsr   Údjango.utils.deprecationr	   Údjango.utils.httpr
   r   rJ   rH   r#   r!   ú<module>ro      s  ðØ 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !à  Ð  Ð  Ð  Ð  Ð  Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø *Ð *Ð *Ð *Ð *Ð *Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø %Ð %Ð %Ð %Ð %Ð %Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðfð fð fð fð f�ñ fô fð fðR<Sð <Sð <Sð <Sð <S ñ <Sô <Sð <Sð <Sð <Sr#   