a
    ¥Q•h$  ã                   @   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   s   d S ©N© )ÚselfÚrequestÚkwargsr   r   úU/var/www/sistema_ama/venv/lib/python3.9/site-packages/django/contrib/auth/backends.pyÚauthenticate   s    zBaseBackend.authenticatec                 C   s   d S r
   r   )r   Úuser_idr   r   r   Úget_user   s    zBaseBackend.get_userNc                 C   s   t ƒ S r
   ©Úset©r   Úuser_objÚobjr   r   r   Úget_user_permissions   s    z BaseBackend.get_user_permissionsc                 C   s   t ƒ S r
   r   r   r   r   r   Úget_group_permissions   s    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_perm)N)N)N)N)	Ú__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   sv   |d u r|  tj¡}|d u s$|d u r(d S ztj |¡}W n  tjyX   tƒ  |¡ Y n0 | |¡rr|  |¡rr|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   r.   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f i ||i¤ŽS )NÚgroupsz	group__%s)r   Ú_metaÚ	get_fieldÚrelated_query_namer   ÚobjectsÚfilter)r   r   Zuser_groups_fieldZ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||ƒsv|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   ó    z0ModelBackend._get_permissions.<locals>.<setcomp>)r/   Úis_anonymousr   ÚhasattrÚis_superuserr   r9   r3   r0   Úvalues_listÚorder_byÚsetattr)r   r   r   Ú	from_nameZperm_cache_nameÚpermsr   r   r   Ú_get_permissionsF   s    
ÿzModelBackend._get_permissionsc                 C   s   |   ||d¡S )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r.   ©rK   r   r   r   r   r   [   s    z!ModelBackend.get_user_permissionsc                 C   s   |   ||d¡S )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        ÚgrouprL   r   r   r   r   r   b   s    z"ModelBackend.get_group_permissionsc                    s8   |j r|js|d urtƒ S t|dƒs2tƒ  |¡|_|jS )NÚ_perm_cache)r/   rC   r   rD   Úsuperr   rN   r   ©Ú	__class__r   r   r   i   s
    
z ModelBackend.get_all_permissionsc                    s   |j otƒ j|||d�S r   )r/   rO   r   r   rP   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)r>   r   ©Ú	app_labelr   r   Ú	<genexpr>w   s   ÿz0ModelBackend.has_module_perms.<locals>.<genexpr>)r/   Úanyr   )r   r   rU   r   rT   r   Úhas_module_permss   s    þzModelBackend.has_module_permsTc           	      C   sê   t |tƒr:z| d¡\}}W qL ty6   tdƒ‚Y qL0 nt |tƒsLtdƒ‚|dur^tj ¡ S t	t
dƒd�t	t
dƒd�B }t |tƒr–|t	|jd�M }n|t	||d	�M }ttj |¡ƒ}|rÈ|t	d
d�O }|durÞ|t	|d�M }tj |¡S )z�
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        rR   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)Zgroup__user)r.   ©rY   )r=   r<   T)rE   )r/   )Ú
isinstanceÚstrÚsplitÚ
ValueErrorr   Ú	TypeErrorr$   r&   Únoner   r   rY   r   r9   r:   )	r   r   r/   Úinclude_superusersr   rU   r=   Zpermission_qZuser_qr   r   r   Ú	with_perm|   s.    
ÿ
ÿ

zModelBackend.with_permc                 C   s<   zt jj|d�}W n t jy(   Y d S 0 |  |¡r8|S d S )NrZ   )r$   r&   r#   r(   r+   )r   r   r.   r   r   r   r   Ÿ   s
    zModelBackend.get_user)NN)N)N)N)N)TTN)r   r    r!   Ú__doc__r   r+   r4   r;   rK   r   r   r   r   rX   rb   r   Ú__classcell__r   r   rP   r   r"   #   s   


	
#r"   c                   @   s   e Zd Zdd„ ZdS )ÚAllowAllUsersModelBackendc                 C   s   dS ©NTr   r1   r   r   r   r+   ¨   s    z/AllowAllUsersModelBackend.user_can_authenticateN©r   r    r!   r+   r   r   r   r   re   §   s   re   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f i tj|i¤Ž\}}n&ztj |¡}W n tjyb   Y n0 t| j	dƒr‚| j	|||d�}n*t
jd| jj› d�td� |r¬|  	||¡}|  |¡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)ri   z1`created=True` must be added to the signature of z.configure_user().)Úcategory)Úclean_usernameÚcreate_unknown_userr$   r&   Úget_or_creater%   r'   r(   r   Úconfigure_userÚwarningsÚwarnrQ   r!   r   r+   )r   r   Úremote_userri   r.   r,   r   r   r   r   »   s0    	

ÿÿý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   r,   r   r   r   rk   å   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   r.   ri   r   r   r   rn   î   s    z RemoteUserBackend.configure_userN)T)r   r    r!   rc   rl   r   rk   rn   r   r   r   r   rh   ¬   s
   *	rh   c                   @   s   e Zd Zdd„ ZdS )ÚAllowAllUsersRemoteUserBackendc                 C   s   dS rf   r   r1   r   r   r   r+   ø   s    z4AllowAllUsersRemoteUserBackend.user_can_authenticateNrg   r   r   r   r   rr   ÷   s   rr   )ro   Údjango.contrib.authr   Údjango.contrib.auth.modelsr   Údjango.db.modelsr   r   r   Údjango.utils.deprecationr   Údjango.utils.inspectr   r$   r	   r"   re   rh   rr   r   r   r   r   Ú<module>   s    K