
 X                 @   s   d  d l  m Z d  d l m Z d  d l m 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   t    } | d  k r* | j | j  } n  y | j j |  } Wn% | j k
 rg |   j |  Yn# X| j |  r |  j |  r | Sd  S)N)	r   getUSERNAME_FIELD_default_managerget_by_natural_keyDoesNotExistZset_passwordZcheck_passworduser_can_authenticate)selfusernamepasswordkwargs	UserModeluser r   J/home/ubuntu/projects/ifolica/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_permissionsD   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_permissionsK   s    z ModelBackend.get_all_permissionsc             C   s#   | j  s d S| |  j | |  k S)NF)r   r/   )r   r   permr'   r   r   r   has_permS   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   r/   index)r   r   Z	app_labelr0   r   r   r   has_module_permsX   s    	zModelBackend.has_module_permsc             C   sU   t    } y | j j d |  } Wn | j k
 r= d  SYn X|  j |  rQ | Sd  S)Npk)r   r   r   r
   r   )r   Zuser_idr   r   r   r   r   get_userc   s    		zModelBackend.get_user)__name__
__module____qualname____doc__r   r   r   r   r)   r*   r,   r/   r1   r4   r6   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)r7   r8   r9   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  |  } t   } |  j rn | j j i | | j 6  \ } } | r |  j |  } q n. y | j j |  } Wn | 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_usernamer   create_unknown_userr   Zget_or_creater   configure_userr	   r
   r   )r   Zremote_userr   r   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)r7   r8   r9   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)r7   r8   r9   r   r   r   r   r   rA      s   rA   N)
__future__r   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   objectr   r;   r<   rA   r   r   r   r   <module>   s   eA