B
    £0H[  ã               @   s�   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	„ ZG d
d„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )Úsettings)Úauth)Úload_backend)ÚRemoteUserBackend)ÚImproperlyConfigured)ÚMiddlewareMixin)ÚSimpleLazyObjectc             C   s   t | dƒst | ¡| _| jS )NÚ_cached_user)Úhasattrr   Úget_userr	   )Úrequest© r   úbC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\contrib\auth\middleware.pyr   
   s    
r   c               @   s   e Zd Zdd„ ZdS )ÚAuthenticationMiddlewarec                s:   t ˆ dƒs$tdtjd krdnd ƒ‚t‡ fdd„ƒˆ _d S )NÚsessionzóThe Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE%s setting to insert 'django.contrib.sessions.middleware.SessionMiddleware' before 'django.contrib.auth.middleware.AuthenticationMiddleware'.Z_CLASSESÚ c                  s   t ˆ ƒS )N)r   r   )r   r   r   Ú<lambda>   s    z:AuthenticationMiddleware.process_request.<locals>.<lambda>)r
   ÚAssertionErrorr   Z
MIDDLEWAREr   Úuser)Úselfr   r   )r   r   Úprocess_request   s    z(AuthenticationMiddleware.process_requestN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c               @   s0   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
S )ÚRemoteUserMiddlewareaý  
    Middleware for utilizing Web-server-provided authentication.

    If request.user is not authenticated, then this middleware attempts to
    authenticate the username passed in the ``REMOTE_USER`` request header.
    If authentication is successful, the user is automatically logged in to
    persist the user in the session.

    The header used is configurable and defaults to ``REMOTE_USER``.  Subclass
    this class and change the ``header`` attribute if you need to use a
    different header.
    ZREMOTE_USERTc             C   s¤   t |dƒstdƒ‚y|j| j }W n, tk
rN   | jrJ|jjrJ|  |¡ d S X |jjr||j 	¡ |  
||¡krrd S |  |¡ tj||d�}|r ||_t ||¡ d S )Nr   zçThe Django remote user auth middleware requires the authentication middleware to be installed.  Edit your MIDDLEWARE setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware' before the RemoteUserMiddleware class.)Zremote_user)r
   r   ZMETAÚheaderÚKeyErrorÚforce_logout_if_no_headerr   Úis_authenticatedÚ_remove_invalid_userZget_usernameÚclean_usernamer   ZauthenticateÚlogin)r   r   Úusernamer   r   r   r   r   /   s"    


z$RemoteUserMiddleware.process_requestc             C   s>   |j tj }t |¡}y| |¡}W n tk
r8   Y nX |S )zr
        Allow the backend to clean the username, if the backend defines a
        clean_username method.
        )r   r   ÚBACKEND_SESSION_KEYr   r    ÚAttributeError)r   r"   r   Zbackend_strÚbackendr   r   r   r    U   s    
z#RemoteUserMiddleware.clean_usernamec             C   sP   yt |j tjd¡ƒ}W n tk
r6   t |¡ Y nX t|tƒrLt |¡ dS )z 
        Remove the current authenticated user in the request which is invalid
        but only if the user is authenticated via the RemoteUserBackend.
        r   N)	r   r   Úgetr   r#   ÚImportErrorZlogoutÚ
isinstancer   )r   r   Zstored_backendr   r   r   r   b   s    
z)RemoteUserMiddleware._remove_invalid_userN)	r   r   r   Ú__doc__r   r   r   r    r   r   r   r   r   r      s   &r   c               @   s   e Zd ZdZdZdS )ÚPersistentRemoteUserMiddlewarea£  
    Middleware for Web-server provided authentication on logon pages.

    Like RemoteUserMiddleware but keeps the user authenticated even if
    the header (``REMOTE_USER``) is not found in the request. Useful
    for setups when the external authentication via ``REMOTE_USER``
    is only expected to happen on some "logon" URL and the rest of
    the application wants to use Django's authentication mechanism.
    FN)r   r   r   r)   r   r   r   r   r   r*   q   s   	r*   N)Zdjango.confr   Zdjango.contribr   Zdjango.contrib.authr   Zdjango.contrib.auth.backendsr   Zdjango.core.exceptionsr   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   r   r   r   r*   r   r   r   r   Ú<module>   s   V