HEX
Server: Apache/2.4.62 (Unix) OpenSSL/1.1.1k
System: Linux ns565604.ip-54-39-133.net 4.18.0-553.50.1.el8_10.x86_64 #1 SMP Tue Apr 15 08:09:22 EDT 2025 x86_64
User: greer489 (1034)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: //usr/lib/python3.6/site-packages/sos/policies/auth/__pycache__/__init__.cpython-36.pyc
3

-�_g� �@szddlZyddlZdZWnek
r0dZYnXddlZddlmZmZddlmZdZ	dZ
ejd�ZGd	d
�d
�Z
dS)�NTF)�datetime�	timedelta)�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|_||_||_|j�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.6/__init__.py�__init__!sz!DeviceAuthorizationClass.__init__cCs$|j�td|j���|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r
r
rr+sz/DeviceAuthorizationClass._use_device_code_grantcCs�dt��}ddi}tstd��ydtj|j||td�}|j�|j�}|j	d�|_
|j	d�|_|j	d�|_|j	d	�|_
|j	d
�|_Wn<tjk
r�}ztjd|j�d|����WYd
d
}~XnXd
S)zm
        Initialize new Device Authorization Grant attempt by
        requesting a new device code.

        z
client_id=zcontent-typez!application/x-www-form-urlencodedzRpython3-requests is not installed and is required for obtaining device auth token.)�data�headers�timeoutZ	user_codeZverification_uriZinterval�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�	_intervalrrZ	HTTPError�status_code)rrr�resZresponse�er
r
rr9s(
z-DeviceAuthorizationClass._request_device_codecCs�tt|jd�}tstd��x�|jdkr�tj|j�ytt	j
|j|td�}|j
}|dkrltjd�|j|j��|dkr�t||j��|dkr�|j�dd
kr�t||j��Wqt	jjk
r�}ztjd|���WYdd}~XqXqWdS)z�
        Continuously poll OIDC token endpoint until the user is successfully
        authenticated or an error occurs.

        )�
grant_type�	client_idrzRpython3-requests is not installed and is required for obtaining device auth token.N)rr��z$The SSO authentication is successful��error�authorization_pending�	slow_downz)Error was found while posting a request: )r&r')r)r*)�GRANT_TYPE_DEVICE_CODErrrrr�timeZsleepr rrr
rr!�logger�info�_set_token_datar�text�
exceptionsZRequestExceptionr()r�
token_dataZcheck_auth_completionr!r#r
r
rrXs.


z1DeviceAuthorizationClass.poll_for_auth_completioncCsl|jd�|_tj�t|jd�d�|_|jd�|_|jd�|_|jdkrRtj|_	ntj�t|jd�|_	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)�seconds�
refresh_tokenZrefresh_expires_inrN)
rrr�utcnowrr�_refresh_tokenZ_refresh_expires_in�max�_refresh_expires_at)rr2r
r
rr/zs

z(DeviceAuthorizationClass._set_token_datacCs2|j�r|jS|j�r$|j�|jS|j�|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)rr
r
r�get_access_token�sz)DeviceAuthorizationClass.get_access_tokencCs$|jo"|jo"|jtdd�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

        �)r3)rrrrr5)rr
r
rr9�sz.DeviceAuthorizationClass.is_access_token_validcCs$|jo"|jo"|jtdd�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

        r=)r3)r6r8rrr5)rr
r
rr:�sz/DeviceAuthorizationClass.is_refresh_token_validNcCs�tstd��td|s|jn|d�}tj|j|td�}|jdkrN|j	|j
��nd|jdkr�d|j
�dkr�tjd	|j�d
|j
�d�d��|j
�ntd|j�d
|j
�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

        zRpython3-requests is not installed and is required for obtaining device auth token.r4)r%r$r4)rrr&i�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)rrrr6rrr
rr!r/rr-Zwarningr)rr4Zrefresh_token_dataZrefresh_token_resr
r
rr;�s 
"
z1DeviceAuthorizationClass._use_refresh_token_grant)N)
�__name__�
__module__�__qualname__�__doc__rrrrr/r<r9r:r;r
r
r
rrs
"r)Zloggingrr�ImportErrorr,rrZ
sos.utilitiesrrr+Z	getLoggerr-rr
r
r
r�<module>s