o
    þÞh§2  ã                   @   s�   d dl mZ d dlmZ d dlmZ d dlmZmZ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 )é    )Úsync_to_async)Úget_user_model)Ú
Permission)ÚExistsÚOuterRefÚQc                   @   s|   e Zd Zdd„ Zd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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/html/premium_crap/venv/lib/python3.10/site-packages/django/contrib/auth/backends.pyÚauthenticate   ó   zBaseBackend.authenticatec                 Ë   s   �t | jƒ|fi |¤ŽI d H S r
   )r   r   r   r   r   r   Úaauthenticate   s   €zBaseBackend.aauthenticatec                 C   r	   r
   r   ©r   Úuser_idr   r   r   Úget_user   r   zBaseBackend.get_userc                 Ã   s   �t | jƒ|ƒI d H S r
   )r   r   r   r   r   r   Ú	aget_user   s   €zBaseBackend.aget_userNc                 C   ó   t ƒ S r
   ©Úset©r   Úuser_objÚobjr   r   r   Úget_user_permissions   ó   z BaseBackend.get_user_permissionsc                 Ã   ó   �t | jƒ||ƒI d H S r
   )r   r   r   r   r   r   Úaget_user_permissions   ó   €z!BaseBackend.aget_user_permissionsc                 C   r   r
   r   r   r   r   r   Úget_group_permissions   r   z!BaseBackend.get_group_permissionsc                 Ã   r    r
   )r   r#   r   r   r   r   Úaget_group_permissions    r"   z"BaseBackend.aget_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                 Ã   s.   �h | j ||d�I d H £| j||d�I d H £S r%   )r!   r$   r   r   r   r   Úaget_all_permissions)   s   €ÿþz BaseBackend.aget_all_permissionsc                 C   s   || j ||d�v S r%   )r&   ©r   r   Úpermr   r   r   r   Úhas_perm/   s   zBaseBackend.has_permc                 Ã   s   �||   ||¡I d H v S r
   )r'   r(   r   r   r   Ú	ahas_perm2   r"   zBaseBackend.ahas_permr
   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r!   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d„Zdd„ Zd	d
„ Zd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+‡ fdd„	Zd+‡ fdd„	Zd+‡ fdd„	Zdd „ Zd!d"„ Zd,d$d%„Z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                 Ë   sŠ   �|d u r|  tj¡}|d u s|d u rd S ztj |¡I d H }W n tjy1   tƒ  |¡ Y d S w | |¡I d H rA|  |¡rC|S d S d S r
   )	r0   r1   r2   r3   Úaget_by_natural_keyr5   r6   Úacheck_passwordr8   r9   r   r   r   r   J   s   €ýÿýzModelBackend.aauthenticatec                 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   r8   [   s   z"ModelBackend.user_can_authenticatec                 C   s
   |j  ¡ S r
   )Úuser_permissionsÚall©r   r   r   r   r   Ú_get_user_permissionsb   s   
z"ModelBackend._get_user_permissionsc                 C   s   t jj|j ¡ d�S )N)Ú	group__in)r   ÚobjectsÚfilterÚgroupsrC   rD   r   r   r   Ú_get_group_permissionse   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.
        Nú_%s_perm_cacheú_get_%s_permissionsÚcontent_type__app_labelÚcodenamec                 S   s   h | ]
\}}d ||f ’qS )ú%s.%sr   ©Ú.0ÚctÚnamer   r   r   Ú	<setcomp>y   s    z0ModelBackend._get_permissions.<locals>.<setcomp>©r?   Úis_anonymousr   ÚhasattrÚis_superuserr   rG   rC   r@   Úvalues_listÚorder_byÚsetattr©r   r   r   Ú	from_nameÚperm_cache_nameÚpermsr   r   r   Ú_get_permissionsh   s   
ÿ
zModelBackend._get_permissionsc                 Ã   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„ |2 ƒI dH ƒ t||ƒS )zSee _get_permissions().NrK   rL   rM   rN   c                 Ó   s(   �h | z3 d H W \}}d||f ’q6 S )NrO   r   rP   r   r   r   rT   Œ   s   €& z1ModelBackend._aget_permissions.<locals>.<setcomp>rU   r\   r   r   r   Ú_aget_permissions}   s   €
ý
zModelBackend._aget_permissionsc                 C   ó   |   ||d¡S )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        r<   ©r`   r   r   r   r   r   �   ó   z!ModelBackend.get_user_permissionsc                 Ã   ó   �|   ||d¡I dH S )zSee get_user_permissions().r<   N©ra   r   r   r   r   r!   —   ó   €z"ModelBackend.aget_user_permissionsc                 C   rb   )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        Úgrouprc   r   r   r   r   r#   ›   rd   z"ModelBackend.get_group_permissionsc                 Ã   re   )zSee get_group_permissions().rh   Nrf   r   r   r   r   r$   ¢   rg   z#ModelBackend.aget_group_permissionsc                    s8   |j r
|js
|d urtƒ S t|dƒstƒ  |¡|_|jS )NÚ_perm_cache)r?   rV   r   rW   Úsuperr&   ri   r   ©Ú	__class__r   r   r&   ¦   s
   
z ModelBackend.get_all_permissionsc                    s   |j otƒ j|||d�S r%   )r?   rj   r*   r(   rk   r   r   r*   ­   s   zModelBackend.has_permc                 ƒ   s    �|j otƒ j|||d�I d H S r%   )r?   rj   r+   r(   rk   r   r   r+   °   s   €zModelBackend.ahas_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   ó&   � | ]}|d |  d¡… ˆ kV  qd S ©NÚ.©Úindex©rQ   r)   ©Ú	app_labelr   r   Ú	<genexpr>·   ó
   € ÿ
ÿz0ModelBackend.has_module_perms.<locals>.<genexpr>)r?   Úanyr&   ©r   r   rt   r   rs   r   Úhas_module_perms³   s   þzModelBackend.has_module_permsc                 ƒ   s*   �|j ot‡ fdd„|  |¡I dH D ƒƒS )zSee has_module_perms()c                 3   rm   rn   rp   rr   rs   r   r   ru   ¾   rv   z1ModelBackend.ahas_module_perms.<locals>.<genexpr>N)r?   rw   r'   rx   r   rs   r   Úahas_module_perms¼   s   €þzModelBackend.ahas_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.
        ro   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)r<   ©r{   )rN   rM   T)rX   )r?   )Ú
isinstanceÚstrÚsplitÚ
ValueErrorr   Ú	TypeErrorr1   r3   Únoner   r   r{   r   rG   rH   )	r   r)   r?   Úinclude_superusersr   rt   rN   Ú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 ©Nr}   )r1   r3   r0   r5   r8   ©r   r   r<   r   r   r   r   æ   s   ÿzModelBackend.get_userc                 Ã   sD   �zt jj|d�I d H }W n t jy   Y d S w |  |¡r |S d S rˆ   )r1   r3   Úagetr5   r8   r‰   r   r   r   r   í   s   €ÿzModelBackend.aget_user)NNr
   )TTN)r,   r-   r.   Ú__doc__r   r   r8   rE   rJ   r`   ra   r   r!   r#   r$   r&   r*   r+   ry   rz   r‡   r   r   Ú__classcell__r   r   rk   r   r/   6   s*    





	
#r/   c                   @   ó   e Zd Zdd„ ZdS )ÚAllowAllUsersModelBackendc                 C   ó   dS ©NTr   rA   r   r   r   r8   ö   r   z/AllowAllUsersModelBackend.user_can_authenticateN©r,   r-   r.   r8   r   r   r   r   rŽ   õ   ó    rŽ   c                   @   s@   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd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 | j|||d�}|  	|¡rA|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©Úcreatedr   )
Úclean_usernameÚcreate_unknown_userr1   r3   Úget_or_creater2   r4   r5   Úconfigure_userr8   ©r   r   Úremote_userr•   r<   r:   r   r   r   r   	  s    	

ÿÿzRemoteUserBackend.authenticatec                 Ã   sš   �|sdS d}d}|   |¡}| jr#tjjdi tj|i¤ŽI dH \}}nztj |¡I dH }W n
 tjy8   Y nw | j|||d�I dH }|  	|¡rK|S dS )zSee authenticate().NFr”   r   )
r–   r—   r1   r3   Úaget_or_creater2   r=   r5   Úaconfigure_userr8   rš   r   r   r   r   '  s"   €

ÿÿzRemoteUserBackend.aauthenticatec                 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   r–   >  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<   r•   r   r   r   r™   G  s   z RemoteUserBackend.configure_userc                 Ã   s   �t | jƒ|||ƒI dH S )zSee configure_user()N)r   r™   rž   r   r   r   r�   O  s   €z!RemoteUserBackend.aconfigure_userN)T)
r,   r-   r.   r‹   r—   r   r   r–   r™   r�   r   r   r   r   r“   ú   s    
	r“   c                   @   r�   )ÚAllowAllUsersRemoteUserBackendc                 C   r�   r�   r   rA   r   r   r   r8   U  r   z4AllowAllUsersRemoteUserBackend.user_can_authenticateNr‘   r   r   r   r   rŸ   T  r’   rŸ   N)Úasgiref.syncr   Údjango.contrib.authr   Údjango.contrib.auth.modelsr   Údjango.db.modelsr   r   r   r1   r   r/   rŽ   r“   rŸ   r   r   r   r   Ú<module>   s    , @Z