o
    gëfï  ã                   @   s¼   d Z ddlm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 ddl	m
Z
mZ dZdZd	Zd
ZddgZG dd„ deƒZG dd„ de
ƒZdeiZdS )aÃ  
SoundCloud OAuth2 support.

This contribution adds support for SoundCloud OAuth2 service.

The settings SOUNDCLOUD_CLIENT_ID & SOUNDCLOUD_CLIENT_SECRET must be defined
with the values given by SoundCloud application registration process.

http://developers.soundcloud.com/
http://developers.soundcloud.com/docs

By default account id and token expiration time are stored in extra_data
field, check OAuthBackend class for details on how to extend it.
é    )Ú	urlencodeN)Ú
simplejson)Údsa_urlopen)Ú
BaseOAuth2ÚOAuthBackendzhttps://soundcloud.com/connectz'https://api.soundcloud.com/oauth2/tokenz"https://api.soundcloud.com/me.jsonzsoundcloud.com)Úrefresh_tokenr   )Ú
expires_inÚexpiresc                   @   s$   e Zd ZdZdZddgZdd„ ZdS )ÚSoundcloudBackendz'Soundcloud OAuth authentication backendÚ
soundcloud)Úidr   )r	   r	   c                 C   sV   |  d¡}| d¡}|d }t|ƒdkr|d }nd}|  d¡|  d¡p%d|||d	œS )
z+Return user details from Soundcloud accountÚ	full_nameú r   é   éÿÿÿÿÚ ÚusernameÚemail)r   r   ÚfullnameÚ
first_nameÚ	last_name)ÚgetÚsplitÚlen)ÚselfÚresponser   r   r   r   © r   úh/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/soundcloud.pyÚget_user_details1   s   


üz"SoundcloudBackend.get_user_detailsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚ
EXTRA_DATAr   r   r   r   r   r
   (   s    þr
   c                   @   s<   e Zd ZdZeZeZeZ	dZ
dZdZdZdd„ Zdd	„ Zd
S )ÚSoundcloudAuthzSoundcloud OAuth2 mechanismÚSOUNDCLOUD_CLIENT_IDÚSOUNDCLOUD_CLIENT_SECRETú,Fc                 O   s>   t d td|iƒ }z
t t|ƒ¡}|W S  ty   Y dS w )zLoads user data from serviceú?Úoauth_tokenN)ÚSOUNDCLOUD_USER_DATA_URLr   r   Úloadr   Ú
ValueError)r   Úaccess_tokenÚargsÚkwargsÚurlÚvaluer   r   r   Ú	user_dataM   s   ÿÿzSoundcloudAuth.user_datac                 C   s¨   | j s| jr"| jjd }| jj |¡p|  ¡ }|| jj| jjd < nd}|  |¡}| 	|  
¡ ¡ | 	|  ¡ ¡ | jj d¡rGd| jjd  }nd}| jd t|ƒ | S )zReturn redirect urlÚ_stateNÚQUERY_STRINGú&r   r)   )ÚSTATE_PARAMETERÚREDIRECT_STATEÚAUTH_BACKENDr#   ÚrequestÚsessionr   Ústate_tokenÚauth_paramsÚupdateÚget_scope_argumentÚauth_extra_argumentsÚMETAÚAUTHORIZATION_URLr   )r   r#   ÚstateÚparamsÚquery_stringr   r   r   Úauth_urlX   s   
zSoundcloudAuth.auth_urlN)r   r    r!   r"   ÚSOUNDCLOUD_AUTHORIZATION_URLrB   ÚSOUNDCLOUD_ACCESS_TOKEN_URLÚACCESS_TOKEN_URLr
   r9   ÚSETTINGS_KEY_NAMEÚSETTINGS_SECRET_NAMEÚSCOPE_SEPARATORr8   r3   rF   r   r   r   r   r%   B   s    r%   r   )r"   Úurllibr   Újsonr   ÚImportErrorÚdjango.utilsÚsocial_auth.utilsr   Úsocial_auth.backendsr   r   rG   rH   r+   ÚSOUNDCLOUD_SERVERr$   r
   r%   ÚBACKENDSr   r   r   r   Ú<module>   s2    ÿ€ýþ1ÿ