3
V:-                 @   s  d Z ddlmZ ddl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mZmZ ddlmZ dd	lmZ ydd
lmZ W n  ek
r   dd
lmZ Y nX 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% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- yddlm.Z. W n ek
rL   dd Z.Y nX e Z/dd Z0ee0e#j1Z2G dd de3Z4G dd de3Z5dd Z6e6e%Z7e6e'Z8e6e
Z9e6e)dd d!d"d#d$Z:G d%d& d&e7e8e:Z;G d'd( d(e;e4e5e+Z<G d)d* d*e7e4e5e,e-Z=G d+d, d,e9e5e;e+Z>G d-d. d.e9e,Z?G d/d0 d0e8e+Z@G d1d2 d2e,ZAG d3d4 d4e;e+ZBG d5d6 d6eBZCG d7d8 d8e,ZDdS )9zf
Mostly equivalent to the views from django.contrib.auth.views, but
implemented as class-based views.
    )unicode_literalsN)settings)get_user_modelREDIRECT_FIELD_NAME)login_required)AuthenticationFormSetPasswordFormPasswordChangeFormPasswordResetForm)default_token_generator)auth)get_current_site)reverse_lazy)redirectresolve_url)lazy)base36_to_intis_safe_url)six)never_cache)csrf_protect)sensitive_post_parameters)FormViewTemplateViewRedirectView)update_session_auth_hashc             C   s   d S )N )requestuserr   r   O/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/authtools/views.pyr   "   s    r   c             C   s   t jt| S )a  
    Previously, resolve_url_lazy would fail if the url was a unicode object.
    See <https://github.com/fusionbox/django-authtools/issues/13> for more
    information.

    Thanks to GitHub user alanwj for pointing out the problem and providing
    this solution.
    )r   	text_typer   )urlr   r   r   _safe_resolve_url(   s    	r"   c                   s$   e Zd Zdd Z fddZ  ZS )WithCurrentSiteMixinc             C   s
   t | jS )N)r   r   )selfr   r   r   r   7   s    z%WithCurrentSiteMixin.get_current_sitec                s0   t t| jf |}| j }|j||jd |S )N)siteZ	site_name)superr#   get_context_datar   updatename)r$   kwargsZcurrent_site)	__class__r   r   r'   :   s    z%WithCurrentSiteMixin.get_context_data)__name__
__module____qualname__r   r'   __classcell__r   r   )r+   r   r#   6   s   r#   c                   s8   e Zd ZeZdZdd Z fddZ fddZ  Z	S )WithNextUrlMixinNc             C   sD   | j }|jj| j|jj| jd}|s*d S t|| j j dr@|S d S )N )host)r   ZPOSTgetredirect_field_nameGETr   Zget_host)r$   r   Zredirect_tor   r   r   get_next_urlH   s    
zWithNextUrlMixin.get_next_urlc                s   | j  ptt| j S )N)r6   r&   r0   get_success_url)r$   )r+   r   r   r7   U   s    z WithNextUrlMixin.get_success_urlc                s   | j  ptt| jf |S )N)r6   r&   r0   get_redirect_url)r$   r*   )r+   r   r   r8   X   s    z!WithNextUrlMixin.get_redirect_url)
r,   r-   r.   r   r4   success_urlr6   r7   r8   r/   r   r   )r+   r   r0   D   s
   r0   c                s*   G  fdddt  tdj  _ S )af  
    Converts a decorator written for a function view into a mixin for a
    class-based view.

    ::

        LoginRequiredMixin = DecoratorMixin(login_required)

        class MyView(LoginRequiredMixin):
            pass

        class SomeView(DecoratorMixin(some_decorator),
                       DecoratorMixin(something_else)):
            pass

    c                   s*   e Zd ZjZe fddZ  ZS )zDecoratorMixin.<locals>.Mixinc                s   t  | j||}|S )N)r&   as_view)clsargsr*   view)Mixinr+   	decoratorr   r   r:   q   s    z%DecoratorMixin.<locals>.Mixin.as_view)r,   r-   r.   __doc__classmethodr:   r/   r   )r>   r?   )r+   r   r>   n   s   r>   zDecoratorMixin(%s))objectstrr,   )r?   r   )r>   r?   r   DecoratorMixin\   s    rD   passwordZold_passwordZ	password1Z	password2new_password1Znew_password2c               @   s   e Zd ZdS )AuthDecoratorsMixinN)r,   r-   r.   r   r   r   r   rG      s   rG   c                   sV   e Zd ZeZdZdZeej	Z
dZdd Z fddZ fdd	Z fd
dZ  ZS )	LoginViewzregistration/login.htmlTNc             C   s(   | j d k	rtjdt | j  S | jS d S )NzDdisallow_authenticated is deprecated. Please use allow_authenticated)disallow_authenticatedwarningswarnDeprecationWarningallow_authenticated)r$   r   r   r   get_allow_authenticated   s
    
z!LoginView.get_allow_authenticatedc                s8   | j  }| r&| jjj r&t| j S tt| j||S )N)	rN   r   r   Zis_authenticatedr   r7   r&   rH   dispatch)r$   r<   r*   rM   )r+   r   r   rO      s    zLoginView.dispatchc                s"   t j| j|j  tt| j|S )N)r   loginr   get_userr&   rH   
form_valid)r$   form)r+   r   r   rR      s    zLoginView.form_validc                s4   t t| jf |}|j| j| jjj| jdi |S )Nr1   )r&   rH   r'   r(   r4   r   r5   r3   )r$   r*   )r+   r   r   r'      s
    zLoginView.get_context_data)r,   r-   r.   r   
form_classtemplate_namerM   resolve_url_lazyr   LOGIN_REDIRECT_URLr9   rI   rN   rO   rR   r'   r/   r   r   )r+   r   rH      s   
rH   c               @   s   e Zd ZdZdZdd ZdS )
LogoutViewzregistration/logged_out.htmlFc             O   s@   t j| j | jf |r*tj| f||S tj| f||S d S )N)r   Zlogoutr   r8   r   r3   r   )r$   r<   r*   r   r   r   r3      s    zLogoutView.getN)r,   r-   r.   rU   Z	permanentr3   r   r   r   r   rX      s   rX   c                   s@   e Zd ZdZeZedZ fddZdd Z	 fddZ
  ZS )	PasswordChangeViewz&registration/password_change_form.htmlZpassword_change_donec                s   t t| j }| j |d< |S )Nr   )r&   rY   get_form_kwargsrQ   )r$   r*   )r+   r   r   rZ      s    z"PasswordChangeView.get_form_kwargsc             C   s   | j jS )N)r   r   )r$   r   r   r   rQ      s    zPasswordChangeView.get_userc                s&   |j   t| j|j tt| j|S )N)saver   r   r   r&   rY   rR   )r$   rS   )r+   r   r   rR      s    zPasswordChangeView.form_valid)r,   r-   r.   rU   r	   rT   r   r9   rZ   rQ   rR   r/   r   r   )r+   r   rY      s   rY   c               @   s   e Zd ZdZdS )PasswordChangeDoneViewz&registration/password_change_done.htmlN)r,   r-   r.   rU   r   r   r   r   r\      s   r\   c                   sD   e Zd ZdZeZedZdZdZ	dZ
dZdZeZ fddZ  ZS )PasswordResetViewz%registration/password_reset_form.htmlZpassword_reset_doneNz'registration/password_reset_subject.txtz&registration/password_reset_email.htmlc          
      s>   |j | j| j| j| j| j| j| jj | jd t	t
| j|S )N)domain_overridesubject_template_nameemail_template_nametoken_generator
from_emailr   Z	use_httpshtml_email_template_name)r[   r^   r_   r`   ra   rb   r   Z	is_securerc   r&   r]   rR   )r$   rS   )r+   r   r   rR      s    
zPasswordResetView.form_valid)r,   r-   r.   rU   r   ra   r   r9   r^   r_   r`   rc   rb   r
   rT   rR   r/   r   r   )r+   r   r]      s   r]   c               @   s   e Zd ZdZdS )PasswordResetDoneViewz%registration/password_reset_done.htmlN)r,   r-   r.   rU   r   r   r   r   rd      s   rd   c                   st   e Zd ZdZeZeZedZ	 fddZ
dd Zdd Zd	d
 Z fddZ fddZ fddZdd Z  ZS )PasswordResetConfirmViewz(registration/password_reset_confirm.htmlZpassword_reset_completec                s0   | j jdd k	st| j | _tt| j||S )Ntoken)r*   r3   AssertionErrorrQ   r   r&   re   rO   )r$   r<   r*   )r+   r   r   rO      s    
z!PasswordResetConfirmView.dispatchc             C   s
   t jj S )N)UserZ_default_managerall)r$   r   r   r   get_queryset  s    z%PasswordResetConfirmView.get_querysetc             C   s   | j jd}| j jd}t|t|A s,ty2|r<t|}nddlm} ||}| j j|dS  tt	t
tjfk
r|   d S X d S )Nuidb36uidb64r   )urlsafe_base64_decode)pk)r*   r3   boolrg   r   django.utils.httprm   rj   	TypeError
ValueErrorOverflowErrorrh   ZDoesNotExist)r$   rk   rl   uidrm   r   r   r   rQ     s    
z!PasswordResetConfirmView.get_userc             C   s$   | j }|d k	o"| jj|| jjdS )Nrf   )r   ra   Zcheck_tokenr*   r3   )r$   r   r   r   r   
valid_link  s    z#PasswordResetConfirmView.valid_linkc                s   t t| j }| j|d< |S )Nr   )r&   re   rZ   r   )r$   r*   )r+   r   r   rZ     s    
z(PasswordResetConfirmView.get_form_kwargsc                s8   t t| jf |}| j r$d|d< nd|d< d |d< |S )NTZ	validlinkFrS   )r&   re   r'   ru   )r$   r*   )r+   r   r   r'     s    
z)PasswordResetConfirmView.get_context_datac                s,   | j  s| j|S | j| tt| j|S )N)ru   Zform_invalid	save_formr&   re   rR   )r$   rS   )r+   r   r   rR   (  s    

z#PasswordResetConfirmView.form_validc             C   s   |j  S )N)r[   )r$   rS   r   r   r   rv   .  s    z"PasswordResetConfirmView.save_form)r,   r-   r.   rU   r   ra   r   rT   r   r9   rO   rj   rQ   ru   rZ   r'   rR   rv   r/   r   r   )r+   r   re      s   	re   c                   s&   e Zd ZeejZ fddZ  ZS ) PasswordResetConfirmAndLoginViewc                s<   t t| j|}tj| jj |jd d}tj| j	| |S )NrF   )usernamerE   )
r&   rw   rv   r   Zauthenticater   Zget_usernameZcleaned_datarP   r   )r$   rS   retr   )r+   r   r   rv   5  s
    z*PasswordResetConfirmAndLoginView.save_form)	r,   r-   r.   rV   r   rW   r9   rv   r/   r   r   )r+   r   rw   2  s   
rw   c                   s.   e Zd ZdZejZdd Z fddZ  Z	S )PasswordResetCompleteViewz)registration/password_reset_complete.htmlc             C   s
   t | jS )N)r   	login_url)r$   r   r   r   get_login_urlA  s    z'PasswordResetCompleteView.get_login_urlc                s"   t t| jf |}| j |d< |S )Nr{   )r&   rz   r'   r|   )r$   r*   )r+   r   r   r'   D  s    z*PasswordResetCompleteView.get_context_data)
r,   r-   r.   rU   r   Z	LOGIN_URLr{   r|   r'   r/   r   r   )r+   r   rz   =  s   rz   )Er@   
__future__r   rJ   Zdjango.confr   Zdjango.contrib.authr   r   Zdjango.contrib.auth.decoratorsr   Zdjango.contrib.auth.formsr   r   r	   r
   Zdjango.contrib.auth.tokensr   Zdjango.contribr   Zdjango.contrib.sites.shortcutsr   ImportErrorZdjango.contrib.sites.modelsZdjango.core.urlresolversr   Zdjango.shortcutsr   r   Zdjango.utils.functionalr   rp   r   r   Zdjango.utilsr   Zdjango.views.decorators.cacher   Zdjango.views.decorators.csrfr   Zdjango.views.decorators.debugr   Zdjango.views.genericr   r   r   r   rh   r"   r    rV   rB   r#   r0   rD   ZNeverCacheMixinZCsrfProtectMixinZLoginRequiredMixinZSensitivePostParametersMixinrG   rH   rX   rY   r\   r]   rd   re   rw   rz   r   r   r   r   <module>   s^   %: