§
    ¥”j  ã                   óþ   — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z
 ddlmZmZ d„ Z G d„ d	e¦  «        Z G d
„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )z+
Provides various authentication policies.
é    N)ÚauthenticateÚget_user_model)ÚCsrfViewMiddleware)Úgettext_lazy)ÚHTTP_HEADER_ENCODINGÚ
exceptionsc                 óš   — | j                              dd¦  «        }t          |t          ¦  «        r|                     t
          ¦  «        }|S )z‰
    Return request's 'Authorization:' header, as a bytestring.

    Hide some test client ickyness where the header can be unicode.
    ÚHTTP_AUTHORIZATIONó    )ÚMETAÚgetÚ
isinstanceÚstrÚencoder   )ÚrequestÚauths     úl/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/rest_framework/authentication.pyÚget_authorization_headerr      sE   € ð Œ<×ÒÐ0°#Ñ6Ô6€DÝ�$�ÑÔð 1à�{Š{Õ/Ñ0Ô0ˆØ€Kr   c                   ó   — e Zd Zd„ ZdS )Ú	CSRFCheckc                 ó   — |S ©N© )Úselfr   Úreasons      r   Ú_rejectzCSRFCheck._reject   s   € àˆr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s#   € € € € € ðð ð ð ð r   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚBaseAuthenticationzF
    All authentication classes should extend BaseAuthentication.
    c                 ó    — t          d¦  «        ‚)zS
        Authenticate the request and return a two-tuple of (user, token).
        z#.authenticate() must be overridden.)ÚNotImplementedError©r   r   s     r   r   zBaseAuthentication.authenticate&   s   € õ "Ð"GÑHÔHÐHr   c                 ó   — dS )zç
        Return a string to be used as the value of the `WWW-Authenticate`
        header in a `401 Unauthenticated` response, or `None` if the
        authentication scheme should return `403 Permission Denied` responses.
        Nr   r$   s     r   Úauthenticate_headerz&BaseAuthentication.authenticate_header,   s	   € ð 	ˆr   N)r   r   r   Ú__doc__r   r&   r   r   r   r!   r!   !   s?   € € € € € ðð ðIð Ið Iðð ð ð ð r   r!   c                   ó*   — e Zd ZdZdZd„ Zdd„Zd„ ZdS )ÚBasicAuthenticationz>
    HTTP Basic authentication against username/password.
    Úapic                 ó.  — t          |¦  «                             ¦   «         }|r|d                              ¦   «         dk    rdS t          |¦  «        dk    r#t	          d¦  «        }t          j        |¦  «        ‚t          |¦  «        dk    r#t	          d¦  «        }t          j        |¦  «        ‚	 	 t          j        |d         ¦  «         	                    d¦  «        }n=# t          $ r0 t          j        |d         ¦  «         	                    d	¦  «        }Y nw xY w|                     d
d¦  «        \  }}nI# t          t          t          t          j        f$ r$ t	          d¦  «        }t          j        |¦  «        ‚w xY w|                      |||¦  «        S )zœ
        Returns a `User` if a correct username and password have been supplied
        using HTTP Basic authentication.  Otherwise returns `None`.
        r   s   basicNé   z.Invalid basic header. No credentials provided.é   zCInvalid basic header. Credentials string should not contain spaces.zutf-8zlatin-1ú:z?Invalid basic header. Credentials not correctly base64 encoded.)r   ÚsplitÚlowerÚlenÚ_r   ÚAuthenticationFailedÚbase64Ú	b64decodeÚdecodeÚUnicodeDecodeErrorÚ	TypeErrorÚ
ValueErrorÚbinasciiÚErrorÚauthenticate_credentials)r   r   r   ÚmsgÚauth_decodedÚuseridÚpasswords          r   r   z BasicAuthentication.authenticate;   sŽ  € õ
 (¨Ñ0Ô0×6Ò6Ñ8Ô8ˆàð 	�t˜A”w—}’}‘”¨(Ò2Ð2Ø�4åˆt‰9Œ9˜Š>ˆ>ÝÐDÑEÔEˆCÝÔ1°#Ñ6Ô6Ð6Ý�‰YŒY˜Š]ˆ]ÝÐYÑZÔZˆCÝÔ1°#Ñ6Ô6Ð6ð		7ðKÝ%Ô/°°Q´Ñ8Ô8×?Ò?ÀÑHÔH��øÝ%ð Kð Kð KÝ%Ô/°°Q´Ñ8Ô8×?Ò?À	ÑJÔJ���ðKøøøð  ,×1Ò1°#°qÑ9Ô9ÑˆF�H�HøÝ�:Õ'9½8¼>ÐJð 	7ð 	7ð 	7ÝÐUÑVÔVˆCÝÔ1°#Ñ6Ô6Ð6ð	7øøøð ×,Ò,¨V°X¸wÑGÔGÐGs+   Â2-C  ÃD7 Ã 7DÄD7 ÄDÄD7 Ä7AE=Nc                 óê   — t          ¦   «         j        |d|i}t          dd|i|¤Ž}|€!t          j        t          d¦  «        ¦  «        ‚|j        s!t          j        t          d¦  «        ¦  «        ‚|dfS )z
        Authenticate the userid and password against username and password
        with optional request for context.
        r@   r   NzInvalid username/password.úUser inactive or deleted.r   )r   ÚUSERNAME_FIELDr   r   r3   r2   Ú	is_active)r   r?   r@   r   ÚcredentialsÚusers         r   r<   z,BasicAuthentication.authenticate_credentialsY   s†   € õ ÑÔÔ+¨VØ˜ð
ˆõ Ð;Ð; GÐ;¨{Ð;Ð;ˆàˆ<ÝÔ1µ!Ð4PÑ2QÔ2QÑRÔRÐRàŒ~ð 	RÝÔ1µ!Ð4OÑ2PÔ2PÑQÔQÐQà�dˆ|Ðr   c                 ó   — d| j         z  S )NzBasic realm="%s")Úwww_authenticate_realmr$   s     r   r&   z'BasicAuthentication.authenticate_headerl   s   € Ø! DÔ$?Ñ?Ð?r   r   )r   r   r   r'   rH   r   r<   r&   r   r   r   r)   r)   5   s`   € € € € € ðð ð #ÐðHð Hð Hð<ð ð ð ð&@ð @ð @ð @ð @r   r)   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSessionAuthenticationz<
    Use Django's session framework for authentication.
    c                 óv   — t          |j        dd¦  «        }|r|j        sdS |                      |¦  «         |dfS )z{
        Returns a `User` if the request session currently has a logged in user.
        Otherwise returns `None`.
        rF   N)ÚgetattrÚ_requestrD   Úenforce_csrf©r   r   rF   s      r   r   z"SessionAuthentication.authenticateu   sP   € õ �wÔ'¨°Ñ6Ô6ˆð ð 	˜4œ>ð 	Ø�4à×Ò˜'Ñ"Ô"Ð"ð �dˆ|Ðr   c                 ó¶   — d„ }t          |¦  «        }|                     |¦  «         |                     |ddi ¦  «        }|rt          j        d|z  ¦  «        ‚dS )zK
        Enforce CSRF validation for session based authentication.
        c                 ó   — d S r   r   )r   s    r   Údummy_get_responsez>SessionAuthentication.enforce_csrf.<locals>.dummy_get_response‹   s   € Ø�4r   Nr   zCSRF Failed: %s)r   Úprocess_requestÚprocess_viewr   ÚPermissionDenied)r   r   rR   Úcheckr   s        r   rN   z"SessionAuthentication.enforce_csrf‡   sz   € ð	ð 	ð 	õ Ð,Ñ-Ô-ˆà×Ò˜gÑ&Ô&Ð&Ø×#Ò# G¨T°2°rÑ:Ô:ˆØð 	JåÔ-Ð.?À&Ñ.HÑIÔIÐIð	Jð 	Jr   N)r   r   r   r'   r   rN   r   r   r   rJ   rJ   p   sA   € € € € € ðð ðð ð ð$Jð Jð Jð Jð Jr   rJ   c                   ó4   — e Zd ZdZdZdZd„ Z	 d„ Zd„ Zd„ Z	dS )ÚTokenAuthenticationa  
    Simple token based authentication.

    Clients should authenticate by passing the token key in the "Authorization"
    HTTP header, prepended with the string "Token ".  For example:

        Authorization: Token 401f7ac837da42b97f613d789819ff93537bee6a
    ÚTokenNc                 ó.   — | j         �| j         S ddlm} |S )Nr   )rY   )ÚmodelÚrest_framework.authtoken.modelsrY   )r   rY   s     r   Ú	get_modelzTokenAuthentication.get_model¤   s)   € ØŒ:Ð!Ø”:ÐØ9Ð9Ð9Ð9Ð9Ð9Øˆr   c                 óv  — t          |¦  «                             ¦   «         }|rG|d                              ¦   «         | j                             ¦   «                              ¦   «         k    rd S t          |¦  «        dk    r#t          d¦  «        }t          j        |¦  «        ‚t          |¦  «        dk    r#t          d¦  «        }t          j        |¦  «        ‚	 |d          	                    ¦   «         }n1# t          $ r$ t          d¦  «        }t          j        |¦  «        ‚w xY w|                      |¦  «        S )Nr   r,   z.Invalid token header. No credentials provided.r-   z=Invalid token header. Token string should not contain spaces.zIInvalid token header. Token string should not contain invalid characters.)r   r/   r0   Úkeywordr   r1   r2   r   r3   r6   ÚUnicodeErrorr<   )r   r   r   r=   Útokens        r   r   z TokenAuthentication.authenticate±   s  € Ý'¨Ñ0Ô0×6Ò6Ñ8Ô8ˆàð 	�t˜A”w—}’}‘”¨$¬,×*<Ò*<Ñ*>Ô*>×*EÒ*EÑ*GÔ*GÒGÐGØ�4åˆt‰9Œ9˜Š>ˆ>ÝÐDÑEÔEˆCÝÔ1°#Ñ6Ô6Ð6Ý�‰YŒY˜Š]ˆ]ÝÐSÑTÔTˆCÝÔ1°#Ñ6Ô6Ð6ð	7Ø˜”G—N’NÑ$Ô$ˆEˆEøÝð 	7ð 	7ð 	7ÝÐ_Ñ`Ô`ˆCÝÔ1°#Ñ6Ô6Ð6ð	7øøøð ×,Ò,¨UÑ3Ô3Ð3s   ÃC5 Ã5.D#c                 óT  — |                       ¦   «         }	 |j                             d¦  «                             |¬¦  «        }n/# |j        $ r" t          j        t          d¦  «        ¦  «        ‚w xY w|j        j	        s!t          j        t          d¦  «        ¦  «        ‚|j        |fS )NrF   )ÚkeyzInvalid token.rB   )
r]   ÚobjectsÚselect_relatedr   ÚDoesNotExistr   r3   r2   rF   rD   )r   rc   r[   ra   s       r   r<   z,TokenAuthentication.authenticate_credentialsÆ   s²   € Ø—’Ñ Ô ˆð	GØ”M×0Ò0°Ñ8Ô8×<Ò<ÀÐ<ÑEÔEˆEˆEøØÔ!ð 	Gð 	Gð 	GÝÔ1µ!Ð4DÑ2EÔ2EÑFÔFÐFð	Gøøøð ŒzÔ#ð 	RÝÔ1µ!Ð4OÑ2PÔ2PÑQÔQÐQà”
˜EÐ"Ð"s   –.A Á,A1c                 ó   — | j         S r   )r_   r$   s     r   r&   z'TokenAuthentication.authenticate_headerÒ   s
   € ØŒ|Ðr   )
r   r   r   r'   r_   r[   r]   r   r<   r&   r   r   r   rX   rX   —   sk   € € € € € ðð ð €GØ€Eðð ð ðð4ð 4ð 4ð*
#ð 
#ð 
#ðð ð ð ð r   rX   c                   ó   — e Zd ZdZdZd„ ZdS )ÚRemoteUserAuthenticationa  
    REMOTE_USER authentication.

    To use this, set up your web server to perform authentication, which will
    set the REMOTE_USER environment variable. You will need to have
    'django.contrib.auth.backends.RemoteUserBackend in your
    AUTHENTICATION_BACKENDS setting
    ÚREMOTE_USERc                 ó€   — t          ||j                             | j        ¦  «        ¬¦  «        }|r|j        r|d fS d S d S )N)r   Úremote_user)r   r   r   ÚheaderrD   rO   s      r   r   z%RemoteUserAuthentication.authenticateå   sU   € Ý G¸¼×9IÒ9IÈ$Ì+Ñ9VÔ9VÐWÑWÔWˆØð 	 �D”Nð 	 Ø˜$�<Ðð	 ð 	 ð 	 ð 	 r   N)r   r   r   r'   rm   r   r   r   r   ri   ri   Ö   s4   € € € € € ðð ð €Fð ð  ð  ð  ð  r   ri   )r'   r4   r:   Údjango.contrib.authr   r   Údjango.middleware.csrfr   Údjango.utils.translationr   r2   Úrest_frameworkr   r   r   r   r!   r)   rJ   rX   ri   r   r   r   ú<module>rr      s¢  ððð ð €€€Ø €€€à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ð
ð 
ð 
ðð ð ð ð Ð"ñ ô ð ðð ð ð ð ñ ô ð ð(8@ð 8@ð 8@ð 8@ð 8@Ð,ñ 8@ô 8@ð 8@ðv$Jð $Jð $Jð $Jð $JÐ.ñ $Jô $Jð $JðN<ð <ð <ð <ð <Ð,ñ <ô <ð <ð~ ð  ð  ð  ð  Ð1ñ  ô  ð  ð  ð  r   