HEX
Server: Apache
System: Linux nc-ph-4101.simplemoneygoals.com 5.14.0-503.21.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Jan 12 09:45:05 EST 2025 x86_64
User: dailygoldindex (1004)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/sos/policies/auth/__pycache__/__init__.cpython-39.pyc
a

\��h,!�@s|ddlZzddlZdZWney.dZYn0ddlZddlmZmZmZddlm	Z	dZ
dZe�d�Z
Gd	d
�d
�ZdS)�NTF)�datetime�	timedelta�timezone)�TIMEOUT_DEFAULTz	sos-toolsz,urn:ietf:params:oauth:grant-type:device_codeZsosc@sZeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zddd�ZdS)�DeviceAuthorizationClassz$
    Device Authorization Class
    cCs*d|_d|_d|_||_||_|��dS)N)�
_access_token�_access_expires_at�&_DeviceAuthorizationClass__device_code�client_identifier_url�token_endpoint�_use_device_code_grant)�selfr
r�r�>/usr/lib/python3.9/site-packages/sos/policies/auth/__init__.py�__init__!sz!DeviceAuthorizationClass.__init__cCs$|��td|j���|��dS)zv
        Start the device auth flow. In the future we will
        store the tokens in an in-memory keyring.

        z<Please visit the following URL to authenticate this device: N)�_request_device_code�print�_verification_uri_complete�poll_for_auth_completion�r
rrrr+s��z/DeviceAuthorizationClass._use_device_code_grantc
Cs�dt��}ddi}tstd��zdtj|j||td�}|��|��}|�	d�|_
|�	d�|_|�	d�|_|�	d	�|_
|�	d
�|_Wn>tjy�}z$t�d|j�d|����WYd
}~n
d
}~00d
S)zm
        Initialize new Device Authorization Grant attempt by
        requesting a new device code.

        z
client_id=zcontent-typez!application/x-www-form-urlencoded�Rpython3-requests is not installed and is required for obtaining device auth token.)�data�headers�timeoutZ	user_codeZverification_uri�interval�device_codeZverification_uri_completezNHTTP request failed while attempting to acquire the tokens.Error returned was � N)�DEVICE_AUTH_CLIENT_ID�REQUESTS_LOADED�	Exception�requests�postr
rZraise_for_status�json�getZ
_user_codeZ_verification_uri�	_intervalr	rZ	HTTPError�status_code)r
rr�resZresponse�errrr9s4
��
��z-DeviceAuthorizationClass._request_device_codec
Cs�tt|jd�}tstd��|jdur�t�|j�ztt	j
|j|td�}|j
}|dkrjt�d�|�|���|dvr~t||j��|dkr�|��d	d
vr�t||j��Wqt	jjy�}zt�d|���WYd}~qd}~00qdS)z�
        Continuously poll OIDC token endpoint until the user is successfully
        authenticated or an error occurs.

        )�
grant_type�	client_idrrN�rr��z$The SSO authentication is successful)r+�r,�error)Zauthorization_pendingZ	slow_downz)Error was found while posting a request: )�GRANT_TYPE_DEVICE_CODErr	rrr�time�sleepr$r r!rrr%�logger�info�_set_token_datar"�text�
exceptionsZRequestExceptionr-)r
�
token_dataZcheck_auth_completionr%r'rrrrXs6�
�

��z1DeviceAuthorizationClass.poll_for_auth_completioncCst|�d�|_t�tj�t|�d�d�|_|�d�|_|�d�|_	|j	dkrVtj
|_nt�tj�t|j	d�|_dS)a@
        Set the class attributes as per the input token_data received.
        In the future we will persist the token data in a local,
        in-memory keyring, to avoid visting the browser frequently.
        :param token_data: Token data containing access_token, refresh_token
        and their expiry etc.
        Zaccess_tokenZ
expires_in�Zseconds�
refresh_tokenZrefresh_expires_inrN)r#rr�nowr�utcrr�_refresh_tokenZ_refresh_expires_in�max�_refresh_expires_at)r
r6rrrr3zs
�



�z(DeviceAuthorizationClass._set_token_datacCs2|��r|jS|��r$|��|jS|��|jS)zt
        Get the valid access_token at any given time.
        :return: Access_token
        :rtype: string
        )�is_access_token_validr�is_refresh_token_valid�_use_refresh_token_grantrrrrr�get_access_token�sz)DeviceAuthorizationClass.get_access_tokencCs(|jo&|jo&|jtdd�t�tj�kS)z�
        Check the validity of access_token. We are considering it invalid 180
        sec. prior to it's exact expiry time.
        :return: True/False

        �r7)rrrrr9rr:rrrrr>�s

��z.DeviceAuthorizationClass.is_access_token_validcCs(|jo&|jo&|jtdd�t�tj�kS)z�
        Check the validity of refresh_token. We are considering it invalid
        180 sec. prior to it's exact expiry time.

        :return: True/False

        rBr7)r;r=rrr9rr:rrrrr?�s

��z/DeviceAuthorizationClass.is_refresh_token_validNcCs�tstd��td|s|jn|d�}tj|j|td�}|jdkrN|�	|�
��nd|jdkr�d|�
�dvr�t�d	|j�d
|�
�d�d��|�
�ntd|j�d
|�
�d����dS)z�
        Fetch the new access_token and refresh_token using the existing
        refresh_token and persist it.
        :param refresh_token: optional param for refresh_token

        rr8)r)r(r8r*r+r,Zinvalidr-zAProblem while fetching the new tokens from refresh token grant - rz%. New Device code will be requested !zcSomething went wrong while using the Refresh token grant for fetching tokens: Returned status code z and error N)rrrr;r r!rrr%r3r"r1Zwarningr)r
r8Zrefresh_token_dataZrefresh_token_resrrrr@�s<���

��
�

�
��z1DeviceAuthorizationClass._use_refresh_token_grant)N)
�__name__�
__module__�__qualname__�__doc__rrrrr3rAr>r?r@rrrrrs
"r)Zloggingr r�ImportErrorr/rrrZ
sos.utilitiesrrr.Z	getLoggerr1rrrrr�<module>s