
    hW!                         S SK Jr  S SKJr  S SKJrJrJr  \" 5       r " S S5      r	 " S S\	5      r
 " S S	\
5      r " S
 S\
5      r " S S\5      rg)    )get_user_model)
Permission)ExistsOuterRefQc                   H    \ rS rSrS rS rS
S jrS
S jrS
S jrS
S jr	S	r
g)BaseBackend   c                     g N )selfrequestkwargss      N/var/www/html/env/lib/python3.13/site-packages/django/contrib/auth/backends.pyauthenticateBaseBackend.authenticate	           c                     g r   r   )r   user_ids     r   get_userBaseBackend.get_user   r   r   Nc                     [        5       $ r   setr   user_objobjs      r   get_user_permissions BaseBackend.get_user_permissions   	    ur   c                     [        5       $ r   r   r   s      r   get_group_permissions!BaseBackend.get_group_permissions   r"   r   c                 B    1 U R                  XS9kU R                  XS9k$ N)r   )r    r$   r   s      r   get_all_permissionsBaseBackend.get_all_permissions   s8    
&&x&9
''':
 	
r   c                 $    X R                  XS9;   $ r'   )r(   )r   r   permr   s       r   has_permBaseBackend.has_perm   s    ///BBBr   r   r   )__name__
__module____qualname____firstlineno__r   r   r    r$   r(   r,   __static_attributes__r   r   r   r	   r	      s!    
Cr   r	   c                      ^  \ rS rSrSrSS jrS rS rS rS r	SS jr
SS	 jrSU 4S
 jjrSU 4S jjrS rSS jrS rSrU =r$ )ModelBackend   z1
Authenticates against settings.AUTH_USER_MODEL.
c                 Z   Uc  UR                  [        R                  5      nUb  Uc  g  [        R                  R	                  U5      nUR                  U5      (       a  U R                  U5      (       a  U$ g g ! [        R                   a    [        5       R                  U5         g f = f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   ModelBackend.authenticate$   s    zz)":":;Hx/	--@@JD ""8,,1K1KD1Q1Q 2R, %% 	/ K$$X.	/s   A: :-B*)B*c                     [        USS5      $ )zc
Reject users with is_active=False. Custom user models that don't have
that attribute are allowed.
	is_activeT)getattrr   rB   s     r   r=   "ModelBackend.user_can_authenticate3   s    
 t[$//r   c                 6    UR                   R                  5       $ r   )user_permissionsall)r   r   s     r   _get_user_permissions"ModelBackend._get_user_permissions:   s    ((,,..r   c                     [        5       R                  R                  S5      nSUR                  5       -  n[        R
                  R                  " S0 X10D6$ )Ngroupsz	group__%sr   )r   _meta	get_fieldrelated_query_namer   objectsfilter)r   r   user_groups_fielduser_groups_querys       r   _get_group_permissions#ModelBackend._get_group_permissions=   sO    *,22<<XF'*;*N*N*PP!!((I,=+HIIr   c                    UR                   (       a  UR                  (       d  Ub
  [        5       $ SU-  n[        X5      (       d  UR                  (       a  [
        R                  R                  5       nO[        U SU-  5      " U5      nUR                  SS5      R                  5       n[        XU VVs1 s H  u  pgU< SU< 3iM     snn5        [        X5      $ s  snnf )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.
z_%s_perm_cachez_get_%s_permissionscontent_type__app_labelcodename.)rE   is_anonymousr   hasattris_superuserr   rS   rK   rF   values_listorder_bysetattr)r   r   r   	from_nameperm_cache_namepermsctnames           r   _get_permissionsModelBackend._get_permissionsB   s     !!X%:%:co5L*Y6x11$$"**..0&;i&GHR%%&?LUUWEQV+WQVXRr4,@QV+W x11 ,Xs   5Cc                 &    U R                  XS5      $ )z[
Return a set of permission strings the user `user_obj` has from their
`user_permissions`.
rB   rh   r   s      r   r    !ModelBackend.get_user_permissionsW   s    
 $$XF;;r   c                 &    U R                  XS5      $ )zY
Return a set of permission strings the user `user_obj` has from the
groups they belong.
grouprk   r   s      r   r$   "ModelBackend.get_group_permissions^   s    
 $$XG<<r   c                    > UR                   (       a  UR                  (       d  Ub
  [        5       $ [        US5      (       d  [        TU ]  U5      Ul        UR                  $ )N_perm_cache)rE   r]   r   r^   superr(   rq   )r   r   r   	__class__s      r   r(    ModelBackend.get_all_permissionse   sJ    !!X%:%:co5Lx//#(7#>x#HH ###r   c                 F   > UR                   =(       a    [        TU ]	  XUS9$ r'   )rE   rr   r,   )r   r   r+   r   rs   s       r   r,   ModelBackend.has_perml   s#    !!Oeg&6x3&6&OOr   c                 r   ^ UR                   =(       a$    [        U4S jU R                  U5       5       5      $ )zE
Return True if user_obj has any permissions in the given app_label.
c              3   R   >#    U  H  nUS UR                  S5       T:H  v   M     g 7f)Nr\   )index).0r+   	app_labels     r   	<genexpr>0ModelBackend.has_module_perms.<locals>.<genexpr>s   s-      *
: "4::c?#y0:s   $')rE   anyr(   )r   r   r{   s     `r   has_module_permsModelBackend.has_module_permso   s7     !! 
c *
00:*
 '
 	
r   c                    [        U[        5      (       a   UR                  S5      u  pVO [        U[        5      (       d  [        S5      eUb  [        R                  R                  5       $ [        [        S5      S9[        [        S5      S9-  n[        U[        5      (       a  U[        UR                  S9-  nOU[        WWS9-  n[        [        R                  R                  U5      5      nU(       a  U[        S	S
9-  nUb  U[        US9-  n[        R                  R                  U5      $ ! [         a    [        S5      ef = f)zi
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.pk)group__user)rB   r   )r[   rZ   T)r_   )rE   )
isinstancestrsplit
ValueErrorr   	TypeErrorr8   r:   noner   r   r   r   rS   rT   )	r   r+   rE   include_superusersr   r{   r[   permission_quser_qs	            r   	with_permModelBackend.with_permx   s+   
 dC  &*jjo#	8 D*--P  ?--2244Xd^4qhtn7MMdJ''AM)LAxSSL
**11,?@aT**F a),,F))00883   5 s   D3 3E	c                      [         R                  R                  US9nU R	                  U5      (       a  U$ S $ ! [         R                   a     g f = f)Nr   )r8   r:   r7   r>   r=   )r   r   rB   s      r   r   ModelBackend.get_user   sW    	--11W1=D 11$77tATA %% 		s   9 AAr   )NNr   )TTN)r.   r/   r0   r1   __doc__r   r=   rL   rW   rh   r    r$   r(   r,   r   r   r   r2   __classcell__)rs   s   @r   r4   r4      sN    0/J
2*<=$P
!9FB Br   r4   c                       \ rS rSrS rSrg)AllowAllUsersModelBackend   c                     gNTr   rG   s     r   r=   /AllowAllUsersModelBackend.user_can_authenticate   r   r   r   Nr.   r/   r0   r1   r=   r2   r   r   r   r   r          r   r   c                   2    \ rS rSrSrSrS rS rS	S jrSr	g)
RemoteUserBackend   a  
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                    U(       d  gSnSnU R                  U5      nU R                  (       a3  [        R                  R                  " S0 [        R
                  U0D6u  pCO  [        R                  R                  U5      nU R                  XUS9nU R                  U5      (       a  U$ S$ ! [        R                   a     N@f = f)a9  
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.
NF)createdr   )
clean_usernamecreate_unknown_userr8   r:   get_or_creater9   r;   r>   configure_userr=   )r   r   remote_userr   rB   r@   s         r   r   RemoteUserBackend.authenticate   s     &&{3
 ##%66DD ++X6MD' 11DDXN ""7'"B11$77tATA )) s   #B, ,CCc                     U$ )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@   s     r   r    RemoteUserBackend.clean_username   s	     r   c                     U$ )zX
Configure a user and return the updated user.

By default, return the user unmodified.
r   )r   r   rB   r   s       r   r    RemoteUserBackend.configure_user   s	     r   r   N)T)
r.   r/   r0   r1   r   r   r   r   r   r2   r   r   r   r   r      s    	 B<r   r   c                       \ rS rSrS rSrg)AllowAllUsersRemoteUserBackend   c                     gr   r   rG   s     r   r=   4AllowAllUsersRemoteUserBackend.user_can_authenticate   r   r   r   Nr   r   r   r   r   r      r   r   r   N)django.contrib.authr   django.contrib.auth.modelsr   django.db.modelsr   r   r   r8   r	   r4   r   r   r   r   r   r   <module>r      s\    . 1 0 0	C C.AB; ABH 
< <~%6 r   