
    Mf                        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d	S )    )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 rt          |          }|                    |          }t          |d          rV|
                    t                    }|o!t          ||                                          }|s|                                 d}n# t          $ r Y nw xY w|p	 |            S )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	            L/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/channels/auth.pyr   r      s6    988888!
 
 	
 IGD '0023 8;;;"<00G##G,,Dt455  &{{+;<<(4 )9N $"<"<">">: :% -  MMOOOD     "==??"s   C 
C'&C'Nc                 .   d| vrt          d          | d         }d}||                     dd          }|t          d          t          |d          r|                                }t          |v rXt          |          |j        k    s+|r=t          |                    t          d          |          s|	                                 n|
                                 	 |p|j        }nN# t          $ rA t          d	          }t          |          d
k    r|d         \  }}nt          d          Y nw xY w|j        j                            |          |t          <   ||t"          <   ||t          <   || d<   t%          j        |j        d|           dS )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;   :   s    !
 
 	
 IG|yy&&|Q
 
 	
 t,-- 9 6688g ))TW44 5),b113D  5 MMOOO)T\ 	 	 	 t444x==A!!JAwwG   w	  :=88>>GK#*G  1GE&Mt~t$GGGGGGs   !	C+ +AD65D6c                 0   ddl m} d| vrt          d          | d         }|                     dd          }t	          |d          r	|j        sd}|t          j        |j        d|           |	                                 d| v r |            | d<   dS dS )	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88888-
 
 	
 IG 99VT""Dt'(( 1F DNDtLLLLMMOOO%f     c                 n    t                      j        j                            | t                             S N)r   r4   r0   	to_pythonr   )r   s    r(   r   r      s)     !$..w{/CDDDr?   c                       e Zd ZdZd ZdS )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DDr?   N)__name__
__module____qualname____doc__rG    r?   r(   rD   rD      s2         
E E E E 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                 Z    d|vrt          d          d|vrt                      |d<   d S d S )Nr   zPAuthMiddleware cannot find session in scope. SessionMiddleware must be above it.r"   )r   rD   rF   r!   s     r(   populate_scopezAuthMiddleware.populate_scope   sL    E!!6  
 *,,E&MMM r?   c                 J   K   t          |           d {V |d         _        d S )Nr"   )r   _wrappedrP   s     r(   resolve_scopezAuthMiddleware.resolve_scope   s0      '/!6!6!6!6!6!6fr?   c                    K   t          |          }|                     |           |                     |           d {V  t                                          |||           d {V S rA   )dictrQ   rT   super__call__)rF   r!   receiver6   r7   s       r(   rX   zAuthMiddleware.__call__   sz      UE"""  '''''''''WW%%eWd;;;;;;;;;r?   )rH   rI   rJ   rK   rQ   rT   rX   __classcell__)r7   s   @r(   rN   rN      s`         
	- 	- 	-7 7 7< < < < < < < < <r?   rN   c                 T    t          t          t          |                               S rA   )r   r   rN   )inners    r(   AuthMiddlewareStackr]      s!    -nU.C.CDDE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 5 5 5 5 5 . . . . . . . . . . . . . . . . . . A A A A A A A A "# "# "#J 4H 4H 4H 4Hn ( ( (6E E EE E E E EZ E E E< < < < <^ < < <>F F F F Fr?   