Ë
    aõhi$  ã                   óÊ   — 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      úR/var/www/alwasay/venv/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<   € ð
Ø×&Ñ& x°SÐ&Ó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™   € ØÐØ—z‘z¤)×":Ñ":Ó;ˆHØÐ˜xÐ/Øð	Ü×-Ñ-×@Ñ@ÀÓJˆDð ×"Ñ" 8Ô,°×1KÑ1KÈDÔ1QØ�ð 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×%:Ò%:¸c¸oÜ“5ˆLà*¨YÑ6ˆÜ�x Ô1Ø×$Ò$Ü"×*Ñ*×.Ñ.Ó0‘àHœ Ð&;¸iÑ&GÓHÈÓR�Ø×%Ñ%Ð&?ÀÓL×UÑUÓWˆEÜØ˜/ÐQV×+WÁXÀRÈ²r¹4Ò,@Ó+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   € ð
 ×$Ñ$ X¨s°FÓ;Ð;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   € ð
 ×$Ñ$ X¨s°GÓ<Ð<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×%:Ò%:¸c¸oÜ“5ˆLÜ�x Ô/Ü#(¡7Ñ#>¸xÓ#HˆHÔ Ø×#Ñ#Ð#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%   ø€ Ø×!Ñ!ÒO¤e¡gÑ&6°xÀÈ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"  € ô
 �dœCÔ ðØ&*§j¡j°£oÑ#�	™8ô ˜D¤*Ô-ÜØPóð ð ˆ?Ü×-Ñ-×2Ñ2Ó4Ð4ä¤X¨d£^Ô4´q¼hÀt»nÔ7MÑMˆÜ�dœJÔ'ØœA §¡œMÑ)‰LàœA xÈÔSÑSˆLäœ
×*Ñ*×1Ñ1°,Ó?Ó@ˆÙØ”a TÔ*Ñ*ˆFØÐ Ø”a )Ô,Ñ,ˆFä×)Ñ)×0Ñ0°Ó8Ð8øô3 ò Ü ð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Ñ1°WÐ1Ó=ˆDð ×1Ñ1°$Ô7ˆtÐA¸TÐ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ò
ó!9öF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ñ‰MˆD‘'ðÜ ×1Ñ1×DÑDÀXÓN�ô # 4×#6Ñ#6¸	ÔBØ×&Ñ& w°¸gÐ&ÓF‰Dä�M‰MØCØ—>‘>×.Ñ.Ð/Ð/AðCä1õñ
 Ø×*Ñ*¨7°DÓ9�Ø×1Ñ1°$Ô7ˆtÐA¸TÐ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   