3
EuZ<                 @   s   d dl mZmZ d dlZd dljj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mZ d dlmZmZ d dlmZ yd dlZW n ek
r   dZY nX ejd  dkreZeZneZeZdZd	ZG d
d de
j Z!dS )    )unicode_literalsprint_functionN)StringIO)SIGNATURE_TYPE_QUERYSIGNATURE_TYPE_BODY)SIGNATURE_RSASIGNATURE_PLAINTEXT)OAuth1Session3a  -----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApF1JaMSN8TEsh4N4O/5SpEAVLivJyLH+Cgl3OQBPGgJkt8cg
49oasl+5iJS+VdrILxWM9/JCJyURpUuslX4Eb4eUBtQ0x5BaPa8+S2NLdGTaL7nB
OO8o8n0C5FEUU+qlEip79KE8aqOj+OC44VsIquSmOvWIQD26n3fCVlgwoRBD1gzz
sDOeaSyzpKrZR851Kh6rEmF2qjJ8jt6EkxMsRNACmBomzgA4M1TTsisSUO87444p
e35Z4/n5c735o2fZMrGgMwiJNh7rT8SYxtIkxngioiGnwkxGQxQ4NzPAHg+XSY0J
04pNm7KqTkgtxyrqOANJLIjXlR+U9SQ90NjHVQIDAQABAoIBABuBPOKaWcJt3yzC
NGGduoif7KtwSnEaUA+v69KPGa2Zju8uFHPssKD+4dZYRc2qMeunKJLpaGaSjnRh
yHyvvOBJCN1nr3lhz6gY5kzJTfwpUFXCOPJlGy4Q+2Xnp4YvcvYqQ9n5DVovDiZ8
vJOBn16xqpudMPLHIa7D5LJ8SY76HBjE+imTXw1EShdh5TOV9bmPFQqH6JFzowRH
hyH2DPHuyHJj6cl8FyqJw5lVWzG3n6Prvk7bYHsjmGjurN35UsumNAp6VouNyUP1
RAEcUJega49aIs6/FJ0ENJzQjlsAzVbTleHkpez2aIok+wsWJGJ4SVxAjADOWAaZ
uEJPc3UCgYEA1g4ZGrXOuo75p9/MRIepXGpBWxip4V7B9XmO9WzPCv8nMorJntWB
msYV1I01aITxadHatO4Gl2xLniNkDyrEQzJ7w38RQgsVK+CqbnC0K9N77QPbHeC1
YQd9RCNyUohOimKvb7jyv798FBU1GO5QI2eNgfnnfteSVXhD2iOoTOsCgYEAxJJ+
8toxJdnLa0uUsAbql6zeNXGbUBMzu3FomKlyuWuq841jS2kIalaO/TRj5hbnE45j
mCjeLgTVO6Ach3Wfk4zrqajqfFJ0zUg/Wexp49lC3RWiV4icBb85Q6bzeJD9Dn9v
hjpfWVkczf/NeA1fGH/pcgfkT6Dm706GFFttLL8CgYBl/HeXk1H47xAiHO4dJKnb
v0B+X8To/RXamF01r+8BpUoOubOQetdyX7ic+d6deuHu8i6LD/GSCeYJZYFR/KVg
AtiW757QYalnq3ZogkhFrVCZP8IRfTPOFBxp752TlyAcrSI7T9pQ47IBe4094KXM
CJWSfPgAJkOxd0iU0XJpmwKBgGfQxuMTgSlwYRKFlD1zKap5TdID8fbUbVnth0Q5
GbH7vwlp/qrxCdS/aj0n0irOpbOaW9ccnlrHiqY25VpVMLYIkt3DrDOEiNNx+KNR
TItdTwbcSiTYrS4L0/56ydM/H6bsfsXxRjI18hSJqMZiqXqS84OZz2aOn+h7HCzc
LEiZAoGASk20wFvilpRKHq79xxFWiDUPHi0x0pp82dYIEntGQkKUWkbSlhgf3MAi
5NEQTDmXdnB+rVeWIvEi+BXfdnNgdn8eC4zSdtF4sIAhYr5VWZo0WVWDhT7u2ccv
ZBFymiz8lo3gN57wGUCi9pbZqzV1+ZppX6YTNDdDCE0q+KO3Cec=
-----END RSA PRIVATE KEY-----ap  j8WF8PGjojT82aUDd2EL%2Bz7HCoHInFzWUpiEKMCy%2BJ2cYHWcBS7mXlmFDLgAKV0P%2FyX4TrpXODYnJ6dRWdfghqwDpi%2FlQmB2jxCiGMdJoYxh3c5zDf26gEbGdP6D7OSsp5HUnzH6sNkmVjuE%2FxoJcHJdc23H6GhOs7VJ2LWNdbhKWP%2FMMlTrcoQDn8lz%2Fb24WsJ6ae1txkUzpFOOlLM8aTdNtGL4OtsubOlRhNqnAFq93FyhXg0KjzUyIZzmMX9Vx90jTks5QeBGYcLE0Op2iHb2u%2FO%2BEgdwFchgEwE5LgMUyHUI4F3Wglp28yHOAMjPkI%2FkWMvpxtMrU3Z3KN31WQ%3D%3Dc               @   s  e Zd Zdd Zdd Zejdejddd Zejdejdd	d
 Zejdejddd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zejdejdd+d, Zd-d. Zd3d0d1Zd2S )4OAuth1SessionTestc                s   t  ds fdd _d S )NassertInc                s    j | |kS )N)
assertTrue)ab)self K/Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth1_session.py<lambda>G   s    z)OAuth1SessionTest.setUp.<locals>.<lambda>)hasattrr   )r   r   )r   r   setUpD   s    
zOAuth1SessionTest.setUpc                s    fdd}t d}|dd |_|jd t dtd}|dd |_|jd t dtd}d	d
i}|dd |_|jd|dd d S )Nc                s    fdd}|S )Nc                s@    | }t |tr|jd}jd| tjtjd}g |_|S )Nzutf-8Zoauth_signature)spec)	
isinstance
bytes_typedecoder   mock	MagicMockrequestsResponsecookies)rkwargs	signatureresp)getterr   r   r   	fake_sendK   s    

zSOAuth1SessionTest.test_signature_types.<locals>.verify_signature.<locals>.fake_sendr   )r#   r$   )r   )r#   r   verify_signatureJ   s    z@OAuth1SessionTest.test_signature_types.<locals>.verify_signaturefooc             S   s
   | j d S )NAuthorization)headers)r   r   r   r   r   V   s    z8OAuth1SessionTest.test_signature_types.<locals>.<lambda>zhttps://i.b)Zsignature_typec             S   s   | j S )N)url)r   r   r   r   r   Z   s    zContent-Typez!application/x-www-form-urlencodedc             S   s   | j S )N)body)r   r   r   r   r   _   s     )r(   data)r	   sendpostr   r   )r   r%   headerqueryr*   r(   r   )r   r   test_signature_typesI   s    

z&OAuth1SessionTest.test_signature_typesz*oauthlib.oauth1.rfc5849.generate_timestampz&oauthlib.oauth1.rfc5849.generate_noncec             C   s   t stjdd|_d|_d}td}| j||_|jd d}tdtd}| j||_|jd d	j	t
d
}tdttd}| j||_|jd d S )Nzcryptography module is requiredabc123zOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="foo", oauth_signature="h2sRqLArjhlc5p3FTkuNogVHlKE%3D"r&   zhttps://i.bzOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_consumer_key="foo", oauth_signature="%26")signature_methodzOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="RSA-SHA1", oauth_consumer_key="foo", oauth_signature="{sig}")sig)r4   rsa_key)cryptographyunittestSkipTestreturn_valuer	   r%   r-   r.   r   formatTEST_RSA_OAUTH_SIGNATUREr   TEST_RSA_KEY)r   generate_noncegenerate_timestampr!   authr   r   r   test_signature_methodsb   s$    


z(OAuth1SessionTest.test_signature_methodsc             C   sN   d|_ d|_ td}ddi}d}td}| j||_|jd|d	|fgd
 d S )Nr2   r3   zhello worldzContent-Typezapplication/xmlzOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="foo", oauth_signature="h2sRqLArjhlc5p3FTkuNogVHlKE%3D"r&   zhttps://i.bZfake)r(   files)r:   r   r	   r%   r-   r.   )r   r>   r?   Zfake_xmlr(   r!   r@   r   r   r   test_binary_upload   s    z$OAuth1SessionTest.test_binary_uploadc             C   s2   d|_ d|_ d}td}| j||_|jd d S )Nr2   r3   zOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="foo", oauth_signature="W0haoue5IZAZoaJiYCtfqwMf8x8%3D"r&   z"https://i.b?cjk=%E5%95%A6%E5%95%A6)r:   r	   r%   r-   r.   )r   r>   r?   r!   r@   r   r   r   test_nonascii   s    zOAuth1SessionTest.test_nonasciic             C   s6   t d}d}d}|j||d}| j||d |  d S )Nr&   zhttps://example.comm/authorizeZasluif023sf)Zrequest_tokenz?oauth_token=)r	   Zauthorization_urlassertEqual)r   r@   r)   tokenZauth_urlr   r   r   test_authorization_url   s
    z(OAuth1SessionTest.test_authorization_urlc             C   sp   d}t d}|j|}| j|d d | j|d d x4|j D ](\}}| jt|t | jt|t q@W d S )Nz7https://i.b/callback?oauth_token=foo&oauth_verifier=barr&   oauth_tokenoauth_verifierbar)r	   Zparse_authorization_responserE   itemsr   r   unicode_type)r   r)   r@   r"   kvr   r   r   test_parse_response_url   s    
z)OAuth1SessionTest.test_parse_response_urlc             C   sh   t d}| jd|_|jd}| j|d d x4|j D ](\}}| jt|t | jt|t q8W d S )Nr&   zoauth_token=foozhttps://example.com/tokenrH   )	r	   	fake_bodyr-   fetch_request_tokenrE   rK   r   r   rL   )r   r@   r"   rM   rN   r   r   r   test_fetch_request_token   s    
z*OAuth1SessionTest.test_fetch_request_tokenc             C   sn   t d}| jd|_|jdddd}| j|d d x4|j D ](\}}| jt|t | jt|t q>W d S )Nr&   zoauth_token=foozhttps://example.com/tokenFT)verifystreamrH   )	r	   rP   r-   rQ   rE   rK   r   r   rL   )r   r@   r"   rM   rN   r   r   r   0test_fetch_request_token_with_optional_arguments   s    
zBOAuth1SessionTest.test_fetch_request_token_with_optional_argumentsc             C   sl   t ddd}| jd|_|jd}| j|d d x4|j D ](\}}| jt|t | jt|t q<W d S )Nr&   rJ   )verifierzoauth_token=foozhttps://example.com/tokenrH   )	r	   rP   r-   fetch_access_tokenrE   rK   r   r   rL   )r   r@   r"   rM   rN   r   r   r   test_fetch_access_token   s    
z)OAuth1SessionTest.test_fetch_access_tokenc             C   sr   t ddd}| jd|_|jdddd}| j|d	 d x4|j D ](\}}| jt|t | jt|t qBW d S )
Nr&   rJ   )rV   zoauth_token=foozhttps://example.com/tokenFT)rS   rT   rH   )	r	   rP   r-   rW   rE   rK   r   r   rL   )r   r@   r"   rM   rN   r   r   r   /test_fetch_access_token_with_optional_arguments   s    
zAOAuth1SessionTest.test_fetch_access_token_with_optional_argumentsc             C   sR   | j d|_y|jd W n2 tk
rL } z| jdt| W Y dd}~X nX dS )zkAssert that an error is being raised whenever there's no verifier
        passed in to the client.
        zoauth_token=foozhttps://example.com/tokenz No client verifier has been set.N)rP   r-   rW   
ValueErrorrE   str)r   r@   excr   r   r   %_test_fetch_access_token_raises_error   s
    z7OAuth1SessionTest._test_fetch_access_token_raises_errorc             C   s   t d}| jd|_| jt|jd xxd	D ]p}| jd||_y|jd W nD tk
r } z(| j|j| | jt	|j
tj W Y d d }~X q*X | jd q*W d S )
Nr&   znot valid urlencoded response!zhttps://example.com/token      zvalid=responsezValueError not raised)r^   r_   r`   )r	   rP   r-   assertRaisesrZ   rQ   rE   status_coder   r   responser   r   fail)r   r@   codeerrr   r   r   !test_fetch_token_invalid_response   s    

&z3OAuth1SessionTest.test_fetch_token_invalid_responsec             C   s   | j td d S )Nr&   )r]   r	   )r   r   r   r   (test_fetch_access_token_missing_verifier   s    z:OAuth1SessionTest.test_fetch_access_token_missing_verifierc             C   s   t d}|jj`| j| d S )Nr&   )r	   _clientclientrV   r]   )r   r@   r   r   r   ,test_fetch_access_token_has_verifier_is_none   s    z>OAuth1SessionTest.test_fetch_access_token_has_verifier_is_nonec             C   s   dddd}t d}| j|jjj | j|jjj | j|jjj | j|ji  ||_| j|jjjd | j|jjjd | j|jjjd d S )Nzfake-keyzfake-secretzfake-verifier)rH   oauth_token_secretrI   r&   )	r	   assertIsNoneri   rj   resource_owner_keyresource_owner_secretrV   rE   rF   )r   rF   sessr   r   r   test_token_proxy_set   s    z&OAuth1SessionTest.test_token_proxy_setc             C   sZ   dddd}t d|d |d |d d	}| j|j| d
|jj_d
|d< | j|j| d S )Nzfake-keyzfake-secretzfake-verifier)rH   rl   rI   r&   rH   rl   rI   )rn   ro   rV   zdifferent-key)r	   rE   rF   ri   rj   rn   )r   rF   rp   r   r   r   test_token_proxy_get  s    
z&OAuth1SessionTest.test_token_proxy_getc             C   s   t d}| j|j d S )Nr&   )r	   assertFalse
authorized)r   rp   r   r   r   test_authorized_false  s    z'OAuth1SessionTest.test_authorized_falsec             C   s6   dj td}tdttd}| j||_| j|j d S )NzOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="RSA-SHA1", oauth_consumer_key="foo", oauth_signature="{sig}")r5   r&   )r4   r6   )	r;   r<   r	   r   r=   r%   r-   rs   rt   )r   r!   rp   r   r   r   test_authorized_false_rsa  s    z+OAuth1SessionTest.test_authorized_false_rsac             C   s4   t dddd}| jd|_|jd | j|j d S )NkeysecretrJ   )rV   z&oauth_token=foo&oauth_token_secret=barzhttps://example.com/token)r	   rP   r-   rW   r   rt   )r   rp   r   r   r   test_authorized_true'  s    
z&OAuth1SessionTest.test_authorized_truec             C   s^   t stjdd|_d|_djtd}tddttdd	}| j	d
|_
|jd | j|j d S )Nzcryptography module is requiredr2   r3   zOAuth oauth_nonce="abc", oauth_timestamp="123", oauth_version="1.0", oauth_signature_method="RSA-SHA1", oauth_consumer_key="foo", oauth_verifier="bar", oauth_signature="{sig}")r5   rw   rx   rJ   )r4   r6   rV   z&oauth_token=foo&oauth_token_secret=barzhttps://example.com/token)r7   r8   r9   r:   r;   r<   r	   r   r=   rP   r-   rW   r   rt   )r   r>   r?   r!   rp   r   r   r   test_authorized_true_rsa-  s    


z*OAuth1SessionTest.test_authorized_true_rsac                s    fdd}|S )Nc                sB   | j d }t|tr|jd} j| tjtjd}g |_	|S )Nr'   zutf-8)r   )
r(   r   r   r   rE   r   r   r   r   r   )r   r    auth_headerr"   )r   r!   r   r   r$   A  s    


z5OAuth1SessionTest.verify_signature.<locals>.fake_sendr   )r   r!   r$   r   )r   r!   r   r%   @  s    z"OAuth1SessionTest.verify_signature   c                s    fdd}|S )Nc                s$   t jtjd}g |_ |_|_|S )N)r   )r   r   r   r   r   textrb   )r   r    r"   )r*   rb   r   r   r$   L  s
    z.OAuth1SessionTest.fake_body.<locals>.fake_sendr   )r   r*   rb   r$   r   )r*   rb   r   rP   K  s    zOAuth1SessionTest.fake_bodyN)r|   )__name__
__module____qualname__r   r1   r   patchrA   rC   rD   rG   rO   rR   rU   rX   rY   r]   rg   rh   rk   rq   rr   ru   rv   ry   rz   r%   rP   r   r   r   r   r   B   s6   	
	
	
r   )"
__future__r   r   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr   r8   sysr   ior   Zoauthlib.oauth1r   r   r   r   requests_oauthlibr	   r7   ImportErrorversionr[   rL   bytesr   unicoder=   r<   TestCaser   r   r   r   r   <module>   s,     
	