U
    >i                     @   s  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 d d
lmZ d dlmZmZ d dlmZmZmZ d dlmZ d dlmZ dddZ G dd dZ!G dd dZ"G dd dZ#G dd dZ$G dd dZ%dS )    )REDIRECT_FIELD_NAME)ImproperlyConfigured)HttpResponsePermanentRedirectHttpResponseRedirect)method_decorator)format_html)never_cache)app_settings)get_adapter)flows)login_not_required)get_pending_stageredirect_to_pending_stage)get_login_redirect_urlget_next_redirect_urlpassthrough_next_redirect_url)ImmediateHttpResponse)get_request_paramNc                 C   sJ   t  }|| rFt|ts$t|tr.|d }nd }|j| ||||d}|S )NZLocation)formdataredirect_to)r
   is_ajax
isinstancer   r   Zajax_response)requestresponser   r   adapterr    r   :/tmp/pip-unpacked-wheel-upujnpc2/allauth/account/mixins.py_ajax_response   s     
 
    r   c                       s4   e Zd Zeeee fddZdd Z  ZS )RedirectAuthenticatedUserMixinc                    s`   t jrH|jjr(|  }t|}t||S t|}|rH||rHt	||S t
 j|f||}|S N)r	   ZAUTHENTICATED_LOGIN_REDIRECTSuseris_authenticatedget_authenticated_redirect_urlr   r   r   Zis_resumabler   superdispatch)selfr   argskwargsr   r   Zstage	__class__r   r   r%   )   s    

z'RedirectAuthenticatedUserMixin.dispatchc                 C   s   | j }t| j|  |dS )N)urlredirect_field_name)r,   r   r   get_success_url)r&   r,   r   r   r   r#   8   s    z=RedirectAuthenticatedUserMixin.get_authenticated_redirect_url)	__name__
__module____qualname__r   r   r   r%   r#   __classcell__r   r   r)   r   r   (   s   r   c                   @   s   e Zd Zdd ZdS )LogoutFunctionalityMixinc                 C   s   t j| j d S r    )r   logoutr   r&   r   r   r   r3   B   s    zLogoutFunctionalityMixin.logoutN)r.   r/   r0   r3   r   r   r   r   r2   A   s   r2   c                       sB   e Zd Z fddZdd Zd fdd	Zdd	 Zd
d Z  ZS )AjaxCapableProcessFormViewMixinc                    s2   t  j|f||}|  }t| j|||  dS N)r   r   )r$   getget_formr   r   _get_ajax_data_if)r&   r   r'   r(   r   r   r)   r   r   r7   G   s       z#AjaxCapableProcessFormViewMixin.getc                 O   sF   |   }| |}| r&| |}n
| |}t| j|||  dS r6   )Zget_form_classr8   Zis_validZ
form_validZform_invalidr   r   r9   )r&   r   r'   r(   
form_classr   r   r   r   r   postN   s    

   z$AjaxCapableProcessFormViewMixin.postNc                    s*   t | dd }|d kr&t |}|| _|S )N_cached_form)getattrr$   r8   r<   )r&   r:   r   r)   r   r   r8   Y   s
    z(AjaxCapableProcessFormViewMixin.get_formc                 C   s   t | j| jr|  S d S r    )r
   r   r   get_ajax_datar4   r   r   r   r9   `   s    
z1AjaxCapableProcessFormViewMixin._get_ajax_data_ifc                 C   s   d S r    r   r4   r   r   r   r>   g   s    z-AjaxCapableProcessFormViewMixin.get_ajax_data)N)	r.   r/   r0   r7   r;   r8   r9   r>   r1   r   r   r)   r   r5   F   s
   r5   c                       s6   e Zd Zdej Z fddZdd Zdd Z  Z	S )CloseableSignupMixinzaccount/signup_closed.c              
      sX   z|   s|  W S W n, tk
rB } z|j W Y S d }~X Y nX t j|f||S r    )is_openclosedr   r   r$   r%   )r&   r   r'   r(   er)   r   r   r%   p   s    zCloseableSignupMixin.dispatchc                 C   s   t | j| jS r    )r
   r   Zis_open_for_signupr4   r   r   r   r@   x   s    zCloseableSignupMixin.is_openc                 C   s   | j | jd}| jf |S )N)r   template)r   template_name_signup_closedresponse_class)r&   Zresponse_kwargsr   r   r   rA   {   s    zCloseableSignupMixin.closed)
r.   r/   r0   r	   ZTEMPLATE_EXTENSIONrD   r%   r@   rA   r1   r   r   r)   r   r?   k   s
   r?   c                       sD   e Zd ZeZ fddZ fddZdd Zdd Zd	d
 Z	  Z
S )NextRedirectMixinc                    sF   t  jf |}t| j| j}|| j||r8td| j|ndd |S )Nz*<input type="hidden" name="{}" value="{}"> )r,   redirect_field_valueZredirect_field)r$   get_context_datar   r   r,   updater   )r&   r(   retrH   r)   r   r   rI      s    z"NextRedirectMixin.get_context_datac                    sr   |   }|r|S |sbtt drFzt  }W qb tk
rB   Y qbX nt| drb| j}|rbt|}|sn|  }|S )a^  
        We're in a mixin, so we cannot rely on the fact that our super() has a get_success_url.
        Also, we want to check for -- in this order:
        1) The `?next=/foo`
        2) The `get_succes_url()` if available.
        3) The `.success_url` if available.
        4) A fallback default success URL: `get_default_success_url()`.
        r-   success_url)get_next_urlhasattrr$   r-   r   rL   strget_default_success_urlr&   r+   r)   r   r   r-      s     	
z!NextRedirectMixin.get_success_urlc                 C   s   d S r    r   r4   r   r   r   rP      s    z)NextRedirectMixin.get_default_success_urlc                 C   s   t | j| jS r    )r   r   r,   r4   r   r   r   rM      s    zNextRedirectMixin.get_next_urlc                 C   s   t | j|| jS r    )r   r   r,   rQ   r   r   r   passthrough_next_url   s
      z&NextRedirectMixin.passthrough_next_url)r.   r/   r0   r   r,   rI   r-   rP   rM   rR   r1   r   r   r)   r   rF      s   rF   )NN)&Zdjango.contrib.authr   Zdjango.core.exceptionsr   Zdjango.httpr   r   Zdjango.utils.decoratorsr   Zdjango.utils.htmlr   Zdjango.views.decorators.cacher   Zallauth.accountr	   Zallauth.account.adapterr
   Zallauth.account.internalr   Z#allauth.account.internal.decoratorsr   Z!allauth.account.internal.stagekitr   r   Zallauth.account.utilsr   r   r   Zallauth.core.exceptionsr   Zallauth.utilsr   r   r   r2   r5   r?   rF   r   r   r   r   <module>   s&   
%