o
    ˷e                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ zddlmZ W n ey+   dZY nw G dd dej	Z	d	d
 Z
G dd dejejejZdS )a  Google App Engine standard environment support.

This module provides authentication and signing for applications running on App
Engine in the standard environment using the `App Identity API`_.


.. _App Identity API:
    https://cloud.google.com/appengine/docs/python/appidentity/
    N)_helpers)credentials)crypt)app_identityc                   @   s0   e Zd ZdZedd Zeej	dd Z
dS )SignerzSigns messages using the App Engine App Identity service.

    This can be used in place of :class:`google.auth.crypt.Signer` when
    running in the App Engine standard environment.
    c                 C   s   dS )zOptional[str]: The key ID used to identify this private key.

        .. warning::
           This is always ``None``. The key ID used by App Engine can not
           be reliably determined ahead of time.
        N selfr   r   M/var/www/ideatree/venv/lib/python3.10/site-packages/google/auth/app_engine.pykey_id.   s   zSigner.key_idc                 C   s   t |}t|\}}|S N)r   to_bytesr   	sign_blob)r	   message_	signaturer   r   r
   sign8   s   
zSigner.signN)__name__
__module____qualname____doc__propertyr   r   copy_docstringr   r   r   r   r   r   r
   r   '   s    

	r   c                   C   s   t du rtdt  S )zGets the project ID for the current App Engine application.

    Returns:
        str: The project ID

    Raises:
        EnvironmentError: If the App Engine APIs are unavailable.
    N&The App Engine APIs are not available.)r   EnvironmentErrorget_application_idr   r   r   r
   get_project_id?   s   r   c                       s   e Zd ZdZ				d fdd	Zeejdd Z	e
dd Ze
d	d
 ZeejdddZeejdd Zeejdd Ze
eejdd Ze
eejdd Z  ZS )CredentialszApp Engine standard environment credentials.

    These credentials use the App Engine App Identity API to obtain access
    tokens.
    Nc                    sB   t du rtdtt|   || _|| _|| _t | _	|| _
dS )a  
        Args:
            scopes (Sequence[str]): Scopes to request from the App Identity
                API.
            default_scopes (Sequence[str]): Default scopes passed by a
                Google client library. Use 'scopes' for user-defined scopes.
            service_account_id (str): The service account ID passed into
                :func:`google.appengine.api.app_identity.get_access_token`.
                If not specified, the default application service account
                ID will be used.
            quota_project_id (Optional[str]): The project ID used for quota
                and billing.

        Raises:
            EnvironmentError: If the App Engine APIs are unavailable.
        Nr   )r   r   superr   __init___scopes_default_scopes_service_account_idr   _signer_quota_project_id)r	   scopesdefault_scopesservice_account_idquota_project_id	__class__r   r
   r   Y   s   
zCredentials.__init__c                 C   sF   | j d ur| j n| j}t|| j\}}tj|}||| _| _d S r   )	r    r!   r   get_access_tokenr"   datetimeutcfromtimestamptokenexpiry)r	   requestr%   r.   ttlr/   r   r   r
   refresh}   s   zCredentials.refreshc                 C   s   | j du r
t | _ | j S )zThe service account email.N)r"   r   get_service_account_namer   r   r   r
   service_account_email   s   

z!Credentials.service_account_emailc                 C   s   | j  o| j S )zChecks if the credentials requires scopes.

        Returns:
            bool: True if there are no scopes set otherwise False.
        )r    r!   r   r   r   r
   requires_scopes   s   zCredentials.requires_scopesc                 C   s   | j ||| j| jdS )N)r%   r&   r'   r(   )r*   r"   r(   )r	   r%   r&   r   r   r
   with_scopes   s   zCredentials.with_scopesc                 C   s   | j | j| j|dS )N)r%   r'   r(   )r*   r    r"   )r	   r(   r   r   r
   with_quota_project   s
   zCredentials.with_quota_projectc                 C   s   | j |S r   )r#   r   )r	   r   r   r   r
   
sign_bytes   s   zCredentials.sign_bytesc                 C      | j S r   )r4   r   r   r   r
   signer_email      zCredentials.signer_emailc                 C   r9   r   )r#   r   r   r   r
   signer   r;   zCredentials.signer)NNNNr   )r   r   r   r   r   r   r   r   r   r2   r   r4   r5   Scopedr6   CredentialsWithQuotaProjectr7   Signingr8   r:   r<   __classcell__r   r   r)   r
   r   P   s2    
$









r   )r   r,   google.authr   r   r   google.appengine.apir   ImportErrorr   r   r=   r?   r>   r   r   r   r   r
   <module>   s   

