
    h4                        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 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l/m0Z0 d dl1m2Z2  e       Z3 G d d      Z4 G d de4e2      Z5 G d de4e0      Z6d,dZ7defdZ8 G d d      Z9 G d d e9e2      Z:d!Z; G d" d#e9e0      Z< G d$ d%e9e2      Z= G d& d'e9e0      Z> G d( d)e9e2      Z? G d* d+e9e0      Z@y)-    )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)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y)SuccessURLAllowedHostsMixinc                 P    | j                   j                         h| j                  S N)requestget_hostsuccess_url_allowed_hostsselfs    \/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/auth/views.pyget_success_url_allowed_hostsz9SuccessURLAllowedHostsMixin.get_success_url_allowed_hosts$   s#    %%'I$*H*HII    N)__name__
__module____qualname__setr&   r*    r+   r)   r!   r!   !   s     #Jr+   r!   c                        e Zd ZdZe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 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_userr$   useris_authenticatedget_success_urlpath
ValueErrorr   superdispatch)r(   r$   argskwargsredirect_to	__class__s        r)   r;   zLoginView.dispatch3   sz     ++0A0A0R0R..0Kdll/// M  (44w9$9&99r+   c                 \    | j                         }|xs t        t        j                        S r#   )get_redirect_urlr   r   LOGIN_REDIRECT_URL)r(   urls     r)   r7   zLoginView.get_success_urlA   s&    ##%>k("="=>>r+   c                 2   | j                   j                  j                  | j                  | j                   j                  j                  | j                  d            }t        || j                         | j                   j                               }|r|S dS )z6Return the user-originating redirect URL if it's safe. rC   allowed_hostsrequire_https)r$   POSTgetredirect_field_nameGETr   r*   	is_secure)r(   r>   url_is_safes      r)   rA   zLoginView.get_redirect_urlE   s    ll''++$$LL  !9!92>
 6<<>,,002

 *{1r1r+   c                 6    | j                   xs | j                  S r#   )authentication_form
form_classr'   s    r)   get_form_classzLoginView.get_form_classR   s    '':4??:r+   c                 B    t         |          }| j                  |d<   |S )Nr$   )r:   get_form_kwargsr$   r(   r=   r?   s     r)   rT   zLoginView.get_form_kwargsU   s#    (* LLyr+   c                 |    t        | j                  |j                                t        | j	                               S )z)Security check complete. Log the user in.)
auth_loginr$   get_userr   r7   )r(   forms     r)   
form_validzLoginView.form_validZ   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_namer0   )	r:   get_context_datar   r$   updaterK   rA   nameextra_contextr(   r=   contextcurrent_siter?   s       r)   r^   zLoginView.get_context_data_   st    '*4V4'5$$d&;&;&=L**
 !!'R	
 	 r+   )r,   r-   r.   __doc__r   rQ   rP   r   rK   template_namer4   ra   r   r   r   r   r;   r7   rA   rR   rT   rZ   r^   __classcell__r?   s   @r)   r2   r2   (   s     $J--M"'M/12l#k"	: # $ 3	:?2;
<
	 	r+   r2   c                   ^     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                 z    t        |       | j                         }|rt        |      S t        |   |g|i |S r#   )auth_logoutget_next_pager   r:   r;   )r(   r$   r<   r=   	next_pager?   s        r)   r;   zLogoutView.dispatcht   sA    G&&(	'	22w9$9&99r+   c                 .     | j                   |g|i |S )zLogout may be done via POST.)rJ   )r(   r$   r<   r=   s       r)   postzLogoutView.post}   s    txx1$1&11r+   c                    | j                   t        | j                         }n6t        j                  rt        t        j                        }n| j                   }| j                  | j
                  j                  v s"| j                  | j
                  j                  v r| j
                  j                  j                  | j                  | j
                  j                  j                  | j                              }t        || j                         | j
                  j                               }|s| j
                  j                  }|S )NrF   )rn   r   r   LOGOUT_REDIRECT_URLrK   r$   rI   rL   rJ   r   r*   rM   r8   )r(   rn   rN   s      r)   rm   zLogoutView.get_next_page   s    >>%#DNN3I))#H$@$@AII$$(9(99((DLL,<,<<))--((  $$T%=%=>I :"@@B"ll446K  LL--	r+   c                     t        |   di |}t        | j                        }|j	                  ||j
                  t        d      d| j                  xs i        |S )Nz
Logged out)r\   r]   titler0   )r:   r^   r   r$   r_   r`   _ra   rb   s       r)   r^   zLogoutView.get_context_data   sc    '*4V4'5 %**|_
 !!'R	
 	 r+   )r,   r-   r.   re   rn   r   rK   rf   ra   r   r   r;   rp   rm   r^   rg   rh   s   @r)   rj   rj   k   sJ     I-2MMk": #:22	 	r+   rj   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.
    )rn   )r   r   	LOGIN_URLrj   as_view)r$   	login_urls     r)   logout_then_loginrz      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   rw   listr   r   	urlencoder   r   )nextry   rK   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                  d| j                  i| j                  xs i        |S )Nrt   r0   )r:   r^   r_   rt   ra   r(   r=   rc   r?   s      r)   r^   z%PasswordContextMixin.get_context_data   sI    '*4V4TZZ
!!'R
 	 r+   )r,   r-   r.   ra   r^   rg   rh   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                 "    t        |   |i |S r#   r:   r;   r(   r<   r=   r?   s      r)   r;   zPasswordResetView.dispatch       w000r+   c           	         | 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_namer$   html_email_template_nameextra_email_contextr0   )r$   rM   r   r   r   r   r   r   saver:   rZ   )r(   rY   optsr?   s      r)   rZ   zPasswordResetView.form_valid   sx    //1#33//#'#;#;%)%?%?||(,(E(E#'#;#;	
 			Dw!$''r+   )r,   r-   r.   r   r   r   rQ   r   r   r   r   success_urlrf   ru   rt   r   r   r   r   r;   rZ   rg   rh   s   @r)   r   r      sf    B"JJ#E45K;ME-Ol#1 $1( (r+   r   _password_reset_tokenc                        e Zd ZdZ ed      Zy)PasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentN)r,   r-   r.   rf   ru   rt   r0   r+   r)   r   r      s    ;M#$Er+   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 rd|v sJ d| _         | j                  |d         | _        | j                  |d   }|| j                  k(  re| j                  j
                  j                  t              }| j                  j                  | j                  |      rd| _         t        | ,  |i |S | j                  j                  | j                  |      rX|| j                  j
                  t        <   | j                  j                  j                  || j                        }t        |      S | j                  | j!                               S )Nuidb64tokenFT)	validlinkrX   r5   reset_url_tokenr$   sessionrJ   INTERNAL_RESET_SESSION_TOKENr   check_tokenr:   r;   r8   replacer   render_to_responser^   )r(   r<   r=   r   session_tokenredirect_urlr?   s         r)   r;   z!PasswordResetConfirmView.dispatch  s$    6!g&777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#<#<UDDXDX#YL/== &&t'<'<'>??r+   c                     	 t        |      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_default_managerrJ   	TypeErrorr9   OverflowErrorDoesNotExistr   )r(   r   uidr5   s       r)   rX   z!PasswordResetConfirmView.get_user  sf    	'/668C--11S19D  :}i6L6Lo^ 	D	s   9= *A+*A+c                 B    t         |          }| j                  |d<   |S Nr5   )r:   rT   r5   rU   s     r)   rT   z(PasswordResetConfirmView.get_form_kwargs'  s"    (*vr+   c                     |j                         }| j                  j                  t        = | j                  r!t        | j                  || j                         t        | !  |      S r#   )	r   r$   r   r   post_reset_loginrW   post_reset_login_backendr:   rZ   )r(   rY   r5   r?   s      r)   rZ   z#PasswordResetConfirmView.form_valid,  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)rY   rt   r   r0   )r:   r^   r   r_   ru   r   s      r)   r^   z)PasswordResetConfirmView.get_context_data3  sV    '*4V4>>#'GK   NN89" 
 r+   )r,   r-   r.   r   rQ   r   r   r   r   r   rf   ru   rt   r   r   r   r   r   r;   rX   rT   rZ   r^   rg   rh   s   @r)   r   r      s|     J#$O89K>M"#E-O/12k"@ # 3@6
(
 
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 )Nry   r0   )r:   r^   r   r   rw   r   s      r)   r^   z*PasswordResetCompleteView.get_context_dataD  s/    '*4V4*8+=+=>r+   )r,   r-   r.   rf   ru   rt   r^   rg   rh   s   @r)   r   r   @  s    ?M'(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                 "    t        |   |i |S r#   r   r   s      r)   r;   zPasswordChangeView.dispatchP  s     w000r+   c                 V    t         |          }| j                  j                  |d<   |S r   )r:   rT   r$   r5   rU   s     r)   rT   z"PasswordChangeView.get_form_kwargsV  s(    (***vr+   c                     |j                          t        | j                  |j                         t        |   |      S r#   )r   r
   r$   r5   r:   rZ   )r(   rY   r?   s     r)   rZ   zPasswordChangeView.form_valid[  s0    		 	!tyy9w!$''r+   )r,   r-   r.   r   rQ   r   r   rf   ru   rt   r   r   r   r   r;   rT   rZ   rg   rh   s   @r)   r   r   J  sg    #J56K<M E/12l#n%1 & $ 31
( (r+   r   c                   H     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                 "    t        |   |i |S r#   r   r   s      r)   r;   zPasswordChangeDoneView.dispatchg  r   r+   )
r,   r-   r.   rf   ru   rt   r   r   r;   rg   rh   s   @r)   r   r   c  s*    <M*+En%1 &1r+   r   r#   )Aurllib.parser   r   django.confr   django.contrib.authr   r   r   rW   r	   rl   r
   django.contrib.auth.decoratorsr   django.contrib.auth.formsr   r   r   r   django.contrib.auth.tokensr   django.contrib.sites.shortcutsr   django.core.exceptionsr   django.httpr   r   django.shortcutsr   django.urlsr   django.utils.decoratorsr   django.utils.httpr   r   django.utils.translationr   ru   django.views.decorators.cacher   django.views.decorators.csrfr   django.views.decorators.debugr   django.views.generic.baser   django.views.generic.editr   r   r!   r2   rj   rz   r   r   r   r   r   r   r   r   r   r0   r+   r)   <module>r      s   -    :  ? ; 2 7 ( $ 4 7 5 5 C 2 .	J J@+X @F8,l 8v< '+@S =,	 	(,h (>  7 %0, %
F3X FR 4l (-x (211< 1r+   