
    +h5                     f   d dl mZmZ d dlmZ d dlmZmZmZ	m
Z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%m&Z& d dl'm(Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3  e            Z4 G d d          Z5 G d de5e3          Z6 G d de5e1          Z7d,dZ8defdZ9 G d d          Z: G d d e:e3          Z;d!Z< G d" d#e:e1          Z= G d$ d%e:e3          Z> G d& d'e:e1          Z? G d( d)e:e3          Z@ G d* d+e:e1          ZAdS )-    )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)url_has_allowed_host_and_schemeurlsafe_base64_decode)gettext_lazy)never_cache)csrf_protect)sensitive_post_parameters)TemplateView)FormViewc                   (    e Zd Z e            Zd ZdS )SuccessURLAllowedHostsMixinc                 D    | j                                         h| j        S N)requestget_hostsuccess_url_allowed_hostsselfs    ]/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/contrib/auth/views.pyget_success_url_allowed_hostsz9SuccessURLAllowedHostsMixin.get_success_url_allowed_hosts$   s!    %%''I$*HII    N)__name__
__module____qualname__setr'   r+    r,   r*   r"   r"   !   s4         #J J J J Jr,   r"   c                        e Zd ZdZeZdZdZeZ	dZ
dZdZ e e                       ee           ee           fd                                    Zd Z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_userr%   useris_authenticatedget_success_urlpath
ValueErrorr   superdispatch)r)   r%   argskwargsredirect_to	__class__s        r*   r<   zLoginView.dispatch4   s     + 	50A0R 	5..00Kdl/// M   (444uww9$999&999r,   c                 R    |                                  p|                                 S r$   )get_redirect_urlget_default_redirect_urlr(   s    r*   r8   zLoginView.get_success_urlB   s%    $$&&I$*G*G*I*IIr,   c                    | j         j                            | j        | j         j                            | j        d                    }t          ||                                 | j                                                   }|r|ndS )z6Return the user-originating redirect URL if it's safe. urlallowed_hostsrequire_https)r%   POSTgetredirect_field_nameGETr   r+   	is_secure)r)   r?   url_is_safes      r*   rB   zLoginView.get_redirect_urlE   s    l'++$L  !92>>
 
 6<<>>,0022
 
 

 *1{{r1r,   c                 B    t          | j        pt          j                  S )z Return the default redirect URL.)r   	next_pager   LOGIN_REDIRECT_URLr(   s    r*   rC   z"LoginView.get_default_redirect_urlR   s    4>HX-HIIIr,   c                     | j         p| j        S r$   )authentication_form
form_classr(   s    r*   get_form_classzLoginView.get_form_classV   s    ':4?:r,   c                 \    t                                                      }| j        |d<   |S )Nr%   )r;   get_form_kwargsr%   r)   r>   r@   s     r*   rX   zLoginView.get_form_kwargsY   s)    ((** Lyr,   c                     t          | j        |                                           t          |                                           S )z)Security check complete. Log the user in.)
auth_loginr%   get_userr   r8   )r)   forms     r*   
form_validzLoginView.form_valid^   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_namer1   )	r;   get_context_datar   r%   updaterL   rB   nameextra_contextr)   r>   contextcurrent_siter@   s       r*   rb   zLoginView.get_context_datac   s    *%''*44V44'55$d&;&;&=&=L*
 !'R	
 	 	 	 r,   )r-   r.   r/   __doc__r   rU   rT   rQ   r   rL   template_namer5   re   r   r   r   r   r<   r8   rB   rC   rV   rX   r^   rb   __classcell__r@   s   @r*   r3   r3   (   s9         $JI--M"'M//1122l##k""	: 	: 	: 	: #" $# 32	:J J J2 2 2J J J; ; ;    
< < <
	 	 	 	 	 	 	 	 	r,   r3   c                   j     e Zd ZdZdZeZdZdZ e	e
           fd            Zd Zd Z fdZ xZS )
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    Nzregistration/logged_out.htmlc                     t          |           |                                 }|rt          |          S  t                      j        |g|R i |S r$   )auth_logoutget_next_pager   r;   r<   )r)   r%   r=   r>   rQ   r@   s        r*   r<   zLogoutView.dispatchx   s_    G&&((	 	3'	222uww9$999&999r,   c                 $     | j         |g|R i |S )zLogout may be done via POST.)rK   )r)   r%   r=   r>   s       r*   postzLogoutView.post   s$    tx1$111&111r,   c                    | j         t          | j                   }n-t          j        rt          t          j                  }n| j         }| j        | j        j        v s| j        | j        j        v r| j        j                            | j        | j        j                            | j                            }t          || 
                                | j                                                  }|s| j        j        }|S )NrF   )rQ   r   r   LOGOUT_REDIRECT_URLrL   r%   rJ   rM   rK   r   r+   rN   r9   )r)   rQ   rO   s      r*   rq   zLogoutView.get_next_page   s    >%#DN33II) 	'#H$@AAIII$(999(DL,<<<)--( $$T%=>> I :"@@BB"l4466  K  . L-	r,   c                      t                      j        di |}t          | j                  }|                    ||j        t          d          d| j        pi            |S )Nz
Logged out)r`   ra   titler1   )r;   rb   r   r%   rc   rd   _re   rf   s       r*   rb   zLogoutView.get_context_data   sy    *%''*44V44'55 %*|__
 
 !'R	
 	 	 	 r,   )r-   r.   r/   ri   rQ   r   rL   rj   re   r   r   r<   rs   rq   rb   rk   rl   s   @r*   rn   rn   o   s          I-2MMk"": : : : #":2 2 2  2	 	 	 	 	 	 	 	 	r,   rn   Nc                 ~    t          |pt          j                  }t                              |          |           S )zR
    Log out the user if they are logged in. Then redirect to the login page.
    )rQ   )r   r   	LOGIN_URLrn   as_view)r%   	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   rz   listr   r   	urlencoder   r   )nextr|   rL   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 |}|                    d| j        i| j        pi            |S )Nrw   r1   )r;   rb   rc   rw   re   r)   r>   rg   r@   s      r*   rb   z%PasswordContextMixin.get_context_data   sX    *%''*44V44TZ
!'R
 	 	 	 r,   )r-   r.   r/   re   rb   rk   rl   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$   r;   r<   r)   r=   r>   r@   s      r*   r<   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_namer%   html_email_template_nameextra_email_contextr1   )r%   rN   r   r   r   r   r   r   saver;   r^   )r)   r]   optsr@   s      r*   r^   zPasswordResetView.form_valid   sz    //11#3/#'#;%)%?|(,(E#'#;	
 	
 		Dww!!$'''r,   )r-   r.   r/   r   r   r   rU   r   r   r   r   success_urlrj   rx   rw   r   r   r   r   r<   r^   rk   rl   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)r-   r.   r/   rj   rx   rw   r1   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\   r6   reset_url_tokenr%   sessionrK   INTERNAL_RESET_SESSION_TOKENr   check_tokenr;   r<   r9   replacer   render_to_responserb   )r)   r=   r>   r   session_tokenredirect_urlr@   s         r*   r<   z!PasswordResetConfirmView.dispatch  sM    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#<#<UDDX#Y#YL/=== &&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_managerrK   	TypeErrorr:   OverflowErrorDoesNotExistr   )r)   r   uidr6   s       r*   r\   z!PasswordResetConfirmView.get_user%  sr    	'//6688C-11S199DD:}i6Lo^ 	 	 	DDD	s   AA *A10A1c                 \    t                                                      }| j        |d<   |S Nr6   )r;   rX   r6   rY   s     r*   rX   z(PasswordResetConfirmView.get_form_kwargs.  s(    ((**vr,   c                     |                                 }| j        j        t          = | j        rt          | j        || j                   t                                          |          S r$   )	r   r%   r   r   post_reset_loginr[   post_reset_login_backendr;   r^   )r)   r]   r6   r@   s      r*   r^   z#PasswordResetConfirmView.form_valid3  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)r]   rw   r   r1   )r;   rb   r   rc   rx   r   s      r*   rb   z)PasswordResetConfirmView.get_context_data:  so    *%''*44V44> 	#'GK  NN899"    
 r,   )r-   r.   r/   r   rU   r   r   r   r   r   rj   rx   rw   r   r   r   r   r   r<   r\   rX   r^   rb   rk   rl   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|   r1   )r;   rb   r   r   rz   r   s      r*   rb   z*PasswordResetCompleteView.get_context_dataK  s9    *%''*44V44*8+=>>r,   )r-   r.   r/   rj   rx   rw   rb   rk   rl   s   @r*   r   r   G  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*   r<   zPasswordChangeView.dispatchW  s!      uww0000r,   c                 f    t                                                      }| j        j        |d<   |S r   )r;   rX   r%   r6   rY   s     r*   rX   z"PasswordChangeView.get_form_kwargs]  s+    ((***vr,   c                     |                                  t          | j        |j                   t	                                          |          S r$   )r   r
   r%   r6   r;   r^   )r)   r]   r@   s     r*   r^   zPasswordChangeView.form_validb  s>    		 	!ty999ww!!$'''r,   )r-   r.   r/   r   rU   r   r   rj   rx   rw   r   r   r   r   r<   rX   r^   rk   rl   s   @r*   r   r   Q  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*   r<   zPasswordChangeDoneView.dispatchn  r   r,   )
r-   r.   r/   rj   rx   rw   r   r   r<   rk   rl   s   @r*   r   r   j  sc        <MA*++En%%1 1 1 1 &%1 1 1 1 1r,   r   r$   )Burllib.parser   r   django.confr   django.contrib.authr   r   r   r[   r	   rp   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.httpr   r   django.utils.translationr   rx   django.views.decorators.cacher   django.views.decorators.csrfr   django.views.decorators.debugr   django.views.generic.baser   django.views.generic.editr    r   r"   r3   rn   r}   r   r   r   r   r   r   r   r   r   r1   r,   r*   <module>r      s	   - - - - - - - -                          : 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        7 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	J J J J J J J JD D D D D+X D D DN8 8 8 8 8,l 8 8 8v< < < < '+@S = = = =,	 	 	 	 	 	 	 	( ( ( ( (,h ( ( (>  7 % % % % %0, % % %
I I I I I3X I I IX     4l   ( ( ( ( (-x ( ( (21 1 1 1 11< 1 1 1 1 1r,   