o
    b
                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ ddlmZ dd	lmZ G d
d deZG dd deZdd ZdS )    N)JsonResponse)OAuth2ErrorResourceProtector)MissingAuthorizationErrorHttpRequest)BearerTokenValidator   )token_authenticated   )parse_request_headersc                   @   s    e Zd ZdddZd	ddZdS )
r   NANDc                 C   sT   t |}| }t|j||j|}t|s| }| |||}tj	| j
|d |S )zA method to acquire current valid token with the given scope.

        :param request: Django HTTP request instance
        :param scope: string or list of scope values
        :param operator: value of "AND" or "OR"
        :return: token object
        )Zsendertoken)r   Zget_raw_urir   methodbodycallableupperZvalidate_requestr	   send	__class__)selfrequestscopeoperatorheadersurlreqr    r   t/var/www/secure340b-portal/env/lib/python3.10/site-packages/authlib/integrations/django_oauth2/resource_protector.pyacquire_token   s   zResourceProtector.acquire_tokenFc                    s    fdd}|S )Nc                    s"   t   fdd}|S )Nc              
      s   z | }|| _W nA ty8 } z r*d | _ | g|R i |W  Y d }~S t|W  Y d }~S d }~w tyM } z
t|W  Y d }~S d }~ww  | g|R i |S N)r   Zoauth_tokenr   return_error_responser   )r   argskwargsr   error)fr   optionalr   r   r   r   	decorated&   s   
"z>ResourceProtector.__call__.<locals>.wrapper.<locals>.decorated)	functoolswraps)r#   r%   r   r$   r   r   )r#   r   wrapper%   s   z+ResourceProtector.__call__.<locals>.wrapperr   )r   r   r   r$   r)   r   r(   r   __call__$   s   zResourceProtector.__call__)Nr   )Nr   F)__name__
__module____qualname__r   r*   r   r   r   r   r      s    
r   c                       s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )r   Nc                    s   || _ tt| | d S r   )token_modelsuperr   __init__)r   r.   realmr   r   r   r0   8   s   zBearerTokenValidator.__init__c                 C   s,   z	| j jj|dW S  | j jy   Y d S w )N)Zaccess_token)r.   objectsgetZDoesNotExist)r   Ztoken_stringr   r   r   authenticate_token<   s
   z'BearerTokenValidator.authenticate_tokenc                 C   s   dS )NFr   )r   r   r   r   r   request_invalidB   s   z$BearerTokenValidator.request_invalidc                 C   s   |j S r   )Zrevoked)r   r   r   r   r   token_revokedE   s   z"BearerTokenValidator.token_revokedr   )r+   r,   r-   r0   r5   r6   r7   __classcell__r   r   r2   r   r   7   s
    r   c                 C   s<   t |  }t|| jd}|  }|D ]\}}|||< q|S )N)status)dictget_bodyr   status_codeZget_headers)r"   r   respr   kvr   r   r   r   I   s   
r   )r&   Zdjango.httpr   Zauthlib.oauth2r   r   Z_ResourceProtectorZauthlib.oauth2.rfc6749r   r   Zauthlib.oauth2.rfc6750r   Z_BearerTokenValidatorZsignalsr	   Zdjango_helpersr   r   r   r   r   r   <module>   s    %