
^Q\D                 @   s   d  d l  m Z d  d l m Z d  d l m Z e   Z Gd d   d e  Z Gd d   d e  Z	 Gd d	   d	 e  Z
 Gd
 d   d e
  Z d S)    )unicode_literals)get_user_model)
Permissionc               @   s   e  Z d  Z d Z d 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 d d  Z d d d  Z d d   Z d d   Z d S)ModelBackendz9
    Authenticates against settings.AUTH_USER_MODEL.
    Nc             K   s   | d  k r! | j  t j  } n  y t j j |  } Wn% t j k
 r^ t   j |  Yn# X| j |  r |  j |  r | Sd  S)N)	get	UserModelUSERNAME_FIELD_default_managerget_by_natural_keyDoesNotExistZset_passwordZcheck_passworduser_can_authenticate)selfrequestusernamepasswordkwargsuser r   B/var/www/dbchiro/venv/build/Django/django/contrib/auth/backends.pyauthenticate   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      s    z"ModelBackend.user_can_authenticatec             C   s   | j  j   S)N)Zuser_permissionsall)r   user_objr   r   r   _get_user_permissions#   s    z"ModelBackend._get_user_permissionsc             C   s<   t    j j d  } d | j   } t j j i | | 6  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   Sd | } t | |  s | j rZ t j j   } n t |  d |  |  } | j	 d d  j
   } t | | t d d   | D   n  t | |  S)z
        Returns 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_permissionsZcontent_type__app_labelZcodenamec             s   s%   |  ] \ } } d  | | f Vq d S)z%s.%sNr   ).0ctnamer   r   r   	<genexpr>;   s    z0ModelBackend._get_permissions.<locals>.<genexpr>)r   is_anonymoussethasattrZis_superuserr   r   r   r   Zvalues_listZorder_bysetattr)r   r   obj	from_nameZperm_cache_nameZpermsr   r   r   _get_permissions+   s    
	&zModelBackend._get_permissionsc             C   s   |  j  | | d  S)zt
        Returns a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r   )r*   )r   r   r(   r   r   r   get_user_permissions>   s    z!ModelBackend.get_user_permissionsc             C   s   |  j  | | d  S)zr
        Returns a set of permission strings the user `user_obj` has from the
        groups they belong.
        group)r*   )r   r   r(   r   r   r   get_group_permissionsE   s    z"ModelBackend.get_group_permissionsc             C   sj   | j  s | j s | d  k	 r& t   St | d  sc |  j |  | _ | j j |  j |   n  | j S)N_perm_cache)r   r$   r%   r&   r+   r.   updater-   )r   r   r(   r   r   r   get_all_permissionsL   s    z ModelBackend.get_all_permissionsc             C   s#   | j  s d S| |  j | |  k S)NF)r   r0   )r   r   permr(   r   r   r   has_permT   s    	zModelBackend.has_permc             C   sN   | j  s d Sx: |  j |  D]) } | d | j d   | k r d Sq Wd S)zV
        Returns True if user_obj has any permissions in the given app_label.
        FN.T)r   r0   index)r   r   Z	app_labelr1   r   r   r   has_module_permsY   s    	zModelBackend.has_module_permsc             C   sL   y t  j j d |  } Wn t  j k
 r4 d  SYn X|  j |  rH | Sd  S)Npk)r   r	   r   r   r   )r   Zuser_idr   r   r   r   get_userd   s
    	zModelBackend.get_user)__name__
__module____qualname____doc__r   r   r   r   r*   r+   r-   r0   r2   r5   r7   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   m   s    z/AllowAllUsersModelBackend.user_can_authenticateN)r8   r9   r:   r   r   r   r   r   r<   l   s   r<   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 Sd } |  j  |  } |  j re t j j i | t j 6  \ } } | r |  j |  } q n. y t j j |  } Wn t j k
 r Yn X|  j	 |  r | Sd S)a  
        The username passed as ``remote_user`` is considered trusted.  This
        method simply returns the ``User`` object with the given username,
        creating a new ``User`` object if ``create_unknown_user`` is ``True``.

        Returns 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
        Performs any cleaning on the "username" prior to using it to get or
        create the user object.  Returns the cleaned username.

        By default, returns the username unchanged.
        r   )r   r   r   r   r   r>      s    z RemoteUserBackend.clean_usernamec             C   s   | S)z
        Configures a user after creation and returns the updated user.

        By default, returns the user unmodified.
        r   )r   r   r   r   r   r@      s    z RemoteUserBackend.configure_userN)r8   r9   r:   r;   r?   r   r>   r@   r   r   r   r   r=   q   s
   
	r=   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)r8   r9   r:   r   r   r   r   r   rB      s   rB   N)
__future__r   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   r   objectr   r<   r=   rB   r   r   r   r   <module>   s   	c?