ó
    ?�‘h“  ã                   óä   • S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJr  \S 5       r\SS
 j5       r\S 5       rS r " S S\5      r " S S\5      rS rg	)é    )Ú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                 óÊ  • SSK Jn  SU ;  a  [        S5      eU S   nSn [        U5      nU[           nU[
        R                  ;   a}  [        U5      nUR                  U5      n[        US5      (       aP  UR                  [        5      nU=(       a    [        XsR                  5       5      nU(       d  UR                  5         SnU=(       d    U" 5       $ ! [         a     Nf = f)z�
Return the user model instance associated with the given scope.
If no user is retrieved, return an instance of `AnonymousUser`.
r   ©ÚAnonymousUserÚsessionúQCannot 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	            ÚQC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\channels/auth.pyr   r      sæ   € õ 9à˜ÓÜð!ó
ð 	
ð �IÑ€GØ€Dð Ü'¨Ó0ˆØÔ2Ñ3ˆð œ8×;Ñ;Ó;Ü" <Ó0ˆGØ×#Ñ# GÓ,ˆDä�tÐ4×5Ñ5Ø&Ÿ{™{Ô+;Ó<�Ø(4÷ )Ô9NØ ×"<Ñ"<Ó">ó:Ð%ö -Ø—M‘M”OØ�DØ×"‘=“?Ð"øô ó Ùðús    C Ã
C"Ã!C"Nc                 óü  • SU ;  a  [        S5      eU S   nSnUc  U R                  SS5      nUc  [        S5      e[        US5      (       a  UR                  5       n[        U;   aV  [        U5      UR                  :w  d,  U(       a5  [        UR                  [        S5      U5      (       d  UR                  5         OUR                  5          U=(       d    UR                  nUR                  R                  R!                  U5      U[        '   X#["        '   XC[        '   XS'   [$        R&                  " UR(                  SUS9  g! [         a-    [        SS	9n[        U5      S
:X  a	  US   u  pb NŒ[        S5      ef = f)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   z’You 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;   :   st  € ð ˜ÓÜð!ó
ð 	
ð �IÑ€GØÐØ�|Ø�y‰y˜ Ó&ˆØ�|ÜØQó
ð 	
ô ˆtÐ,×-Ñ-Ø ×6Ñ6Ó8ÐÜ�gÓÜ  Ó)¨T¯W©WÓ4ÞÜ)Ø—‘Ô,¨bÓ1Ð3D÷ñ ð �M‰MŒOøà×ÑÔðØ×)˜TŸ\™\ˆð  Ÿ:™:Ÿ=™=×8Ñ8¸Ó>€GŒKÑØ#*ÔÑ Ø 1ÔÑØˆ&�Mä×Ò˜tŸ~™~°tÀ$ÓGøô ó 	Ü ¨tÑ4ˆÜˆx‹=˜AÓØ! !™‰JˆA‰wäðGóð ð	ús   ÃE Å)E;Å/E;c                 ó0  • SSK Jn  SU ;  a  [        S5      eU S   nU R                  SS5      n[	        US5      (       a  UR
                  (       d  SnUb   [        R                  " UR                  SUS9  UR                  5         SU ;   a  U" 5       U S'   gg)	zS
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ð �9‰9�V˜TÓ"€DÜˆtÐ'×(Ñ(°×1F×1FØˆØÑÜ×Ò D§N¡N¸DÀtÒLØ‡M�M„OØ�ƒÙ%›ˆˆfŠð ó    c                 ój   • [        5       R                  R                  R                  U [           5      $ ©N)r   r4   r0   Ú	to_pythonr   )r   s    r(   r   r   Ž   s)   € ô Ó×!Ñ!×$Ñ$×.Ñ.¨w´{Ñ/CÓDÐDr?   c                   ó   • \ rS rSrSrS rSrg)ÚUserLazyObjecté”   zW
Throw a more useful error message when scope['user'] is accessed before
it's resolved
c                 ó   • [        S5      e)Nz(Accessing scope user before it is ready.)r   )Úselfs    r(   Ú_setupÚUserLazyObject._setupš   s   € ÜÐCÓDÐDr?   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rH   Ú__static_attributes__rJ   r?   r(   rD   rD   ”   s   † ñõ
Er?   rD   c                   ó8   ^ • \ rS rSrSrS rS rU 4S jrSrU =r	$ )ÚAuthMiddlewareéž   zi
Middleware which populates scope["user"] from a Django session.
Requires SessionMiddleware to function.
c                 óN   • SU;  a  [        S5      eSU;  a  [        5       US'   g g )Nr   zPAuthMiddleware cannot find session in scope. SessionMiddleware must be above it.r"   )r   rD   ©rG   r!   s     r(   Úpopulate_scopeÚAuthMiddleware.populate_scope¤   s7   € à˜EÓ!Üð6óð ð
 ˜ÓÜ*Ó,ˆE�&ŠMð r?   c              ƒ   óF   #   • [        U5      I S h  v•N US   l        g  N7f)Nr"   )r   Ú_wrappedrU   s     r(   Úresolve_scopeÚAuthMiddleware.resolve_scope¯   s   é € Ü'/°£×!6ˆˆf‰ÕÑ!6ùs   ‚!‘’!c              ƒ   ó®   >#   • [        U5      nU R                  U5        U R                  U5      I S h  v•N   [        TU ]  XU5      I S h  v•N $  N N7frA   )ÚdictrV   rZ   ÚsuperÚ__call__)rG   r!   Úreceiver6   r7   s       €r(   r_   ÚAuthMiddleware.__call__²   sN   øé € Ü�U“ˆà×Ñ˜EÔ"à× Ñ  Ó'×'Ð'ä‘WÑ% e°dÓ;×;Ð;ñ 	(á;ùs!   ƒ1A´AµAÁAÁAÁArJ   )
rK   rL   rM   rN   rO   rV   rZ   r_   rP   Ú__classcell__)r7   s   @r(   rR   rR   ž   s   ø† ñò
	-ò7÷<ó <r?   rR   c                 ó<   • [        [        [        U 5      5      5      $ rA   )r   r   rR   )Úinners    r(   ÚAuthMiddlewareStackre   ½   s   € ÜÔ-¬n¸UÓ.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   rR   re   rJ   r?   r(   Ú<module>rm      sŽ   ðÝ  ÷	÷ 	ó 	õ 6Ý .å .Ý .ß Að ñ"#ó ð"#ðJ ó4Hó ð4Hðn ñ(ó ð(ò6EôE�Zô Eô<�^ô <ó>Fr?   