o
    {,h67                     @   s:  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 Z5G dd dZ6e$eddG dd de6e4Z7G dd de6e2Z8d3d d!Z9defd"d#Z:G d$d% d%Z;e$eddG d&d' d'e;e4Z<d(Z=e$eddG d)d* d*e;e2Z>e$eddG d+d, d,e;e4Z?e$eddG d-d. d.e;e2Z@G d/d0 d0e;e4ZAG d1d2 d2e;e2ZBdS )4    )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                   @   s:   e Zd ZdZeZe Zdd Zdd Z	dd Z
dd	 ZdS )
RedirectURLMixinNc                 C   s   |   p|  S N)get_redirect_urlget_default_redirect_urlself r'   O/var/www/html/rh/venv/lib/python3.10/site-packages/django/contrib/auth/views.pyget_success_url(   s   z RedirectURLMixin.get_success_urlc                 C   sB   | j j| j| j j| j}t||  | j  d}|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_safer'   r'   r(   r#   +   s   z!RedirectURLMixin.get_redirect_urlc                 C   s   | j  h| jS r"   )r.   get_hostsuccess_url_allowed_hostsr%   r'   r'   r(   r3   7   s   z.RedirectURLMixin.get_success_url_allowed_hostsc                 C   s   | 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%   r'   r'   r(   r$   :   s   
z)RedirectURLMixin.get_default_redirect_url)__name__
__module____qualname__r:   r   r1   setr8   r)   r#   r3   r$   r'   r'   r'   r(   r!   #   s    r!   dispatch)namec                       s~   e Zd ZdZeZdZdZdZdZ	e
e e
ee
e fddZdd Zd	d
 Z fddZdd Z fddZ  ZS )	LoginViewz=
    Display the login form and handle the login action.
    Nzregistration/login.htmlFc                    sN   | j r| jjjr|  }|| 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_authenticatedr)   path
ValueErrorr   superr?   r&   r.   argskwargsr5   	__class__r'   r(   r?   M   s   zLoginView.dispatchc                 C   s   | j rt| j S ttjS r9   )r:   r   r   LOGIN_REDIRECT_URLr%   r'   r'   r(   r$   [   s   

z"LoginView.get_default_redirect_urlc                 C   s   | j p| jS r"   )authentication_form
form_classr%   r'   r'   r(   get_form_classb   s   zLoginView.get_form_classc                       t   }| j|d< |S )Nr.   )rG   get_form_kwargsr.   r&   rJ   rK   r'   r(   rS   e      

zLoginView.get_form_kwargsc                 C   s   t | j|  t|  S )z)Security check complete. Log the user in.)
auth_loginr.   get_userr   r)   r&   formr'   r'   r(   
form_validj   s   zLoginView.form_validc                    sH   t  jdi |}t| j}|| j|  d|d|ji| jpi  |S )Nsite	site_namer'   )	rG   get_context_datar   r.   updater1   r#   r@   extra_contextr&   rJ   contextcurrent_siterK   r'   r(   r]   o   s   

zLoginView.get_context_data)r;   r<   r=   __doc__r   rP   rO   template_namerB   r_   r   r   r   r   r?   r$   rQ   rS   rZ   r]   __classcell__r'   r'   rK   r(   rA   A   s     rA   c                       s`   e Zd ZdZddgZdZdZeeee	 fddZ
 fdd	Zd
d Z fddZ  ZS )
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    postoptionszregistration/logged_out.htmlNc                    s   t  j|g|R i |S r"   rG   r?   )r&   r.   rI   rJ   rK   r'   r(   r?      s   zLogoutView.dispatchc                    s>   t | |  }|| krt|S t j|g|R i |S )zLogout may be done via POST.)auth_logoutr)   get_full_pathr   rG   r0   rH   rK   r'   r(   rg      s
   zLogoutView.postc                 C   s(   | j rt| j S tjrttjS | jjS rM   )r:   r   r   LOGOUT_REDIRECT_URLr.   rE   r%   r'   r'   r(   r$      s
   

z#LogoutView.get_default_redirect_urlc                    sD   t  jdi |}t| j}|||jtdd d| jpi  |S )Nz
Logged out)r[   r\   titlesubtitler'   )rG   r]   r   r.   r^   r@   _r_   r`   rK   r'   r(   r]      s   
	zLogoutView.get_context_data)r;   r<   r=   rc   http_method_namesrd   r_   r   r   r   r?   rg   r$   r]   re   r'   r'   rK   r(   rf   }   s    		rf   Nc                 C   s   t |ptj}tj|d| S )zR
    Log out the user if they are logged in. Then redirect to the login page.
    )r:   )r   r   	LOGIN_URLrf   as_view)r.   	login_urlr'   r'   r(   logout_then_login   s   rt   c                 C   sR   t |ptj}tt|}|r#t|d dd}| ||< |jdd|d< tt|S )zM
    Redirect the user to the login page, passing the given 'next' page.
       T)mutable/)safe)	r   r   rq   listr   r   	urlencoder   r   )nextrs   r1   resolved_urllogin_url_partsquerystringr'   r'   r(   redirect_to_login   s   r   c                       s    e Zd ZdZ fddZ  ZS )PasswordContextMixinNc                    s2   t  jdi |}|| jd d| jpi  |S )N)rm   rn   r'   )rG   r]   r^   rm   r_   r&   rJ   ra   rK   r'   r(   r]      s
   z%PasswordContextMixin.get_context_data)r;   r<   r=   r_   r]   re   r'   r'   rK   r(   r      s    r   c                       s`   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dZ fd	d
Z  ZS )PasswordResetViewz&registration/password_reset_email.htmlNz'registration/password_reset_subject.txtpassword_reset_donez%registration/password_reset_form.htmlzPassword resetc                       t  j|i |S r"   ri   r&   rI   rJ   rK   r'   r(   r?         zPasswordResetView.dispatchc              	      sF   | 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_contextr'   )r.   r4   r   r   r   r   r   r   saverG   rZ   )r&   rY   optsrK   r'   r(   rZ      s   
zPasswordResetView.form_valid)r;   r<   r=   r   r   r   rP   r   r   r   r   success_urlrd   ro   rm   r   r   r   r   r?   rZ   re   r'   r'   rK   r(   r      s    r   _password_reset_tokenc                   @   s   e Zd ZdZedZdS )PasswordResetDoneViewz%registration/password_reset_done.htmlzPassword reset sentN)r;   r<   r=   rd   ro   rm   r'   r'   r'   r(   r      s    r   c                       s   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dZd	d
 Z fddZ fddZ fddZ  ZS )PasswordResetConfirmViewFNzset-passwordpassword_reset_completez(registration/password_reset_confirm.htmlzEnter new passwordc                    s   d|vsd|vrt dd| _| |d | _| jd ur\|d }|| jkrA| jjt}| j	
| j|r@d| _t j|i |S n| j	
| j|r\|| jjt< | jj|| j}t|S | |  S )Nuidb64tokenz:The URL path must contain 'uidb64' and 'token' parameters.FT)r   	validlinkrW   rC   reset_url_tokenr.   sessionr0   INTERNAL_RESET_SESSION_TOKENr   check_tokenrG   r?   rE   replacer   render_to_responser]   )r&   rI   rJ   r   session_tokenredirect_urlrK   r'   r(   r?   
  s*   

z!PasswordResetConfirmView.dispatchc                 C   sT   zt | }tjj|}tjj|d}W |S  tt	t
tjtfy)   d }Y |S w )N)pk)r   decode	UserModel_metar   	to_python_default_managerr0   	TypeErrorrF   OverflowErrorDoesNotExistr   )r&   r   uidr   rC   r'   r'   r(   rW   ,  s   	
z!PasswordResetConfirmView.get_userc                    rR   NrC   )rG   rS   rC   rT   rK   r'   r(   rS   <  rU   z(PasswordResetConfirmView.get_form_kwargsc                    s4   |  }| jjt= | jrt| j|| j t |S r"   )	r   r.   r   r   post_reset_loginrV   post_reset_login_backendrG   rZ   )r&   rY   rC   rK   r'   r(   rZ   A  s
   
z#PasswordResetConfirmView.form_validc                    s>   t  jdi |}| jrd|d< |S |d tddd |S )NTr   zPassword reset unsuccessfulF)rY   rm   r   r'   )rG   r]   r   r^   ro   r   rK   r'   r(   r]   H  s   	z)PasswordResetConfirmView.get_context_data)r;   r<   r=   r   rP   r   r   r   r   r   rd   ro   rm   r   r   r   r   r   r?   rW   rS   rZ   r]   re   r'   r'   rK   r(   r      s      r   c                       s(   e Zd ZdZedZ fddZ  ZS )PasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec                    s$   t  jdi |}ttj|d< |S )Nrs   r'   )rG   r]   r   r   rq   r   rK   r'   r(   r]   \  s   z*PasswordResetCompleteView.get_context_data)r;   r<   r=   rd   ro   rm   r]   re   r'   r'   rK   r(   r   W  s    r   c                       sf   e Zd ZeZedZdZedZ	e
e e
ee
e fddZ fddZ fdd	Z  ZS )
PasswordChangeViewpassword_change_donez&registration/password_change_form.htmlzPassword changec                    r   r"   ri   r   rK   r'   r(   r?   h  s   zPasswordChangeView.dispatchc                    s   t   }| jj|d< |S r   )rG   rS   r.   rC   rT   rK   r'   r(   rS   n  s   
z"PasswordChangeView.get_form_kwargsc                    s"   |   t| j|j t |S r"   )r   r	   r.   rC   rG   rZ   rX   rK   r'   r(   rZ   s  s   zPasswordChangeView.form_valid)r;   r<   r=   r   rP   r   r   rd   ro   rm   r   r   r   r   r?   rS   rZ   re   r'   r'   rK   r(   r   b  s    r   c                       s0   e Zd ZdZedZee fddZ  Z	S )PasswordChangeDoneViewz&registration/password_change_done.htmlzPassword change successfulc                    r   r"   ri   r   rK   r'   r(   r?     r   zPasswordChangeDoneView.dispatch)
r;   r<   r=   rd   ro   rm   r   r   r?   re   r'   r'   rK   r(   r   {  s
    r   r"   )Curllib.parser   r   django.confr   django.contrib.authr   r   r   rV   r   rj   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   ro   django.views.decorators.cacher   django.views.decorators.csrfr   django.views.decorators.debugr   django.views.generic.baser   django.views.generic.editr    r   r!   rA   rf   rt   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   sR    
;
/



W
