o
    gfw                     @   s   d Z zddlZW n ey'   zddlZW n ey$   ddlmZ Y nw Y nw ddlmZmZ ddlm	Z	 dZ
de
 Zde
 Zd	e
 Zd
e
 ZG dd deZG dd deZdeiZdS )a  
Twitter OAuth support.

This adds support for Twitter OAuth service. An application must
be registered first on twitter and the settings TWITTER_CONSUMER_KEY
and TWITTER_CONSUMER_SECRET must be defined with the corresponding
values.

User screen name is used to generate username.

By default account id is stored in extra_data field, check OAuthBackend
class for details on how to extend it.
    N)
simplejson)ConsumerBasedOAuthOAuthBackend)AuthCanceledzapi.twitter.comzhttps://%s/oauth/request_tokenzhttps://%s/oauth/access_tokenzhttps://%s/oauth/authenticatez.https://%s/1.1/account/verify_credentials.jsonc                       s6   e Zd ZdZdZdgZdd Ze fddZ  Z	S )TwitterBackendz$Twitter OAuth authentication backendtwitter)idr   c                 C   sF   z|d  dd\}}W n
   |d }d}Y |d d|d ||dS )z(Return user details from Twitter accountname     screen_name)usernameemailfullname
first_name	last_namesplit)selfresponser   r    r   ]/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/twitter.pyget_user_details*   s   zTwitterBackend.get_user_detailsc                    s<   t t| |}|rd|v rtdd |d dD }|S )zReturn the tokens needed to authenticate the access to any API the
        service might provide. Twitter uses a pair of OAuthToken consisting of
        an oauth_token and oauth_token_secret.

        instance must be a UserSocialAuth instance.
        access_tokenc                 s   s    | ]}| d V  qdS )=Nr   ).0tokr   r   r   	<genexpr>A   s    z(TwitterBackend.tokens.<locals>.<genexpr>&)superr   tokensdictr   )clsinstancetoken	__class__r   r   r!   7   s   zTwitterBackend.tokens)
__name__
__module____qualname____doc__r	   
EXTRA_DATAr   classmethodr!   __classcell__r   r   r&   r   r   %   s    r   c                       s@   e Zd ZdZeZeZeZ	e
ZdZdZdd Z fddZ  ZS )TwitterAuthz&Twitter OAuth authentication mechanismTWITTER_CONSUMER_KEYTWITTER_CONSUMER_SECRETc                 O   s8   |  |t}| |}zt|W S  ty   Y dS w )zReturn user data providedN)oauth_requestTWITTER_CHECK_AUTHfetch_responser   loads
ValueError)r   r   argskwargsrequestjsonr   r   r   	user_dataO   s   
zTwitterAuth.user_datac                    s(   d| j v r	t| tt| j|i |S )z2Completes login process, must return user instancedenied)datar   r    r/   auth_complete)r   r7   r8   r&   r   r   r>   X   s   
zTwitterAuth.auth_complete)r(   r)   r*   r+   TWITTER_AUTHORIZATION_URLAUTHORIZATION_URLTWITTER_REQUEST_TOKEN_URLREQUEST_TOKEN_URLTWITTER_ACCESS_TOKEN_URLACCESS_TOKEN_URLr   AUTH_BACKENDSETTINGS_KEY_NAMESETTINGS_SECRET_NAMEr;   r>   r.   r   r   r&   r   r/   F   s    	r/   r   )r+   r:   r   ImportErrordjango.utilssocial_auth.backendsr   r   social_auth.exceptionsr   TWITTER_SERVERrA   rC   r?   r3   r   r/   BACKENDSr   r   r   r   <module>   s0    !