3
(h0                 @   s  d dl Z d dl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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# 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/m0Z0 d dl1m2Z2 dd Z3dd Z4e3e2 e0e.deeddfddZe3e.ddedfddZ	e3d7dd Z5defd!d"Z6e3e0d#d$d%eedddddf
d&d'Z7e3d8d)d*Z8e2 e.e3ddd+eeddfd,d-Z9e3d9d/d0Z:e2 e0ee3d1dedfd2d3Z;ee3d:d5d6Z<dS );    N)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)HttpResponseRedirect	QueryDict)resolve_url)TemplateResponse)reverse)RemovedInDjango20Warning)
force_text)is_safe_urlurlsafe_base64_decode)urlparse
urlunparse)ugettext)never_cache)csrf_protect)sensitive_post_parametersc                s   t j  fdd}|S )zG
    Handle deprecation of the current_app parameter of the views.
    c                 sN   d|krDt jdj jt |jd}|jdd }|rD|d k	rD||_ | |S )Ncurrent_appzxPassing `current_app` as a keyword argument is deprecated. Instead the caller of `{0}` should set `request.current_app`.request)warningswarnformat__name__r   popgetr   )argskwargsr   r   )func =/tmp/pip-install-q3hcpn_q/Django/django/contrib/auth/views.pyinner"   s    
z$deprecate_current_app.<locals>.inner)	functoolswraps)r(   r+   r)   )r(   r*   deprecate_current_app   s    r.   c             C   s   t || j dsttjS |S )N)urlhost)r   get_hostr   r   ZLOGIN_REDIRECT_URL)r   redirect_tor)   r)   r*   _get_login_redirect_url3   s    
r3   zregistration/login.htmlFc       
      C   s   | j j|| jj|d}|rH| jjrHt| |}|| jkr@tdt|S | j	dkr|| | j d}|j
 rt| |j  tt| |S n|| }t| }d|||d|d|ji}	|dk	r|	j| t| ||	S )	z?
    Displays the login form and handles the login action.
     zsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.POST)dataformsite	site_nameN)r5   r%   GETuseris_authenticatedr3   path
ValueErrorr   methodis_valid
auth_loginZget_userr   nameupdater   )
r   template_nameredirect_field_nameZauthentication_formextra_contextZredirect_authenticated_userr2   r7   current_sitecontextr)   r)   r*   r   :   s*    




r   zregistration/logged_out.htmlc             C   s   t |  |dk	rt|}ntjr*ttj}|| jks>|| jkrj| jj|| jj|}t|| j dsj| j	}|rvt
|S t| }||jtdd}|dk	r|j| t| ||S )zF
    Logs out the user and displays 'You are logged out' message.
    N)r/   r0   z
Logged out)r8   r9   title)auth_logoutr   r   ZLOGOUT_REDIRECT_URLr5   r:   r%   r   r1   r=   r   r   rB   _rC   r   )r   Z	next_pagerD   rE   rF   rG   rH   r)   r)   r*   r   e   s(    	




r   c             C   s    |s
t j}t|}t| ||dS )zU
    Logs out the user if they are logged in. Then redirects to the log-in page.
    )rF   )r   	LOGIN_URLr   r   )r   	login_urlrF   r)   r)   r*   logout_then_login   s    rN   c             C   sR   t |p
tj}tt|}|rFt|d dd}| ||< |jdd|d< tt|S )zM
    Redirects the user to the login page, passing the given 'next' page
       T)Zmutable/)safe)	r   r   rL   listr   r   	urlencoder   r   )nextrM   rE   Zresolved_urlZlogin_url_partsZquerystringr)   r)   r*   redirect_to_login   s    rU   z%registration/password_reset_form.htmlz&registration/password_reset_email.htmlz'registration/password_reset_subject.txtc          	   C   s   |d krt d}nt|}| jdkrf|| j}|j rl| j ||||| |	|
d}|jf | t|S n| }|tdd}|d k	r|j	| t
| ||S )Npassword_reset_doner5   )Z	use_httpstoken_generator
from_emailemail_template_namesubject_template_namer   html_email_template_nameextra_email_contextzPassword reset)r7   rI   )r   r   r?   r5   r@   Z	is_securesaver   rK   rC   r   )r   rD   rY   rZ   Zpassword_reset_formrW   post_reset_redirectrX   rF   r[   r\   r7   optsrH   r)   r)   r*   password_reset   s,    




r`   %registration/password_reset_done.htmlc             C   s*   dt di}|d k	r|j| t| ||S )NrI   zPassword reset sent)rK   rC   r   )r   rD   rF   rH   r)   r)   r*   rV      s    
rV   z(registration/password_reset_confirm.htmlc             C   s
  t  }|dk	r|dk	st|dkr,td}nt|}ytt|}	|jj|	d}
W n" tt	t
|jfk
rt   d}
Y nX |
dk	r|j|
|rd}td}| jdkr||
| j}|j r|j  t|S q||
}nd}d}td}|||d	}|dk	r|j| t| ||S )
zq
    View that checks the hash in a password reset link and presents a
    form for entering a new password.
    Npassword_reset_complete)pkTzEnter new passwordr5   FzPassword reset unsuccessful)r7   rI   	validlink)r   AssertionErrorr   r   r   r   Z_default_managerr%   	TypeErrorr>   OverflowErrorZDoesNotExistZcheck_tokenrK   r?   r5   r@   r]   r   rC   r   )r   Zuidb64tokenrD   rW   Zset_password_formr^   rF   Z	UserModeluidr;   rd   rI   r7   rH   r)   r)   r*   password_reset_confirm   s8    





rj   )registration/password_reset_complete.htmlc             C   s2   t tjtdd}|d k	r&|j| t| ||S )NzPassword reset complete)rM   rI   )r   r   rL   rK   rC   r   )r   rD   rF   rH   r)   r)   r*   rb     s
    
rb   z&registration/password_change_form.htmlc             C   s   |d krt d}nt|}| jdkrZ|| j| jd}|j rf|j  t| |j t|S n|| jd}|t	dd}|d k	r|j
| t| ||S )Npassword_change_doner5   )r;   r6   )r;   zPassword change)r7   rI   )r   r   r?   r;   r5   r@   r]   r   r   rK   rC   r   )r   rD   Zpost_change_redirectZpassword_change_formrF   r7   rH   r)   r)   r*   password_change*  s    	



rm   &registration/password_change_done.htmlc             C   s*   dt di}|d k	r|j| t| ||S )NrI   zPassword change successful)rK   rC   r   )r   rD   rF   rH   r)   r)   r*   rl   K  s    
rl   )NN)ra   N)rk   N)rn   N)=r,   r    Zdjango.confr   Zdjango.contrib.authr   r   r   rA   r   rJ   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.httpr   r   Zdjango.shortcutsr   Zdjango.template.responser   Zdjango.urlsr   Zdjango.utils.deprecationr   Zdjango.utils.encodingr   Zdjango.utils.httpr   r   Z#django.utils.six.moves.urllib.parser   r   Zdjango.utils.translationr   rK   Zdjango.views.decorators.cacher   Zdjango.views.decorators.csrfr   Zdjango.views.decorators.debugr   r.   r3   rN   rU   r`   rV   rj   rb   rm   rl   r)   r)   r)   r*   <module>   s   $#
  +  