
    +hc!                         d dl mZ d dlmZ d dlmZmZmZ  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dS )    )get_user_model)
Permission)ExistsOuterRefQc                   :    e Zd Zd Zd ZddZddZddZddZdS )	BaseBackendc                     d S N )selfrequestkwargss      `/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/contrib/auth/backends.pyauthenticatezBaseBackend.authenticate	       t    c                     d S r   r   )r   user_ids     r   get_userzBaseBackend.get_user   r   r   Nc                     t                      S r   setr   user_objobjs      r   get_user_permissionsz BaseBackend.get_user_permissions       uur   c                     t                      S r   r   r   s      r   get_group_permissionsz!BaseBackend.get_group_permissions   r   r   c                 b    h |                      ||          |                     ||          S N)r   )r   r    r   s      r   get_all_permissionszBaseBackend.get_all_permissions   sB    
&&xS&99
''c'::
 	
r   c                 4    ||                      ||          v S r"   )r#   )r   r   permr   s       r   has_permzBaseBackend.has_perm   s     t//c/BBBBr   r   )	__name__
__module____qualname__r   r   r   r    r#   r&   r   r   r   r	   r	      s                  
 
 
 
C C C C C Cr   r	   c                   t     e Zd ZdZddZd Zd Zd Zd ZddZ	dd	Z
d fd
	Zd fd	Zd ZddZd Z xZS )ModelBackendz9
    Authenticates against settings.AUTH_USER_MODEL.
    Nc                 ^   ||                     t          j                  }||d S 	 t          j                            |          }|                    |          r|                     |          r|S d S d S # t          j        $ r% t                                          |           Y d S w xY wr   )	get	UserModelUSERNAME_FIELD_default_managerget_by_natural_keycheck_passworduser_can_authenticateDoesNotExistset_password)r   r   usernamepasswordr   users         r   r   zModelBackend.authenticate$   s    zz)":;;Hx/F	-@@JJD ""8,, 1K1KD1Q1Q     % 	/ 	/ 	/ KK$$X......	/s   A8 80B,+B,c                 0    t          |dd          }|p|du S )z{
        Reject users with is_active=False. Custom user models that don't have
        that attribute are allowed.
        	is_activeN)getattr)r   r8   r:   s      r   r3   z"ModelBackend.user_can_authenticate3   s%    
 D+t44	-I--r   c                 4    |j                                         S r   )user_permissionsall)r   r   s     r   _get_user_permissionsz"ModelBackend._get_user_permissions;   s    (,,...r   c                     t                      j                            d          }d|                                z  }t	          j        j        di ||iS )Ngroupsz	group__%sr   )r   _meta	get_fieldrelated_query_namer   objectsfilter)r   r   user_groups_fielduser_groups_querys       r   _get_group_permissionsz#ModelBackend._get_group_permissions>   sW    *,,2<<XFF'*;*N*N*P*PP!(II,=x+HIIIr   c                    |j         r	|j        s|t                      S d|z  }t          ||          s|j        rt
          j                                        }n t          | d|z            |          }|	                    dd          
                                }t          ||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                 "    h | ]\  }}|d |S ).r   ).0ctnames      r   	<setcomp>z0ModelBackend._get_permissions.<locals>.<setcomp>S   s'    /[/[/[T222tt0D/[/[/[r   )r:   is_anonymousr   hasattris_superuserr   rE   r>   r;   values_listorder_bysetattr)r   r   r   	from_nameperm_cache_namepermss         r   _get_permissionszModelBackend._get_permissionsC   s     ! 	X%: 	co55L*Y6x11 	]$ S"*..00H&;i&GHHRR%%&?LLUUWWEHo/[/[UZ/[/[/[\\\x111r   c                 0    |                      ||d          S )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r8   r\   r   s      r   r   z!ModelBackend.get_user_permissionsV   s    
 $$XsF;;;r   c                 0    |                      ||d          S )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        groupr^   r   s      r   r    z"ModelBackend.get_group_permissions]   s    
 $$XsG<<<r   c                     |j         r	|j        s|t                      S t          |d          s&t	                                          |          |_        |j        S )N_perm_cache)r:   rS   r   rT   superr#   rb   )r   r   r   	__class__s      r   r#   z ModelBackend.get_all_permissionsd   s[    ! 	X%: 	co55Lx// 	I#(77#>#>x#H#HH ##r   c                 Z    |j         o#t                                          |||          S r"   )r:   rc   r&   )r   r   r%   r   rd   s       r   r&   zModelBackend.has_permk   s*    !Oegg&6&6x3&6&O&OOr   c                 n    |j         o-t          fd|                     |          D                       S )zU
        Return True if user_obj has any permissions in the given app_label.
        c              3   Z   K   | ]%}|d |                     d                   k    V  &d S )NrN   )index)rO   r%   	app_labels     r   	<genexpr>z0ModelBackend.has_module_perms.<locals>.<genexpr>r   sQ       *
 *
 !$**S//!"i/*
 *
 *
 *
 *
 *
r   )r:   anyr#   )r   r   ri   s     `r   has_module_permszModelBackend.has_module_permsn   sU     ! 
c *
 *
 *
 *
00::*
 *
 *
 '
 '
 	
r   Tc                    t          |t                    r7	 |                    d          \  }}nA# t          $ r t          d          w xY wt          |t                    st          d          |t          j                                        S t          t          d                    t          t          d                    z  }t          |t                    r|t          |j                  z  }n|t          ||	          z  }t          t          j                            |                    }|r|t          d
          z  }||t          |          z  }t          j                            |          S )z
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        rN   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)group__user)r8   rn   )rL   rK   T)rU   )r:   )
isinstancestrsplit
ValueErrorr   	TypeErrorr.   r0   noner   r   rn   r   rE   rF   )	r   r%   r:   include_superusersr   ri   rL   permission_quser_qs	            r   	with_permzModelBackend.with_permw   s   
 dC   	&*jjoo#	88    5  
 D*-- 	P   ?-22444Xd^^444qhtnn7M7M7MMdJ'' 	TAMMM)LLAxSSSSL
*11,??@@ 	+aT****F a),,,,F)00888s	   0 A
c                     	 t           j                            |          }n# t           j        $ r Y d S w xY w|                     |          r|nd S )Nrp   )r.   r0   r-   r4   r3   )r   r   r8   s      r   r   zModelBackend.get_user   sd    	-11W1==DD% 	 	 	44	11$77AttTAs    # 66)NNr   )TTN)r'   r(   r)   __doc__r   r3   r?   rI   r\   r   r    r#   r&   rl   rz   r   __classcell__)rd   s   @r   r+   r+      s            . . ./ / /J J J
2 2 2&< < < <= = = =$ $ $ $ $ $P P P P P P
 
 
!9 !9 !9 !9FB B B B B B Br   r+   c                       e Zd Zd ZdS )AllowAllUsersModelBackendc                     dS NTr   r   r8   s     r   r3   z/AllowAllUsersModelBackend.user_can_authenticate   r   r   Nr'   r(   r)   r3   r   r   r   r   r      #            r   r   c                   (    e Zd ZdZdZd Zd Z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                 `   |sdS d}|                      |          }| j        r>t          j        j        di t          j        |i\  }}|r|                     ||          }n6	 t          j                            |          }n# t          j        $ r Y nw xY w| 	                    |          r|n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.
        Nr   )
clean_usernamecreate_unknown_userr.   r0   get_or_creater/   configure_userr1   r4   r3   )r   r   remote_userr8   r6   createds         r   r   zRemoteUserBackend.authenticate   s      	F&&{33
 # 
	%6D  ((H  MD'  :**7D99 1DDXNN)   11$77AttTAs   "B BBc                     |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   r6   s     r   r   z RemoteUserBackend.clean_username   s	     r   c                     |S )z
        Configure a user after creation and return the updated user.

        By default, return the user unmodified.
        r   )r   r   r8   s      r   r   z RemoteUserBackend.configure_user   s	     r   N)r'   r(   r)   r|   r   r   r   r   r   r   r   r   r      sV        	 	 B B B<      r   r   c                       e Zd Zd ZdS )AllowAllUsersRemoteUserBackendc                     dS r   r   r   s     r   r3   z4AllowAllUsersRemoteUserBackend.user_can_authenticate   r   r   Nr   r   r   r   r   r      r   r   r   N)django.contrib.authr   django.contrib.auth.modelsr   django.db.modelsr   r   r   r.   r	   r+   r   r   r   r   r   r   <module>r      sI   . . . . . . 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0N	C C C C C C C C.@B @B @B @B @B; @B @B @BF       
< < < < < < < <~    %6     r   