File: //lib/python3.9/site-packages/sos/policies/auth/__pycache__/__init__.cpython-39.pyc
a
\��h,! � @ s| d dl Z zd dlZdZW n ey. dZY n0 d dlZd dlmZmZmZ d dlm Z dZ
dZe �d�Z
G d d
� d
�ZdS )� NTF)�datetime� timedelta�timezone)�TIMEOUT_DEFAULTz sos-toolsz,urn:ietf:params:oauth:grant-type:device_codeZsosc @ sZ e Zd ZdZdd� Zdd� Zdd� Zdd � Zd
d� Zdd
� Z dd� Z
dd� Zddd�ZdS )�DeviceAuthorizationClassz$
Device Authorization Class
c C s* d | _ d | _d | _|| _|| _| �� d S )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__c C s$ | � � 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
r r r r + s ��z/DeviceAuthorizationClass._use_device_code_grantc
C s� dt � �}ddi}tstd��zdtj| j||td�}|�� |�� }|� d�| _
|� d�| _|� d�| _|� d �| _
|� d
�| _W n> tjy� } z$t�d|j� d|� ���W Y d
}~n
d
}~0 0 d
S )zm
Initialize new Device Authorization Grant attempt by
requesting a new device code.
z
client_id=zcontent-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
r Zraise_for_status�json�getZ
_user_codeZ_verification_uri� _intervalr r Z HTTPError�status_code)r
r r �resZresponse�er r r r 9 s4
��
��z-DeviceAuthorizationClass._request_device_codec
C s� t t| jd�}tstd��| jdu r�t�| j� ztt j
| j|td�}|j
}|dkrjt�d� | �|�� � |dvr~t||j��|dkr�|�� d d
vr�t||j��W q t jjy� } zt�d|� �� W Y d}~qd}~0 0 qdS )z�
Continuously poll OIDC token endpoint until the user is successfully
authenticated or an error occurs.
)�
grant_type� client_idr r N�r r �� z$The SSO authentication is successful)r+ � r, �error)Zauthorization_pendingZ slow_downz)Error was found while posting a request: )�GRANT_TYPE_DEVICE_CODEr r r r r �time�sleepr$ r r! r r r% �logger�info�_set_token_datar"