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e
 Zde
 Zd	e
 Zd
e
 Zde
 ZG dd deZG dd deZdeiZdS )a  
Bitbucket OAuth support.

This adds support for Bitbucket OAuth service. An application must
be registered first on Bitbucket and the settings BITBUCKET_CONSUMER_KEY
and BITBUCKET_CONSUMER_SECRET must be defined with the corresponding
values.

By default username, email, token expiration time, first name and last name are
stored in extra_data field, check OAuthBackend class for details on how to
extend it.
    N)
simplejson)ConsumerBasedOAuthOAuthBackend)dsa_urlopenzbitbucket.org/api/1.0zhttps://%s/oauth/request_tokenzhttps://%s/oauth/access_tokenzhttps://%s/oauth/authenticatezhttps://%s/emails/zhttps://%s/users/c                       s@   e Zd ZdZdZg dZdd Zdd Ze fdd	Z	  Z
S )
BitbucketBackendz&Bitbucket OAuth authentication backend	bitbucket))usernamer   )expiresr	   )emailr
   )
first_namer   )	last_namer   c                 C   s>   | d| dd| d| df| d| ddS )z*Return user details from Bitbucket accountr   r
    r   r   )r   r
   fullnamer   r   )getjoin)selfresponse r   g/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/bitbucket.pyget_user_details-   s   z!BitbucketBackend.get_user_detailsc                 C   s   |d S )zSReturn the user id, Bitbucket only provides username as a unique
        identifierr   r   )r   detailsr   r   r   r   get_user_id6   s   zBitbucketBackend.get_user_idc                    s<   t t| |}|rd|v rtdd |d dD }|S )zReturn the tokens needed to authenticate the access to any API the
        service might provide. Bitbucket uses a pair of OAuthToken consisting
        on a oauth_token and oauth_token_secret.

        instance must be a UserSocialAuth instance.
        access_tokenc                 s   s    | ]}| d V  qdS )=N)split).0tokr   r   r   	<genexpr>E   s    z*BitbucketBackend.tokens.<locals>.<genexpr>&)superr   tokensdictr   )clsinstancetoken	__class__r   r   r    ;   s   zBitbucketBackend.tokens)__name__
__module____qualname____doc__name
EXTRA_DATAr   r   classmethodr    __classcell__r   r   r%   r   r   "   s    	r   c                   @   s0   e Zd ZdZeZeZeZ	e
ZdZdZdd ZdS )BitbucketAuthz(Bitbucket OAuth authentication mechanismBITBUCKET_CONSUMER_KEYBITBUCKET_CONSUMER_SECRETc           	      C   s   t }| ||}| |}z.t|}t|D ]}|d r'|d }|d r' nqtt| }t|d }||d< |W S  t	yE   Y dS w )zReturn user data providedactiver
   primaryuserN)
BITBUCKET_EMAIL_DATA_URLoauth_requestfetch_responser   loadsreversedr   BITBUCKET_USER_DATA_URLload
ValueError)	r   r   urlrequestr   email_addressesemail_addressr
   user_detailsr   r   r   	user_dataS   s$   

zBitbucketAuth.user_dataN)r'   r(   r)   r*   BITBUCKET_AUTHORIZATION_URLAUTHORIZATION_URLBITBUCKET_REQUEST_TOKEN_URLREQUEST_TOKEN_URLBITBUCKET_ACCESS_TOKEN_URLACCESS_TOKEN_URLr   AUTH_BACKENDSETTINGS_KEY_NAMESETTINGS_SECRET_NAMErB   r   r   r   r   r/   J   s    r/   r   )r*   jsonr   ImportErrordjango.utilssocial_auth.backendsr   r   social_auth.utilsr   BITBUCKET_SERVERrE   rG   rC   r5   r:   r   r/   BACKENDSr   r   r   r   <module>   s6    (&