
    )Jf                         d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z
 ddlmZ ddlmZ ddlmZmZ d	 Z G d
 de          Z G d de          Z G d de          ZdS )z
Parts derived from socialregistration and authorized by: alen, pinda
Inspired by:
    http://github.com/leah/python-oauth/blob/master/oauth/example/client.py
    http://github.com/facebook/tornado/blob/master/tornado/auth.py
    )	parse_qslurlparse)HttpResponseRedirect)	urlencode)gettext)OAuth1)get_adapter)build_absolute_uriget_request_paramc                 *    t          |           j        S )a  
    Returns a prefix for the token to store in the session so we can hold
    more than one single oauth provider's access key in the session.

    Example:

        The request token url ``http://twitter.com/oauth/request_token``
        returns ``twitter.com``

    )r   netloc)urls    o/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/socialaccount/providers/oauth/client.pyget_token_prefixr      s     C==    c                       e Zd ZdS )
OAuthErrorN)__name__
__module____qualname__ r   r   r   r   "   s        Dr   r   c                   8    e Zd Z	 	 ddZd Zd Zd Zd Zd ZdS )	OAuthClientNc	                     || _         || _        || _        || _        || _        || _        || _        || _        g | _        d | _	        d | _
        d S N)requestrequest_token_urlaccess_token_urlconsumer_keyconsumer_secret
parameterscallback_urlprovidererrorsrequest_tokenaccess_token)	selfr   r   r    r   r   r"   r!   r#   s	            r   __init__zOAuthClient.__init__'   s^     !2 0(.$( ! r   c                    | j         :i }| j        r|                    | j                   t          | j        | j                  |d<   | j        dz   t          |          z   }t          | j	        | j
                  }t                                                                          ||          }|j        dvr8t          t!          d          t#          | j                  |j        fz            t'          t)          |j                            | _         | j         | j        j        dt#          | j                  z  <   | j         S )	z
        Obtain a temporary request token to authorize an access token and to
        sign the request to obtain the access token
        Noauth_callback?)client_secretr   auth      zKInvalid response while obtaining request token from "%s". Response was: %s.oauth_%s_request_token)r%   r!   updater
   r   r"   r   r   r   r   r    r	   get_requests_sessionpoststatus_coder   _r   textdictr   session)r'   
get_paramsrt_urloauthresponses        r   _get_request_tokenzOAuthClient._get_request_tokenC   sO   
 %J 3!!$/222+=d/, ,J'( +c1Ij4I4IIF4,D<PQQQE"}}99;;@@VRW@XXH#:55 8  ((>??O	P   "&i&>&>!?!?D " L (+;D<R+S+SS !!r   c                    | j         0|                                 }t          | j        | j        |d         |d                   }| j        }t          | j        d          }|r|dz   t          d|i          z   }t                      
                                                    ||          }|j        dvr1t          t          d	          t          | j                  z            t#          t%          |j                            | _         | j         | j        j        d
t          | j                  z  <   | j         S )zb
        Obtain the access token to access private resources at the API
        endpoint.
        Noauth_tokenoauth_token_secretr,   resource_owner_keyresource_owner_secretoauth_verifierr+   r-   r/   z8Invalid response while obtaining access token from "%s".oauth_%s_access_token)r&   _get_rt_from_sessionr   r   r    r   r   r   r   r	   r4   r5   r6   r   r7   r   r   r9   r   r8   r:   )r'   r%   r=   at_urlrF   r>   s         r   get_access_tokenzOAuthClient.get_access_token`   sL   
 $ 5577M!"2#0#?&34H&I	  E *F /t|=MNNN V#	3C^2T(U(UU"}}99;;@@VRW@XXH#:55 STT&t'=>>?   !%Yx}%=%= > >D ! L '*:4;Q*R*RR   r   c                     	 | j         j        dt          | j                  z           S # t          $ r2 t          t          d          t          | j                  z            w xY w)zc
        Returns the request token cached in the session by
        ``_get_request_token``
        r2   z No request token saved for "%s".r   r:   r   r   KeyErrorr   r7   r'   s    r   rH   z OAuthClient._get_rt_from_session   s{    
	<'(+;D<R+S+SS   	 	 	455"4#9::;  		   &) <A%c                     	 |                                   |                                  n=# t          $ r0}| j                            |j        d                    Y d }~dS d }~ww xY wdS )Nr   FT)rH   rJ   r   r$   appendargs)r'   es     r   is_validzOAuthClient.is_valid   s}    	%%'''!!#### 	 	 	Kqvay)))55555	 ts   (+ 
A%%A  A%c                     |                                  }|d         | j                            | j                  d}|                    |           |dz   t          |          z   }t          |          S )z
        Returns a ``HttpResponseRedirect`` object to redirect the user
        to the URL the OAuth provider handles authorization.
        rA   )rA   r*   r+   )r?   r   r
   r"   r3   r   r   )r'   authorization_urlextra_paramsr%   paramsr   s         r   get_redirectzOAuthClient.get_redirect   sx    
 //11(7"l==d>OPP
 
 	l####%	&(9(99#C(((r   )NN)	r   r   r   r(   r?   rJ   rH   rT   rY   r   r   r   r   r   &   s|         ! ! ! !8" " ":! ! !B    ) ) ) ) )r   r   c                   &    e Zd ZdZd Zd ZddZdS )OAuthz
    Base class to perform oauth signed requests from access keys saved
    in a user's session. See the ``OAuthTwitter`` class below for an
    example.
    c                 >    || _         || _        || _        || _        d S r   )r   r   
secret_keyr   )r'   r   r   r]   r   s        r   r(   zOAuth.__init__   s&    ($!2r   c                     	 | j         j        dt          | j                  z           S # t          $ r2 t          t          d          t          | j                  z            w xY w)zT
        Get the saved access token for private resources from the session.
        rG   zNo access token saved for "%s".rL   rN   s    r   _get_at_from_sessionzOAuth._get_at_from_session   s{    	<''*:4;Q*R*RR   	 	 	344"4#9::;  	rO   GETNc                    |                                  }t          | j        | j        |d         |d                   } t	          t                                                      |                                          ||||          }|j        dk    r1t          t          d          t          | j                  z            |j        S )zn
        Request a API endpoint at ``url`` with ``params`` being either the
        POST or GET data.
        rA   rB   rC   )r.   headersrX   r0   z'No access to private resources at "%s".)r_   r   r   r]   getattrr	   r4   lowerr6   r   r7   r   r   r8   )r'   r   methodrX   rb   r&   r=   r>   s           r   queryzOAuth.query   s    
 0022/+M:"./C"D	
 
 
 Q7;====??PPeWV
 
 
 3&&;<<"4#9::;  
 }r   )r`   NN)r   r   r   __doc__r(   r_   rf   r   r   r   r[   r[      sP         3 3 3       r   r[   N)rg   urllib.parser   r   django.httpr   django.utils.httpr   django.utils.translationr   r7   requests_oauthlibr   allauth.socialaccount.adapterr	   allauth.utilsr
   r   r   	Exceptionr   objectr   r[   r   r   r   <module>rq      s;    - , , , , , , , , , , , , , ' ' ' ' ' ' 1 1 1 1 1 1 $ $ $ $ $ $ 5 5 5 5 5 5 ? ? ? ? ? ? ? ?     	 	 	 	 	 	 	 	) ) ) ) )& ) ) )D0 0 0 0 0F 0 0 0 0 0r   