HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/uaclient/files/__pycache__/machine_token.cpython-38.pyc
U

��Jh�#�@s~ddlZddlmZddlmZmZmZddlmZmZm	Z	m
Z
ddlmZddl
mZdaGdd�d�Zded	�d
d�ZdS)
�N)�datetime)�Any�Dict�Optional)�defaults�
exceptions�system�util)�PublicMachineTokenData)�UAFilec@sheZdZejdfeeed�dd�Zed�dd�Z	dd	�Z
eed
�dd�Zed
d��Z
edd��Zeeed
�dd��Zdd�Zeeeefd
�dd��Zd1eed�dd�Zed2eeefeed�dd��Zeeed
�dd��Zedd ��Zeeed
�d!d"��Zed#d
�d$d%��Zed#d
�d&d'��Zed(d
�d)d*��Zed+d,��Zed-d.��Z ed/d0��Z!dS)3�MachineTokenFileN��	directory�machine_token_overlay_pathcCsFtj}t||dtj�|_t||d�|_||_d|_d|_d|_	dS)N�/F)
rZMACHINE_TOKEN_FILErZPRIVATE_SUBDIR�private_file�public_filer�_machine_token�
_entitlements�_contract_expiry_datetime)�selfrr�	file_name�r�>/usr/lib/python3/dist-packages/uaclient/files/machine_token.py�__init__
s�zMachineTokenFile.__init__)�private_contentcCsrt��rftj|tjd�}|j�|�t�|�j	dd�}tj|tjd�}|j
�|�d|_d|_d|_
nt���dS)z8Update the machine_token file for both pub/private files��clsF)Z	keep_noneN)r	�we_are_currently_root�json�dumpsZDatetimeAwareJSONEncoderr�writer
Z	from_dictZto_dictrrrrr�NonRootUserError)rrZprivate_content_strZpublic_contentZpublic_content_strrrrr!s(����zMachineTokenFile.writecCs<t��r0|j��|j��d|_d|_d|_nt�	��dS)z!Delete both pub and private filesN)
r	rr�deleterrrrrr"�rrrrr#4s

zMachineTokenFile.delete��returncCsTt��r|j}n|j}|��}|s&dSztj|tjd�}Wntk
rNYnX|S�Nr)	r	rrr�readr�loads�DatetimeAwareJSONDecoder�	Exception)rZfile_handler�contentrrrr(@szMachineTokenFile.readcCs$t��r|jjo|jjS|jjSdS)N)r	rr�
is_presentrr$rrrr-NszMachineTokenFile.is_presentcCsB|js<|��}|r6|jr6|�|j�}|r6tj||d�||_|jS)zAReturn the machine-token if cached in the machine token response.)Z	base_dictZoverlay_dict)rr(r�parse_machine_token_overlayr	Zdepth_first_merge_overlay_dict)rr,�machine_token_overlayrrr�
machine_tokenUs
��zMachineTokenFile.machine_tokencCs&|jr"|j�di��di��d�SdS)N�machineTokenInfo�contractInfo�name�r0�getr$rrr�
contract_namegs���zMachineTokenFile.contract_namecCst�|�}tj|tjd�Sr')rZ	load_filerr)r	r*)rrZmachine_token_overlay_contentrrrr.rs��z,MachineTokenFile.parse_machine_token_overlaycCst|j�r|jddSiS)Nr1ZaccountInfo��boolr0r$rrr�account{s
zMachineTokenFile.account��seriescCs,|jr|jS|jsiS|�|j|�|_|jS)z9Return configured entitlements keyed by entitlement named)rr0�get_entitlements_from_token)rr;rrr�entitlements�s�zMachineTokenFile.entitlements)r0r;c
Cs�ddlm}|siSi}|�di��d�}|s2iStdd�|�dg�D��}tdd�|�d	g�D��}|��D]8\}}d
|i}	||kr�|||	d<||	|d�|	||<qn|S)
z�Return a dictionary of entitlements keyed by entitlement name.

        Return an empty dict if no entitlements are present.
        r)�apply_contract_overridesr1r2css"|]}|�d�|�d�fVqdS)�type�tokenN�r5��.0�errr�	<genexpr>�s�z?MachineTokenFile.get_entitlements_from_token.<locals>.<genexpr>�resourceTokenscss|]}|�d�|fVqdS)r?NrArBrrrrE�s�ZresourceEntitlements�entitlementZ
resourceTokenr:)Zuaclient.contractr>r5�dict�items)
r0r;r>r=r2Ztokens_by_nameZent_by_nameZentitlement_nameZ	ent_valueZentitlement_cfgrrrr<�s0�
�
��
z,MachineTokenFile.get_entitlements_from_tokencCs2|js,|jr,|j�di��di��dd�|_|jS)z6Return a datetime of the attached contract expiration.r1r2ZeffectiveToN)r�is_attachedr0r5r$rrr�contract_expiry_datetime�s���z)MachineTokenFile.contract_expiry_datetimecCs
t|j�S)z<Report whether this machine configuration is attached to UA.r7r$rrrrJ�szMachineTokenFile.is_attachedcCs*|jdkrdS|j��t����}|jS)aReport num days until contract expiration based on effectiveTo

        :return: A positive int representing the number of days the attached
            contract remains in effect. Return a negative int for the number
            of days beyond contract's effectiveTo date.
        N)rK�daterZutcnowZdays)rZdeltarrr�contract_remaining_days�s
z(MachineTokenFile.contract_remaining_daysz
Optional[str]cCs|jr|j�di��d�SdS)N�activityInfoZ
activityTokenr4r$rrr�activity_token�s
�zMachineTokenFile.activity_tokencCs|jr|j�di��d�SdS)NrNZ
activityIDr4r$rrr�activity_id�szMachineTokenFile.activity_idz
Optional[int]cCs|jr|j�di��d�SdS)NrNZactivityPingIntervalr4r$rrr�activity_ping_interval�s
�z'MachineTokenFile.activity_ping_intervalcCs&|jr"|j�di��di��d�SdS)Nr1r2�idr4r$rrr�contract_id�s���zMachineTokenFile.contract_idcCs|jr|j�dg�SdS)NrFr4r$rrr�resource_tokens�sz MachineTokenFile.resource_tokenscCs,|���di��di��di��dd�}|S)NZsupportrGZaffordancesZ
onlySeries)r=r5)r�only_seriesrrrrU�s�����zMachineTokenFile.only_series)N)N)"�__name__�
__module__�__qualname__rZDEFAULT_DATA_DIR�strrrrHr!r#r(�propertyr-r0r6r.rrr9r=�staticmethodr<rrKrJ�intrMrOrPrQrSrTrUrrrrrsV��


	�
�%

	
rr%cCs4ddlm}ts0|s|�}t|j|j�d�d�atS)Nr)�UAConfigr/r
)Zuaclient.configr]�_machine_token_filerZdata_dirZfeaturesr5)Zcfgr]rrr�get_machine_token_files��r_)N)rr�typingrrrZuaclientrrrr	Zuaclient.contract_data_typesr
Zuaclient.files.filesrr^rr_rrrr�<module>sx