a
    Qx_	                     @   s   d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ G dd	 d	Zd
d ZG dd deZe	eZeeZdS )aT  
OAuth2 Adapter for Battle.net

Resources:

* Battle.net OAuth2 documentation:
    https://dev.battle.net/docs/read/oauth
* Battle.net API documentation:
    https://dev.battle.net/io-docs
* Original announcement:
    https://us.battle.net/en/forum/topic/13979297799
* The Battle.net API forum:
    https://us.battle.net/en/forum/15051532/
    N)settings)OAuth2Error)OAuth2AdapterOAuth2CallbackViewOAuth2LoginView   )BattleNetProviderc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	RegionZapacZcneuZkrZseaZtwusN)
__name__
__module____qualname__APACCNEUKRSEATWUS r   r   g/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/socialaccount/providers/battlenet/views.pyr	      s   r	   c                 C   s   z|   }W n  ty,   td| j Y n0 | jdks@d|v r|ddpV|dd}|ddpn|dd}td||f d	|vrtd
| |S )Nz$Invalid JSON from Battle.net API: %ri  error typeZerror_descriptionZdetailzBattle.net error: %s (%s)idz$Invalid data from Battle.net API: %r)json
ValueErrorr   textZstatus_codeget)responsedatar   descr   r   r   _check_errors'   s    
r#   c                       s   e Zd ZdZejZejej	ej
ejejejejfZedd Zedd Zedd Zedd	 Zed
d Zdd Z fddZ  ZS )BattleNetOAuth2Adapterz
    OAuth2 adapter for Battle.net
    https://dev.battle.net/docs/read/oauth

    Region is set to us by default, but can be overridden with the
    `region` GET parameter when performing a login.
    Can be any of eu, us, kr, sea, tw or cn
    c                 C   sb   | j jdd }|tjkr$tjS || jv r2|S tt	di di dd}|| jv r\|S tjS )Nregionr   ZSOCIALACCOUNT_PROVIDERSZ	battlenetZREGIONr   )
requestGETr   lowerr	   r   r   valid_regionsgetattrr   selfr%   r   r   r   battlenet_region[   s    


z'BattleNetOAuth2Adapter.battlenet_regionc                 C   s   | j }|tjkrdS d| S )Nzhttps://www.battlenet.com.cnzhttps://%s.battle.net)r-   r	   r   r+   r   r   r   battlenet_base_urlq   s    
z)BattleNetOAuth2Adapter.battlenet_base_urlc                 C   s
   | j d S )Nz/oauth/tokenr.   r,   r   r   r   access_token_urlx   s    z'BattleNetOAuth2Adapter.access_token_urlc                 C   s
   | j d S )Nz/oauth/authorizer/   r0   r   r   r   authorize_url|   s    z$BattleNetOAuth2Adapter.authorize_urlc                 C   s
   | j d S )Nz/oauth/userinfor/   r0   r   r   r   profile_url   s    z"BattleNetOAuth2Adapter.profile_urlc                 K   s<   d|j i}tj| j|d}t|}| j|d< |  ||S )NZaccess_token)paramsr%   )tokenrequestsr   r3   r#   r-   get_providerZsociallogin_from_response)r,   r&   appr5   kwargsr4   r    r!   r   r   r   complete_login   s
    

z%BattleNetOAuth2Adapter.complete_loginc                    sB   t t| ||}|jdd }|r>|| jv r>|d| 7 }|S )Nr%   r   z
?region=%s)superr$   get_callback_urlr'   r   r(   r)   )r,   r&   r8   rr%   	__class__r   r   r<      s
    z'BattleNetOAuth2Adapter.get_callback_url)r   r   r   __doc__r   r   Zprovider_idr	   r   r   r   r   r   r   r   r)   propertyr-   r.   r1   r2   r3   r:   r<   __classcell__r   r   r>   r   r$   F   s,   	






r$   )r@   r6   Zdjango.confr   Z-allauth.socialaccount.providers.oauth2.clientr   Z,allauth.socialaccount.providers.oauth2.viewsr   r   r   Zproviderr   r	   r#   r$   Zadapter_viewZoauth2_loginZoauth2_callbackr   r   r   r   <module>   s   
Q
