o
    Df{
                     @   s*   d dl mZ d dlmZ G dd dZdS )    )	to_native)OAuth2Errorc                   @   s`   e Zd ZdZdZi ZdZeZ		dddZ	e
dd Zejdd Zd	d
 Zdd Zdd ZdS )AssertionClientzConstructs a new Assertion Framework for OAuth 2.0 Authorization Grants
    per RFC7521_.

    .. _RFC7521: https://tools.ietf.org/html/rfc7521
    Nheaderc
                 K   sn   || _ |d u r	|}|| _|d u r| j}|| _|| _|| _|| _|| _|	| _| j	d ur2| 	d || | _
|
| _d S N)sessiontoken_endpointDEFAULT_GRANT_TYPE
grant_typeissuersubjectaudienceclaimsscopetoken_auth_class
token_auth_kwargs)selfr   r   r   r   r   r
   r   token_placementr   kwargs r   V/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/oauth2/rfc7521/client.py__init__   s   

zAssertionClient.__init__c                 C   s   | j jS r   )r   token)r   r   r   r   r   *   s   zAssertionClient.tokenc                 C   s   | j | d S r   )r   	set_token)r   r   r   r   r   r   .   s   c                 C   sX   | j | j }|d| j| j| j| jd| j}t|| jd}| jr'| j|d< | 	|S )zUsing Assertions as Authorization Grants to refresh token as
        described in `Section 4.1`_.

        .. _`Section 4.1`: https://tools.ietf.org/html/rfc7521#section-4.1
        )r   r   r   r   )	assertionr
   r   Nr   )
ASSERTION_METHODSr
   r   r   r   r   r   r   r   _refresh_token)r   generate_assertionr   datar   r   r   refresh_token2   s   

zAssertionClient.refresh_tokenc                 C   sF   |j dkr	|  | }d|v r| j|d |dd|| _| jS )Ni  errorerror_description)r!   description)status_coderaise_for_statusjsonoauth_error_classgetr   )r   respr   r   r   r   parse_response_tokenI   s   
z$AssertionClient.parse_response_tokenc                 C   s    | j jd| j|dd}| |S )NPOSTT)r   withhold_token)r   requestr   r*   )r   r   r)   r   r   r   r   W   s   

zAssertionClient._refresh_token)NNNr   N)__name__
__module____qualname____doc__r	   r   r   r   r'   r   propertyr   setterr    r*   r   r   r   r   r   r      s     


r   N)authlib.common.encodingr   authlib.oauth2.baser   r   r   r   r   r   <module>   s    