o
    h4                     @   s  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 Z3G dd dZ4G dd de4e2Z5G dd de4e0Z6d.ddZ7defddZ8G dd  d Z9G d!d" d"e9e2Z:d#Z;G d$d% d%e9e0Z<G d&d' d'e9e2Z=G d(d) d)e9e0Z>G d*d+ d+e9e2Z?G d,d- d-e9e0Z@dS )/    )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                   @   s   e Zd Ze Zdd ZdS )SuccessURLAllowedHostsMixinc                 C   s   | j  h| jS N)requestget_hostsuccess_url_allowed_hostsself r&   a/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/contrib/auth/views.pyget_success_url_allowed_hosts$   s   z9SuccessURLAllowedHostsMixin.get_success_url_allowed_hostsN)__name__
__module____qualname__setr#   r(   r&   r&   r&   r'   r   !   s    r   c                       s   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dZ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_authenticatedget_success_urlpath
ValueErrorr   superdispatch)r%   r!   argskwargsredirect_to	__class__r&   r'   r5   3   s   zLoginView.dispatchc                 C   s   |   }|p
ttjS r    )get_redirect_urlr   r   ZLOGIN_REDIRECT_URL)r%   urlr&   r&   r'   r1   A   s   zLoginView.get_success_urlc                 C   sD   | j j| j| j j| jd}t||  | j  d}|r |S dS )z6Return the user-originating redirect URL if it's safe. r<   Zallowed_hostsZrequire_https)r!   POSTgetredirect_field_nameGETr   r(   	is_secure)r%   r8   url_is_safer&   r&   r'   r;   E   s   zLoginView.get_redirect_urlc                 C   s   | j p| jS r    )authentication_form
form_classr$   r&   r&   r'   get_form_classR   s   zLoginView.get_form_classc                       t   }| j|d< |S )Nr!   )r4   get_form_kwargsr!   r%   r7   r9   r&   r'   rI   U      

zLoginView.get_form_kwargsc                 C   s   t | j|  t|  S )z)Security check complete. Log the user in.)
auth_loginr!   get_userr   r1   r%   formr&   r&   r'   
form_validZ   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&   )	r4   get_context_datar   r!   updaterA   r;   nameextra_contextr%   r7   contextZcurrent_siter9   r&   r'   rS   _   s   

zLoginView.get_context_data)r)   r*   r+   __doc__r   rF   rE   r   rA   template_namer.   rV   r   r   r   r   r5   r1   r;   rG   rI   rP   rS   __classcell__r&   r&   r9   r'   r-   (   s$    r-   c                       sT   e Zd ZdZdZeZdZdZe	e
 fddZ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.
    Nzregistration/logged_out.htmlc                    s6   t | |  }|rt|S t j|g|R i |S r    )auth_logoutget_next_pager   r4   r5   )r%   r!   r6   r7   	next_pager9   r&   r'   r5   t   s
   zLogoutView.dispatchc                 O   s   | j |g|R i |S )zLogout may be done via POST.)r@   )r%   r!   r6   r7   r&   r&   r'   post}   s   zLogoutView.postc                 C   s   | j d urt| j }ntjrttj}n| j }| j| jjv s%| j| jjv rF| jj| j| jj| j}t	|| 
 | j d}|sF| jj}|S )Nr>   )r_   r   r   ZLOGOUT_REDIRECT_URLrA   r!   r?   rB   r@   r   r(   rC   r2   )r%   r_   rD   r&   r&   r'   r^      s&   
zLogoutView.get_next_pagec                    sB   t  jdi |}t| j}|||jtdd| jpi  |S )Nz
Logged out)rQ   rR   titler&   )r4   rS   r   r!   rT   rU   _rV   rW   r9   r&   r'   rS      s   
zLogoutView.get_context_data)r)   r*   r+   rY   r_   r   rA   rZ   rV   r   r   r5   r`   r^   rS   r[   r&   r&   r9   r'   r\   k   s    r\   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_URLr\   Zas_view)r!   	login_urlr&   r&   r'   logout_then_login   s   re   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/)safe)	r   r   rc   listr   r   	urlencoder   r   )nextrd   rA   Zresolved_urlZlogin_url_partsZquerystringr&   r&   r'   redirect_to_login   s   rl   c                       s    e Zd ZdZ fddZ  ZS )PasswordContextMixinNc                    s0   t  jdi |}|d| ji| jpi  |S )Nra   r&   )r4   rS   rT   ra   rV   r%   r7   rX   r9   r&   r'   rS      s   z%PasswordContextMixin.get_context_data)r)   r*   r+   rV   rS   r[   r&   r&   r9   r'   rm      s    rm   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    r4   r5   r%   r6   r7   r9   r&   r'   r5         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!   rC   rt   ru   rv   rw   rx   ry   saver4   rP   )r%   rO   optsr9   r&   r'   rP      s   
zPasswordResetView.form_valid)r)   r*   r+   rv   ry   r   rF   ru   rx   rw   r   success_urlrZ   rb   ra   r   rt   r   r   r5   rP   r[   r&   r&   r9   r'   ro      s    ro   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+   rZ   rb   ra   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 rd|v s
J d| _ | |d | _| jd urZ|d }|| jkr?| jjt}| j	| j|r>d| _ t
 j|i |S n| j	| j|rZ|| jjt< | jj|| j}t|S | |  S )Nuidb64tokenFT)	validlinkrM   r/   reset_url_tokenr!   sessionr@   INTERNAL_RESET_SESSION_TOKENrt   Zcheck_tokenr4   r5   r2   replacer   Zrender_to_responserS   )r%   r6   r7   r   Zsession_tokenZredirect_urlr9   r&   r'   r5     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@   	TypeErrorr3   OverflowErrorZDoesNotExistr   )r%   r   uidr/   r&   r&   r'   rM     s   z!PasswordResetConfirmView.get_userc                    rH   Nr/   )r4   rI   r/   rJ   r9   r&   r'   rI   '  rK   z(PasswordResetConfirmView.get_form_kwargsc                    s4   |  }| jjt= | jrt| j|| j t |S r    )	rz   r!   r   r   post_reset_loginrL   post_reset_login_backendr4   rP   )r%   rO   r/   r9   r&   r'   rP   ,  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)rO   ra   r   r&   )r4   rS   r   rT   rb   rn   r9   r&   r'   rS   3  s   z)PasswordResetConfirmView.get_context_data)r)   r*   r+   r   rF   r   r   r   r   r|   rZ   rb   ra   r   rt   r   r   r   r5   rM   rI   rP   rS   r[   r&   r&   r9   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 )Nrd   r&   )r4   rS   r   r   rc   rn   r9   r&   r'   rS   D  s   z*PasswordResetCompleteView.get_context_data)r)   r*   r+   rZ   rb   ra   rS   r[   r&   r&   r9   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 )
PasswordChangeViewZpassword_change_donez&registration/password_change_form.htmlzPassword changec                    rp   r    rq   rr   r9   r&   r'   r5   P  s   zPasswordChangeView.dispatchc                    s   t   }| jj|d< |S r   )r4   rI   r!   r/   rJ   r9   r&   r'   rI   V  s   
z"PasswordChangeView.get_form_kwargsc                    s"   |   t| j|j t |S r    )rz   r	   r!   r/   r4   rP   rN   r9   r&   r'   rP   [  s   zPasswordChangeView.form_valid)r)   r*   r+   r   rF   r   r|   rZ   rb   ra   r   r   r   r
   r5   rI   rP   r[   r&   r&   r9   r'   r   J  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                    rp   r    rq   rr   r9   r&   r'   r5   g  rs   zPasswordChangeDoneView.dispatch)
r)   r*   r+   rZ   rb   ra   r   r
   r5   r[   r&   r&   r9   r'   r   c  s
    r   r    )Aurllib.parser   r   Zdjango.confr   Zdjango.contrib.authr   r   r   rL   r   r]   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   Zdjango.httpr   r   Zdjango.shortcutsr   Zdjango.urlsr   Zdjango.utils.decoratorsr   Zdjango.utils.httpr   r   Zdjango.utils.translationr   rb   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-   r\   re   rl   rm   ro   r   r}   r~   r   r   r   r&   r&   r&   r'   <module>   sB    C
;I
