
    Gwg$                         d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	m
Z
 d dl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y)    N)get_user_model)
Permission)ExistsOuterRefQ)RemovedInDjango50Warning)func_supports_parameterc                   8    e Zd Zd Zd ZddZddZddZddZy)	BaseBackendc                      y N )selfrequestkwargss      S/var/www/horilla/myenv/lib/python3.12/site-packages/django/contrib/auth/backends.pyauthenticatezBaseBackend.authenticate           c                      y 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   	    ur   c                     t               S r   r   r   s      r   get_group_permissionsz!BaseBackend.get_group_permissions   r    r   c                 R    h | j                  ||      | j                  ||      S N)r   )r   r"   r   s      r   get_all_permissionszBaseBackend.get_all_permissions   s<    
&&xS&9
''c':
 	
r   c                 ,    || j                  ||      v S r$   )r%   )r   r   permr   s       r   has_permzBaseBackend.has_perm   s    t//c/BBBr   r   )	__name__
__module____qualname__r   r   r   r"   r%   r(   r   r   r   r   r      s!    
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.
    c                 >   ||j                  t        j                        }||y 	 t        j                  j	                  |      }|j                  |      r| j                  |      r|S y y # t        j                  $ r t               j                  |       Y y 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/	--@@JD ""8,1K1KD1Q 2R, %% 	/ K$$X.	/s   A- -,BBc                     t        |dd      S )z{
        Reject users with is_active=False. Custom user models that don't have
        that attribute are allowed.
        	is_activeT)getattrr   r:   s     r   r5   z"ModelBackend.user_can_authenticate7   s    
 t[$//r   c                 6    |j                   j                         S r   )user_permissionsall)r   r   s     r   _get_user_permissionsz"ModelBackend._get_user_permissions>   s    ((,,..r   c                     t               j                  j                  d      }d|j                         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_permissionsA   sQ    *,22<<XF'*;*N*N*PP!!((I,=x+HIIr   c                    |j                   r|j                  s|
t               S d|z  }t        ||      s|j                  rt
        j                  j                         }n t        | d|z        |      }|j                  dd      j                         }t        |||D ch c]  \  }}|d| c}}       t        ||      S c c}}w )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.)r<   is_anonymousr   hasattris_superuserr   rH   rA   r=   values_listorder_bysetattr)r   r   r   	from_nameperm_cache_namepermsctnames           r   _get_permissionszModelBackend._get_permissionsF   s     !!X%:%:co5L*Y6x1$$"**..0H&;i&GHR%%&?LUUWE/QV+WXRr4,@+W x11 ,Xs   "Cc                 (    | j                  ||d      S )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r:   r\   r   s      r   r   z!ModelBackend.get_user_permissions[   s    
 $$XsF;;r   c                 (    | j                  ||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_permissionsb   s    
 $$XsG<<r   c                     |j                   r|j                  s|
t               S t        |d      st        |   |      |_        |j                  S )N_perm_cache)r<   rQ   r   rR   superr%   rb   )r   r   r   	__class__s      r   r%   z ModelBackend.get_all_permissionsi   sG    !!X%:%:co5Lx/#(7#>x#HH ###r   c                 D    |j                   xr t        | 	  |||      S r$   )r<   rc   r(   )r   r   r'   r   rd   s       r   r(   zModelBackend.has_permp   s%    !!Oeg&6x3&6&OOr   c                 f    |j                   xr# t        fd| j                  |      D              S )zU
        Return True if user_obj has any permissions in the given app_label.
        c              3   L   K   | ]  }|d |j                  d       k(    y w)NrP   )index).0r'   	app_labels     r   	<genexpr>z0ModelBackend.has_module_perms.<locals>.<genexpr>w   s.      *
 "4::c?#y0*
s   !$)r<   anyr%   )r   r   rj   s     `r   has_module_permszModelBackend.has_module_permss   s7     !! 
c *
00:*
 '
 	
r   c                    t        |t              r	 |j                  d      \  }}nt        |t              st        d      |t        j                  j                         S t        t        d            t        t        d            z  }t        |t              r|t        |j                        z  }n|t              z  }t        t        j                  j                  |            }|r|t        d	
      z  }||t        |      z  }t        j                  j                  |      S # t        $ r t        d      w xY w)z
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        rP   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)r:   ro   )rO   rN   T)rS   )r<   )
isinstancestrsplit
ValueErrorr   	TypeErrorr0   r2   noner   r   ro   r   rH   rI   )	r   r'   r<   include_superusersr   rj   rO   permission_quser_qs	            r   	with_permzModelBackend.with_perm|   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   D0 0Ec                     	 t         j                  j                  |      }| j	                  |      r|S d S # t         j                  $ r Y y w xY w)Nrq   )r0   r2   r/   r6   r5   )r   r   r:   s      r   r   zModelBackend.get_user   sT    	--11W1=D 11$7tATA %% 		s    7 AA)NNr   )TTN)r)   r*   r+   __doc__r   r5   rB   rL   r\   r   r"   r%   r(   rm   r{   r   __classcell__)rd   s   @r   r-   r-   #   sH    0/J
2*<=$P
!9FBr   r-   c                       e Zd Zd Zy)AllowAllUsersModelBackendc                      yNTr   r>   s     r   r5   z/AllowAllUsersModelBackend.user_can_authenticate   r   r   Nr)   r*   r+   r5   r   r   r   r   r          r   r   c                   (    e Zd ZdZdZd Zd ZddZy)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                 0   |syd}d}| j                  |      }| j                  r3t        j                  j                  di t        j
                  |i\  }}n 	 t        j                  j                  |      }t        | j                  d      r| j                  |||      }nGt        j                  d| j                  j                   dt               |r| j                  ||      }| j                  |      r|S dS # t        j                  $ r Y w xY w)	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.
        NFcreated)r   z1`created=True` must be added to the signature of z.configure_user().)categoryr   )clean_usernamecreate_unknown_userr0   r2   get_or_creater1   r3   r6   r	   configure_userwarningswarnrd   r+   r   r5   )r   r   remote_userr   r:   r8   s         r   r   zRemoteUserBackend.authenticate   s    &&{3
 ##%66DD ++X6MD' 11DDXN #4#6#6	B&&wg&FDMMC>>..//AC1
 **7D911$7tATA )) s   C? ?DD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   r8   s     r   r   z RemoteUserBackend.clean_username   s	     r   c                     |S )zp
        Configure a user and return the updated user.

        By default, return the user unmodified.
        r   )r   r   r:   r   s       r   r   z RemoteUserBackend.configure_user   s	     r   N)T)r)   r*   r+   r}   r   r   r   r   r   r   r   r   r      s     	 (BTr   r   c                       e Zd Zd Zy)AllowAllUsersRemoteUserBackendc                      yr   r   r>   s     r   r5   z4AllowAllUsersRemoteUserBackend.user_can_authenticate   r   r   Nr   r   r   r   r   r      r   r   r   )r   django.contrib.authr   django.contrib.auth.modelsr   django.db.modelsr   r   r   django.utils.deprecationr   django.utils.inspectr	   r0   r   r-   r   r   r   r   r   r   <module>r      sg     . 1 0 0 = 8	C C.AB; ABH 
H HV%6 r   