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mZ ddlmZ dZd	e Zd
e Zde ZG dd deZG dd de
ZG dd deZG dd deZeedZdS )aZ  
Douban OAuth support.

This adds support for Douban OAuth service. An application must
be registered first on douban.com and the settings DOUBAN_CONSUMER_KEY
and DOUBAN_CONSUMER_SECRET must be defined with they corresponding
values.

By default account id is stored in extra_data field, check OAuthBackend
class for details on how to extend it.
    )RequestN)
simplejson)dsa_urlopen)ConsumerBasedOAuthOAuthBackend
BaseOAuth2)AuthCanceledzwww.douban.comz$http://%s/service/auth/request_tokenz#http://%s/service/auth/access_tokenz http://%s/service/auth/authorizec                   @   s*   e Zd ZdZdZdgZdd Zdd ZdS )	DoubanBackend#Douban OAuth authentication backenddoubanidr   c                 C   s   |d d S )Ndb:uid$t selfdetailsresponser   r   d/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/douban.pyget_user_id*   s   zDoubanBackend.get_user_idc                 C   s   |d d ddS )Return user details from Doubanr   r    )usernameemailr   r   r   r   r   r   get_user_details-   s   
zDoubanBackend.get_user_detailsN__name__
__module____qualname____doc__name
EXTRA_DATAr   r   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 )
DoubanAuth%Douban OAuth authentication mechanismDOUBAN_CONSUMER_KEYDOUBAN_CONSUMER_SECRETc                 O   s<   d}|  ||}| |}zt|W S  ty   Y dS w )Return user data providedz,http://api.douban.com/people/%40me?&alt=jsonN)oauth_requestfetch_responser   loads
ValueError)r   access_tokenargskwargsurlrequestjsonr   r   r   	user_data<   s   
zDoubanAuth.user_datac                    (   d| j v r	t| tt| j|i |S z2Completes login process, must return user instancedenied)datar   superr$   auth_completer   r.   r/   	__class__r   r   r9   G      
zDoubanAuth.auth_complete)r   r   r    r!   DOUBAN_AUTHORIZATION_URLAUTHORIZATION_URLDOUBAN_REQUEST_TOKEN_URLREQUEST_TOKEN_URLDOUBAN_ACCESS_TOKEN_URLACCESS_TOKEN_URLr	   AUTH_BACKENDSETTINGS_KEY_NAMESETTINGS_SECRET_NAMEr3   r9   __classcell__r   r   r;   r   r$   3   s    r$   c                   @   s,   e Zd ZdZdZg dZdd Zdd ZdS )	DoubanBackend2r
   douban2)r   )uidr   )refresh_tokenrK   c                 C   s   |d S )Nr   r   r   r   r   r   r   W   s   zDoubanBackend2.get_user_idc                 C   s   | dd| ddddS )r   rJ   r   r"   )r   fullnamer   )getr   r   r   r   r   Z   s   

zDoubanBackend2.get_user_detailsNr   r   r   r   r   rH   O   s    rH   c                       sH   e Zd ZdZde Zde ZeZdZ	dZ
dZdd Z fd	d
Z  ZS )DoubanAuth2r%   zhttps://%s/service/auth2/authzhttps://%s/service/auth2/tokenDOUBAN2_CONSUMER_KEYDOUBAN2_CONSUMER_SECRETFc              
   O   sL   d}dd| i}t ||d}z
tt| W S  tttfy%   Y dS w )r(   z"https://api.douban.com/v2/user/~meAuthorizationz	Bearer %s)headersN)r   r   r+   r   readr,   KeyErrorIOError)r   r-   r.   r/   r0   rR   r1   r   r   r   r3   j   s   zDoubanAuth2.user_datac                    r4   r5   )r7   r   r8   rN   r9   r:   r;   r   r   r9   t   r=   zDoubanAuth2.auth_complete)r   r   r    r!   DOUBAN_SERVERr?   rC   rH   rD   rE   rF   REDIRECT_STATEr3   r9   rG   r   r   r;   r   rN   a   s    
rN   )r   rI   )r!   urllib2r   r2   r   ImportErrordjango.utilssocial_auth.utilsr   social_auth.backendsr   r   r   social_auth.exceptionsr   rV   r@   rB   r>   r	   r$   rH   rN   BACKENDSr   r   r   r   <module>   s@    
