o
    gf                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ dZe dZG dd	 d	ej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jZdS )    N)
SGMLParser)settings)ClientreversezMozilla/5.0z
\d;\s*url=c                       st   e Zd ZdZdZdZ fddZ fddZ fddZd	d
 Z	dddZ
dddZdd Zdd Zdd Z  ZS )SocialAuthTestsCasez Base class for social auth testsNc                    sT   i }| j r
| j |d< | jr| j|d< d | _tdi || _tt| j|i | d S )NSERVER_NAMESERVER_PORT )r   r	   jarr   clientsuperr   __init__)selfargskwargsclient_kwargs	__class__r
   W/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/tests/base.pyr      s   

zSocialAuthTestsCase.__init__c                    s,   ddl m} |j| _d|_tt|   d S )Nr   backends)z5social_auth.backends.pipeline.social.social_auth_userz:social_auth.backends.pipeline.associate.associate_by_emailz/social_auth.backends.pipeline.user.get_usernamez.social_auth.backends.pipeline.user.create_userz3social_auth.backends.pipeline.social.associate_userz4social_auth.backends.pipeline.social.load_extra_dataz6social_auth.backends.pipeline.user.update_user_details)social_authr   PIPELINEold_PIPELINEr   r   setUpr   r   r   r
   r   r   !   s   	zSocialAuthTestsCase.setUpc                    s&   ddl m} | j|_tt|   d S )Nr   r   )r   r   r   r   r   r   tearDownr   r   r
   r   r   /   s   zSocialAuthTestsCase.tearDownc                 C   sn   z| j  W n
 ty   Y dS w | j tjvrdS ddlm} i |_| j| 	d| j  | 
| j |jv  dS )z5Ensure that the backend for the testcase gets cached.Nr   r   socialauth_begin)nameAttributeErrorr   SOCIAL_AUTH_ENABLED_BACKENDSr   r   BACKENDSr   getr   
assertTrueBACKENDSCACHEr   r
   r
   r   test_backend_cache4   s   
z&SocialAuthTestsCase.test_backend_cacheFc                 C   sd   |r	t j|ddp
|}t|}t }|r |t|   |dt	 d
|j||d S )yReturn content for given url, if data is not None, then a POST
        request will be issued, otherwise GET will be usedTdoseq
User-Agent data)urllib	urlencodeurllib2Requestbuild_openeradd_handlerHTTPCookieProcessorget_jar
add_header
USER_AGENTjoinopen	readlinesr   urlr-   use_cookiesrequestagentr
   r
   r   get_contentC   s   
zSocialAuthTestsCase.get_contentc                 C   s^   |r	t j|ddp
|}t|}tt }|r"|t|   |	dt
 |j||dS )r'   Tr(   r*   r,   )r.   r/   r0   r1   r2   RedirectHandlerr3   r4   r5   r6   r7   r9   r;   r
   r
   r   get_redirectO   s   
z SocialAuthTestsCase.get_redirectc                 C   s   | j st | _ | j S N)r   	cookielib	CookieJarr   r
   r
   r   r5   [   s   
zSocialAuthTestsCase.get_jarc                 C   s   t ||fdS )zReverses backend URL by name)r   r   )r   r   backendr
   r
   r   r   `   s   zSocialAuthTestsCase.reversec                 C   s(   t  |}t dd|j|j|j|jfS )z5Converst URL to relative, useful for server responsesr+   )urlparse
urlunparsepathparamsqueryfragment)r   valueparsedr
   r
   r   make_relatived   s   
z!SocialAuthTestsCase.make_relativeNF)__name__
__module____qualname____doc__r   r	   r   r   r   r&   r@   rB   r5   r   rP   __classcell__r
   r
   r   r   r      s    


r   c                   @   s   e Zd ZdZdd ZdS )CustomParserz6Custom SGMLParser that closes the parser once it's fedc                 C   s   t | | |   d S rC   )r   feedclose)r   r-   r
   r
   r   rX   m   s   zCustomParser.feedN)rR   rS   rT   rU   rX   r
   r
   r
   r   rW   k   s    rW   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )
FormParserz5Form parser, load form data and action for given formc                 O   s.   t j| g|R i | d| _d | _i | _d S rQ   )rW   r   inside_formactionvaluesr   r   r   r
   r
   r   r   t   s   
zFormParser.__init__c                 C   s,   t |}| |rd| _|d| _dS dS )z9Start form parsing detecting if form is the one requestedTr\   N)dictin_formr[   r#   r\   r   
attributesattrsr
   r
   r   
start_formz   s
   
zFormParser.start_formc                 C   s   dS )zOverride belowTr
   r   rc   r
   r
   r   r`      s   zFormParser.in_formc                 C   s
   d| _ dS )z(End form parsing, unset inside_form flagFN)r[   rF   r
   r
   r   end_form   s   
zFormParser.end_formc                 C   sV   t |}| jr%|d|d|d}}}|r'|dv r)|| j|< dS dS dS dS )ztParse input fields, we only keep data for fields of type text,
        hidden or password and that has a valid name.typer   rN   )texthiddenpasswordN)r_   r[   r#   r]   )r   rb   rc   rg   r   rN   r
   r
   r   start_input   s   
zFormParser.start_inputN)	rR   rS   rT   rU   r   rd   r`   rf   rk   r
   r
   r
   r   rZ   r   s    rZ   c                   @       e Zd ZdZdd Zdd ZdS )FormParserByIDzNForm parser, load form data and action for given form identified
    by its idc                 O   s"   t j| g|R i | || _d S rC   )rZ   r   form_id)r   rn   r   r   r
   r
   r   r         
zFormParserByID.__init__c                 C   s   | d| jkS )Nid)r#   rn   re   r
   r
   r   r`      s   zFormParserByID.in_formN)rR   rS   rT   rU   r   r`   r
   r
   r
   r   rm      s    rm   c                   @   rl   )RefreshParserzDRefresh parser, will check refresh by meta tag and store refresh URLc                 O   s"   t j| g|R i | d | _d S rC   )rW   r   rN   r^   r
   r
   r   r      ro   zRefreshParser.__init__c                 C   s8   t |}|ddkrtd|dd| _dS dS )z3Start meta parsing checking by http-equiv attributez
http-equivrefreshr+   content'N)r_   r#   
REFRESH_REsubstriprN   ra   r
   r
   r   
start_meta   s   zRefreshParser.start_metaN)rR   rS   rT   rU   r   rx   r
   r
   r
   r   rq      s    rq   c                   @   s   e Zd Zdd ZdS )rA   c                 C   s   |S rC   r
   )r   reqfpcodemsgheadersr
   r
   r   http_error_302   s   zRedirectHandler.http_error_302N)rR   rS   rT   r~   r
   r
   r
   r   rA      s    rA   )rer0   rD   r.   rH   unittestsgmllibr   django.confr   django.test.clientr   django.core.urlresolversr   r7   compileru   TestCaser   rW   rZ   rm   rq   HTTPRedirectHandlerrA   r
   r
   r
   r   <module>   s$    
Y#