Ë
    ûûàg  ã                   óØ   — 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y)z+
Provides various authentication policies.
é    N)ÚauthenticateÚget_user_model)ÚCsrfViewMiddleware)Úgettext_lazy)ÚHTTP_HEADER_ENCODINGÚ
exceptionsc                 óˆ   — | j                   j                  dd«      }t        |t        «      r|j	                  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     ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/rest_framework/authentication.pyÚget_authorization_headerr      s9   € ð �<‰<×ÑÐ0°#Ó6€DÜ�$œÔà�{‰{Ô/Ó0ˆØ€Kr   c                   ó   — e Zd Zd„ Zy)Ú	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y)Ú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ÐHr   c                  ó   — y)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ór   r!   c                   ó(   — e Zd ZdZdZd„ Zdd„Zd„ Zy)ÚBasicAuthenticationz>
    HTTP Basic authentication against username/password.
    Úapic                 óº  — t        |«      j                  «       }|r|d   j                  «       dk7  ryt        |«      dk(  r t	        d«      }t        j                  |«      ‚t        |«      dkD  r t	        d«      }t        j                  |«      ‚	 	 t        j                  |d   «      j                  d«      }|j                  d
d«      \  }}| j                  |||«      S # t        $ r* t        j                  |d   «      j                  d	«      }Y ŒZw xY w# t        t        t        t        j                  f$ r! t	        d«      }t        j                  |«      ‚w xY w)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;   sB  € ô
 (¨Ó0×6Ñ6Ó8ˆá�t˜A‘w—}‘}“¨(Ò2Øäˆt‹9˜Š>ÜÐDÓEˆCÜ×1Ñ1°#Ó6Ð6Ü�‹Y˜Š]ÜÐYÓZˆCÜ×1Ñ1°#Ó6Ð6ð		7ðKÜ%×/Ñ/°°Q±Ó8×?Ñ?ÀÓH�ð  ,×1Ñ1°#°qÓ9ÑˆF�Hð
 ×,Ñ,¨V°X¸wÓGÐGøô &ò KÜ%×/Ñ/°°Q±Ó8×?Ñ?À	ÓJ’ðKûô œ:Ô'9¼8¿>¹>ÐJò 	7ÜÐUÓVˆCÜ×1Ñ1°#Ó6Ð6ð	7ús+   Â'C  Â8D Ã 0DÄD ÄDÄD ÄA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   sv   € ô Ó×+Ñ+¨VØ˜ð
ˆô Ñ; GÐ;¨{Ñ;ˆàˆ<Ü×1Ñ1´!Ð4PÓ2QÓRÐRà�~Š~Ü×1Ñ1´!Ð4OÓ2PÓ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ó<ó&@r   r)   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚSessionAuthenticationz<
    Use Django's session framework for authentication.
    c                 óx   — t        |j                  dd«      }|r|j                  sy| j                  |«       |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   s@   € ô �w×'Ñ'¨°Ó6ˆñ ˜4Ÿ>š>Øà×Ñ˜'Ô"ð �dˆ|Ðr   c                 óž   — d„ }t        |«      }|j                  |«       |j                  |ddi «      }|rt        j                  d|z  «      ‚y)zK
        Enforce CSRF validation for session based authentication.
        c                  ó   — y r   r   )r   s    r   Údummy_get_responsez>SessionAuthentication.enforce_csrf.<locals>.dummy_get_response‹   s   € Ør   Nr   zCSRF Failed: %s)r   Úprocess_requestÚprocess_viewr   ÚPermissionDenied)r   r   rR   Úcheckr   s        r   rN   z"SessionAuthentication.enforce_csrf‡   sW   € ò	ô Ð,Ó-ˆà×Ñ˜gÔ&Ø×#Ñ# G¨T°2°rÓ:ˆÙä×-Ñ-Ð.?À&Ñ.HÓIÐIð r   N)r   r   r   r'   r   rN   r   r   r   rJ   rJ   p   s   „ ñòó$Jr   rJ   c                   ó2   — e Zd ZdZdZdZd„ Z	 d„ Zd„ Zd„ Z	y)Ú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                 óB   — | 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Øˆr   c                 ó  — t        |«      j                  «       }|r<|d   j                  «       | j                  j                  «       j	                  «       k7  ry t        |«      dk(  r t        d«      }t        j                  |«      ‚t        |«      dkD  r t        d«      }t        j                  |«      ‚	 |d   j                  «       }| j                  |«      S # t        $ r! t        d«      }t        j                  |«      ‚w xY w)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×6Ñ6Ó8ˆá�t˜A‘w—}‘}“¨$¯,©,×*<Ñ*<Ó*>×*EÑ*EÓ*GÒGØäˆt‹9˜Š>ÜÐDÓEˆCÜ×1Ñ1°#Ó6Ð6Ü�‹Y˜Š]ÜÐSÓTˆCÜ×1Ñ1°#Ó6Ð6ð	7Ø˜‘G—N‘NÓ$ˆEð
 ×,Ñ,¨UÓ3Ð3øô	 ò 	7ÜÐ_Ó`ˆCÜ×1Ñ1°#Ó6Ð6ð	7ús   Â6C Ã*Dc                 ó`  — | j                  «       }	 |j                  j                  d«      j                  |¬«      }|j                  j                  st        j                  t        d«      «      ‚|j                  |fS # |j                  $ r t        j                  t        d«      «      ‚w xY w)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‘M×0Ñ0°Ó8×<Ñ<ÀÐ<ÓEˆEð �z‰z×#Ò#Ü×1Ñ1´!Ð4OÓ2PÓQÐQà—
‘
˜EÐ"Ð"øð ×!Ñ!ò 	GÜ×1Ñ1´!Ð4DÓ2EÓFÐFð	Gús   ’+A? Á?.B-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   —   s,   „ ñð €GØ€Eòðò4ò*
#ór   rX   c                   ó   — e Zd ZdZdZd„ Zy)Ú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                  | j                  «      ¬«      }|r|j                  r|d fS y y )N)r   Úremote_user)r   r   r   ÚheaderrD   rO   s      r   r   z%RemoteUserAuthentication.authenticateå   s;   € Ü G¸¿¹×9IÑ9IÈ$Ï+É+Ó9VÔWˆÙ�D—N’NØ˜$�<Ðð #ˆ4r   N)r   r   r   r'   rm   r   r   r   r   ri   ri   Ö   s   „ ñð €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      su   ðñó Û ç <Ý 5Ý 6ç ;ò
ôÐ"ô ÷ñ ô(8@Ð,ô 8@ôv$JÐ.ô $JôN<Ð,ô <ô~ Ð1õ  r   