3
g!                 @   s   d dl mZ d dlmZ d dlmZmZmZ e ZG dd dZ	G dd de	Z
G dd	 d	e
ZG d
d de
ZG dd deZdS )    )get_user_model)
Permission)ExistsOuterRefQc               @   sD   e Zd Zdd Zdd ZdddZddd	Zdd
dZdddZdS )BaseBackendc             K   s   d S )N )selfrequestkwargsr   r   Z/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/auth/backends.pyauthenticate	   s    zBaseBackend.authenticatec             C   s   d S )Nr   )r	   user_idr   r   r   get_user   s    zBaseBackend.get_userNc             C   s   t  S )N)set)r	   user_objobjr   r   r   get_user_permissions   s    z BaseBackend.get_user_permissionsc             C   s   t  S )N)r   )r	   r   r   r   r   r   get_group_permissions   s    z!BaseBackend.get_group_permissionsc             C   s   | j ||d| j||dS )N)r   )r   r   )r	   r   r   r   r   r   get_all_permissions   s    zBaseBackend.get_all_permissionsc             C   s   || j ||dkS )N)r   )r   )r	   r   permr   r   r   r   has_perm   s    zBaseBackend.has_perm)N)N)N)N)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r      s   


r   c                   s   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdddZ	dddZ
d fdd	Zd  fdd	Zdd Zd!ddZdd Z  ZS )"ModelBackendz9
    Authenticates against settings.AUTH_USER_MODEL.
    Nc             K   sx   |d kr|j tj}|d ks$|d kr(d S ytjj|}W n" tjk
rZ   t j| Y nX |j|rt| j|rt|S d S )N)	get	UserModelUSERNAME_FIELD_default_managerget_by_natural_keyDoesNotExistset_passwordZcheck_passworduser_can_authenticate)r	   r
   usernamepasswordr   userr   r   r   r   $   s    zModelBackend.authenticatec             C   s   t |dd}|p|dkS )z{
        Reject users with is_active=False. Custom user models that don't have
        that attribute are allowed.
        	is_activeN)getattr)r	   r&   r'   r   r   r   r#   3   s    z"ModelBackend.user_can_authenticatec             C   s
   |j j S )N)Zuser_permissionsall)r	   r   r   r   r   _get_user_permissions;   s    z"ModelBackend._get_user_permissionsc             C   s,   t  jjd}d|j  }tjjf ||iS )Ngroupsz	group__%s)r   Z_meta	get_fieldZrelated_query_namer   objectsfilter)r	   r   Zuser_groups_fieldZuser_groups_queryr   r   r   _get_group_permissions>   s    z#ModelBackend._get_group_permissionsc             C   s   |j  s|js|dk	rt S d| }t||sx|jr@tjj }nt| d| |}|j	ddj
 }t||dd |D  t||S )z
        Return the permissions of `user_obj` from `from_name`. `from_name` can
        be either "group" or "user" to return permissions from
        `_get_group_permissions` or `_get_user_permissions` respectively.
        Nz_%s_perm_cachez_get_%s_permissionscontent_type__app_labelcodenamec             S   s   h | ]\}}d ||f qS )z%s.%sr   ).0ctnamer   r   r   	<setcomp>S   s    z0ModelBackend._get_permissions.<locals>.<setcomp>)r'   is_anonymousr   hasattris_superuserr   r-   r)   r(   Zvalues_listZorder_bysetattr)r	   r   r   	from_nameZperm_cache_nameZpermsr   r   r   _get_permissionsC   s    
zModelBackend._get_permissionsc             C   s   | j ||dS )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r&   )r;   )r	   r   r   r   r   r   r   V   s    z!ModelBackend.get_user_permissionsc             C   s   | j ||dS )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        group)r;   )r	   r   r   r   r   r   r   ]   s    z"ModelBackend.get_group_permissionsc                s:   |j  s|js|d k	rt S t|ds4t j||_|jS )N_perm_cache)r'   r6   r   r7   superr   r=   )r	   r   r   )	__class__r   r   r   d   s
    
z ModelBackend.get_all_permissionsc                s   |j ot j|||dS )N)r   )r'   r>   r   )r	   r   r   r   )r?   r   r   r   k   s    zModelBackend.has_permc                s"   |j o t fdd| j|D S )zU
        Return True if user_obj has any permissions in the given app_label.
        c             3   s$   | ]}|d |j d  kV  qd S )N.)index)r2   r   )	app_labelr   r   	<genexpr>s   s   z0ModelBackend.has_module_perms.<locals>.<genexpr>)r'   anyr   )r	   r   rB   r   )rB   r   has_module_permsn   s    
zModelBackend.has_module_permsTc       
      C   s   t |tr<y|jd\}}W qN tk
r8   tdY qNX nt |tsNtdt }|dk	rf|jj S t	t
ddt	t
ddB }t |tr|t	|jdM }n|t	||d	M }ttjj|}	|r|	t	d
dO }	|dk	r|	t	|dM }	|jj|	S )z
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        r@   zDPermission name should be in the form app_label.permission_codename.z>The `perm` argument must be a string or a permission instance.Npk)Zgroup__user)r&   )rF   )r1   r0   T)r8   )r'   )
isinstancestrsplit
ValueErrorr   	TypeErrorr   r   noner   r   rF   r   r-   r.   )
r	   r   r'   Zinclude_superusersr   rB   r1   r   Zpermission_qZuser_qr   r   r   	with_permw   s,    



zModelBackend.with_permc             C   s<   yt jj|d}W n t jk
r(   d S X | j|r8|S d S )N)rF   )r   r   r   r!   r#   )r	   r   r&   r   r   r   r      s
    zModelBackend.get_user)NN)N)N)N)N)TTN)r   r   r   __doc__r   r#   r*   r/   r;   r   r   r   r   rE   rM   r   __classcell__r   r   )r?   r   r      s   


	
$r   c               @   s   e Zd Zdd ZdS )AllowAllUsersModelBackendc             C   s   dS )NTr   )r	   r&   r   r   r   r#      s    z/AllowAllUsersModelBackend.user_can_authenticateN)r   r   r   r#   r   r   r   r   rP      s   rP   c               @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
RemoteUserBackenda  
    This backend is to be used in conjunction with the ``RemoteUserMiddleware``
    found in the middleware module of this package, and is used when the server
    is handling authentication outside of Django.

    By default, the ``authenticate`` method creates ``User`` objects for
    usernames that don't already exist in the database.  Subclasses can disable
    this behavior by setting the ``create_unknown_user`` attribute to
    ``False``.
    Tc             C   s   |sdS d}| j |}| jrFtjjf tj|i\}}|rn| j||}n(ytjj|}W n tjk
rl   Y nX | j	|r||S dS )ai  
        The username passed as ``remote_user`` is considered trusted. Return
        the ``User`` object with the given username. Create a new ``User``
        object if ``create_unknown_user`` is ``True``.

        Return None if ``create_unknown_user`` is ``False`` and a ``User``
        object with the given username is not found in the database.
        N)
clean_usernamecreate_unknown_userr   r   Zget_or_creater   configure_userr    r!   r#   )r	   r
   Zremote_userr&   r$   createdr   r   r   r      s    	
zRemoteUserBackend.authenticatec             C   s   |S )z
        Perform any cleaning on the "username" prior to using it to get or
        create the user object.  Return the cleaned username.

        By default, return the username unchanged.
        r   )r	   r$   r   r   r   rR      s    z RemoteUserBackend.clean_usernamec             C   s   |S )z
        Configure a user after creation and return the updated user.

        By default, return the user unmodified.
        r   )r	   r
   r&   r   r   r   rT      s    z RemoteUserBackend.configure_userN)r   r   r   rN   rS   r   rR   rT   r   r   r   r   rQ      s
   
	rQ   c               @   s   e Zd Zdd ZdS )AllowAllUsersRemoteUserBackendc             C   s   dS )NTr   )r	   r&   r   r   r   r#      s    z4AllowAllUsersRemoteUserBackend.user_can_authenticateN)r   r   r   r#   r   r   r   r   rV      s   rV   N)Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Zdjango.db.modelsr   r   r   r   r   r   rP   rQ   rV   r   r   r   r   <module>   s    ?