U
    >iJ                     @   s  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 d dlmZmZmZmZ d dlmZmZ d dlmZ d	Zd
d Zdd Zdd ZeeedddZeeedddZdd Z dd Z!dd Z"d#ddZ#eee dddZ$eeee d d!d"Z%dS )$    N)Optional)parse_qsquote	urlencodeurlparse
urlunparse)	shortcuts)ImproperlyConfigured)HttpRequestHttpResponseRedirectHttpResponseServerError	QueryDict)NoReverseMatchreverseapp_settings   c              
   C   s>   t | j| jdd | j D | j | j | j	| j
dS )Nc                 S   s    i | ]\}}t |tr||qS  )
isinstancestr).0kvr   r   A/tmp/pip-unpacked-wheel-upujnpc2/allauth/core/internal/httpkit.py
<dictcomp>   s     
  z%serialize_request.<locals>.<dictcomp>)path	path_infoMETAGETPOSTmethodscheme)jsondumpsr   r   r   itemsr   r   r   r    r!   requestr   r   r   serialize_request   s    r'   c                    s`   t |  t d |_t d |_ d |_ d |_ d |_ d |_ fdd|_	|S )	Nr   r   r   r   r   r    c                      s    d S )Nr!   r   r   datar   r   <lambda>+       z%deserialize_request.<locals>.<lambda>)
r"   loadsr   r   r   r   r   r   r    Z_get_scheme)sr&   r   r(   r   deserialize_request#   s    




r.   c                 C   s6   zt | W S  tk
r0   t d|   Y S X d S )N/)r   redirectr   )tor   r   r   r0   /   s    r0   )urlparamsreturnc                 G   sZ   t | }t|jdd}|D ]}||d  qt|dd}t|j|j|j|j	||j
f}|S )NT)keep_blank_valuesdoseq)r   r   querypopr   r   r!   netlocr   r3   fragment)r2   r3   
parsed_urlquery_paramsparamencoded_querynew_urlr   r   r   del_query_params6   s    
rA   c                 C   sJ   t | }t|j}|| t|dd}t|j|j|j|j	||j
f}|S )NTr6   )r   r   r8   updater   r   r!   r:   r   r3   r;   )r2   r3   r<   r=   r?   r@   r   r   r   add_query_paramsI   s    


rC   c                 K   s   |}|  D ]|\}}|d}|d| d }|dk r@t||dkoN||k}|rltd|idd }	nt|}	|d| d |	}qt|}
|
js| 	|}|S )N?{}r   r   zk=   )
r$   findr	   r   	partitionr   replacer   r:   Zbuild_absolute_uri)r&   Zurl_templatekwargsr2   r   r   ZqiZkiZis_query_paramZqvpr   r   r   
render_url[   s    

rM   c                 K   sZ   ddl m} |jrVddlm} |j|}|jrD|sDtd| d|rVt| |f|S d S )Nr   r   z!settings.HEADLESS_FRONTEND_URLS['z'])	allauthr   HEADLESS_ENABLEDZallauth.headlessZFRONTEND_URLSgetHEADLESS_ONLYr	   rM   )r&   urlnamerK   allauth_settingsZheadless_settingsr2   r   r   r   default_get_frontend_urln   s    
rT   c                 K   s<   ddl m} |jr.ddlm} | j|f|S t| |f|S )Nr   r   )get_adapter)rN   r   rO   Zallauth.headless.adapterrU   get_frontend_urlrT   )r&   rR   rK   rS   rU   r   r   r   rV   |   s
    rV   c                 C   sL   z t | }|rt||}t|W S  tk
rF   tjr@t  Y S  Y nX dS )z
    In some cases, we're redirecting to a non-headless view. In case of
    headless-only mode, that view clearly does not exist.
    N)r   rC   r   r   rS   rQ   r   )Zviewnamer8   r2   r   r   r   headed_redirect_response   s    


rW   )r&   r4   c                 C   s   t t t | ddddddS )zZ
    Returns the headless client type (app/browser)in case of a headless
    request.
    rN   NZheadlessclient)getattrr%   r   r   r   is_headless_request   s
      rZ   )r&   auth_schemer4   c                 C   sL   | j d}|sd S | }|r@t|dks@|d  | krDd S |d S )NZHTTP_AUTHORIZATIONrG   r      )r   rP   splitlenlower)r&   r[   authpartsr   r   r   get_authorization_credential   s    $rb   )N)&r"   typingr   urllib.parser   r   r   r   r   Zdjangor   Zdjango.core.exceptionsr	   Zdjango.httpr
   r   r   r   Zdjango.urlsr   r   rN   r   rS   ZHTTP_USER_AGENT_MAX_LENGTHr'   r.   r0   r   rA   dictrC   rM   rT   rV   rW   rZ   rb   r   r   r   r   <module>   s,   

 