File: //usr/lib/python3.6/site-packages/sos/policies/auth/__pycache__/__init__.cpython-36.pyc
3
-�_g� � @ sz d dl Z yd dlZdZW n ek
r0 dZY nX d dlZd dlmZmZ d dlmZ dZ dZ
e jd�ZG d d
� d
�Z
dS )� NTF)�datetime� timedelta)�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 | _|| _|| _| j� 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.6/__init__.py�__init__! s z!DeviceAuthorizationClass.__init__c C s$ | 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
r r + s z/DeviceAuthorizationClass._use_device_code_grantc C s� dt � �}ddi}tstd��ydtj| j||td�}|j� |j� }|j d�| _
|j d�| _|j d�| _|j d �| _
|j d
�| _W n< tjk
r� } ztjd|j� d|� ���W Y d
d
}~X nX d
S )zm
Initialize new Device Authorization Grant attempt by
requesting a new device code.
z
client_id=zcontent-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 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 s(
z-DeviceAuthorizationClass._request_device_codec C s� t t| jd�}tstd��x�| jdkr�tj| j� ytt j
| j|td�}|j
}|dkrltjd� | j|j� � |dkr�t||j��|dkr�|j� d d
kr�t||j��W q t jjk
r� } ztjd|� �� W Y dd}~X qX qW dS )z�
Continuously poll OIDC token endpoint until the user is successfully
authenticated or an error occurs.
)�
grant_type� client_idr zRpython3-requests is not installed and is required for obtaining device auth token.N)r r �� z$The SSO authentication is successful� �error�authorization_pending� slow_downz)Error was found while posting a request: )r&