
    f                     Z    d dl Z d dlmZ d dlmZ d dlmZ  G d de      Z G d d      Z	y)	    N)	parse_qsl)	urlencode)get_adapterc                       e Zd Zy)OAuth2ErrorN)__name__
__module____qualname__     h/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/oauth2/client.pyr   r   	   s    r   r   c                   2    e Zd ZdZ	 	 	 ddZd ZddZd Zy)	OAuth2Client	client_idNc
                     || _         || _        || _        || _        || _        || _        || _        d | _        || _        |	| _	        y N)
requestaccess_token_methodaccess_token_urlcallback_urlconsumer_keyconsumer_secretscope_delimiterstateheaders
basic_auth)
selfr   r   r   r   r   r   r   r   r   s
             r   __init__zOAuth2Client.__init__   sP     #6  0((..
$r   c                    | j                   j                  t        |            }| j                  | j                  d| j
                  d|ddi}| j                  r| j                  |d<   |j                  |       |dt        |      S )Nredirect_uriscoperesponse_typecoder   ?)	r   joinsetclient_id_parameterr   r   r   updater   )r   authorization_urlr!   extra_paramsparamss        r   get_redirect_urlzOAuth2Client.get_redirect_url'   s{    $$))#e*5$$d&7&7D--UV	
 ::"jjF7Ol#+Yv->??r   c                 0   | j                   d|d}| j                  r5t        j                  j	                  | j
                  | j                        }n5d }|j                  | j                  | j
                  d| j                  i       d }| j                  |       | j                  }| j                  dk(  r|}d }|r|r||d<   t               j                         j                  | j                  |||| j                  |      }d }|j                   dv re|j                  d   j#                  d	      d
   dk(  s|j$                  d d dk(  r|j'                         }nt)        t+        |j$                              }|rd|vrt-        d|j.                  z        |S )Nauthorization_code)r    
grant_typer#   client_secretGETcode_verifier)r+   datar   auth)      zcontent-type;r   zapplication/json   z{"access_tokenz!Error retrieving access token: %s)r   r   requestsr4   HTTPBasicAuthr   r   r(   r'   _strip_empty_keysr   r   r   get_requests_sessionr   r   status_codesplittextjsondictr   r   content)	r   r#   pkce_code_verifierr3   r4   r+   urlrespr9   s	            r   get_access_tokenzOAuth2Client.get_access_token4   s    --.

 ??==..t/@/@$BVBVWDDKK,,d.?.?#T%9%9 t$####u,FD&$6D! M!!#W((   	 z) ^,2237:>PP99Ra=D(#yy{#Idii$89~\AADLLPQQr   c                 t    |j                         D cg c]  \  }}|dk(  s| }}}|D ]  }||=  yc c}}w )zlAdded because the Dropbox OAuth2 flow doesn't
        work when scope is passed in, which is empty.
         N)items)r   r+   kvkeyskeys         r   r<   zOAuth2Client._strip_empty_keysh   sB     %lln8daR88 	Cs	 9s   44) NFr   )r   r	   r
   r'   r   r,   rG   r<   r   r   r   r   r      s)    % %.@2hr   r   )
r:   urllib.parser   django.utils.httpr   allauth.socialaccount.adapterr   	Exceptionr   r   r   r   r   <module>rT      s)     " ' 5	) 	a ar   