
    (\i:5                     H   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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/m0Z0 d dl1m2Z2 d dl3m4Z4  e       Z5 G d d      Z6 e$e e0       e.e,gd       G d de6e4             Z7 e$e.e,gd       G d de6e2             Z8d1d Z9defd!Z: G d" d#      Z; e$ee.gd       G d$ d%e;e4             Z<d&Z= e$ed       G d' d(e;e2             Z> e$e e0       e,gd       G d) d*e;e4             Z? e$ed       G d+ d,e;e2             Z@ e$ e0       e.egd       G d- d.e;e4             ZA e$ed       G d/ d0e;e2             ZBy)2    )urlsplit
urlunsplit)settings)REDIRECT_FIELD_NAMEget_user_model)login)logout)update_session_auth_hash)login_not_required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dZeZ e       Zd Zd Z	d Z
d Zy)RedirectURLMixinNc                 F    | j                         xs | j                         S N)get_redirect_urlget_default_redirect_urlselfs    i/home/devuser/fomin/mqttuser/mqtt_project/myenv/lib/python3.12/site-packages/django/contrib/auth/views.pyget_success_urlz RedirectURLMixin.get_success_url(   s    $$&I$*G*G*II    c                 0   | j                   j                  j                  | j                  | j                   j                  j                  | j                              }t        || j                         | j                   j                               }|r|S 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|    ll''++$$dll&6&6&:&:4;S;S&T
 6<<>,,002

 *{1r1r,   c                 P    | j                   j                         h| j                  S r%   )r2   get_hostsuccess_url_allowed_hostsr(   s    r*   r7   z.RedirectURLMixin.get_success_url_allowed_hosts7   s#    %%'I$*H*HIIr,   c                 Z    | 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Qr,   )__name__
__module____qualname__r@   r   r5   setr=   r+   r&   r7   r'    r,   r*   r#   r#   #   s,    I- #J
2JRr,   r#   dispatch)namec                   \     e Zd ZdZeZdZdZdZdZ	 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                   r_| j                  j                  j                  r?| j	                         }|| j                  j
                  k(  rt        d      t        |      S t        | $  |g|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   superrF   r)   r2   argskwargsr9   	__class__s        r*   rF   zLoginView.dispatchP   sx    ++0A0A0R0R..0Kdll/// M  (44w9$9&99r,   c                 v    | 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                 6    | j                   xs | j                  S r%   )authentication_form
form_classr(   s    r*   get_form_classzLoginView.get_form_classb   s    '':4??:r,   c                 B    t         |          }| j                  |d<   |S )Nr2   )rP   get_form_kwargsr2   r)   rS   rT   s     r*   r]   zLoginView.get_form_kwargse   s#    (* LLyr,   c                 |    t        | j                  |j                                t        | j	                               S )z)Security check complete. Log the user in.)
auth_loginr2   get_userr   r+   )r)   forms     r*   
form_validzLoginView.form_validj   s*    4<<1#D$8$8$:;;r,   c                     t        |   di |}t        | j                        }|j	                  | j
                  | j                         d|d|j                  i| j                  xs i        |S )Nsite	site_namerE   )	rP   get_context_datar   r2   updater5   r&   rG   extra_contextr)   rS   contextcurrent_siterT   s       r*   rg   zLoginView.get_context_datao   st    '*4V4'5(($*?*?*A\.. %%+		
 r,   )rA   rB   rC   __doc__r   rZ   rY   template_namerK   ri   rF   r'   r[   r]   rc   rg   __classcell__rT   s   @r*   rI   rI   A   sH    
 $J-M"'M	:<;
<
 r,   rI   c                   B     e Zd ZdZddgZdZdZ fdZd Z fdZ	 xZ
S )	
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    postoptionszregistration/logged_out.htmlNc                     t        |       | j                         }||j                         k7  rt        |      S t	        |   |g|i |S )zLogout may be done via POST.)auth_logoutr+   get_full_pathr   rP   r4   rQ   s        r*   rs   zLogoutView.post   sN    G**,'//11'44w{74T4V44r,   c                     | j                   rt        | j                         S t        j                  rt        t        j                        S | j                  j
                  S rV   )r@   r   r   LOGOUT_REDIRECT_URLr2   rN   r(   s    r*   r'   z#LogoutView.get_default_redirect_url   sB    >>t~~..))x;;<<<<$$$r,   c                     t        |   di |}t        | j                        }|j	                  ||j
                  t        d      d d| j                  xs i        |S )Nz
Logged out)re   rf   titlesubtitlerE   )rP   rg   r   r2   rh   rG   _ri   rj   s       r*   rg   zLogoutView.get_context_data   sf    '*4V4'5$)..< 	
 %%+	
 r,   )rA   rB   rC   rm   http_method_namesrn   ri   rs   r'   rg   ro   rp   s   @r*   rr   rr   }   s3      +2MM5% r,   rr   Nc                 r    t        |xs t        j                        }t        j	                  |      |       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      s2     I;););<I	27;;r,   c                     t        |xs t        j                        }t        t	        |            }|r*t        |d   d      }| ||<   |j                  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      so     y>H,>,>?L8L12O 2DA+/'((222<
? ;<<r,   c                   "     e Zd ZdZ fdZ xZS )PasswordContextMixinNc                     t        |   di |}|j                  | j                  d d| j                  xs i        |S )N)r{   r|   rE   )rP   rg   rh   r{   ri   r)   rS   rk   rT   s      r*   rg   z%PasswordContextMixin.get_context_data   sD    '*4V4jjdQt7I7I7ORQ	
 r,   )rA   rB   rC   ri   rg   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 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           	         | j                   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   saverP   rc   )r)   rb   optsrT   s      r*   rc   zPasswordResetView.form_valid   sx    //1#33//#'#;#;%)%?%?||(,(E(E#'#;#;	
 			Dw!$''r,   )rA   rB   rC   r   r   r   rZ   r   r   r   r   success_urlrn   r}   r{   r   r   rc   ro   rp   s   @r*   r   r      sO    B"JJ#E45K;ME-O( (r,   r   _password_reset_tokenc                        e Zd ZdZ ed      Zy)PasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentNrA   rB   rC   rn   r}   r{   rE   r,   r*   r   r      s    ;M#$Er,   r   c                   z     e Zd ZeZdZdZdZ ed      Z	dZ
 ed      ZeZ 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| _        | j                  |d         | _        | j                  |d   }|| j                  k(  re| j
                  j                  j                  t              }| j                  j                  | j                  |      rd| _        t        | 0  |i |S | j                  j                  | j                  |      rX|| j
                  j                  t        <   | j
                  j                  j                  || j                        }t        |      S | j!                  | j#                               S )Nuidb64tokenz:The URL path must contain 'uidb64' and 'token' parameters.FT)r   	validlinkra   rL   reset_url_tokenr2   sessionr4   INTERNAL_RESET_SESSION_TOKENr   check_tokenrP   rF   rN   replacer   render_to_responserg   )r)   rR   rS   r   session_tokenredirect_urlrT   s         r*   rF   z!PasswordResetConfirmView.dispatch  s3   6!WF%:&L  MM&"23	99 7OE,,, $ 4 4 8 89U V''33DII}M%)DN 7+T<V<<''33DIIuE
 JODLL(()EF#'<<#4#4#<#<t33$L 0== &&t'<'<'>??r,   c                 .   	 t        |      j                         }t        j                  j                  j                  |      }t        j                  j                  |      }|S # t        t        t        t        j                  t        f$ r d }Y |S w xY w)N)pk)r   decode	UserModel_metar   	to_python_default_managerr4   	TypeErrorrO   OverflowErrorDoesNotExistr   )r)   r   uidr   rL   s        r*   ra   z!PasswordResetConfirmView.get_user$  s    	'/668C##--c2B--11R18D  ""
 	 D	s   A"A& &*BBc                 B    t         |          }| j                  |d<   |S NrL   )rP   r]   rL   r^   s     r*   r]   z(PasswordResetConfirmView.get_form_kwargs4  s"    (*vr,   c                     |j                         }| j                  j                  t        = | j                  r!t        | j                  || j                         t        | !  |      S r%   )	r   r2   r   r   post_reset_loginr`   post_reset_login_backendrP   rc   )r)   rb   rL   rT   s      r*   rc   z#PasswordResetConfirmView.form_valid9  sP    yy{LL  !=>  t||T4+H+HIw!$''r,   c                     t        |   di |}| j                  rd|d<   |S |j                  d t	        d      dd       |S )NTr   zPassword reset unsuccessfulF)rb   r{   r   rE   )rP   rg   r   rh   r}   r   s      r*   rg   z)PasswordResetConfirmView.get_context_data@  sV    '*4V4>>#'GK   NN <=!& r,   )rA   rB   rC   r   rZ   r   r   r   r   r   rn   r}   r{   r   r   rF   ra   r]   rc   rg   ro   rp   s   @r*   r   r      s[     !J#$O89K>M"#E-O@@ 
( r,   r   c                   2     e Zd ZdZ ed      Z fdZ xZS )PasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec                 ^    t        |   di |}t        t        j                        |d<   |S )Nr   rE   )rP   rg   r   r   r   r   s      r*   rg   z*PasswordResetCompleteView.get_context_dataT  s/    '*4V4*8+=+=>r,   )rA   rB   rC   rn   r}   r{   rg   ro   rp   s   @r*   r   r   O  s    ?M'(E r,   r   c                   P     e Zd ZeZ ed      ZdZ ed      Z	 fdZ
 fdZ xZS )PasswordChangeViewpassword_change_donez&registration/password_change_form.htmlzPassword changec                 V    t         |          }| j                  j                  |d<   |S r   )rP   r]   r2   rL   r^   s     r*   r]   z"PasswordChangeView.get_form_kwargsc  s(    (***vr,   c                     |j                          t        | j                  |j                         t        |   |      S r%   )r   r
   r2   rL   rP   rc   )r)   rb   rT   s     r*   rc   zPasswordChangeView.form_validh  s0    		 	!tyy9w!$''r,   )rA   rB   rC   r   rZ   r   r   rn   r}   r{   r]   rc   ro   rp   s   @r*   r   r   Z  s4     $J56K<M E
( (r,   r   c                        e Zd ZdZ ed      Zy)PasswordChangeDoneViewz&registration/password_change_done.htmlzPassword change successfulNr   rE   r,   r*   r   r   p  s    <M*+Er,   r   r%   )Curllib.parser   r   django.confr   django.contrib.authr   r   r   r`   r	   rv   r
   django.contrib.auth.decoratorsr   r   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   r}   django.views.decorators.cacher   django.views.decorators.csrfr   django.views.decorators.debugr   django.views.generic.baser    django.views.generic.editr!   r   r#   rI   rr   r   r   r   r   r   r   r   r   r   r   rE   r,   r*   <module>r      s   -   D 3 5 8 M  ? ; H 7 ( $ 4 T 6 5 5 C 2 .	R R< 24lKP	5 ( 5	5p <-J?'!< ' @'T< '+@S =.  %|4:F(,h ( G(6  7  $:6%0, % 7%
 24kBR3X RRj $:6 4l  7  ,?j(-x ((& .z2,1< , 3,r,   