
    =ȋh2                         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          Z G d de          Z G d	 d
e          Z G d de          Z G d de          ZdS )    )sync_to_async)get_user_model)
Permission)ExistsOuterRefQc                   f    e Zd Zd Zd Zd Zd ZddZddZddZ	dd	Z
dd
ZddZddZddZdS )BaseBackendc                     d S N selfrequestkwargss      Y/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/auth/backends.pyauthenticatezBaseBackend.authenticate       t    c                 H   K    t          | j                  |fi | d {V S r   )r   r   r   s      r   aauthenticatezBaseBackend.aauthenticate   s;      5]4#455gHHHHHHHHHHHr   c                     d S r   r   r   user_ids     r   get_userzBaseBackend.get_user   r   r   c                 L   K    t          | j                  |           d {V S r   )r   r   r   s     r   	aget_userzBaseBackend.aget_user   s2      1]4=11':::::::::r   Nc                     t                      S r   setr   user_objobjs      r   get_user_permissionsz BaseBackend.get_user_permissions       uur   c                 N   K    t          | j                  ||           d {V S r   )r   r$   r!   s      r   aget_user_permissionsz!BaseBackend.aget_user_permissions   s5      =]4#<==hLLLLLLLLLr   c                     t                      S r   r   r!   s      r   get_group_permissionsz!BaseBackend.get_group_permissions   r%   r   c                 N   K    t          | j                  ||           d {V S r   )r   r)   r!   s      r   aget_group_permissionsz"BaseBackend.aget_group_permissions    s5      >]4#=>>xMMMMMMMMMr   c                 b    h |                      ||          |                     ||          S N)r#   )r$   r)   r!   s      r   get_all_permissionszBaseBackend.get_all_permissions#   sB    
&&xS&99
''c'::
 	
r   c                 ~   K   h |                      ||           d {V |                     ||           d {V S r-   )r'   r+   r!   s      r   aget_all_permissionsz BaseBackend.aget_all_permissions)   sj      
--hC-@@@@@@@@
..xS.AAAAAAAA
 	
r   c                 4    ||                      ||          v S r-   )r.   r   r"   permr#   s       r   has_permzBaseBackend.has_perm/   s     t//c/BBBBr   c                 B   K   ||                      ||           d {V v S r   )r0   r2   s       r   	ahas_permzBaseBackend.ahas_perm2   s3      T66xEEEEEEEEEEr   r   )__name__
__module____qualname__r   r   r   r   r$   r'   r)   r+   r.   r0   r4   r6   r   r   r   r
   r
   
   s         I I I  ; ; ;   M M M M   N N N N
 
 
 

 
 
 
C C C CF F F F F Fr   r
   c                        e Zd ZdZddZddZd Zd Zd Zd Z	d	 Z
dd
ZddZddZddZd fd	Zd fd	Zd fd	Zd Zd ZddZd Zd Z xZS )ModelBackendz9
    Authenticates against settings.AUTH_USER_MODEL.
    Nc                 ^   ||                     t          j                  }||d S 	 t          j                            |          }|                    |          r|                     |          r|S d S d S # t          j        $ r% t                                          |           Y d S 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/F	-@@JJD ""8,, 1K1KD1Q1Q     % 	/ 	/ 	/ KK$$X......	/s   A8 80B,+B,c                 z  K   ||                     t          j                  }||d S 	 t          j                            |           d {V }|                    |           d {V r|                     |          r|S d S d S # t          j        $ r% t                                          |           Y d S w xY wr   )	r=   r>   r?   r@   aget_by_natural_keyacheck_passwordrC   rD   rE   rF   s         r   r   zModelBackend.aauthenticateJ   s      zz)":;;Hx/F
	"3GGQQQQQQQQD ))(33333333 8R8R9 9      % 	/ 	/ 	/ KK$$X......	/s   %B 0B:9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   rI   s     r   rC   z"ModelBackend.user_can_authenticate[   s    
 t[$///r   c                 4    |j                                         S r   )user_permissionsallr   r"   s     r   _get_user_permissionsz"ModelBackend._get_user_permissionsb   s    (,,...r   c                 p    t           j                            |j                                                  S )N)	group__in)r   objectsfiltergroupsrS   rT   s     r   _get_group_permissionsz#ModelBackend._get_group_permissionse   s*    !((8?3F3F3H3H(IIIr   c                    |j         r	|j        s|t                      S d|z  }t          ||          s|j        rt
          j                                        }n t          | d|z            |          }|	                    dd          
                                }t          ||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                 "    h | ]\  }}|d |S ).r   .0ctnames      r   	<setcomp>z0ModelBackend._get_permissions.<locals>.<setcomp>y   s'    +W+W+WXRrrr44,@+W+W+Wr   rN   is_anonymousr    hasattris_superuserr   rX   rS   rO   values_listorder_bysetattrr   r"   r#   	from_nameperm_cache_namepermss         r   _get_permissionszModelBackend._get_permissionsh   s     ! 	X%: 	co55L*Y6x11 	$ S"*..00H&;i&GHHRR%%&?LLUUWWE/+W+WQV+W+W+W   x111r   c                   K   |j         r	|j        s|t                      S d|z  }t          ||          s|j        rt
          j                                        }n t          | d|z            |          }|	                    dd          
                                }t          ||d |2              d{V            t          ||          S )zSee _get_permissions().Nr]   r^   r_   r`   c                 2   K   h | 3 d {V \  }}|d|6 S Nrb   r   rc   s      r   rg   z1ModelBackend._aget_permissions.<locals>.<setcomp>   s=      BBBBBBBBDBBB%BBBBs   rh   ro   s         r   _aget_permissionszModelBackend._aget_permissions}   s      ! 	X%: 	co55L*Y6x11 
	$ S"*..00H&;i&GHHRR%%&?LLUUWWEBBEBBBBBBBBB  
 x111r   c                 0    |                      ||d          S )zs
        Return a set of permission strings the user `user_obj` has from their
        `user_permissions`.
        rI   rs   r!   s      r   r$   z!ModelBackend.get_user_permissions   s    
 $$XsF;;;r   c                 @   K   |                      ||d           d{V S )zSee get_user_permissions().rI   Nrw   r!   s      r   r'   z"ModelBackend.aget_user_permissions   s0      ++Hc6BBBBBBBBBr   c                 0    |                      ||d          S )zq
        Return a set of permission strings the user `user_obj` has from the
        groups they belong.
        groupry   r!   s      r   r)   z"ModelBackend.get_group_permissions   s    
 $$XsG<<<r   c                 @   K   |                      ||d           d{V S )zSee get_group_permissions().r}   Nr{   r!   s      r   r+   z#ModelBackend.aget_group_permissions   s0      ++Hc7CCCCCCCCCr   c                     |j         r	|j        s|t                      S t          |d          s&t	                                          |          |_        |j        S )N_perm_cache)rN   ri   r    rj   superr.   r   )r   r"   r#   	__class__s      r   r.   z ModelBackend.get_all_permissions   s[    ! 	X%: 	co55Lx// 	I#(77#>#>x#H#HH ##r   c                 Z    |j         o#t                                          |||          S r-   )rN   r   r4   r   r"   r3   r#   r   s       r   r4   zModelBackend.has_perm   s*    !Oegg&6&6x3&6&O&OOr   c                 j   K   |j         o)t                                          |||           d {V S r-   )rN   r   r6   r   s       r   r6   zModelBackend.ahas_perm   sA      !VEGG,=,=hRU,=,V,V&V&V&V&V&V&VVr   c                 n    |j         o-t          fd|                     |          D                       S )zU
        Return True if user_obj has any permissions in the given app_label.
        c              3   Z   K   | ]%}|d |                     d                   k    V  &d S rv   indexrd   r3   	app_labels     r   	<genexpr>z0ModelBackend.has_module_perms.<locals>.<genexpr>   Q       *
 *
 "4::c??"#y0*
 *
 *
 *
 *
 *
r   )rN   anyr.   r   r"   r   s     `r   has_module_permszModelBackend.has_module_perms   sU     ! 
c *
 *
 *
 *
00::*
 *
 *
 '
 '
 	
r   c                 ~   K   |j         o3t          fd|                     |           d{V D                       S )zSee has_module_perms()c              3   Z   K   | ]%}|d |                     d                   k    V  &d S rv   r   r   s     r   r   z1ModelBackend.ahas_module_perms.<locals>.<genexpr>   r   r   N)rN   r   r0   r   s     `r   ahas_module_permszModelBackend.ahas_module_perms   si      ! 
c *
 *
 *
 *
"77AAAAAAAA*
 *
 *
 '
 '
 	
r   Tc                    t          |t                    r7	 |                    d          \  }}nA# t          $ r t          d          w xY wt          |t                    st          d          |t          j                                        S t          t          d                    t          t          d                    z  }t          |t                    r|t          |j                  z  }n|t          ||	          z  }t          t          j                            |                    }|r|t          d
          z  }||t          |          z  }t          j                            |          S )z
        Return users that have permission "perm". By default, filter out
        inactive users and include superusers.
        rb   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)rI   r   )r`   r_   T)rk   )rN   )
isinstancestrsplit
ValueErrorr   	TypeErrorr>   r@   noner   r   r   r   rX   rY   )	r   r3   rN   include_superusersr#   r   r`   permission_quser_qs	            r   	with_permzModelBackend.with_perm   s   
 dC   	&*jjoo#	88    5  
 D*-- 	P   ?-22444Xd^^444qhtnn7M7M7MMdJ'' 	TAMMM)LLAxSSSSL
*11,??@@ 	+aT****F a),,,,F)00888s	   0 A
c                     	 t           j                            |          }n# t           j        $ r Y d S w xY w|                     |          r|nd S Nr   )r>   r@   r=   rD   rC   r   r   rI   s      r   r   zModelBackend.get_user   sd    	-11W1==DD% 	 	 	44	11$77AttTAs    # 66c                    K   	 t           j                            |           d {V }n# t           j        $ r Y d S w xY w|                     |          r|nd S r   )r>   r@   agetrD   rC   r   s      r   r   zModelBackend.aget_user   sz      	"388G8DDDDDDDDDD% 	 	 	44	11$77AttTAs   &+ >>)NNr   )TTN)r7   r8   r9   __doc__r   r   rC   rU   r[   rs   rw   r$   r'   r)   r+   r.   r4   r6   r   r   r   r   r   __classcell__)r   s   @r   r;   r;   6   s              "0 0 0/ / /J J J2 2 2*2 2 2&< < < <C C C C= = = =D D D D$ $ $ $ $ $P P P P P PW W W W W W
 
 

 
 
!9 !9 !9 !9FB B BB B B B B B Br   r;   c                       e Zd Zd ZdS )AllowAllUsersModelBackendc                     dS NTr   rP   s     r   rC   z/AllowAllUsersModelBackend.user_can_authenticate   r   r   Nr7   r8   r9   rC   r   r   r   r   r      #            r   r   c                   8    e Zd ZdZdZd Zd Zd Zd	dZ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                 d   |sdS d}d}|                      |          }| j        r&t          j        j        di t          j        |i\  }}n6	 t          j                            |          }n# t          j        $ r Y nw xY w|                     |||          }| 	                    |          r|n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_userr>   r@   get_or_creater?   rA   rD   configure_userrC   r   r   remote_userr   rI   rG   s         r   r   zRemoteUserBackend.authenticate	  s      	F&&{33
 # 	%6D  +X6 MD'' 1DDXNN)   ""7D'"BB11$77AttTAs   A, ,A>=A>c                   K   |sdS d}d}|                      |          }| j        r,t          j        j        di t          j        |i d{V \  }}n<	 t          j                            |           d{V }n# t          j        $ r Y nw xY w|                     |||           d{V }| 	                    |          r|ndS )zSee authenticate().NFr   r   )
r   r   r>   r@   aget_or_creater?   rK   rD   aconfigure_userrC   r   s         r   r   zRemoteUserBackend.aauthenticate'  s&      	F&&{33
 # 	"+"<"K # #+X6# #      MD''&7KKHUUUUUUUU)   ))'4)IIIIIIII11$77AttTAs   %A: :BB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   rG   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   rI   r   s       r   r   z RemoteUserBackend.configure_userG  s	     r   c                 P   K    t          | j                  |||           d{V S )zSee configure_user()N)r   r   r   s       r   r   z!RemoteUserBackend.aconfigure_userO  s7      7]4#677wOOOOOOOOOr   N)T)
r7   r8   r9   r   r   r   r   r   r   r   r   r   r   r   r      s        	 	 B B B<B B B.     P P P P P Pr   r   c                       e Zd Zd ZdS )AllowAllUsersRemoteUserBackendc                     dS r   r   rP   s     r   rC   z4AllowAllUsersRemoteUserBackend.user_can_authenticateU  r   r   Nr   r   r   r   r   r   T  r   r   r   N)asgiref.syncr   django.contrib.authr   django.contrib.auth.modelsr   django.db.modelsr   r   r   r>   r
   r;   r   r   r   r   r   r   <module>r      sl   & & & & & & . . . . . . 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0N	)F )F )F )F )F )F )F )FX|B |B |B |B |B; |B |B |B~       
WP WP WP WP WP WP WP WPt    %6     r   