
     hn8                        d dl Z d dlmZmZ d dlmZ d dl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mZmZ d d
lmZ d dlmZ d dlmZmZ d dl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) d dl*m+Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6  e            Z7 G d d          Z8 G d de8e6          Z9 G d de8e4          Z:d0dZ;defd Z< G d! d"          Z= G d# d$e=e6          Z>d%Z? G d& d'e=e4          Z@ G d( d)e=e6          ZA G d* d+e=e4          ZB G d, d-e=e6          ZC G d. d/e=e4          ZDdS )1    N)urlparse
urlunparse)settings)REDIRECT_FIELD_NAMEget_user_model)login)logout)update_session_auth_hash)login_required)AuthenticationFormPasswordChangeFormPasswordResetFormSetPasswordForm)default_token_generator)get_current_site)ImproperlyConfiguredValidationError)HttpResponseRedirect	QueryDict)resolve_url)reverse_lazy)method_decorator)RemovedInDjango50Warning)url_has_allowed_host_and_schemeurlsafe_base64_decode)gettext_lazy)never_cache)csrf_protect)sensitive_post_parameters)TemplateView)FormViewc                   B    e Zd ZdZeZ e            Zd Zd Z	d Z
d ZdS )RedirectURLMixinNc                 R    |                                  p|                                 S N)get_redirect_urlget_default_redirect_urlselfs    X/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/contrib/auth/views.pyget_success_urlz RedirectURLMixin.get_success_url*   s%    $$&&I$*G*G*I*II    c                    | j         j                            | j        | j         j                            | j                            }t          ||                                 | j                                                   }|r|ndS )z6Return the user-originating redirect URL if it's safe.)urlallowed_hostsrequire_https )requestPOSTgetredirect_field_nameGETr   get_success_url_allowed_hosts	is_secure)r)   redirect_tourl_is_safes      r*   r&   z!RedirectURLMixin.get_redirect_url-   s    l'++$dl&6&:&:4;S&T&T
 
 6<<>>,0022
 
 

 *1{{r1r,   c                 D    | j                                         h| j        S r%   )r2   get_hostsuccess_url_allowed_hostsr(   s    r*   r7   z.RedirectURLMixin.get_success_url_allowed_hosts9   s!    %%''I$*HIIr,   c                 V    | j         rt          | j                   S t          d          ) Return the default redirect URL.z+No URL to redirect to. Provide a next_page.)	next_pager   r   r(   s    r*   r'   z)RedirectURLMixin.get_default_redirect_url<   s+    > 	/t~..."#PQQQr,   )__name__
__module____qualname__r@   r   r5   setr=   r+   r&   r7   r'    r,   r*   r#   r#   %   sr        I- #J J J
2 
2 
2J J JR R R R Rr,   r#   c                        e Zd ZdZeZdZdZdZdZ	 e
 e                       e
e           e
e           fd                                    Zd Zd Z fdZd	 Z fd
Z xZS )	LoginViewz=
    Display the login form and handle the login action.
    Nzregistration/login.htmlFc                     | j         rS| j        j        j        rB|                                 }|| j        j        k    rt          d          t          |          S  t                      j	        |g|R i |S )NzsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.)
redirect_authenticated_userr2   useris_authenticatedr+   path
ValueErrorr   superdispatchr)   r2   argskwargsr9   	__class__s        r*   rO   zLoginView.dispatchN   s     + 	50A0R 	5..00Kdl/// M   (444uww9$999&999r,   c                 j    | j         rt          | j                   S t          t          j                  S r?   )r@   r   r   LOGIN_REDIRECT_URLr(   s    r*   r'   z"LoginView.get_default_redirect_url\   s-    > 	<t~...x:;;;r,   c                     | j         p| j        S r%   )authentication_form
form_classr(   s    r*   get_form_classzLoginView.get_form_classc   s    ':4?:r,   c                 \    t                                                      }| j        |d<   |S )Nr2   )rN   get_form_kwargsr2   r)   rR   rS   s     r*   r\   zLoginView.get_form_kwargsf   s)    ((** Lyr,   c                     t          | j        |                                           t          |                                           S )z)Security check complete. Log the user in.)
auth_loginr2   get_userr   r+   )r)   forms     r*   
form_validzLoginView.form_validk   s6    4<111#D$8$8$:$:;;;r,   c                      t                      j        di |}t          | j                  }|                    | j        |                                 d|d|j        i| j        pi            |S )Nsite	site_namerE   )	rN   get_context_datar   r2   updater5   r&   nameextra_contextr)   rR   contextcurrent_siterS   s       r*   rf   zLoginView.get_context_datap   s    *%''*44V44'55($*?*?*A*A\. %+		
 	
 	
 r,   )rA   rB   rC   __doc__r   rY   rX   template_namerI   ri   r   r   r   r   rO   r'   rZ   r\   rb   rf   __classcell__rS   s   @r*   rG   rG   C   s
         $J-M"'M//1122l##k""	: 	: 	: 	: #" $# 32	:< < <; ; ;    
< < <
        r,   rG   c                        e Zd ZdZg dZdZdZ ee           fd            Z	 ee
           fd            ZeZd Z fdZ xZS )	
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    )r4   headpostoptionszregistration/logged_out.htmlNc                     |j                                         dk    rt          j        dt                      t                      j        |g|R i |S )Nr4   zlLog out via GET requests is deprecated and will be removed in Django 5.0. Use POST requests for logging out.)methodlowerwarningswarnr   rN   rO   )r)   r2   rQ   rR   rS   s       r*   rO   zLogoutView.dispatch   sa    >!!U**M:(  
  uww9$999&999r,   c                     t          |           |                                 }||                                k    rt          |          S  t	                      j        |g|R i |S )zLogout may be done via POST.)auth_logoutr+   get_full_pathr   rN   r4   rP   s        r*   rt   zLogoutView.post   so     	G**,,'//1111'444uww{74T444V444r,   c                     | j         rt          | j                   S t          j        rt          t          j                  S | j        j        S rU   )r@   r   r   LOGOUT_REDIRECT_URLr2   rL   r(   s    r*   r'   z#LogoutView.get_default_redirect_url   sC    > 	%t~...) 	%x;<<<<$$r,   c                      t                      j        di |}t          | j                  }|                    ||j        t          d          d d| j        pi            |S )Nz
Logged out)rd   re   titlesubtitlerE   )rN   rf   r   r2   rg   rh   _ri   rj   s       r*   rf   zLogoutView.get_context_data   s|    *%''*44V44'55$).< 	 
 %+	
 	
 	
 r,   )rA   rB   rC   rm   http_method_namesrn   ri   r   r   rO   r   rt   r4   r'   rf   ro   rp   s   @r*   rr   rr   ~   s          ;::2MM k"": : : : #": l##5 5 5 5 $#5 C% % %        r,   rr   c                 ~    t          |pt          j                  }t                              |          |           S )zR
    Log out the user if they are logged in. Then redirect to the login page.
    )r@   )r   r   	LOGIN_URLrr   as_view)r2   	login_urls     r*   logout_then_loginr      s8     I;);<<I	227;;;r,   c                    t          |pt          j                  }t          t	          |                    }|r5t          |d         d          }| ||<   |                    d          |d<   t          t          |                    S )zM
    Redirect the user to the login page, passing the given 'next' page.
       T)mutable/)safe)	r   r   r   listr   r   	urlencoder   r   )nextr   r5   resolved_urllogin_url_partsquerystrings         r*   redirect_to_loginr      s     y>H,>??L8L1122O = 2DAAA+/'((222<<
? ; ;<<<r,   c                   "     e Zd ZdZ fdZ xZS )PasswordContextMixinNc                      t                      j        di |}|                    | j        d d| j        pi            |S )N)r   r   rE   )rN   rf   rg   r   ri   r)   rR   rk   rS   s      r*   rf   z%PasswordContextMixin.get_context_data   sV    *%''*44V44jdQQt7I7ORQ	
 	
 	
 r,   )rA   rB   rC   ri   rf   ro   rp   s   @r*   r   r      s=        M        r,   r   c                        e Zd ZdZdZeZdZdZdZ	 e
d          ZdZ ed          ZeZ ee           fd            Z fdZ xZS )	PasswordResetViewz&registration/password_reset_email.htmlNz'registration/password_reset_subject.txtpassword_reset_donez%registration/password_reset_form.htmlzPassword resetc                 6     t                      j        |i |S r%   rN   rO   r)   rQ   rR   rS   s      r*   rO   zPasswordResetView.dispatch       uww0000r,   c           	          | j                                         | j        | j        | j        | j        | j         | j        | j        d} |j        di | t                      
                    |          S )N)	use_httpstoken_generator
from_emailemail_template_namesubject_template_namer2   html_email_template_nameextra_email_contextrE   )r2   r8   r   r   r   r   r   r   saverN   rb   )r)   ra   optsrS   s      r*   rb   zPasswordResetView.form_valid   sz    //11#3/#'#;%)%?|(,(E#'#;	
 	
 		Dww!!$'''r,   )rA   rB   rC   r   r   r   rY   r   r   r   r   success_urlrn   r   r   r   r   r   r   rO   rb   ro   rp   s   @r*   r   r      s        B"JJ#E,455K;MAE-Ol##1 1 1 1 $#1( ( ( ( ( ( ( ( (r,   r   _password_reset_tokenc                   (    e Zd ZdZ ed          ZdS )PasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentN)rA   rB   rC   rn   r   r   rE   r,   r*   r   r     s#        ;MA#$$EEEr,   r   c                        e Zd ZeZdZdZdZ ed          Z	dZ
 ed          ZeZ e e                       ee           fd                        Zd Z fd	Z fd
Z fdZ xZS )PasswordResetConfirmViewFNzset-passwordpassword_reset_completez(registration/password_reset_confirm.htmlzEnter new passwordc                    d|vsd|vrt          d          d| _        |                     |d                   | _        | j        |d         }|| j        k    re| j        j                            t                    }| j	        
                    | j        |          r d| _         t                      j        |i |S nh| j	        
                    | j        |          rH|| j        j        t          <   | j        j                            || j                  }t          |          S |                     |                                           S )Nuidb64tokenz:The URL path must contain 'uidb64' and 'token' parameters.FT)r   	validlinkr`   rJ   reset_url_tokenr2   sessionr4   INTERNAL_RESET_SESSION_TOKENr   check_tokenrN   rO   rL   replacer   render_to_responserf   )r)   rQ   rR   r   session_tokenredirect_urlrS   s         r*   rO   z!PasswordResetConfirmView.dispatch  sT    6!!WF%:%:&L   MM&"233	9 7OE,,, $ 4 8 89U V V'33DI}MM =%)DN+577+T<V<<<=
 '33DIuEE 	>
 JODL()EF#'<#4#<#<t3$ $L 0=== &&t'<'<'>'>???r,   c                     	 t          |                                          }t          j                            |          }n0# t
          t          t          t          j        t          f$ r d }Y nw xY w|S )N)pk)
r   decode	UserModel_default_managerr4   	TypeErrorrM   OverflowErrorDoesNotExistr   )r)   r   uidrJ   s       r*   r`   z!PasswordResetConfirmView.get_user7  s|    	'//6688C-11S199DD"
 	 	 	 DDD	 s   AA *A10A1c                 \    t                                                      }| j        |d<   |S NrJ   )rN   r\   rJ   r]   s     r*   r\   z(PasswordResetConfirmView.get_form_kwargsF  s(    ((**vr,   c                     |                                 }| j        j        t          = | j        rt          | j        || j                   t                                          |          S r%   )	r   r2   r   r   post_reset_loginr_   post_reset_login_backendrN   rb   )r)   ra   rJ   rS   s      r*   rb   z#PasswordResetConfirmView.form_validK  sY    yy{{L !=>  	Jt|T4+HIIIww!!$'''r,   c                      t                      j        di |}| j        rd|d<   n&|                    d t	          d          dd           |S )NTr   zPassword reset unsuccessfulF)ra   r   r   rE   )rN   rf   r   rg   r   r   s      r*   rf   z)PasswordResetConfirmView.get_context_dataR  so    *%''*44V44> 		#'GK  NN <==!&    r,   )rA   rB   rC   r   rY   r   r   r   r   r   rn   r   r   r   r   r   r   r   rO   r`   r\   rb   rf   ro   rp   s   @r*   r   r     s        J#$O,899K>MA"##E-O//1122k""@ @ @ @ #" 32@@      
( ( ( ( (        r,   r   c                   8     e Zd ZdZ ed          Z fdZ xZS )PasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec                 r     t                      j        di |}t          t          j                  |d<   |S )Nr   rE   )rN   rf   r   r   r   r   s      r*   rf   z*PasswordResetCompleteView.get_context_datae  s9    *%''*44V44*8+=>>r,   )rA   rB   rC   rn   r   r   rf   ro   rp   s   @r*   r   r   a  sM        ?MA'((E        r,   r   c                        e Zd ZeZ ed          ZdZ ed          Z	 e
 e                       e
e           e
e           fd                                    Z fdZ fdZ xZS )PasswordChangeViewpassword_change_donez&registration/password_change_form.htmlzPassword changec                 6     t                      j        |i |S r%   r   r   s      r*   rO   zPasswordChangeView.dispatchq  s!      uww0000r,   c                 f    t                                                      }| j        j        |d<   |S r   )rN   r\   r2   rJ   r]   s     r*   r\   z"PasswordChangeView.get_form_kwargsw  s+    ((***vr,   c                     |                                  t          | j        |j                   t	                                          |          S r%   )r   r
   r2   rJ   rN   rb   )r)   ra   rS   s     r*   rb   zPasswordChangeView.form_valid|  s>    		 	!ty999ww!!$'''r,   )rA   rB   rC   r   rY   r   r   rn   r   r   r   r   r   r   rO   r\   rb   ro   rp   s   @r*   r   r   k  s        #J,566K<MA  E//1122l##n%%1 1 1 1 &% $# 321    
( ( ( ( ( ( ( ( (r,   r   c                   Z     e Zd ZdZ ed          Z ee           fd            Z xZ	S )PasswordChangeDoneViewz&registration/password_change_done.htmlzPassword change successfulc                 6     t                      j        |i |S r%   r   r   s      r*   rO   zPasswordChangeDoneView.dispatch  r   r,   )
rA   rB   rC   rn   r   r   r   r   rO   ro   rp   s   @r*   r   r     sc        <MA*++En%%1 1 1 1 &%1 1 1 1 1r,   r   r%   )Ery   urllib.parser   r   django.confr   django.contrib.authr   r   r   r_   r	   r|   r
   django.contrib.auth.decoratorsr   django.contrib.auth.formsr   r   r   r   django.contrib.auth.tokensr   django.contrib.sites.shortcutsr   django.core.exceptionsr   r   django.httpr   r   django.shortcutsr   django.urlsr   django.utils.decoratorsr   django.utils.deprecationr   django.utils.httpr   r   django.utils.translationr   r   django.views.decorators.cacher   django.views.decorators.csrfr   django.views.decorators.debugr   django.views.generic.baser    django.views.generic.editr!   r   r#   rG   rr   r   r   r   r   r   r   r   r   r   r   rE   r,   r*   <module>r      s    - - - - - - - -             D C C C C C C C 3 3 3 3 3 3 5 5 5 5 5 5 8 8 8 8 8 8 9 9 9 9 9 9            ? > > > > > ; ; ; ; ; ; H H H H H H H H 7 7 7 7 7 7 7 7 ( ( ( ( ( ( $ $ $ $ $ $ 4 4 4 4 4 4 = = = = = = T T T T T T T T 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 C C C C C C 2 2 2 2 2 2 . . . . . .N	R R R R R R R R<8 8 8 8 8 ( 8 8 8v9 9 9 9 9!< 9 9 9x< < < < '+@S = = = =.       ( ( ( ( (,h ( ( (>  7 % % % % %0, % % %
S S S S S3X S S Sl     4l   ( ( ( ( (-x ( ( (21 1 1 1 11< 1 1 1 1 1r,   