o
    &zh                     @   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  }|| r#t|tst|tr|d }nd }|j| ||||d}|S )NLocation)formdataredirect_to)r
   is_ajax
isinstancer   r   ajax_response)requestresponser   r   adapterr    r   Q/var/www/html/kangema/venv/lib/python3.10/site-packages/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                    sf   t jr$|jjr|  }t|}t||S t|}|r$||r$t	||S t
 j|g|R i |}|S N)r	   AUTHENTICATED_LOGIN_REDIRECTSuseris_authenticatedget_authenticated_redirect_urlr   r    r   is_resumabler   superdispatch)selfr   argskwargsr   r   stage	__class__r   r   r)   )   s   

z'RedirectAuthenticatedUserMixin.dispatchc                 C   s   | j }t| j|  |dS )N)urlredirect_field_name)r1   r   r   get_success_url)r*   r1   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   r8   B      zLogoutFunctionalityMixin.logoutN)r3   r4   r5   r8   r   r   r   r   r7   A   s    r7   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                    s8   t  j|g|R i |}|  }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   r=   G   s
   z#AjaxCapableProcessFormViewMixin.getc                 O   sF   |   }| |}| r| |}n| |}t| j|||  dS r<   )get_form_classr>   is_valid
form_validform_invalidr    r   r?   )r*   r   r+   r,   
form_classr   r   r   r   r   postN   s   

z$AjaxCapableProcessFormViewMixin.postNc                    s*   t | dd }|d u rt |}|| _|S )N_cached_form)getattrr(   r>   rF   )r*   rD   r   r.   r   r   r>   Y   s
   z(AjaxCapableProcessFormViewMixin.get_formc                 C   s   t | j| jr|  S d S r"   )r
   r   r   get_ajax_datar9   r   r   r   r?   `   s
   z1AjaxCapableProcessFormViewMixin._get_ajax_data_ifc                 C      d S r"   r   r9   r   r   r   rH   g      z-AjaxCapableProcessFormViewMixin.get_ajax_datar"   )	r3   r4   r5   r=   rE   r>   r?   rH   r6   r   r   r.   r   r;   F   s    r;   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              
      s\   z|   s
|  W S W n ty  } z	|jW  Y d }~S d }~ww t j|g|R i |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   is_open_for_signupr9   r   r   r   rL   x   r:   zCloseableSignupMixin.is_openc                 C   s   | j | jd}| jdi |S )N)r   templater   )r   template_name_signup_closedresponse_class)r*   response_kwargsr   r   r   rM   {   s   zCloseableSignupMixin.closed)
r3   r4   r5   r	   TEMPLATE_EXTENSIONrQ   r)   rL   rM   r6   r   r   r.   r   rK   k   s    rK   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                    sJ   t  jdi |}t| j| j}|| j||rtd| j|ndd |S )Nz*<input type="hidden" name="{}" value="{}"> )r1   redirect_field_valueredirect_fieldr   )r(   get_context_datar   r   r1   updater   )r*   r,   retrW   r.   r   r   rY      s   z"NextRedirectMixin.get_context_datac                    sn   |   }|r|S |s/tt dr!zt  }W n ty    Y nw t| dr/| j}|r/t|}|s5|  }|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()`.
        r2   success_url)get_next_urlhasattrr(   r2   r   r\   strget_default_success_urlr*   r0   r.   r   r   r2      s"   	
z!NextRedirectMixin.get_success_urlc                 C   rI   r"   r   r9   r   r   r   r`      rJ   z)NextRedirectMixin.get_default_success_urlc                 C   s   t | j| jS r"   )r   r   r1   r9   r   r   r   r]      s   zNextRedirectMixin.get_next_urlc                 C   s   t | j|| jS r"   )r   r   r1   ra   r   r   r   passthrough_next_url   s   
z&NextRedirectMixin.passthrough_next_url)r3   r4   r5   r   r1   rY   r2   r`   r]   rb   r6   r   r   r.   r   rU      s    rU   )NN)&django.contrib.authr   django.core.exceptionsr   django.httpr   r   django.utils.decoratorsr   django.utils.htmlr   django.views.decorators.cacher   allauth.accountr	   allauth.account.adapterr
   allauth.account.internalr   #allauth.account.internal.decoratorsr   !allauth.account.internal.stagekitr   r   allauth.account.utilsr   r   r   allauth.core.exceptionsr   allauth.utilsr   r    r!   r7   r;   rK   rU   r   r   r   r   <module>   s(    
%