o
    ÒŸŽin8  ã                   @   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'   úcC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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.)ÚurlZallowed_hostsZrequire_httpsÚ N)Ú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(   r1   9   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.N)Ú	next_pager   r   r%   r'   r'   r(   r$   <   s   
z)RedirectURLMixin.get_default_redirect_url)Ú__name__Ú
__module__Ú__qualname__r7   r   r/   Úsetr5   r)   r#   r1   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Úkwargsr3   ©Ú	__class__r'   r(   rC   N   s   ÿzLoginView.dispatchc                 C   s   | j rt| j ƒS ttjƒS ©r6   N)r7   r   r   Z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                    ó   t ƒ  ¡ }| j|d< |S )Nr,   )rB   Úget_form_kwargsr,   ©r&   rF   rG   r'   r(   rN   f   ó   

zLoginView.get_form_kwargsc                 C   s   t | j| ¡ ƒ t|  ¡ ƒS )z)Security check complete. Log the user in.N)Ú
auth_loginr,   Úget_userr   r)   ©r&   Úformr'   r'   r(   Ú
form_validk   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'   )	rB   Úget_context_datar   r,   Úupdater/   r#   ÚnameÚextra_context©r&   rF   ÚcontextZcurrent_siterG   r'   r(   rX   p   s   

ýüÿzLoginView.get_context_data)r8   r9   r:   Ú__doc__r   rK   rJ   Útemplate_namer=   r[   r   r   r   r   rC   r$   rL   rN   rU   rX   Ú__classcell__r'   r'   rG   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.
    )r.   ÚheadÚpostÚoptionszregistration/logged_out.htmlNc                    s4   |j  ¡ dkrt dt¡ tƒ j|g|¢R i |¤ŽS )Nr.   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   rB   rC   )r&   r,   rE   rF   rG   r'   r(   rC   ‹   s   ýzLogoutView.dispatchc                    s>   t |ƒ |  ¡ }|| ¡ krt|ƒS tƒ j|g|¢R i |¤ŽS )zLogout may be done via POST.N)Úauth_logoutr)   Zget_full_pathr   rB   r.   rD   rG   r'   r(   rc   •   s
   zLogoutView.postc                 C   s(   | j rt| j ƒS tjrttjƒS | jjS rI   )r7   r   r   ZLOGOUT_REDIRECT_URLr,   r@   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)rV   rW   ÚtitleÚsubtitler'   )rB   rX   r   r,   rY   rZ   Ú_r[   r\   rG   r'   r(   rX   «   s   
üûÿ	zLogoutView.get_context_data)r8   r9   r:   r^   Zhttp_method_namesr_   r[   r   r   rC   r   rc   r.   r$   rX   r`   r'   r'   rG   r(   ra   ~   s    	
	ra   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.
    )r7   N)r   r   Ú	LOGIN_URLra   Zas_view)r,   Ú	login_urlr'   r'   r(   Úlogout_then_loginº   s   ro   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)Zmutableú/)ÚsafeN)	r   r   rm   Úlistr   r   Ú	urlencoder   r   )Únextrn   r/   Zresolved_urlZlogin_url_partsZquerystringr'   r'   r(   Úredirect_to_loginÂ   s   rv   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)rj   rk   r'   )rB   rX   rY   rj   r[   ©r&   rF   r]   rG   r'   r(   rX   Ü   s
   ÿz%PasswordContextMixin.get_context_data)r8   r9   r:   r[   rX   r`   r'   r'   rG   r(   rw   Ù   s    rw   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                    ó   t ƒ j|i |¤ŽS r"   ©rB   rC   ©r&   rE   rF   rG   r'   r(   rC   ð   ó   zPasswordResetView.dispatchc              	      sF   | j  ¡ | j| j| j| j| j | j| jdœ}|jdi |¤Ž t	ƒ  
|¡S )N)Z	use_httpsÚtoken_generatorÚ
from_emailÚemail_template_nameÚsubject_template_namer,   Úhtml_email_template_nameÚextra_email_contextr'   )r,   r2   r~   r   r€   r�   r‚   rƒ   ÚsaverB   rU   )r&   rT   ÚoptsrG   r'   r(   rU   ô   s   ø
zPasswordResetView.form_valid)r8   r9   r:   r€   rƒ   r   rK   r   r‚   r�   r   Úsuccess_urlr_   rl   rj   r   r~   r   r   rC   rU   r`   r'   r'   rG   r(   ry   ä   s    ry   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)r8   r9   r:   r_   rl   rj   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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   Ú	validlinkrR   r>   Úreset_url_tokenr,   Úsessionr.   ÚINTERNAL_RESET_SESSION_TOKENr~   Zcheck_tokenrB   rC   r@   Úreplacer   Zrender_to_responserX   )r&   rE   rF   rŠ   Zsession_tokenZredirect_urlrG   r'   r(   rC     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Ú	UserModelZ_default_managerr.   Ú	TypeErrorrA   ÚOverflowErrorZDoesNotExistr   )r&   r‰   Úuidr>   r'   r'   r(   rR   7  s   	ø
ûøz!PasswordResetConfirmView.get_userc                    rM   ©Nr>   )rB   rN   r>   rO   rG   r'   r(   rN   F  rP   z(PasswordResetConfirmView.get_form_kwargsc                    s4   |  ¡ }| jjt= | jrt| j|| jƒ tƒ  |¡S r"   )	r„   r,   r�   rŽ   Úpost_reset_loginrQ   Úpost_reset_login_backendrB   rU   )r&   rT   r>   rG   r'   r(   rU   K  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)rT   rj   r‹   r'   )rB   rX   r‹   rY   rl   rx   rG   r'   r(   rX   R  s   	ùýÿz)PasswordResetConfirmView.get_context_data)r8   r9   r:   r   rK   r—   r˜   rŒ   r   r†   r_   rl   rj   r   r~   r   r   r   rC   rR   rN   rU   rX   r`   r'   r'   rG   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 )Nrn   r'   )rB   rX   r   r   rm   rx   rG   r'   r(   rX   e  s   z*PasswordResetCompleteView.get_context_data)r8   r9   r:   r_   rl   rj   rX   r`   r'   r'   rG   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 )
ÚPasswordChangeViewZpassword_change_donez&registration/password_change_form.htmlzPassword changec                    rz   r"   r{   r|   rG   r'   r(   rC   q  s   zPasswordChangeView.dispatchc                    s   t ƒ  ¡ }| jj|d< |S r–   )rB   rN   r,   r>   rO   rG   r'   r(   rN   w  s   
z"PasswordChangeView.get_form_kwargsc                    s"   |  ¡  t| j|jƒ tƒ  |¡S r"   )r„   r	   r,   r>   rB   rU   rS   rG   r'   r(   rU   |  s   zPasswordChangeView.form_valid)r8   r9   r:   r   rK   r   r†   r_   rl   rj   r   r   r   r
   rC   rN   rU   r`   r'   r'   rG   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                    rz   r"   r{   r|   rG   r'   r(   rC   ˆ  r}   zPasswordChangeDoneView.dispatch)
r8   r9   r:   r_   rl   rj   r   r
   rC   r`   r'   r'   rG   r(   r›   „  s
    r›   r"   )Erg   Úurllib.parser   r   Zdjango.confr   Zdjango.contrib.authr   r   r   rQ   r   ri   r	   Zdjango.contrib.auth.decoratorsr
   Zdjango.contrib.auth.formsr   r   r   r   Zdjango.contrib.auth.tokensr   Zdjango.contrib.sites.shortcutsr   Zdjango.core.exceptionsr   r   Zdjango.httpr   r   Zdjango.shortcutsr   Zdjango.urlsr   Zdjango.utils.decoratorsr   Zdjango.utils.deprecationr   Zdjango.utils.httpr   r   Zdjango.utils.translationr   rl   Zdjango.views.decorators.cacher   Zdjango.views.decorators.csrfr   Zdjango.views.decorators.debugr   Zdjango.views.generic.baser   Zdjango.views.generic.editr    r’   r!   r<   ra   ro   rv   rw   ry   rŽ   r‡   rˆ   r™   rš   r›   r'   r'   r'   r(   Ú<module>   sL    ;
<V
