o
    gf                     @   s   d Z ddlmZ ddlmZmZmZ zddl	Z
W n ey7   zddl
Z
W n ey4   ddlm
Z
 Y nw Y nw ddlmZ ddlmZ dZd	e Zd
e Zde ZdZG dd deZG dd deZdeiZdS )a  
Tumblr OAuth 1.0a support.

Take a look to http://www.tumblr.com/docs/en/api/v2

You need to register OAuth site here:
http://www.tumblr.com/oauth/apps

Then update your settings values using registration information

ref:
https://github.com/gkmngrgn/django-tumblr-auth
    )urlopen)RequestTokenSignatureMethod_HMAC_SHA1N)
simplejson)ConsumerBasedOAuth)OAuthBackendzwww.tumblr.comzhttp://%s/oauth/authorizezhttp://%s/oauth/request_tokenzhttp://%s/oauth/access_tokenz"http://api.tumblr.com/v2/user/infoc                       s4   e Zd ZdZdd Zdd Ze fddZ  ZS )TumblrBackendtumblrc                 C   s   |d S )Nusername )selfdetailsresponser   r   d/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/tumblr.pyget_user_id)   s   zTumblrBackend.get_user_idc                 C   sH   |d d }d|d i}|d }|D ]}|d r!|d |d<  |S q|S )	Nr   userr   nameblogsprimarytitlefullnamer   )r   r   	user_infodatar   blogr   r   r   get_user_details,   s   zTumblrBackend.get_user_detailsc                    s<   t t| |}|rd|v rtdd |d dD }|S )a  
        Return the tokens needed to authenticate the access to any API the
        service might provide. Tumblr uses a pair of OAuthToken consisting
        on a oauth_token and oauth_token_secret.

        instance must be a UserSocialAuth instance.
        access_tokenc                 s   s    | ]}| d V  qdS )=N)split).0tokr   r   r   	<genexpr>B   s    z'TumblrBackend.tokens.<locals>.<genexpr>&)superr	   tokensdictr   )clsinstancetoken	__class__r   r   r$   7   s   	zTumblrBackend.tokens)	__name__
__module____qualname__r   r   r   classmethodr$   __classcell__r   r   r)   r   r	   &   s    r	   c                   @   sJ   e Zd ZeZeZeZe	Z
eZdZdZdd Zdd Zddd	Zd
d ZdS )
TumblrAuthTUMBLR_CONSUMER_KEYTUMBLR_CONSUMER_SECRETc                 C   s8   |  |t}| |}zt|W S  ty   Y d S w N)oauth_requestTUMBLR_CHECK_AUTHfetch_responser   loads
ValueError)r   r   requestjsonr   r   r   	user_dataP   s   
zTumblrAuth.user_datac                 C   s$   | j d | jd}| |}t|S )N)r(   url)r4   REQUEST_TOKEN_URLr6   
OAuthTokenfrom_stringr   r9   r   r   r   r   unauthorized_tokenY   s   

zTumblrAuth.unauthorized_tokenNc                 C   sZ   d| j i}|r|| d| jv r| jd |d< tj| j|||d}|t | j| |S )Noauth_callbackoauth_verifier)r(   http_url
parameters)redirect_uriupdater   OAuthRequestfrom_consumer_and_tokenconsumersign_requestr   )r   r(   r<   extra_paramsparamsr9   r   r   r   r4   _   s   

zTumblrAuth.oauth_requestc                 C   s   t | }| S )z,Executes request and fetchs service response)r   to_urlreadr@   r   r   r   r6   q   s   zTumblrAuth.fetch_responser3   )r+   r,   r-   r	   AUTH_BACKENDTUMBLR_AUTHORIZATION_URLAUTHORIZATION_URLTUMBLR_REQUEST_TOKEN_URLr=   TUMBLR_ACCESS_TOKEN_URLACCESS_TOKEN_URLTUMBLR_SERVER
SERVER_URLSETTINGS_KEY_NAMESETTINGS_SECRET_NAMEr;   rA   r4   r6   r   r   r   r   r0   G   s    	
r0   r
   )__doc__urllibr   oauth2r   rH   r   r>   r   r:   r   ImportErrordjango.utilssocial_auth.backendsr   r   rV   rQ   rS   rT   r5   r	   r0   BACKENDSr   r   r   r   <module>   s0    !1