U
    >ik                     @   s(  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 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 G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ dd Z!G dd deZ"G dd deZ#dS )    )
HTTPStatus)app_settingsget_adapter)LoginMethod)get_authentication_records)flows)LOGIN_SESSION_KEY)Flow)authkit)APIResponsec                       s>   e Zd Zd fdd	Zdd Zdd Zeddd	d
Z  ZS )BaseAuthenticationResponseNc                    s   i }|r:|j r:t }|||d< t||d< |p6tj}n
|pBtj}|tjkr^| |||d< d|oh|j i}t j	||||d d S )Nusermethodsr   is_authenticated)datametastatus)
r   r   Zserialize_userr   r   OKUNAUTHORIZED
_get_flowssuper__init__)selfrequestr   r   r   adapterr   	__class__ B/tmp/pip-unpacked-wheel-upujnpc2/allauth/headless/base/response.pyr      s$    


 z#BaseAuthenticationResponse.__init__c                 C   s`  t |}g }|r,|jr,|tj| ntjsB|	dt
ji tjrX|	dt
ji t |rztjsz|	dt
ji tjrddlm} ||| tjrtjr|	dt
ji d }| }|r|j}n|jt}t|tr|}|r"|dd}	|r|t
j kr| !||	 | "||	 tjs\tj#r\ddl$m%}
 |	t
j&t'|
j()|d |S )Nidr   )provider_flowsT)r    Z
is_pending)password_reset_by_code)*r   ZAuthenticationStatusr   extendr   ZreauthenticationZget_reauthentication_flowsallauth_settingsZSOCIALACCOUNT_ONLYappendr
   ZLOGINaccount_settingsLOGIN_BY_CODE_ENABLEDZLOGIN_BY_CODEget_account_adapteris_open_for_signupZSIGNUPSOCIALACCOUNT_ENABLED'allauth.headless.socialaccount.responser!   MFA_ENABLEDmfa_settingsZPASSKEY_LOGIN_ENABLEDZMFA_LOGIN_WEBAUTHNZget_pending_stagekeysessiongetr	   
isinstancestrZMFA_AUTHENTICATE_enrich_mfa_flow_upsert_pending_flowPASSWORD_RESET_BY_CODE_ENABLEDZallauth.account.internal.flowsr"   ZPASSWORD_RESET_BY_CODEboolZ PasswordResetVerificationProcessresume)r   r   r   Zauth_statusretr!   Z	stage_keystageZlskpending_flowr"   r   r   r   r   '   s\    





z%BaseAuthenticationResponse._get_flowsc                    s6   t  fdd|D d }|r(|  n
|  d S )Nc                 3   s"   | ]}|d   d  kr|V  qdS )r    Nr   ).0flowr:   r   r   	<genexpr>^   s      zBBaseAuthenticationResponse._upsert_pending_flow.<locals>.<genexpr>)nextupdater%   )r   r   r:   r<   r   r=   r   r4   ]   s    z/BaseAuthenticationResponse._upsert_pending_flow)r<   returnc                 C   sX   ddl m} ddlm} | }g }|jD ]"}|j|jj|gdr(|| q(||d< d S )Nr   r   )Authenticator)typesrC   )	Zallauth.mfa.adapterr   Zallauth.mfa.modelsrB   TypeZis_mfa_enabledloginr   r%   )r   r9   r<   Zget_mfa_adapterrB   r   rC   typr   r   r   r3   d   s    
z+BaseAuthenticationResponse._enrich_mfa_flow)NN)	__name__
__module____qualname__r   r   r4   dictr3   __classcell__r   r   r   r   r      s   6r   c                       s(   e Zd Z fddZedd Z  ZS )AuthenticationResponsec                    s   t  j||jd d S )N)r   )r   r   r   r   r   r   r   r   r   q   s    zAuthenticationResponse.__init__c                 C   s   t |tr|S t|S )a5  
        The response might be a headed redirect to e.g. the confirmation
        email page, because allauth.account is not (much) headless
        aware. Also, what if an adapter method return headed responses in
        post_login()?  So, let's ensure we always return a headless
        response.
        )r1   rL   )clsr   responser   r   r   from_responset   s    	
z$AuthenticationResponse.from_response)rG   rH   rI   r   classmethodrP   rK   r   r   r   r   rL   p   s   rL   c                       s   e Zd Z fddZ  ZS )ReauthenticationResponsec                    s   t  j||jtjd d S N)r   r   )r   r   r   r   r   rM   r   r   r   r      s    z!ReauthenticationResponse.__init__rG   rH   rI   r   rK   r   r   r   r   rR      s   rR   c                       s"   e Zd Zejf fdd	Z  ZS )UnauthorizedResponsec                    s   t  j|d |d d S rS   )r   r   )r   r   r   r   r   r   r      s    zUnauthorizedResponse.__init__)rG   rH   rI   r   r   r   rK   r   r   r   r   rU      s   rU   c                       s   e Zd Z fddZ  ZS )ForbiddenResponsec                    s   t  j|tjd d S N)r   )r   r   r   	FORBIDDENrM   r   r   r   r      s    zForbiddenResponse.__init__rT   r   r   r   r   rV      s   rV   c                       s   e Zd Z fddZ  ZS )ConflictResponsec                    s   t  j|tjd d S rW   )r   r   r   CONFLICTrM   r   r   r   r      s    zConflictResponse.__init__rT   r   r   r   r   rY      s   rY   c                 C   st   t j}t|t | t jt jt jd}tj	|krFtj
|krFd|d< n&tj	|krZd|d< ntj
|krld|d< d|iS )N)login_methodsr)   Z"email_verification_by_code_enabledZlogin_by_code_enabledZpassword_reset_by_code_enabledZusername_emailZauthentication_methodemailusernameaccount)r&   ZLOGIN_METHODSlistr(   r)   Z"EMAIL_VERIFICATION_BY_CODE_ENABLEDr'   r5   r   ZEMAILUSERNAME)r   r[   r   r   r   r   get_config_data   s    




ra   c                       s   e Zd Z fddZ  ZS )ConfigResponsec                    sx   t |}tjr(ddlm } ||| tjrHddlm } ||| tjrhddlm } ||| t	 j
||dS )Nr   )ra   )r   )ra   r$   r*   r+   r@   r,   Zallauth.headless.mfa.responseZUSERSESSIONS_ENABLEDZ&allauth.headless.usersessions.responser   r   )r   r   r   Zget_socialaccount_config_dataZget_mfa_config_dataZget_usersessions_config_datar   r   r   r      s    zConfigResponse.__init__rT   r   r   r   r   rb      s   rb   c                       s   e Zd Z fddZ  ZS )RateLimitResponsec                    s   t  j|tjd d S rW   )r   r   r   TOO_MANY_REQUESTSrM   r   r   r   r      s    zRateLimitResponse.__init__rT   r   r   r   r   rc      s   rc   N)$httpr   Zallauthr   r$   Zallauth.accountr&   Zallauth.account.adapterr   r(   Zallauth.account.app_settingsr   Zallauth.account.authenticationr   Zallauth.account.internalr   Z!allauth.account.internal.stagekitr	   Zallauth.headless.adapterZallauth.headless.constantsr
   Zallauth.headless.internalr   Z*allauth.headless.internal.restkit.responser   Zallauth.mfar-   r   rL   rR   rU   rV   rY   ra   rb   rc   r   r   r   r   <module>   s*   _