HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/sos/policies/auth/__pycache__/__init__.cpython-310.pyc
o

([Qh,!�@s|ddlZzddlZdZWneydZYnwddlZddlmZmZmZddlm	Z	dZ
dZe�d�Z
Gd	d
�d
�ZdS)�NTF)�datetime�	timedelta�timezone)�TIMEOUT_DEFAULTz	sos-toolsz,urn:ietf:params:oauth:grant-type:device_code�sosc@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/dist-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�rrrrr+s��z/DeviceAuthorizationClass._use_device_code_grantc
Cs�dt��}ddi}tstd��z3tj|j||td�}|��|��}|�	d�|_
|�	d�|_|�	d�|_|�	d	�|_
|�	d
�|_Wd
Stjy[}zt�d|j�d|����d
}~ww)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�timeout�	user_code�verification_uri�interval�device_code�verification_uri_completezNHTTP request failed while attempting to acquire the tokens.Error returned was � N)�DEVICE_AUTH_CLIENT_ID�REQUESTS_LOADED�	Exception�requests�postrr�raise_for_status�json�get�
_user_code�_verification_uri�	_intervalrr�	HTTPError�status_code)rrr�res�response�errrr9s8
������z-DeviceAuthorizationClass._request_device_codec
Cs�tt|jd�}ts
td��|jdurvt�|j�z:t	j
|j|td�}|j
}|dkr5t�d�|�|���|dvr?t||j��|dkrQ|��d	d
vrQt||j��Wnt	jjyn}zt�d|���WYd}~nd}~ww|jdusdSdS)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)r5�r6�error)�authorization_pending�	slow_downz)Error was found while posting a request: )�GRANT_TYPE_DEVICE_CODEr"rr#r$r	�time�sleepr,r%r&r
rr.�logger�info�_set_token_datar(�text�
exceptions�RequestExceptionr7)r�
token_data�check_auth_completionr.r1rrrrXs<�
�

�����z1DeviceAuthorizationClass.poll_for_auth_completioncCsv|�d�|_t�tj�t|�d�d�|_|�d�|_|�d�|_	|j	dkr,tj
|_dSt�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.
        �access_token�
expires_in��seconds�
refresh_token�refresh_expires_inrN)r)r	r�nowr�utcrr
�_refresh_token�_refresh_expires_in�max�_refresh_expires_at)rrCrrrr?zs
�



�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_grantrrrrr�get_access_token�sz)DeviceAuthorizationClass.get_access_tokencC�(|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

        �rG)r	r
rrrKrrLrrrrrQ�s

��z.DeviceAuthorizationClass.is_access_token_validcCrU)z�
        Check the validity of refresh_token. We are considering it invalid
        180 sec. prior to it's exact expiry time.

        :return: True/False

        rVrG)rMrPrrrKrrLrrrrrR�s

��z/DeviceAuthorizationClass.is_refresh_token_validNcCs�tstd��td|s
|jn|d�}tj|j|td�}|jdkr(|�	|�
��dS|jdkrLd|�
�dvrLt�d	|j�d
|�
�d�d��|�
�dStd|j�d
|�
�d����)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

        rrI)r3r2rIr4r5r6�invalidr7zAProblem while fetching the new tokens from refresh token grant - r!z%. 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)r#r$r"rMr%r&r
rr.r?r(r=�warningr)rrI�refresh_token_data�refresh_token_resrrrrS�s<���

��

��
��z1DeviceAuthorizationClass._use_refresh_token_grantr)
�__name__�
__module__�__qualname__�__doc__rrrrr?rTrQrRrSrrrrrs
"r)�loggingr%r#�ImportErrorr;rrr�
sos.utilitiesrr"r:�	getLoggerr=rrrrr�<module>s
�