o
    lf$                     @   s   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 dZG d	d
 d
eZG dd deZG dd deZG dd deZdS )    N)get_user_model)
Permission)ExistsOuterRefQ)RemovedInDjango50Warning)func_supports_parameterc                   @   sD   e Z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S )BaseBackendc                 K      d S N )selfrequestkwargsr   r   `/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/django/contrib/auth/backends.pyauthenticate      zBaseBackend.authenticatec                 C   r
   r   r   )r   user_idr   r   r   get_user   r   zBaseBackend.get_userNc                 C      t  S r   setr   user_objobjr   r   r   get_user_permissions      z BaseBackend.get_user_permissionsc                 C   r   r   r   r   r   r   r   get_group_permissions   r   z!BaseBackend.get_group_permissionsc                 C   s    h | j ||d| j||dS N)r   )r   r   r   r   r   r   get_all_permissions   s
   zBaseBackend.get_all_permissionsc                 C   s   || j ||dv S r   )r   r   r   permr   r   r   r   has_perm   s   zBaseBackend.has_permr   )	__name__
__module____qualname__r   r   r   r   r   r"   r   r   r   r   r	      s    


r	   c                       s   e Zd ZdZ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 fdd	Zd fdd	Zdd ZdddZdd Z  ZS )ModelBackendz9
    Authenticates against settings.AUTH_USER_MODEL.
    Nc                 K   s|   |d u r
| tj}|d u s|d u rd S ztj|}W n tjy-   t | Y d S w ||r:| |r<|S d S d S r   )	get	UserModelUSERNAME_FIELD_default_managerget_by_natural_keyDoesNotExistset_passwordcheck_passworduser_can_authenticate)r   r   usernamepasswordr   userr   r   r   r   (   s   zModelBackend.authenticatec                 C   s   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   r2   r   r   r   r/   7   s   z"ModelBackend.user_can_authenticatec                 C   s
   |j  S r   )user_permissionsall)r   r   r   r   r   _get_user_permissions>   s   
z"ModelBackend._get_user_permissionsc                 C   s0   t  jd}d|  }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_queryr   r   r   _get_group_permissionsA   s   z#ModelBackend._get_group_permissionsc                 C   s   |j r
|js
|durt S d| }t||s;|jrtj }n	t| d| |}|	dd
 }t||d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                 S   s   h | ]
\}}d ||f qS )z%s.%sr   ).0ctnamer   r   r   	<setcomp>W   s    z0ModelBackend._get_permissions.<locals>.<setcomp>)r3   is_anonymousr   hasattris_superuserr   r=   r7   r4   values_listorder_bysetattr)r   r   r   	from_nameperm_cache_namepermsr   r   r   _get_permissionsF   s   

zModelBackend._get_permissionsc                 C      |  ||dS )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r2   rQ   r   r   r   r   r   [      z!ModelBackend.get_user_permissionsc                 C   rR   )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        grouprS   r   r   r   r   r   b   rT   z"ModelBackend.get_group_permissionsc                    s8   |j r
|js
|d urt S t|dst ||_|jS )N_perm_cache)r3   rH   r   rI   superr   rV   r   	__class__r   r   r   i   s
   
z ModelBackend.get_all_permissionsc                    s   |j ot j|||dS r   )r3   rW   r"   r    rX   r   r   r"   p   s   zModelBackend.has_permc                    s"   |j ot fdd| |D S )zU
        Return True if user_obj has any permissions in the given app_label.
        c                 3   s&    | ]}|d | d  kV  qd S )N.)index)rD   r!   	app_labelr   r   	<genexpr>w   s
    
z0ModelBackend.has_module_perms.<locals>.<genexpr>)r3   anyr   )r   r   r]   r   r\   r   has_module_permss   s   zModelBackend.has_module_permsTc           	      C   s   t |trz	|d\}}W n ty   tdw t |ts#td|dur,tj S t	t
ddt	t
ddB }t |trH|t	|jdM }n|t	||d	M }ttj|}|ra|t	d
dO }|durl|t	|dM }tj|S )z
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        rZ   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)r2   ra   )rC   rB   T)rJ   )r3   )
isinstancestrsplit
ValueErrorr   	TypeErrorr(   r*   noner   r   ra   r   r=   r>   )	r   r!   r3   include_superusersr   r]   rC   permission_quser_qr   r   r   	with_perm|   s0   



zModelBackend.with_permc                 C   s<   z	t jj|d}W n t jy   Y d S w | |r|S d S )Nrc   )r(   r*   r'   r,   r/   )r   r   r2   r   r   r   r      s   zModelBackend.get_user)NNr   )TTN)r#   r$   r%   __doc__r   r/   r8   rA   rQ   r   r   r   r"   r`   rm   r   __classcell__r   r   rX   r   r&   #   s    



	#r&   c                   @      e Zd Zdd ZdS )AllowAllUsersModelBackendc                 C      dS NTr   r5   r   r   r   r/      r   z/AllowAllUsersModelBackend.user_can_authenticateNr#   r$   r%   r/   r   r   r   r   rq          rq   c                   @   s.   e Zd ZdZdZdd Zdd Zd
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S d}d}|  |}| jrtjjdi tj|i\}}nztj|}W n
 tjy1   Y nw t| j	drA| j	|||d}nt
jd| jj dtd |rV| 	||}| |r]|S 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.
        NFcreated)rw   z1`created=True` must be added to the signature of z.configure_user().)categoryr   )clean_usernamecreate_unknown_userr(   r*   get_or_creater)   r+   r,   r   configure_userwarningswarnrY   r%   r   r/   )r   r   remote_userrw   r2   r0   r   r   r   r      s2   	

zRemoteUserBackend.authenticatec                 C   s   |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   r0   r   r   r   ry      s   z RemoteUserBackend.clean_usernamec                 C   s   |S )zp
        Configure a user and return the updated user.

        By default, return the user unmodified.
        r   )r   r   r2   rw   r   r   r   r|      s   z RemoteUserBackend.configure_userN)T)r#   r$   r%   rn   rz   r   ry   r|   r   r   r   r   rv      s    *	rv   c                   @   rp   )AllowAllUsersRemoteUserBackendc                 C   rr   rs   r   r5   r   r   r   r/      r   z4AllowAllUsersRemoteUserBackend.user_can_authenticateNrt   r   r   r   r   r      ru   r   )r}   django.contrib.authr   django.contrib.auth.modelsr   django.db.modelsr   r   r   django.utils.deprecationr   django.utils.inspectr   r(   r	   r&   rq   rv   r   r   r   r   r   <module>   s     K