o
    gëf¶  ã                   @   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ZdZd	ZG d
d„ deƒZG dd„ deƒZdeiZdS )a  
OAuth 1.0 Yahoo backend

Options:
YAHOO_CONSUMER_KEY
YAHOO_CONSUMER_SECRET

References:
* http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html
* http://developer.yahoo.com/social/rest_api_guide/
*           introspective-guid-resource.html
* http://developer.yahoo.com/social/rest_api_guide/
*           extended-profile-resource.html

Scopes:
To make this extension works correctly you have to have at least
Yahoo Profile scope with Read permission

Throws:
AuthUnknownError - if user data retrieval fails (guid or profile)
é    N)Ú
simplejson)ÚConsumerBasedOAuthÚOAuthBackend)ÚAuthUnknownErrorzapi.login.yahoo.comz6https://api.login.yahoo.com/oauth/v2/get_request_tokenz1https://api.login.yahoo.com/oauth/v2/request_authz.https://api.login.yahoo.com/oauth/v2/get_tokenc                   @   s,   e Zd ZdZdZg d¢Zdd„ Zdd„ ZdS )	ÚYahooOAuthBackendz"Yahoo OAuth authentication backendúyahoo-oauth))ÚguidÚid)Úaccess_tokenr
   )Úexpiresr   c                 C   s   |d S )Nr   © )ÚselfÚdetailsÚresponser   r   úc/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/yahoo.pyÚget_user_id4   s   zYahooOAuthBackend.get_user_idc                 C   sR   |  d¡}|  d¡}d|v r|  d¡d d }nd}|  d¡|d||f ||d	œS )
z&Return user details from Yahoo ProfileÚ	givenNameÚ
familyNameÚemailsr   ÚhandleÚ Únicknamez%s %s)ÚusernameÚemailÚfullnameÚ
first_nameÚ	last_name)Úget)r   r   ÚfnameÚlnamer   r   r   r   Úget_user_details7   s   


üz"YahooOAuthBackend.get_user_detailsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚ
EXTRA_DATAr   r    r   r   r   r   r   *   s    r   c                   @   s4   e Zd ZeZeZeZeZdZdZ	dd„ Z
dd„ ZdS )Ú
YahooOAuthÚYAHOO_CONSUMER_KEYÚYAHOO_CONSUMER_SECRETc                 O   sP   |   |¡}d| }|  ||¡}|  |¡}zt |¡d W S  ty'   tdƒ‚w )zLoads user data from servicez:http://social.yahooapis.com/v1/user/%s/profile?format=jsonÚprofilez7Error during profile retrieval, please, try again later)Ú	_get_guidÚoauth_requestÚfetch_responser   ÚloadsÚ
ValueErrorr   )r   r
   ÚargsÚkwargsr   ÚurlÚrequestr   r   r   r   Ú	user_dataN   s   
ÿ
ÿzYahooOAuth.user_datac                 C   sJ   d}|   ||¡}|  |¡}zt |¡}|d d W S  ty$   tdƒ‚w )z„
            Beause you have to provide GUID for every API request
            it's also returned during one of OAuth calls
        z2http://social.yahooapis.com/v1/me/guid?format=jsonr   Úvaluez7Error during user id retrieval, please, try again later)r,   r-   r   r.   r/   r   )r   r
   r2   r3   r   Újsonr   r   r   r+   [   s   

ÿzYahooOAuth._get_guidN)r!   r"   r#   ÚAUTHORIZATION_URLÚREQUEST_TOKEN_URLÚACCESS_TOKEN_URLr   ÚAUTH_BACKENDÚSETTINGS_KEY_NAMEÚSETTINGS_SECRET_NAMEr4   r+   r   r   r   r   r'   F   s    r'   r   )r$   r6   r   ÚImportErrorÚdjango.utilsÚsocial_auth.backendsr   r   Úsocial_auth.exceptionsr   ÚYAHOO_OAUTH_SERVERr8   r7   r9   r   r'   ÚBACKENDSr   r   r   r   Ú<module>   s*    ÿ€ý'ÿ