
^Q\]                 @   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 m  Z  d  d l! m" 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, m- Z- d  d l. m/ Z0 d  d l1 m2 Z2 d  d l3 m4 Z4 d  d l5 m6 Z6 d  d l7 m8 Z8 d  d l9 m: Z: e   Z; d d   Z< Gd d   d e=  Z> Gd d   d e> e:  Z? e< d e e d d d d    Z Gd! d"   d" e> e8  Z@ e< d d# e d d$ d%   Z	 e=   ZA e< d eA d& d'   ZB d e d( d)  ZC e< e4 d* d+ d, e e d d d d d d- d. 
   ZD e< d/ d d0 d1   ZE e6   e2 e< d d d2 e e d d d3 d4     ZF e< d5 d d6 d7   ZG Gd8 d9   d9 e=  ZH Gd: d;   d; eH e:  ZI d< ZJ d= ZK Gd> d?   d? eH e8  ZL Gd@ dA   dA eH e:  ZM GdB dC   dC eH e8  ZN e6   e4 e e< dD d e d dE dF      ZO e e< dG d dH dI    ZP GdJ dK   dK eH e:  ZQ GdL dM   dM eH e8  ZR d S)N    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reverse_lazy)method_decorator)RemovedInDjango20WarningRemovedInDjango21Warning)
force_text)is_safe_urlurlsafe_base64_decode)urlparse
urlunparse)ugettext_lazy)never_cache)csrf_protect)sensitive_post_parameters)TemplateView)FormViewc                s%   t  j      f d d    } | S)zG
    Handle deprecation of the current_app parameter of the views.
    c                 sw   d | k rj t  j d j   j  t  | j d  } | j d d   } | rj | d  k	 rj | | _ qj n    |  |   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 ?/var/www/dbchiro/venv/build/Django/django/contrib/auth/views.pyinner)   s    	z$deprecate_current_app.<locals>.inner)	functoolswraps)r-   r0   r.   )r-   r/   deprecate_current_app%   s    !r3   c               @   s%   e  Z d  Z e   Z d d   Z d S)SuccessURLAllowedHostsMixinc             C   s&   |  j  j   h } | j |  j  | S)N)r$   get_hostupdatesuccess_url_allowed_hosts)selfallowed_hostsr.   r.   r/   get_success_url_allowed_hosts=   s    z9SuccessURLAllowedHostsMixin.get_success_url_allowed_hostsN)r(   
__module____qualname__setr7   r:   r.   r.   r.   r/   r4   :   s   	r4   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   S)	LoginViewz?
    Displays the login form and handles the login action.
    Nzregistration/login.htmlFc                sk   |  j  rO |  j j j rO |  j   } | |  j j k rE t d   n  t |  St t	 |   j
 | | |  S)NzsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.)redirect_authenticated_userr$   userZis_authenticatedget_success_urlpath
ValueErrorr   superr>   dispatch)r8   r$   r+   r,   redirect_to)	__class__r.   r/   rE   N   s    
zLoginView.dispatchc             C   s   |  j    } | p t t j  S)N)get_redirect_urlr   r   ZLOGIN_REDIRECT_URL)r8   urlr.   r.   r/   rA   \   s    zLoginView.get_success_urlc             C   sh   |  j  j j |  j |  j  j j |  j d   } t d | d |  j   d |  j  j    } | rd | Sd S)z6Return the user-originating redirect URL if it's safe. rI   r9   require_https)r$   POSTr*   redirect_field_nameGETr   r:   	is_secure)r8   rF   url_is_safer.   r.   r/   rH   `   s    zLoginView.get_redirect_urlc             C   s   |  j  p |  j S)N)authentication_form
form_class)r8   r.   r.   r/   get_form_classm   s    zLoginView.get_form_classc                s&   t  t |   j   } |  j | d <| S)Nr$   )rD   r>   get_form_kwargsr$   )r8   r,   )rG   r.   r/   rT   p   s    zLoginView.get_form_kwargsc             C   s&   t  |  j | j    t |  j    S)z)Security check complete. Log the user in.)
auth_loginr$   get_userr   rA   )r8   formr.   r.   r/   
form_validu   s    zLoginView.form_validc                s{   t  t |   j |   } t |  j  } | j i |  j   |  j 6| d 6| j d 6 |  j	 d  k	 rw | j |  j	  n  | S)Nsite	site_name)
rD   r>   get_context_datar   r$   r6   rH   rM   nameextra_context)r8   r,   contextcurrent_site)rG   r.   r/   r[   z   s    	zLoginView.get_context_data)r(   r;   r<   __doc__r	   rR   rQ   r   rM   template_namer?   r]   r   r    r   r   rE   rA   rH   rS   rT   rX   r[   r.   r.   )rG   r/   r>   C   s    	$r>   zregistration/login.htmlFc             C   sD   t  j d t d d t j d | d | d | d | d |  |   S)	Nz>The login() view is superseded by the class-based LoginView().
stacklevel   ra   rM   rR   r]   r?   )r%   r&   r   r>   as_view)r$   ra   rM   rQ   r]   r?   r.   r.   r/   r      s    	r   c                   sv   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   S)
LogoutViewzF
    Logs out the user and displays 'You are logged out' message.
    Nzregistration/logged_out.htmlc                sB   t  |  |  j   } | r& t |  St t |   j | | |  S)N)auth_logoutget_next_pager   rD   re   rE   )r8   r$   r+   r,   	next_page)rG   r.   r/   rE      s
    

zLogoutView.dispatchc             O   s   |  j  | | |  S)zLogout may be done via POST.)r*   )r8   r$   r+   r,   r.   r.   r/   post   s    zLogoutView.postc             C   s   |  j  d  k	 r! t |  j   } n$ t j r< t t j  } n	 |  j  } |  j |  j j k so |  j |  j j k r |  j j j |  j |  j j j |  j   } t	 d | d |  j
   d |  j j    } | s |  j j } q n  | S)NrI   r9   rK   )rh   r   r   ZLOGOUT_REDIRECT_URLrM   r$   rL   rN   r*   r   r:   rO   rB   )r8   rh   rP   r.   r.   r/   rg      s"    		zLogoutView.get_next_pagec                sx   t  t |   j |   } t |  j  } | j i | d 6| j d 6t d  d 6 |  j d  k	 rt | j |  j  n  | S)NrY   rZ   z
Logged outtitle)	rD   re   r[   r   r$   r6   r\   _r]   )r8   r,   r^   r_   )rG   r.   r/   r[      s    	
zLogoutView.get_context_data)r(   r;   r<   r`   rh   r   rM   ra   r]   r   r   rE   ri   rg   r[   r.   r.   )rG   r/   re      s   	re   zregistration/logged_out.htmlc          	   C   s>   t  j d t d d t j d | d | d | d |  |   S)Nz@The logout() view is superseded by the class-based LogoutView().rb   rc   rh   ra   rM   r]   )r%   r&   r   re   rd   )r$   rh   ra   rM   r]   r.   r.   r/   r      s    	r   c             C   sS   | t  k	 r t j d t  n  | s1 t j } n  t |  } t j d |  |   S)zU
    Logs out the user if they are logged in. Then redirects to the log-in page.
    zJThe unused `extra_context` parameter to `logout_then_login` is deprecated.rh   )		_sentinelr%   r&   r   r   	LOGIN_URLr   re   rd   )r$   	login_urlr]   r.   r.   r/   logout_then_login   s    
ro   c             C   sv   t  | p t j  } t t |   } | rf t | d d d } |  | | <| j d d  | d <n  t t |   S)zM
    Redirects the user to the login page, passing the given 'next' page
       ZmutableTsafe/)	r   r   rm   listr   r   	urlencoder   r   )nextrn   rM   Zresolved_urlZlogin_url_partsZquerystringr.   r.   r/   redirect_to_login   s    
rv   z%registration/password_reset_form.htmlz&registration/password_reset_email.htmlz'registration/password_reset_subject.txtc             C   s  t  j d t d d | d  k r1 t d  } n t |  } |  j d k r | |  j  } | j   r i |  j   d 6| d 6| d 6| d	 6| d
 6|  d 6|	 d 6|
 d 6} | j	 |   t
 |  Sn	 |   } i | d 6t d  d 6} | d  k	 r| j |  n  t |  | |  S)NzOThe password_reset() view is superseded by the class-based PasswordResetView().rb   rc   password_reset_donerL   	use_httpstoken_generator
from_emailemail_template_namesubject_template_namer$   html_email_template_nameextra_email_contextrW   zPassword resetrj   )r%   r&   r   r   r   methodrL   is_validrO   saver   rk   r6   r   )r$   ra   r{   r|   Zpassword_reset_formry   post_reset_redirectrz   r]   r}   r~   rW   optsr^   r.   r.   r/   password_reset  s4    	
	r   z%registration/password_reset_done.htmlc             C   sU   t  j d t d d i t d  d 6} | d  k	 rE | j |  n  t |  | |  S)NzXThe password_reset_done() view is superseded by the class-based PasswordResetDoneView().rb   rc   zPassword reset sentrj   )r%   r&   r   rk   r6   r   )r$   ra   r]   r^   r.   r.   r/   rw   @  s    	rw   z(registration/password_reset_confirm.htmlc             C   s  t  j d t d d | d k	 r. | d k	 s4 t  | d k rO t d  } n t |  } y+ t t |   } t j	 j
 d |  }	 Wn' t t t t j f k
 r d }	 Yn X|	 d k	 r3| j |	 |  r3d }
 t d  } |  j d	 k r$| |	 |  j  } | j   r0| j   t |  SqK| |	  } n d
 }
 d } t d  } i | d 6| d 6|
 d 6} | d k	 r| j |  n  t |  | |  S)zq
    View that checks the hash in a password reset link and presents a
    form for entering a new password.
    z^The password_reset_confirm() view is superseded by the class-based PasswordResetConfirmView().rb   rc   Npassword_reset_completepkTzEnter new passwordrL   FzPassword reset unsuccessfulrW   rj   	validlink)r%   r&   r   AssertionErrorr   r   r   r   	UserModel_default_managerr*   	TypeErrorrC   OverflowErrorDoesNotExistcheck_tokenrk   r   rL   r   r   r   r6   r   )r$   uidb64tokenra   ry   Zset_password_formr   r]   uidr@   r   rj   rW   r^   r.   r.   r/   password_reset_confirmQ  s<    	

r   z)registration/password_reset_complete.htmlc             C   se   t  j d t d d i t t j  d 6t d  d 6} | d  k	 rU | j |  n  t |  | |  S)Nz`The password_reset_complete() view is superseded by the class-based PasswordResetCompleteView().rb   rc   rn   zPassword reset completerj   )	r%   r&   r   r   r   rm   rk   r6   r   )r$   ra   r]   r^   r.   r.   r/   r     s    	r   c                   s(   e  Z d  Z d Z   f d d   Z   S)PasswordContextMixinNc                sK   t  t |   j |   } |  j | d <|  j d  k	 rG | j |  j  n  | S)Nrj   )rD   r   r[   rj   r]   r6   )r8   r,   r^   )rG   r.   r/   r[     s
    z%PasswordContextMixin.get_context_data)r(   r;   r<   r]   r[   r.   r.   )rG   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   S)PasswordResetViewz&registration/password_reset_email.htmlNz'registration/password_reset_subject.txtrw   z%registration/password_reset_form.htmlzPassword resetc                s   t  t |   j | |   S)N)rD   r   rE   )r8   r+   r,   )rG   r.   r/   rE     s    zPasswordResetView.dispatchc                s   i |  j  j   d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j  d 6|  j d 6|  j d 6} | j |   t	 t
 |   j |  S)	Nrx   ry   rz   r{   r|   r$   r}   r~   )r$   rO   ry   rz   r{   r|   r}   r~   r   rD   r   rX   )r8   rW   r   )rG   r.   r/   rX     s    





zPasswordResetView.form_valid)r(   r;   r<   r{   r~   r   rR   rz   r}   r|   r   success_urlra   rk   rj   r   ry   r   r   rE   rX   r.   r.   )rG   r/   r     s   r   zset-passwordZ_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   rk   rj   r.   r.   r.   r/   r     s   r   c                   s   e  Z d  Z e 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   S)PasswordResetConfirmViewFNr   z(registration/password_reset_confirm.htmlzEnter new passwordc                s  d | k r d | k s t   d |  _ |  j | d  |  _ |  j d  k	 r| d } | t k r |  j j j t  } |  j	 j
 |  j |  r d |  _ t t |   j | |   Sq|  j	 j
 |  j |  r| |  j j t <|  j j j | t  } t |  Sn  |  j |  j    S)Nr   r   FT)r   r   rV   r@   INTERNAL_RESET_URL_TOKENr$   sessionr*   INTERNAL_RESET_SESSION_TOKENry   r   rD   r   rE   rB   replacer   Zrender_to_responser[   )r8   r+   r,   r   Zsession_tokenZredirect_url)rG   r.   r/   rE     s    	
	z!PasswordResetConfirmView.dispatchc             C   sY   y+ t  t |   } t j j d |  } Wn' t t t t j f k
 rT d  } Yn X| S)Nr   )	r   r   r   r   r*   r   rC   r   r   )r8   r   r   r@   r.   r.   r/   rV     s    z!PasswordResetConfirmView.get_userc                s&   t  t |   j   } |  j | d <| S)Nr@   )rD   r   rT   r@   )r8   r,   )rG   r.   r/   rT      s    z(PasswordResetConfirmView.get_form_kwargsc                sQ   | j    } |  j j t =|  j r; t |  j | |  j  n  t t |   j	 |  S)N)
r   r$   r   r   post_reset_loginrU   post_reset_login_backendrD   r   rX   )r8   rW   r@   )rG   r.   r/   rX     s
    	z#PasswordResetConfirmView.form_validc                sZ   t  t |   j |   } |  j r. d | d <n( | j i d  d 6t d  d 6d d 6 | S)NTr   rW   zPassword reset unsuccessfulrj   F)rD   r   r[   r   r6   rk   )r8   r,   r^   )rG   r.   r/   r[     s    		z)PasswordResetConfirmView.get_context_data)r(   r;   r<   r   rR   r   r   r   r   ra   rk   rj   r   ry   r   r    r   rE   rV   rT   rX   r[   r.   r.   )rG   r/   r     s   !	r   c                   s4   e  Z d  Z d Z e d  Z   f d d   Z   S)PasswordResetCompleteViewz)registration/password_reset_complete.htmlzPassword reset completec                s/   t  t |   j |   } t t j  | d <| S)Nrn   )rD   r   r[   r   r   rm   )r8   r,   r^   )rG   r.   r/   r[     s    z*PasswordResetCompleteView.get_context_data)r(   r;   r<   ra   rk   rj   r[   r.   r.   )rG   r/   r     s   r   z&registration/password_change_form.htmlc             C   s   t  j d t d d | d  k r1 t d  } n t |  } |  j d k r | d |  j d |  j  } | j   r | j	   t
 |  | j  t |  Sn | d |  j  } i | d 6t d	  d
 6} | d  k	 r | j |  n  t |  | |  S)NzQThe password_change() view is superseded by the class-based PasswordChangeView().rb   rc   password_change_donerL   r@   datarW   zPassword changerj   )r%   r&   r   r   r   r   r@   rL   r   r   r   r   rk   r6   r   )r$   ra   Zpost_change_redirectZpassword_change_formr]   rW   r^   r.   r.   r/   password_change#  s$    		
r   z&registration/password_change_done.htmlc             C   sU   t  j d t d d i t d  d 6} | d  k	 rE | j |  n  t |  | |  S)NzZThe password_change_done() view is superseded by the class-based PasswordChangeDoneView().rb   rc   zPassword change successfulrj   )r%   r&   r   rk   r6   r   )r$   ra   r]   r^   r.   r.   r/   r   G  s    	r   c                   s   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   S)
PasswordChangeViewr   z&registration/password_change_form.htmlzPassword changec                s   t  t |   j | |   S)N)rD   r   rE   )r8   r+   r,   )rG   r.   r/   rE   ^  s    zPasswordChangeView.dispatchc                s)   t  t |   j   } |  j j | d <| S)Nr@   )rD   r   rT   r$   r@   )r8   r,   )rG   r.   r/   rT   d  s    z"PasswordChangeView.get_form_kwargsc                s3   | j    t |  j | j  t t |   j |  S)N)r   r   r$   r@   rD   r   rX   )r8   rW   )rG   r.   r/   rX   i  s    
zPasswordChangeView.form_valid)r(   r;   r<   r
   rR   r   r   ra   rk   rj   r   r    r   r   rE   rT   rX   r.   r.   )rG   r/   r   X  s   	$r   c                   s@   e  Z d  Z d Z e d  Z e e    f d d    Z   S)PasswordChangeDoneViewz&registration/password_change_done.htmlzPassword change successfulc                s   t  t |   j | |   S)N)rD   r   rE   )r8   r+   r,   )rG   r.   r/   rE   u  s    zPasswordChangeDoneView.dispatch)	r(   r;   r<   ra   rk   rj   r   r   rE   r.   r.   )rG   r/   r   q  s   r   )Sr1   r%   Zdjango.confr   Zdjango.contrib.authr   r   r   rU   r   rf   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   r   Zdjango.utils.decoratorsr   Zdjango.utils.deprecationr   r   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    Zdjango.views.generic.baser!   Zdjango.views.generic.editr"   r   r3   objectr4   r>   re   rl   ro   rv   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   <module>   s   ("		D<	#-H
