o
    ÔèFhÝ5  ã                   @   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 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ƒ Z4G dd„ dƒZ5G dd„ de5e3ƒZ6G dd„ de5e1ƒZ7d1dd„Z8defd d!„Z9G d"d#„ d#ƒZ:G d$d%„ d%e:e3ƒZ;d&Z<G d'd(„ d(e:e1ƒZ=G d)d*„ d*e:e3ƒZ>G d+d,„ d,e:e1ƒZ?G d-d.„ d.e:e3ƒZ@G d/d0„ d0e:e1ƒZAdS )2é    )Ú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                   @   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&   úR/var/www/html/loop/nvenv/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'   r2   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__r9   r   r0   Úsetr7   r(   r"   r2   r#   r&   r&   r&   r'   r    #   s    r    c                       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   ÚsuperÚdispatch©r%   r-   ÚargsÚkwargsr4   ©Ú	__class__r&   r'   rE   L   s   ÿzLoginView.dispatchc                 C   s   | j rt| j ƒS ttjƒS ©r8   )r9   r   r   ÚLOGIN_REDIRECT_URLr$   r&   r&   r'   r#   Z   s   

z"LoginView.get_default_redirect_urlc                 C   s   | j p| jS r!   )Úauthentication_formÚ
form_classr$   r&   r&   r'   Úget_form_classa   s   zLoginView.get_form_classc                    ó   t ƒ  ¡ }| j|d< |S )Nr-   )rD   Úget_form_kwargsr-   ©r%   rH   rI   r&   r'   rQ   d   ó   

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_validi   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&   )	rD   Úget_context_datar   r-   Úupdater0   r"   ÚnameÚextra_context©r%   rH   ÚcontextÚcurrent_siterI   r&   r'   r[   n   s   

ýüÿzLoginView.get_context_data)r:   r;   r<   Ú__doc__r   rN   rM   Útemplate_namer?   r^   r   r   r   r   rE   r#   rO   rQ   rX   r[   Ú__classcell__r&   r&   rI   r'   r>   A   s     r>   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!   ©rD   rE   )r%   r-   rG   rH   rI   r&   r'   rE   …   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   rD   r/   rF   rI   r&   r'   rf   Š   s
   zLogoutView.postc                 C   s(   | j rt| j ƒS tjrttjƒS | jjS rK   )r9   r   r   ÚLOGOUT_REDIRECT_URLr-   rB   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)rY   rZ   ÚtitleÚsubtitler&   )rD   r[   r   r-   r\   r]   Ú_r^   r_   rI   r&   r'   r[   œ   s   
üûÿ	zLogoutView.get_context_data)r:   r;   r<   rb   Úhttp_method_namesrc   r^   r   r   r   rE   rf   r#   r[   rd   r&   r&   rI   r'   re   |   s    		re   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.
    )r9   )r   r   Ú	LOGIN_URLre   Úas_view)r-   Ú	login_urlr&   r&   r'   Úlogout_then_login«   s   rs   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   rp   Úlistr   r   Ú	urlencoder   r   )Únextrr   r0   Ú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)rl   rm   r&   )rD   r[   r\   rl   r^   ©r%   rH   r`   rI   r&   r'   r[   Í   s
   ÿz%PasswordContextMixin.get_context_data)r:   r;   r<   r^   r[   rd   r&   r&   rI   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!   rh   ©r%   rG   rH   rI   r&   r'   rE   á   ó   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-   r3   r‡   rˆ   r‰   rŠ   r‹   rŒ   ÚsaverD   rX   )r%   rW   ÚoptsrI   r&   r'   rX   å   s   ø
zPasswordResetView.form_valid)r:   r;   r<   r‰   rŒ   r   rN   rˆ   r‹   rŠ   r   Úsuccess_urlrc   rn   rl   r   r‡   r   r   rE   rX   rd   r&   r&   rI   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<   rc   rn   rl   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   Ú	validlinkrU   r@   Úreset_url_tokenr-   Úsessionr/   ÚINTERNAL_RESET_SESSION_TOKENr‡   Úcheck_tokenrD   rE   rB   Úreplacer   Úrender_to_responser[   )r%   rG   rH   r•   Úsession_tokenÚredirect_urlrI   r&   r'   rE     s*   ÿ

ýÿz!PasswordResetConfirmView.dispatchc                 C   sF   zt |ƒ ¡ }tjj|d�}W |S  ttttjt	fy"   d }Y |S w )N)Úpk)
r   ÚdecodeÚ	UserModelÚ_default_managerr/   Ú	TypeErrorrC   ÚOverflowErrorÚDoesNotExistr   )r%   r”   Úuidr@   r&   r&   r'   rU   (  s   	ø
ûøz!PasswordResetConfirmView.get_userc                    rP   ©Nr@   )rD   rQ   r@   rR   rI   r&   r'   rQ   7  rS   z(PasswordResetConfirmView.get_form_kwargsc                    s4   |  ¡ }| jjt= | jrt| j|| jƒ tƒ  |¡S r!   )	r�   r-   r˜   r™   Úpost_reset_loginrT   Úpost_reset_login_backendrD   rX   )r%   rW   r@   rI   r&   r'   rX   <  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)rW   rl   r–   r&   )rD   r[   r–   r\   rn   r€   rI   r&   r'   r[   C  s   	ùýÿz)PasswordResetConfirmView.get_context_data)r:   r;   r<   r   rN   r¨   r©   r—   r   r�   rc   rn   rl   r   r‡   r   r   r   rE   rU   rQ   rX   r[   rd   r&   r&   rI   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 )Nrr   r&   )rD   r[   r   r   rp   r€   rI   r&   r'   r[   V  s   z*PasswordResetCompleteView.get_context_data)r:   r;   r<   rc   rn   rl   r[   rd   r&   r&   rI   r'   rª   R  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!   rh   r„   rI   r&   r'   rE   b  s   zPasswordChangeView.dispatchc                    s   t ƒ  ¡ }| jj|d< |S r§   )rD   rQ   r-   r@   rR   rI   r&   r'   rQ   h  s   
z"PasswordChangeView.get_form_kwargsc                    s"   |  ¡  t| j|jƒ tƒ  |¡S r!   )r�   r	   r-   r@   rD   rX   rV   rI   r&   r'   rX   m  s   zPasswordChangeView.form_valid)r:   r;   r<   r   rN   r   r�   rc   rn   rl   r   r   r   r
   rE   rQ   rX   rd   r&   r&   rI   r'   r«   \  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!   rh   r„   rI   r&   r'   rE   y  r…   zPasswordChangeDoneView.dispatch)
r:   r;   r<   rc   rn   rl   r   r
   rE   rd   r&   r&   rI   r'   r­   u  s
    r­   r!   )BÚurllib.parser   r   Údjango.confr   Údjango.contrib.authr   r   r   rT   r   ri   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   rn   Údjango.views.decorators.cacher   Údjango.views.decorators.csrfr   Údjango.views.decorators.debugr   Údjango.views.generic.baser   Údjango.views.generic.editr   r¡   r    r>   re   rs   r~   r   r�   r™   r‘   r’   rª   r«   r­   r&   r&   r&   r'   Ú<module>   sH    ;
/V
