o
    gëfý  ã                   @   s    d Z z
ddlmZ e W n ey   ddlmZ Y nw ddlmZ ddlmZ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 )at  
Fitbit OAuth support.

This contribution adds support for Fitbit OAuth service. The settings
FITBIT_CONSUMER_KEY and FITBIT_CONSUMER_SECRET must be defined with the values
given by Fitbit application registration process.

By default account id, username and token expiration time are stored in
extra_data field, check OAuthBackend class for details on how to extend it.
é    )Úparse_qs)ÚToken)ÚConsumerBasedOAuthÚOAuthBackendzhttps://api.fitbit.comz%s/oauth/request_tokenz%s/oauth/authorizez%s/oauth/access_tokenz+http://api.fitbit.com/1/user/-/profile.jsonc                   @   s,   e Zd ZdZdZg d¢Zdd„ Zdd„ ZdS )	ÚFitbitBackendz#Fitbit OAuth authentication backendÚfitbit))Úidr   )Úusernamer	   )Úexpiresr
   c                 C   s   |d S )z–
        Fitbit doesn't provide user data, it must be requested to its API:
            https://wiki.fitbit.com/display/API/API-Get-User-Info
        r   © )ÚselfÚdetailsÚresponser   r   úd/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/fitbit.pyÚget_user_id'   s   zFitbitBackend.get_user_idc                 C   s   |  d¡d|  d¡dœS )z'Return user details from Fitbit accountr   Ú Úfullname)r	   ÚemailÚ
first_name)Úget)r   r   r   r   r   Úget_user_details.   s   þzFitbitBackend.get_user_detailsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚ
EXTRA_DATAr   r   r   r   r   r   r      s    r   c                   @   s8   e Zd ZdZeZeZeZ	e
ZdZdZdd„ Zdd„ ZdS )	Ú
FitbitAuthz%Fitbit OAuth authentication mechanismÚFITBIT_CONSUMER_KEYÚFITBIT_CONSUMER_SECRETc                 C   sj   |   || j¡}|  |¡}t |¡}t|ƒ}| ddg¡d |_| ddg¡d |_| ddg¡d |_	|S )z%Return request for access token valueÚencoded_user_idNr   r   r	   )
Úoauth_requestÚACCESS_TOKEN_URLÚfetch_responser   Úfrom_stringr   r   r    r   r	   )r   ÚtokenÚrequestr   Úparamsr   r   r   Úaccess_token>   s   

zFitbitAuth.access_tokenc                 O   s   |j |j|jdœS )zLoads user data from service)r   r	   r   )r    r	   r   )r   r(   ÚargsÚkwargsr   r   r   Ú	user_dataM   s   ýzFitbitAuth.user_dataN)r   r   r   r   ÚFITBIT_AUTHORIZATION_URLÚAUTHORIZATION_URLÚFITBIT_REQUEST_TOKEN_URLÚREQUEST_TOKEN_URLÚFITBIT_ACCESS_TOKEN_URLr"   r   ÚAUTH_BACKENDÚSETTINGS_KEY_NAMEÚSETTINGS_SECRET_NAMEr(   r+   r   r   r   r   r   5   s    r   r   N)r   Úurlparser   ÚImportErrorÚcgiÚoauth2r   Úsocial_auth.backendsr   r   ÚFITBIT_SERVERr.   r,   r0   ÚFITBIT_USERINFOr   r   ÚBACKENDSr   r   r   r   Ú<module>   s$    
þ#ÿ