a
    ¥Q•hn8  ã                   @   s  d dl Z 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& d dl'm(Z(m)Z) d dl*m+Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 eƒ Z7G dd„ dƒZ8G dd„ de8e6ƒZ9G dd„ de8e4ƒZ:d2dd „Z;defd!d"„Z<G d#d$„ d$ƒZ=G d%d&„ d&e=e6ƒZ>d'Z?G d(d)„ d)e=e4ƒZ@G d*d+„ d+e=e6ƒZAG d,d-„ d-e=e4ƒZBG d.d/„ d/e=e6ƒZCG d0d1„ d1e=e4ƒZDdS )3é    N)Ú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)ÚRemovedInDjango50Warning)Ú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/sistema_ama/venv/lib/python3.9/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_toZ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   9   s    z.RedirectURLMixin.get_success_url_allowed_hostsc                 C   s   | j rt| j ƒS tdƒ‚dS )ú Return the default redirect URL.z+No URL to redirect to. Provide a next_page.N)Ú	next_pager   r   r%   r'   r'   r(   r$   <   s    
z)RedirectURLMixin.get_default_redirect_url)Ú__name__Ú
__module__Ú__qualname__r9   r   r1   Úsetr7   r)   r#   r3   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 r4| jjjr4|  ¡ }|| 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Úkwargsr5   ©Ú	__class__r'   r(   rE   N   s    ÿzLoginView.dispatchc                 C   s   | j rt| j ƒS ttjƒS dS ©r8   N)r9   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_classc   s    zLoginView.get_form_classc                    s   t ƒ  ¡ }| j|d< |S )Nr.   )rD   Úget_form_kwargsr.   ©r&   rH   rI   r'   r(   rP   f   s    

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_validk   s    zLoginView.form_validc                    sH   t ƒ jf i |¤Ž}t| jƒ}| | j|  ¡ d|d|ji| jp>i ¥¡ |S )NÚsiteÚ	site_name)	rD   Úget_context_datar   r.   Úupdater1   r#   ÚnameÚextra_context©r&   rH   ÚcontextÚcurrent_siterI   r'   r(   rY   p   s    

ýüÿzLoginView.get_context_data)r:   r;   r<   Ú__doc__r   rN   rM   Útemplate_namer?   r\   r   r   r   r   rE   r$   rO   rP   rV   rY   Ú__classcell__r'   r'   rI   r(   r>   C   s   r>   c                       sd   e Zd ZdZg d¢ZdZdZeeƒ‡ fdd„ƒZ	ee
ƒ‡ fdd„ƒZeZd	d
„ Z‡ fdd„Z‡  ZS )Ú
LogoutViewzH
    Log out the user and display the 'You are logged out' message.
    )r0   ÚheadÚpostÚoptionszregistration/logged_out.htmlNc                    s4   |j  ¡ dkrt dt¡ tƒ j|g|¢R i |¤ŽS )Nr0   zlLog out via GET requests is deprecated and will be removed in Django 5.0. Use POST requests for logging out.)ÚmethodÚlowerÚwarningsÚwarnr   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   r0   rF   rI   r'   r(   re   •   s
    zLogoutView.postc                 C   s,   | j rt| j ƒS tjr ttjƒS | jjS dS rK   )r9   r   r   ÚLOGOUT_REDIRECT_URLr.   rB   r%   r'   r'   r(   r$   ¢   s
    

z#LogoutView.get_default_redirect_urlc                    sD   t ƒ jf i |¤Ž}t| jƒ}| ||jtdƒd dœ| jp:i ¥¡ |S )Nz
Logged out)rW   rX   ÚtitleÚsubtitle)rD   rY   r   r.   rZ   r[   Ú_r\   r]   rI   r'   r(   rY   «   s    
üûÿ	zLogoutView.get_context_data)r:   r;   r<   r`   Úhttp_method_namesra   r\   r   r   rE   r   re   r0   r$   rY   rb   r'   r'   rI   r(   rc   ~   s   	
	rc   c                 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_URLrc   Úas_view)r.   Ú	login_urlr'   r'   r(   Úlogout_then_loginº   s    ru   c                 C   sR   t |p
tjƒ}tt|ƒƒ}|rFt|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   rr   Úlistr   r   Ú	urlencoder   r   )Únextrt   r1   Zresolved_urlZlogin_url_partsZ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f i |¤Ž}| | jd dœ| jp(i ¥¡ |S )N)rn   ro   )rD   rY   rZ   rn   r\   ©r&   rH   r^   rI   r'   r(   rY   Ü   s
    ÿz%PasswordContextMixin.get_context_data)r:   r;   r<   r\   rY   rb   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.txtZpassword_reset_donez%registration/password_reset_form.htmlzPassword resetc                    s   t ƒ j|i |¤ŽS r"   ©rD   rE   ©r&   rG   rH   rI   r'   r(   rE   ð   s    zPasswordResetView.dispatchc              	      sF   | j  ¡ | j| j| j| j| j | j| jdœ}|jf i |¤Ž t	ƒ  
|¡S )N)Ú	use_httpsÚtoken_generatorÚ
from_emailÚemail_template_nameÚsubject_template_namer.   Úhtml_email_template_nameÚextra_email_context)r.   r4   r„   r…   r†   r‡   rˆ   r‰   ÚsaverD   rV   )r&   rU   ÚoptsrI   r'   r(   rV   ô   s    ø
zPasswordResetView.form_valid)r:   r;   r<   r†   r‰   r   rN   r…   rˆ   r‡   r   Úsuccess_urlra   rp   rn   r   r„   r   r   rE   rV   rb   r'   r'   rI   r(   r€   ä   s   r€   Z_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<   ra   rp   rn   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-passwordZ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r‚| jj t¡}| j	 
| j|¡r¸d| _tƒ j|i |¤ŽS n6| 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   Ú	validlinkrS   r@   Úreset_url_tokenr.   Úsessionr0   ÚINTERNAL_RESET_SESSION_TOKENr„   Úcheck_tokenrD   rE   rB   Úreplacer   Úrender_to_responserY   )r&   rG   rH   r�   Zsession_tokenÚredirect_urlrI   r'   r(   rE     s(    ÿ

ÿz!PasswordResetConfirmView.dispatchc                 C   sF   zt |ƒ ¡ }tjj|d�}W n" ttttjt	fy@   d }Y n0 |S )N)Úpk)
r   ÚdecodeÚ	UserModelÚ_default_managerr0   Ú	TypeErrorrC   ÚOverflowErrorÚDoesNotExistr   )r&   r�   Úuidr@   r'   r'   r(   rS   7  s    û

z!PasswordResetConfirmView.get_userc                    s   t ƒ  ¡ }| j|d< |S ©Nr@   )rD   rP   r@   rQ   rI   r'   r(   rP   F  s    

z(PasswordResetConfirmView.get_form_kwargsc                    s4   |  ¡ }| jjt= | jr(t| j|| jƒ tƒ  |¡S r"   )	rŠ   r.   r“   r”   Úpost_reset_loginrR   Úpost_reset_login_backendrD   rV   )r&   rU   r@   rI   r'   r(   rV   K  s
    
z#PasswordResetConfirmView.form_validc                    s<   t ƒ jf i |¤Ž}| jr"d|d< n| d tdƒddœ¡ |S )NTr‘   zPassword reset unsuccessfulF)rU   rn   r‘   )rD   rY   r‘   rZ   rp   r   rI   r'   r(   rY   R  s    
ýÿz)PasswordResetConfirmView.get_context_data)r:   r;   r<   r   rN   r¢   r£   r’   r   rŒ   ra   rp   rn   r   r„   r   r   r   rE   rS   rP   rV   rY   rb   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f i |¤Ž}ttjƒ|d< |S )Nrt   )rD   rY   r   r   rr   r   rI   r'   r(   rY   e  s    z*PasswordResetCompleteView.get_context_data)r:   r;   r<   ra   rp   rn   rY   rb   r'   r'   rI   r(   r¤   a  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                    s   t ƒ j|i |¤ŽS r"   r�   r‚   rI   r'   r(   rE   q  s    zPasswordChangeView.dispatchc                    s   t ƒ  ¡ }| jj|d< |S r¡   )rD   rP   r.   r@   rQ   rI   r'   r(   rP   w  s    
z"PasswordChangeView.get_form_kwargsc                    s"   |  ¡  t| j|jƒ tƒ  |¡S r"   )rŠ   r	   r.   r@   rD   rV   rT   rI   r'   r(   rV   |  s    zPasswordChangeView.form_valid)r:   r;   r<   r   rN   r   rŒ   ra   rp   rn   r   r   r   r
   rE   rP   rV   rb   r'   r'   rI   r(   r¥   k  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                    s   t ƒ j|i |¤ŽS r"   r�   r‚   rI   r'   r(   rE   ˆ  s    zPasswordChangeDoneView.dispatch)
r:   r;   r<   ra   rp   rn   r   r
   rE   rb   r'   r'   rI   r(   r§   „  s   r§   )N)Eri   Úurllib.parser   r   Údjango.confr   Údjango.contrib.authr   r   r   rR   r   rk   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.deprecationr   Údjango.utils.httpr   r   Údjango.utils.translationr   rp   Údjango.views.decorators.cacher   Údjango.views.decorators.csrfr   Údjango.views.decorators.debugr   Údjango.views.generic.baser   Údjango.views.generic.editr    r›   r!   r>   rc   ru   r}   r~   r€   r”   r�   rŽ   r¤   r¥   r§   r'   r'   r'   r(   Ú<module>   sJ   ;<
V
