o
    gfb                     @   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 ddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZmZ dZdgZG dd deZG dd deZdd Zdd ZdeiZdS )z
Mail.ru OAuth2 support

Take a look to http://api.mail.ru/docs/guides/oauth/

You need to register OAuth site here:
http://api.mail.ru/sites/my/add

Then update your settings values using registration information

    N)
simplejson)settings)	urlencodeunquote)Request	HTTPError)md5)OAuthBackend
BaseOAuth2)AuthCanceled)settinglogdsa_urlopenz#http://www.appsmail.ru/platform/api c                   @   s,   e Zd ZdZdZddgZdd Zdd Zd	S )
MailruBackendzMail.ru authentication backendmailru-oauth2)refresh_tokenr   )
expires_inexpiresc                 C   s   |d S )z)Return user unique id provided by Mail.ruuid )selfdetailsresponser   r   d/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/mailru.pyget_user_id)   s   zMailruBackend.get_user_idc                 C   sZ   t |d t |d t |d t |d d}|d r+|d r+d|d |d f |d< |S )z(Return user details from Mail.ru requestnickemail
first_name	last_name)usernamer   r   r   z%s %sfullname)r   )r   r   valuesr   r   r   get_user_details-   s   




zMailruBackend.get_user_detailsN)__name__
__module____qualname____doc__name
EXTRA_DATAr   r#   r   r   r   r   r   #   s    r   c                       sD   e Zd ZdZeZdZdZdZdZ	dd Z
 fdd	Zd
d Z  ZS )MailruOAuth2zMail.ru OAuth2 supportz'https://connect.mail.ru/oauth/authorizez#https://connect.mail.ru/oauth/tokenMAILRU_OAUTH2_CLIENT_KEYMAILRU_OAUTH2_CLIENT_SECRETc                 C   s
   t dg S )NMAILRU_OAUTH2_EXTRA_SCOPE)r   )r   r   r   r   	get_scopeD   s   
zMailruOAuth2.get_scopec                    s0   zt t| j|i |W S  ty   t| w )N)superr*   auth_completer   r   )r   argskwargs	__class__r   r   r0   G   s
   zMailruOAuth2.auth_completec                 O   s   d|d}t |d S )z&Return user data from Mail.ru REST APIzusers.getInfo)methodsession_keyr   )
mailru_api)r   access_tokenr1   r2   datar   r   r   	user_dataM   s   
zMailruOAuth2.user_data)r$   r%   r&   r'   r   AUTH_BACKENDAUTHORIZATION_URLACCESS_TOKEN_URLSETTINGS_KEY_NAMESETTINGS_SECRET_NAMEr.   r0   r:   __classcell__r   r   r3   r   r*   <   s    r*   c                    s2   t t fdd D }td|tj  S )z& Calculates signature of request data c                 3   s     | ]}|d   |  V  qdS )=Nr   ).0itemr9   r   r   	<genexpr>U   s    zmailru_sig.<locals>.<genexpr>r   )sortedlistr   joinr   r,   	hexdigest)r9   
param_listr   rD   r   
mailru_sigS   s   
rK   c                 C   sz   |  tjdd t| | d< t| }tt|}z
tt	|
 W S  tttttfy<   tdddt|dd Y d	S w )
zS Calls Mail.ru REST API method
        http://api.mail.ru/docs/guides/restapi/
    1)app_idsecuresigerrorz!Could not load data from Mail.ru.TrD   )exc_infoextraN)updater   r+   rK   r   r   MAILRU_API_URLr   loadsr   read	TypeErrorKeyErrorIOError
ValueError
IndexErrorr   dict)r9   paramsrequestr   r   r   r7   Z   s   

r7   r   )r'   jsonr   ImportErrordjango.utilsdjango.confr   urllibr   r   urllib2r   r   hashlibr   social_auth.backendsr	   r
   social_auth.exceptionsr   social_auth.utilsr   r   r   rT   MAILRU_OAUTH2_SCOPEr   r*   rK   r7   BACKENDSr   r   r   r   <module>   s4    