Current File : //usr/libexec/kcare/python/kcarectl/__pycache__/auth.cpython-36.pyc
3

��whL+�@s ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
dd	lmZdd
lmZddlm
Z
ddlmZmZmZd*dd�Zdd�Zdd�Zdd�Zd+dd�Zejdd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd,d&d'�Zd(d)�Z dS)-�N�)�errors)�config)�	constants)�
http_utils)�	log_utils)�platform_utils)�utils)�serverid)�ipv6_support)�	urlencode�URLError�	HTTPErrorFcCs�d}y�tj�}|dkr(|s$tjd�dStj�dj|�}tj|�}t	j
|j��}t	j|�}|ddkr�tj
�|s�tjd�n |s�tj|�tjd|d�Wn2tk
r�}z|s�tj||�WYdd}~XnXdS)Nz1Error unregistering server: cannot find server idz&/unregister_server.plain?server_id={0}�success�truezServer was unregisteredzError unregistering server: �message)r
�get_serveridr�logerrorr�get_registration_url�formatr�urlopenr	�nstr�read�data_as_dict�rm_serverid�loginfor�print_cln_http_error)Zsilent�url�	server_id�response�content�res�e�r#�*/usr/libexec/kcare/python/kcarectl/auth.py�
unregisters*



r%cCs�td�tj�}|dkrdStj�tj�}ddl}|dkrF|jd�|jj�tdd�}tdd�}tj	|j
�|jj
��tj	|j
�|jj
��tj	|j
�|jj
��xDt
jd	�t|�\}}}|dkr�|r�tj|�t|�|jd�q�WdS)
NzHRegister auto-retry has been enabled, the system can be registered laterrz	/dev/null�rza+�<�ii )�print�os�fork�setsid�sys�exit�stdout�flush�open�dup2�fileno�stdin�stderr�time�sleep�
_try_registerr
�
set_server_id�_set_auth_token)r�pidr-�si�so�coder�
auth_tokenr#r#r$�_register_retry.s,





r@cCs&|dk	r"tjd|�r"td|��|S)Nz	^[\w.-]+$zInvalid value received: %s)�re�match�
ValueError)�valuer#r#r$�_validate_urlsafe_encodingHsrEcCs�yNtj|�}|jjtjd�}tjtj|j	���}t
|d�t|jd��t|�fStt
fk
r~}ztj||�dSd}~Xn$tk
r�tjjd|�dSXdS)Nr>rz)Exception while trying to register URL %s)NNN)NNN)rr�headers�getr�AUTH_TOKEN_HEADERr	rrr�intrErr
rr�	Exception�kcarelog�	exception)rrr?r!r"r#r#r$r8Ns
 r8cCs6ytd�Wn tk
r,tjjd�YnXtj�}td|fd|fg�}djt	j
�|�}t|�\}}}|dkr�tj
|�t|�tjd�dS|dkr�tjd	�nv|d
kr�tjd�nb|dkr�tjd
�nN|dkr�tjd�n:|dkr�tjd�n&|dk�r
tjd�ntjdj|��|�r,t|�dS|�p4dS)NTz9Exception while trying to unregister URL before register.�hostname�keyz{0}/register_server.plain?{1}rzServer RegisteredrzAccount Lockedr(zInvalid Key�z}You have reached maximum registered servers for this key. Please go to your CLN account, remove unused servers and try again.�z[IP is not allowed. Please change allowed IP ranges for the key in KernelCare Key tab in CLN�zEThis IP was already used for trial, you cannot use it for trial again�zfThis IP was banned. Please contact support for more information at https://www.kernelcare.com/support/zUnknown Error {0}���)r%rJrrKrLr�get_hostnamerrrrr8r
r9r:rrr@)rN�retryrM�queryrr>rr?r#r#r$�register\s>


rWcCstjtj�S)N)r	�try_to_readr�AUTH_TOKEN_DUMP_PATHr#r#r#r$�_get_auth_token�srZcCs|sdStjtj|�dS)N)r	�atomic_writerrY)r?r#r#r$r:�sr:cOsv|jdd�}|jdd�rt}ntj}tj|�r@tj|f|�|�Stj|t�t�|d�}t	j
|dd�tj�|f|�|�S)N�method�
check_licenseT)r\�)�count)�pop�_check_auth_retryr�check_urlopen_retry�is_local_url�urlopen_base�http_request�get_http_auth_stringrZr	rU)r�args�kwargsr\�check�requestr#r#r$�urlopen_auth�s
rkcCs.tj�}|r*tjtjtjdj|d����SdS)Nz{0}:{1}Z
kernelcare)r
rr	r�base64�	b64encode�bstrr)rr#r#r$rf�srfcCs8t|t�r&|jdkrt|�S|jdkSt|t�r4dSdS)N��i�T)rorp)�
isinstancerr>�_handle_forbiddenr
)r"�stater#r#r$ra�s



racCs�d|krdStjr�tj�}tj�d}|r8|dj|�7}y&tjt	j
|dd�j��}tj|�}Wn0t
k
r�}ztj||dd�dSd}~XnX|s�|jd	�r�tjjd
j|��dS|d	dkr�d|d<tjd
�dSt�dS)aIn case of 403 error we should check what's happen.
    Case #1. We are trying to register unlicensed machine and should try to register trial.
    Case #2. We have a valid license but access restrictions on server are not consistent yet
             and we had to try later.
    �licenseTz/check.plainz?server_id={0}F)�retry_on_500)r/Nr>zUnexpected CLN response: {0}�0�1z$Unable to access server. Retrying...)rvrw)r�CHECK_CLN_LICENSE_STATUSr
rrrrr	rrrrrr
rrrGrK�errorr�_register_trial)rsrrr �info�exr#r#r$rr�s*
rrcCs�tj�}|r�tj�dj|�}y�tj|�}tj|j	��}tj
|�}|sT|jd�rftdj|��dSt
|d�}|dkr�td�dStdd�}|dkr�td�|SWq�tk
r�}ztj||�dSd}~Xq�Xnt�SdS)	Nz/check.plain?server_id={0}r>zUnexpected CLN response: {0}rrzKey-based valid license found)�key_checkedz No valid key-based license found)r
rrrrrrr	rrrrGr)rI�_get_license_info_by_ipr
rr)rrrr r!r>Zlicense_typer"r#r#r$�license_info�s,


rcCs�tj�d}�y*tj|�}tj|j��}tj|�}|dj�dk�rt	|d�}|dkrnt
dj|d��dS|dkr�|d}tj|d	�j
d
�}t
dj||��dS|dkr�|dkr�|d}tj|d	�j
d
�}t
d
j||��|dko�|dk�r6d|k�rt
dj|d��nt
d�n|jdd�}t
dj|��Wnftk
�rh}	ztj|	|�WYdd}	~	Xn8tk
�r�}
zt
dj|
|j���WYdd}
~
XnXdS)Nz/check.plainrrr>rzValid license found for IP {0}�iprZexpire_datez%Y-%m-%dz?You have a trial license for the IP {0} that will expire on {1}r(z0Your trial license for the IP {0} expired on {1}rOzThe IP {0} hasn't been licensedz This server hasn't been licensedr�z"Error retrieving license info: {0}z1Unexpected CLN response, cannot find {0} key:
{1})rrrrr	rrr�lowerrIr)r�parse_response_date�strftimerGr
rr�KeyError�strip)r}rrr r!r>r�Zexpires_strrr"rNr#r#r$r~�s<



&r~cCs>tjjtjd�}tjj|�r dSy�tjtj	�d�}t
jt
j|j
���}y�|dj�dkr�t
j|ddd�|ddkr�tj|d	|d
��tjdj|d	��dS|ddkr�t
j|ddd�tjd
��n
tjd��Wn.tk
�r}ztj|��WYdd}~XnXWn0tk
�r8}ztj|j��WYdd}~XnXdS)Nztrial-requestedz/trial.plainrrr�T)�
ensure_dirZexpiredr��createdz3Requesting trial license for IP {0}. Please wait...ZnazInvalid LicenserrS)r*�path�joinr�PATCH_CACHE�existsrrrrr	rrrr�r[r�AlreadyTrialedExceptionrrr�
KcareError�UnableToGetLicenseExceptionr�rr>)Z
trial_markrr!Zker"r#r#r$rzs* rz)F)F)r)!rlr*rAr6r�rrrrrrr	r
r�py23rr
rr%r@rEr8rW�cachedrZr:rkrfrarrrr~rzr#r#r#r$�<module>s6

(
	)
#
Page not found – Hello World !