
    h                         d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ ed        Zedd
       Zed        Zd Z G d de      Z G d de      Zd Zy	)    )settings)BACKEND_SESSION_KEYHASH_SESSION_KEYSESSION_KEY_get_backendsget_user_modelload_backenduser_logged_inuser_logged_out)constant_time_compare)
LazyObject)database_sync_to_async)BaseMiddleware)CookieMiddlewareSessionMiddlewarec                    ddl m} d| vrt        d      | d   }d}	 t        |      }|t           }|t
        j                  v rpt        |      }|j                  |      }t        |d      rH|j                  t              }|xr t        ||j                               }|s|j                          d}	 |xs  |       S # t        $ r Y w xY w)z
    Return the user model instance associated with the given scope.
    If no user is retrieved, return an instance of `AnonymousUser`.
    r   AnonymousUsersessionQCannot find session in scope. You should wrap your consumer in SessionMiddleware.Nget_session_auth_hash)django.contrib.auth.modelsr   
ValueError_get_user_session_keyr   r   AUTHENTICATION_BACKENDSr	   get_userhasattrgetr   r   r   flushKeyError)	scoper   r   useruser_idbackend_pathbackendsession_hashsession_hash_verifieds	            I/var/www/Befach/backend/env/lib/python3.12/site-packages/channels/auth.pyr   r      s     9!
 	
 IGD '023 8;;;"<0G##G,Dt45&{{+;<(4 )9N $"<"<">:% -MMOD"=?"  s   B? ?	C
CNc                    d| vrt        d      | d   }d}|| j                  dd      }|t        d      t        |d      r|j                         }t        |v rKt        |      |j                  k7  s"|rAt        |j                  t        d      |      s!|j                          n|j                          	 |xs |j                  }|j                  j                  j!                  |      |t        <   ||t"        <   ||t        <   || d<   t%        j&                  |j(                  d|       y# t        $ r1 t        d	      }t        |      d
k(  r	|d   \  }}nt        d      Y w xY w)z
    Persist a user id and a backend in the request.
    This way a user doesn't have to re-authenticate on every request.
    Note that data set during the anonymous session is retained when the user
    logs in.
    r   r    Nr"   zCUser must be passed as an argument or must be present in the scope.r   T)return_tuples   r   zYou have multiple authentication backends configured and therefore must provide the `backend` argument or set the `backend` attribute on the user.senderrequestr"   )r   r   r   r   r   r   pkr   r   r   	cycle_keyr%   AttributeErrorr   len_metavalue_to_stringr   r
   send	__class__)r!   r"   r%   r   session_auth_hashbackends_s          r(   loginr;   :   sv    !
 	
 IG|yy&|Q
 	
 t,- 668g )TWW4),b13D MMO)T\\  ::==88>GK#*G  1GE&Mt~~t$G  	 t4x=A!!JAwG  	s   8D. .7E('E(c                    ddl m} d| vrt        d      | d   }| j                  dd      }t	        |d      r|j
                  sd}|"t        j                  |j                  d|       |j                          d| v r |       | d<   yy)	z_
    Remove the authenticated user's ID from the request and flush their session
    data.
    r   r   r   zWLogin cannot find session in scope. You should wrap your consumer in SessionMiddleware.r"   Nis_authenticatedr-   )
r   r   r   r   r   r=   r   r6   r7   r   )r!   r   r   r"   s       r(   logoutr>   r   s     9-
 	
 IG 99VT"Dt'(1F1FDNNDtLMMO%f     c                 j    t               j                  j                  j                  | t                 S N)r   r4   r0   	to_pythonr   )r   s    r(   r   r      s)     !!$$..w{/CDDr?   c                       e Zd ZdZd Zy)UserLazyObjectzc
    Throw a more useful error message when scope['user'] is accessed before
    it's resolved
    c                     t        d      )Nz(Accessing scope user before it is ready.)r   )selfs    r(   _setupzUserLazyObject._setup   s    CDDr?   N)__name__
__module____qualname____doc__rG    r?   r(   rD   rD      s    
Er?   rD   c                   .     e Zd ZdZd Zd Z fdZ xZS )AuthMiddlewarezu
    Middleware which populates scope["user"] from a Django session.
    Requires SessionMiddleware to function.
    c                 F    d|vrt        d      d|vrt               |d<   y y )Nr   zPAuthMiddleware cannot find session in scope. SessionMiddleware must be above it.r"   )r   rD   rF   r!   s     r(   populate_scopezAuthMiddleware.populate_scope   s7    E!6 
 *,E&M r?   c                 F   K   t        |       d {   |d   _        y 7 w)Nr"   )r   _wrappedrP   s     r(   resolve_scopezAuthMiddleware.resolve_scope   s     '/!6f!6s   !!c                    K   t        |      }| j                  |       | j                  |       d {    t        |   |||       d {   S 7 7 wrA   )dictrQ   rT   super__call__)rF   r!   receiver6   r7   s       r(   rX   zAuthMiddleware.__call__   sR     UE"  '''W%eWd;;; 	(;s!   1AAAAAA)rH   rI   rJ   rK   rQ   rT   rX   __classcell__)r7   s   @r(   rN   rN      s    
	-7< <r?   rN   c                 <    t        t        t        |                   S rA   )r   r   rN   )inners    r(   AuthMiddlewareStackr]      s    -nU.CDEEr?   rA   )django.confr   django.contrib.authr   r   r   r   r   r	   r
   r   django.utils.cryptor   django.utils.functionalr   channels.dbr   channels.middlewarer   channels.sessionsr   r   r   r;   r>   r   rD   rN   r]   rL   r?   r(   <module>re      s     	 	 	 6 . . . A "# "#J 4H 4Hn ( (6EEZ E<^ <>Fr?   