+
    }n jÿ"  ã                   ó†   € ^ RI t ^ RIHt ^ RIHtHtHt ^ RIHtHtH	t	H
t
 ^ RIHt ^ RIHt Rs ! R R4      tRR	 R
 lltR# )é    N)Údatetime)ÚAnyÚDictÚOptional)ÚdefaultsÚ
exceptionsÚsystemÚutil)ÚPublicMachineTokenData)ÚUAFilec                   óÈ  a € ] tR t^t o ]P
                  R3V 3R lR lltV 3R lR ltR tV 3R lR lt	]
R	 4       t]
R
 4       t]
V 3R lR l4       tR t]
V 3R lR l4       tR"V 3R lR llt]R"V 3R lR ll4       t]
V 3R lR l4       t]
R 4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
R 4       t]
R  4       tR!tV tR# )#ÚMachineTokenFileNc                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )é   Ú	directoryÚmachine_token_overlay_path)Ústrr   )ÚformatÚ__classdict__s   "€Ú>/usr/lib/python3/dist-packages/uaclient/files/machine_token.pyÚ__annotate__ÚMachineTokenFile.__annotate__   s#   ø€ ÷ .ñ .áð.ñ %-©S¥Mñ.ó    c                óÖ   € \         P                  p\        W1R ,           \         P                  ,           4      V n        \        W1R4      V n        W n        RV n        RV n        RV n	        R# )Ú/FN)
r   ÚMACHINE_TOKEN_FILEr   ÚPRIVATE_SUBDIRÚprivate_fileÚpublic_filer   Ú_machine_tokenÚ_entitlementsÚ_contract_expiry_datetime)Úselfr   r   Ú	file_names   &&& r   Ú__init__ÚMachineTokenFile.__init__   s]   € ô
 ×/Ñ/ˆ	Ü"Ø 3•¬×)@Ñ)@Õ@ó
ˆÔô " )¸Ó>ˆÔØ*DÔ'Ø"ˆÔØ!ˆÔØ)-ˆÖ&r   c                ó    <€ V ^8„  d   QhRS[ /# )r   Úprivate_content)Údict)r   r   s   "€r   r   r      s   ø€ ÷ 0ñ 0¡Tñ 0r   c                óà  € \         P                  ! 4       '       dÀ   \        P                  ! V\         P                  R7      pV P
                  P                  V4       \        P                  ! V4      P                  RR7      p\        P                  ! V\         P                  R7      pV P                  P                  V4       RV n        RV n        RV n        R# \        P                  ! 4       h)z8Update the machine_token file for both pub/private files©ÚclsF)Ú	keep_noneN)r
   Úwe_are_currently_rootÚjsonÚdumpsÚDatetimeAwareJSONEncoderr   Úwriter   Ú	from_dictÚto_dictr   r    r!   r"   r   ÚNonRootUserError)r#   r(   Úprivate_content_strÚpublic_contentÚpublic_content_strs   &&   r   r2   ÚMachineTokenFile.write   sÀ   € ä×%Ò%×'Ò'Ü"&§*¢*Ø¤T×%BÑ%Bô#Ðð ×Ñ×#Ñ#Ð$7Ô8ô 4×=Ò=Øóç‰g ˆgÓ&ð ô "&§¢Ø¤D×$AÑ$Aô"Ðð ×Ñ×"Ñ"Ð#5Ô6à"&ˆDÔØ!%ˆDÔØ-1ˆDÖ*ä×-Ò-Ó/Ð/r   c                óø   € \         P                  ! 4       '       dL   V P                  P                  4        V P                  P                  4        RV n        RV n        RV n        R# \        P                  ! 4       h)z!Delete both pub and private filesN)
r
   r.   r   Údeleter   r    r!   r"   r   r5   ©r#   s   &r   r;   ÚMachineTokenFile.delete4   s\   € ä×%Ò%×'Ò'Ø×Ñ×#Ñ#Ô%Ø×Ñ×$Ñ$Ô&à"&ˆDÔØ!%ˆDÔØ-1ˆDÖ*ä×-Ò-Ó/Ð/r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# ©r   Úreturn)r   r)   )r   r   s   "€r   r   r   @   s   ø€ ÷ ñ ‘h™t•nñ r   c                ó  € \         P                  ! 4       '       d   V P                  pMV P                  pVP	                  4       pV'       g   R #  \
        P                  ! V\         P                  R7      pV#   \         d     T# i ; i)Nr+   )	r
   r.   r   r   Úreadr/   ÚloadsÚDatetimeAwareJSONDecoderÚ	Exception)r#   Úfile_handlerÚcontents   &  r   rB   ÚMachineTokenFile.read@   sv   € Ü×%Ò%×'Ò'Ø×,Ñ,‰Là×+Ñ+ˆLØ×#Ñ#Ó%ˆßÙð	Ü—j’j ¬d×.KÑ.KÔLˆGð ˆøô ô 	ØØˆð	ús   Á&A8 Á8BÂBc                óÌ   € \         P                  ! 4       '       d5   V P                  P                  ;'       d    V P                  P                  # V P                  P                  # ©N)r
   r.   r   Ú
is_presentr   r<   s   &r   rK   ÚMachineTokenFile.is_presentN   sI   € ä×%Ò%×'Ò'Ø×#Ñ#×.Ñ.×OÐO°4×3DÑ3D×3OÑ3OÐOà×#Ñ#×.Ñ.Ð.r   c                ó  € V P                   '       gl   V P                  4       pV'       dN   V P                  '       d<   V P                  V P                  4      pV'       d   \        P
                  ! VVR7       Wn         V P                   # )zAReturn the machine-token if cached in the machine token response.)Ú	base_dictÚoverlay_dict)r    rB   r   Úparse_machine_token_overlayr
   Údepth_first_merge_overlay_dict)r#   rG   Úmachine_token_overlays   &  r   Úmachine_tokenÚMachineTokenFile.machine_tokenU   sp   € ð ×"×"Ð"Ø—i‘i“kˆGß˜4×:×:Ð:Ø(,×(HÑ(HØ×3Ñ3ó)Ð%÷ )Ü×7Ò7Ø")Ø%:õð #*ÔØ×"Ñ"Ð"r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r?   ©r   r   )r   r   s   "€r   r   r   h   s   ø€ ÷ ñ ™x©�}ñ r   c                ó    € V P                   '       d<   V P                   P                  R / 4      P                  R/ 4      P                  R4      # R# )ÚmachineTokenInfoÚcontractInfoÚnameN©rS   Úgetr<   s   &r   Úcontract_nameÚMachineTokenFile.contract_nameg   sD   € à××Ðà×"Ñ"×&Ñ&Ð'9¸2Ó>ß‘�^ RÓ(ß‘�V“ðñ r   c                óz   € \         P                  ! V4      p\        P                  ! V\        P
                  R 7      # )r+   )r	   Ú	load_filer/   rC   r
   rD   )r#   r   Úmachine_token_overlay_contents   && r   rP   Ú,MachineTokenFile.parse_machine_token_overlayr   s5   € Ü(.×(8Ò(8Ø&ó)
Ð%ô �zŠzØ)Ü×-Ñ-ô
ð 	
r   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r?   )r   r   r   )r   r   s   "€r   r   r   |   s   ø€ ÷ ñ ™™c¡3˜h�ñ r   c                óp   € \        V P                  4      '       d   V P                  R ,          R,          # / # )rX   ÚaccountInfo©ÚboolrS   r<   s   &r   ÚaccountÚMachineTokenFile.account{   s/   € ä�×"Ñ"×#Ò#Ø×%Ñ%Ð&8Õ9¸-ÕHÐHØˆ	r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   ÚseriesrV   )r   r   s   "€r   r   r   �   s   ø€ ÷ 	"ñ 	"¡8©C¥=ñ 	"r   c                óÀ   € V P                   '       d   V P                   # V P                  '       g   / # V P                  V P                  V4      V n         V P                   # )z9Return configured entitlements keyed by entitlement named)r!   rS   Úget_entitlements_from_token)r#   rk   s   &&r   ÚentitlementsÚMachineTokenFile.entitlements�   sW   € à××ÐØ×%Ñ%Ð%Ø×!×!Ð!ØˆIØ!×=Ñ=Ø×Ñ ó
ˆÔð ×!Ñ!Ð!r   c                óL   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[,          /# )r   rS   rk   )r   r   r   r   )r   r   s   "€r   r   r   �   s)   ø€ ÷ #ñ #Ù™C¡˜H•~ð#Ù/7¹­}ñ#r   c                ó€  € ^ RI Hp V '       g   / # / pV P                  R/ 4      P                  R4      pV'       g   / # \        R V P                  R. 4       4       4      p\        R VP                  R. 4       4       4      pVP	                  4        F(  w  rxRV/p	Wu9   d   VV,          V	R	&   V! W‘R
7       W“V&   K*  	  V# )zuReturn a dictionary of entitlements keyed by entitlement name.

Return an empty dict if no entitlements are present.
)Úapply_contract_overridesrX   rY   c              3   óf   "  € T F'  pVP                  R 4      VP                  R4      3x € K)  	  R# 5i)ÚtypeÚtokenN©r\   ©Ú.0Úes   & r   Ú	<genexpr>Ú?MachineTokenFile.get_entitlements_from_token.<locals>.<genexpr>    s,   é € ð 
á<�ð �U‰U�6‹]˜AŸE™E '›NÕ+Û<ùs   ‚/1ÚresourceTokensc              3   óH   "  € T F  pVP                  R 4      V3x € K  	  R# 5i)rt   Nrv   rw   s   & r   rz   r{   ¤   s$   é € ð 
áA�ð �U‰U�6‹]˜AÕÛAùs   ‚ "ÚresourceEntitlementsÚentitlementÚresourceToken)rk   )Úuaclient.contractrr   r\   r)   Úitems)
rS   rk   rr   rn   rY   Útokens_by_nameÚent_by_nameÚentitlement_nameÚ	ent_valueÚentitlement_cfgs
   &&        r   rm   Ú,MachineTokenFile.get_entitlements_from_tokenŒ   sá   € õ 	?çØˆIàˆØ$×(Ñ(Ð);¸RÓ@×DÑDØó
ˆ÷ ØˆIäñ 
à"×&Ñ&Ð'7¸Ô<ó
ó 
ˆô ñ 
à!×%Ñ%Ð&<¸bÔAó
ó 
ˆð ,7×+<Ñ+<Ö+>Ñ'ÐØ,¨iÐ8ˆOØÔ1Ø3AØ$õ4� Ñ0ñ % _ÕDØ-<Ð)Ó*ñ ,?ð Ðr   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r?   )r   r   )r   r   s   "€r   r   r   ³   s   ø€ ÷ 	.ñ 	.©(±8Õ*<ñ 	.r   c                óä   € V P                   '       gT   V P                  '       dB   V P                  P                  R/ 4      P                  R/ 4      P                  RR4      V n         V P                   # )z6Return a datetime of the attached contract expiration.rX   rY   ÚeffectiveToN)r"   Úis_attachedrS   r\   r<   s   &r   Úcontract_expiry_datetimeÚ)MachineTokenFile.contract_expiry_datetime²   s`   € ð ×-×-Ð-°$×2B×2BÐ2Bà×"Ñ"×&Ñ&Ð'9¸2Ó>ß‘�^ RÓ(ß‘�] DÓ)ð Ô*ð ×-Ñ-Ð-r   c                ó,   € \        V P                  4      # )z<Report whether this machine configuration is attached to UA.rf   r<   s   &r   rŒ   ÚMachineTokenFile.is_attached¾   s   € ô �D×&Ñ&Ó'Ð'r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r?   )r   Úint)r   r   s   "€r   r   r   Ä   s   ø€ ÷ 
ñ 
©±#­ñ 
r   c                ó¾   € V P                   f   R# V P                   P                  4       \        P                  ! 4       P                  4       ,
          pVP                  # )zúReport 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)r�   Údater   ÚutcnowÚdays)r#   Údeltas   & r   Úcontract_remaining_daysÚ(MachineTokenFile.contract_remaining_daysÃ   sF   € ð ×(Ñ(Ò0ÙØ×-Ñ-×2Ñ2Ó4´x·²Ó7H×7MÑ7MÓ7OÕOˆØ�z‰zÐr   c                ó   <€ V ^8„  d   QhRR/# ©r   r@   zOptional[str]© )r   r   s   "€r   r   r   Ñ   s   ø€ ÷ ñ  ñ r   c                ó€   € V P                   '       d,   V P                   P                  R / 4      P                  R4      # R# )ÚactivityInfoÚactivityTokenNr[   r<   s   &r   Úactivity_tokenÚMachineTokenFile.activity_tokenÐ   s<   € à××ÐØ×%Ñ%×)Ñ)¨.¸"Ó=×AÑAØóð ñ r   c                ó   <€ V ^8„  d   QhRR/# r›   rœ   )r   r   s   "€r   r   r   Ù   s   ø€ ÷ ñ ˜_ñ r   c                ó€   € V P                   '       d,   V P                   P                  R / 4      P                  R4      # R# )rž   Ú
activityIDNr[   r<   s   &r   Úactivity_idÚMachineTokenFile.activity_idØ   s5   € à××ÐØ×%Ñ%×)Ñ)¨.¸"Ó=×AÑAÀ,ÓOÐOÙr   c                ó   <€ V ^8„  d   QhRR/# )r   r@   zOptional[int]rœ   )r   r   s   "€r   r   r   ß   s   ø€ ÷ ñ ¨ñ r   c                ó€   € V P                   '       d,   V P                   P                  R / 4      P                  R4      # R# )rž   ÚactivityPingIntervalNr[   r<   s   &r   Úactivity_ping_intervalÚ'MachineTokenFile.activity_ping_intervalÞ   s<   € à××ÐØ×%Ñ%×)Ñ)¨.¸"Ó=×AÑAØ&óð ñ r   c                ó    € V P                   '       d<   V P                   P                  R / 4      P                  R/ 4      P                  R4      # R# )rX   rY   ÚidNr[   r<   s   &r   Úcontract_idÚMachineTokenFile.contract_idæ   sD   € à××Ðà×"Ñ"×&Ñ&Ð'9¸2Ó>ß‘�^ RÓ(ß‘�T“ðñ
 r   c                ó¦   € V P                  4       P                  R / 4      P                  R/ 4      P                  R/ 4      P                  RR4      pV# )Úsupportr   ÚaffordancesÚ
onlySeriesN)rn   r\   )r#   Úonly_seriess   & r   r´   ÚMachineTokenFile.only_seriesð   sM   € ð ×ÑÓß‰S�˜BÓß‰S� Ó#ß‰S� Ó#ß‰S�˜tÓ$ð 	ð Ðr   )r"   r!   r    r   r   r   rJ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚDEFAULT_DATA_DIRr%   r2   r;   rB   ÚpropertyrK   rS   r]   rP   rh   rn   Ústaticmethodrm   r�   rŒ   r˜   r    r¥   rª   r®   r´   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      sO  ø‡ € ð "×2Ñ2Ø48÷.ò .÷0ð 0ò0
0÷ð ð ñ/ó ð/ð ñ#ó ð#ð" ÷ó ðò
ð ÷ó ð÷
	"ò 	"ð ÷#ñ #ó ð#ðJ ÷	.ó ð	.ð ñ(ó ð(ð ÷
ó ð
ð ÷ó ðð ÷ó ðð
 ÷ó ðð ñó ðð ñó ör   r   c                ó$   € V ^8„  d   QhR\         /# r?   )r   )r   s   "r   r   r   ü   s   € ÷ ñ Ô(8ñ r   c                 ó°   € ^ RI Hp \        '       g@   V '       g   V! 4       p \        V P                  V P
                  P                  R4      R7      s\        # )r   )ÚUAConfigrR   )r   r   )Úuaclient.configrÁ   Ú_machine_token_filer   Údata_dirÚfeaturesr\   )ÚcfgrÁ   s   & r   Úget_machine_token_filerÇ   ü   sF   € Ý(÷ ÓßÙ“*ˆCä.Ø—l‘lØ'*§|¡|×'7Ñ'7Ø'ó(ô
Ðô Ðr   rJ   )r/   r   Útypingr   r   r   Úuaclientr   r   r	   r
   Úuaclient.contract_data_typesr   Úuaclient.files.filesr   rÃ   r   rÇ   rœ   r   r   Ú<module>rÌ      s:   ðÛ Ý ß &Ñ &ç 7Ó 7Ý ?Ý 'àÐ ÷mñ m÷`ñ r   