
    f                         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      Z G d d      Zy)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    g/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/oauth/client.pyget_token_prefixr      s     C=    c                       e Zd Zy)
OAuthErrorN)__name__
__module____qualname__ r   r   r   r   "   s    r   r   c                   6    e Zd Z	 	 ddZd Zd Zd Zd Zd Zy)	OAuthClientNc	                     || _         || _        || _        || _        || _        || _        || _        || _        g | _        d | _	        d | _
        y 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__'   sX     !2 0(.$( ! r   c                    | j                   Qi }| j                  r|j                  | j                         t        | j                  | j
                        |d<   | j                  dz   t        |      z   }t        | j                  | j                        }t               j                         j                  ||      }|j                  dvr6t        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
        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   sB   
 %J!!$//2+=d//,J'( ++c1Ij4IIF4,,D<P<PQE"}99;@@VRW@XH##:5 8 ((>(>?O	P  "&i&>!?D "" LL  (+;D<R<R+SS !!!r   c                    | j                   -| j                         }t        | j                  | j                  |d   |d         }| j
                  }t        | j                  d      }|r|dz   t        d|i      z   }t               j                         j                  ||      }|j                  dvr*t        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.
        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`   s8   
 $ 557M!!"22#0#?&34H&I	E **F /t||=MNN#	3C^2T(UU"}99;@@VRW@XH##:5 ST&t'='=>?  !%Yx}}%= >D !! LL  '*:4;Q;Q*RR    r   c                     	 | j                   j                  dt        | j                        z     S # t        $ r+ 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   sl    
	<<''(+;D<R<R+SS   	45"4#9#9:; 		   .1 4A%c                     	 | j                          | j                          y# t        $ r2}| j                  j	                  |j
                  d          Y d }~yd }~ww xY w)Nr   FT)rH   rJ   r   r$   appendargs)r'   es     r   is_validzOAuthClient.is_valid   sS    	%%'!!#   	KKqvvay)	s    # 	A(AAc                     | j                         }|d   | j                  j                  | j                        d}|j	                  |       |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   sf    
 //1(7"ll==d>O>OP
 	l##%	&(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y)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                 <    || _         || _        || _        || _        y 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        $ r+ 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   sl    	<<'''*:4;Q;Q*RR   	34"4#9#9:; 	rO   Nc                 r   | j                         }t        | j                  | j                  |d   |d         } t	        t               j                         |j                               ||||      }|j                  dk7  r*t        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   ra   r&   r=   r>   s           r   queryzOAuth.query   s    
 002//+M:"./C"D	
 Q7;===?PeWV
 3&;<"4#9#9:; 
 }}r   )GETNN)r   r   r   __doc__r(   r_   re   r   r   r   r[   r[      s    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   r   r[   r   r   r   <module>rp      sI    - , ' 1 $ 5 ? 	 	) )D0 0r   