+
    =l jÔ!  ã                   ó,  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
HtHtHt ] P                  ! ]P                  ! ]4      4      t]
P$                  ! 4       t]! R. RO4      t ! R R]]4      t ! R	 R
4      tRsR tR R ltR R ltR R ltR# )é    N)Ú
namedtuple)ÚEnum)ÚList)ÚdefaultsÚevent_loggerÚmessagesÚsystemÚutilÚNoticeFileDetailsc                   óÂ  € ] tR t^t]! RRR]P                  R7      t]! RRRRR7      t]! R	R
R]P                  R7      t	]! RRR]P                  R7      t
]! RRR]P                  R7      t]! RRR]P                  R7      t]! RRR]P                  R7      t]! RRR]P                  R7      t]! RRR]P                   P"                  R7      t]! RRR]P$                  R7      t]! RRR]P(                  R7      t]! RRR]P,                  R7      t]! RRRRR7      t]! RR R]P0                  R7      t]! R!R"R]P4                  R7      t]! R#R$R]P8                  R7      tR%tR&# )'ÚNoticeÚcontract_expiredÚ5T)ÚlabelÚorder_idÚis_permanentÚmessageÚreboot_requiredÚ10FzSystem reboot requiredÚenable_reboot_requiredÚ11Úreboot_script_failedÚ12Úfips_reboot_requiredÚ20Úfips_system_reboot_requiredÚ21Úfips_install_out_of_dateÚ22Úfips_disable_reboot_requiredÚ23Úfips_proc_file_errorÚ24Úfips_manual_disable_urlÚ25Úwrong_fips_metapackage_on_cloudÚlp_lts_reboot_requiredÚ30Úoperation_in_progressÚ60z"Operation in progress: {operation}Úauto_attach_retry_full_noticeÚ70Úauto_attach_total_failureÚ71Úlimited_to_releaseÚ80© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   ÚCONTRACT_EXPIREDÚREBOOT_REQUIREDÚENABLE_REBOOT_REQUIRED_TMPLÚENABLE_REBOOT_REQUIREDÚREBOOT_SCRIPT_FAILEDÚFIPS_REBOOT_REQUIRED_MSGÚFIPS_REBOOT_REQUIREDÚFIPS_SYSTEM_REBOOT_REQUIREDÚFIPS_INSTALL_OUT_OF_DATEÚFIPS_DISABLE_REBOOT_REQUIREDÚFIPS_PROC_FILE_ERRORÚtmpl_msgÚNOTICE_FIPS_MANUAL_DISABLE_URLÚFIPS_MANUAL_DISABLE_URLÚ&NOTICE_WRONG_FIPS_METAPACKAGE_ON_CLOUDÚWRONG_FIPS_METAPACKAGE_ON_CLOUDÚLIVEPATCH_LTS_REBOOT_REQUIREDÚOPERATION_IN_PROGRESSÚAUTO_ATTACH_RETRY_NOTICEÚAUTO_ATTACH_RETRY_FULL_NOTICEÚ&AUTO_ATTACH_RETRY_TOTAL_FAILURE_NOTICEÚAUTO_ATTACH_RETRY_TOTAL_FAILUREÚLIMITED_TO_RELEASEÚ__static_attributes__r1   ó    Ú8/usr/lib/python3/dist-packages/uaclient/files/notices.pyr   r      sé  † Ù(Ø ØØØ×)Ñ)ô	Ðñ (ØØØØ(ô	€Oñ /Ø&ØØØ×4Ñ4ô	Ðñ -Ø$ØØØ×-Ñ-ô	Ðñ -Ø$ØØØ×1Ñ1ô	Ðñ #4Ø+ØØØ×4Ñ4ô	#Ðñ  1Ø(ØØØ×1Ñ1ô	 Ðñ $5Ø,ØØØ×5Ñ5ô	$Ð ñ -Ø$ØØØ×-Ñ-×6Ñ6ô	Ðñ 0Ø'ØØØ×7Ñ7ô	Ðñ '8Ø/ØØØ×?Ñ?ô	'Ð#ñ %6Ø&ØØØ×6Ñ6ô	%Ð!ñ .Ø%ØØØ4ô	Ðñ %6Ø-ØØØ×1Ñ1ô	%Ð!ñ '8Ø)ØØØ×?Ñ?ô	'Ð#ñ +Ø"ØØØ×+Ñ+ô	ÔrN   r   c                   óŒ   a € ] tR t^st o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	Rt
V tR# )ÚNoticesManagerc                ó&   <€ V ^8„  d   QhRS[ RS[/# )é   Únotice_detailsÚdescription)r   Ústr)ÚformatÚ__classdict__s   "€rO   Ú__annotate__ÚNoticesManager.__annotate__t   s   ø€ ÷ 
ñ 
áð
ñ ñ
rN   c                óè  € \         P                  ! 4       '       g-   \        P                  RVP                  P
                  4       R# VP                  P                  '       d   \        P                  M\        P                  pRP                  VP                  P                  VP                  P
                  4      p\        P                  ! \        P                  P!                  W44      V4       R# )zÂAdds a notice file. If the notice is found,
it overwrites it.

:param notice_details: Holds details concerning the notice file.
:param description: The content to be written to the notice file.
z.NoticesManager.add(%s) called as non-root userNú{}-{})r
   Úwe_are_currently_rootÚLOGÚwarningÚvaluer   r   r   ÚNOTICES_PERMANENT_DIRECTORYÚNOTICES_TEMPORARY_DIRECTORYrW   r   r	   Ú
write_fileÚosÚpathÚjoin)ÚselfrT   rU   Ú	directoryÚfilenames   &&&  rO   ÚaddÚNoticesManager.addt   s³   € ô ×)Ò)×+Ò+Ü�K‰KØ@Ø×$Ñ$×*Ñ*ôñ ð ×#Ñ#×0×0Ð0ô ×0Ò0ä×5Ñ5ð 	ð
 —>‘>Ø× Ñ ×)Ñ)¨>×+?Ñ+?×+EÑ+Eó
ˆô 	×ÒÜ�G‰G�L‰L˜Ó-Øö	
rN   c                ó    <€ V ^8„  d   QhRS[ /# )rS   rT   ©r   )rW   rX   s   "€rO   rY   rZ   “   s   ø€ ÷ Eñ E¡Vñ ErN   c                óæ  € \         P                  ! 4       '       g-   \        P                  RVP                  P
                  4       R# VP                  P                  '       d   \        P                  M\        P                  pRP                  VP                  P                  VP                  P
                  4      p\        P                  ! \        P                  P!                  W#4      4       R# )zYDeletes a notice file.

:param notice_details: Holds details concerning the notice file.
z1NoticesManager.remove(%s) called as non-root userNr\   )r
   r]   r^   r_   r`   r   r   r   ra   rb   rW   r   r	   Úensure_file_absentrd   re   rf   )rg   rT   rh   ri   s   &&  rO   ÚremoveÚNoticesManager.remove“   s­   € ô
 ×)Ò)×+Ò+Ü�K‰KØCØ×$Ñ$×*Ñ*ôñ ð ×#Ñ#×0×0Ð0ô ×0Ò0ä×5Ñ5ð 	ð
 —>‘>Ø× Ñ ×)Ñ)¨>×+?Ñ+?×+EÑ+Eó
ˆô 	×!Ò!¤"§'¡'§,¡,¨yÓ"CÖDrN   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )rS   rh   Úreturn)rV   r   )rW   rX   s   "€rO   rY   rZ   ©   s   ø€ ÷ 
ñ 
±ð 
¹¹S½	ñ 
rN   c           	     ó  € \         P                  ! V4       Uu. uFb  p\         P                  P                  \         P                  P	                  W4      4      '       g   KG  V P                  W4      '       g   K`  VNKd  	  up# u upi )z�Gets the list of notice file names in the given directory.

:param directory: The directory to search for notice files.
:returns: List of notice file names.
)rd   Úlistdirre   Úisfilerf   Ú_is_valid_notice_file)rg   rh   Ú	file_names   && rO   Ú_get_notice_file_namesÚ%NoticesManager._get_notice_file_names©   sf   € ô  ŸZšZ¨	Ô2ó
á2�	Ü�w‰w�~‰~œbŸg™gŸl™l¨9Ó@×Aô ð ×*Ñ*¨9×@÷ ˆIÙ2ñ
ð 	
ùò 
s   ™ABÁ"BÁ;Bc                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )rS   rh   rx   rs   )rV   Úbool)rW   rX   s   "€rO   rY   rZ   ¶   s"   ø€ ÷ -ñ -©sð -¹sð -Átñ -rN   c                óÒ   € V\         P                  8H  p\         Uu0 uF<  pVP                  V8X  g   K  RP	                  VP
                  VP                  4      kK>  	  ppW%9   # u upi )zŠChecks if the notice file is valid.

:param file_name: The name of the notice file.
:returns: True if the file is valid, False otherwise.
r\   )r   ra   r   r   rW   r   r   )rg   rh   rx   Úis_permanent_dirÚnÚvalid_file_namess   &&&   rO   rw   Ú$NoticesManager._is_valid_notice_file¶   si   € ð %¬×(LÑ(LÑLÐõ ó
á�Ø�~‰~Ð!1Ñ1ô 0ˆG�N‰N˜1Ÿ:™: q§w¡wÖ/Ùð 	ð 
ð
 Ñ,Ð,ùò
s
   œA$´*A$c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )rS   rx   rs   )rV   )rW   rX   s   "€rO   rY   rZ   Ä   s   ø€ ÷ 
ñ 
©cð 
±cñ 
rN   c                ó¾   € VP                  R4      w  r#\         F?  pVP                  V8X  g   K  VP                  V8X  g   K)  VP                  P
                  u # 	  R# )z�Gets the default message for a notice file.

:param file_name: The name of the notice file.
:returns: The default message defined in the enum.
Ú-Ú )Úsplitr   r   r   r`   r   )rg   rx   r   r   Únotices   &&   rO   Ú_get_default_messageÚ#NoticesManager._get_default_messageÄ   sJ   € ð $Ÿ/™/¨#Ó.‰ˆßˆFØ�‰ (Ö*¨v¯|©|¸uÖ/DØ—|‘|×+Ñ+Ò+ñ ñ rN   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# ©rS   rs   ©r   rV   )rW   rX   s   "€rO   rY   rZ   Ð   s   ø€ ÷  ñ  ‘d™3•iñ  rN   c                ó<  € \         P                  \         P                  3p. pV Fµ  p\        P                  P                  V4      '       g   K*  V P                  V4      pV Ft  p \        P                  ! \        P                  P                  W54      4      pT'       d   TP                  T4       KR  T P                  T4      pTP                  T4       Kv  	  K·  	  VP                  4        V#   \         d!    \        P                  RT,           4        K¸  i ; i)zTGets all the notice files currently saved.

:returns: List of notice file contents.
zPermission error while reading )r   ra   rb   rd   re   Úexistsry   r	   Ú	load_filerf   ÚPermissionErrorr^   r_   Úappendrˆ   Úsort)rg   Únotice_directoriesÚnoticesÚnotice_directoryÚnotice_file_namesÚnotice_file_nameÚnotice_file_contentsÚdefault_messages   &       rO   ÚlistÚNoticesManager.listÐ   sù   € ô ×0Ñ0Ü×0Ñ0ð
Ðð ˆÛ 2ÐÜ—7‘7—>‘>Ð"2×3Ò3ÙØ $× ;Ñ ;Ð<LÓ MÐÛ$5Ð ðÜ+1×+;Ò+;ÜŸ™Ÿ™Ð%5ÓHó,Ð(÷ (Ø—N‘NÐ#7Ö8à&*×&?Ñ&?Ø(ó'�Oð —N‘N ?Ö3ó! %6ñ	 !3ð* 	�‰ŒØˆøô 'ô Ü—K‘KØ9Ð<LÕLôò ð	ús   Á&3C0Ã0'DÄDr1   N)r2   r3   r4   r5   rj   rp   ry   rw   rˆ   rš   rM   Ú__classdictcell__)rX   s   @rO   rQ   rQ   s   sC   ø‡ € ÷
ð 
÷>Eð E÷,
ð 
÷-ð -÷
ð 
÷ ö  rN   rQ   c                  ó2   € \         f   \        4       s \         # ©N)Ú_notice_clsrQ   r1   rN   rO   Ú
get_noticer    ö   s   € äÒÜ$Ó&ˆäÐrN   c                ó(   € V ^8„  d   QhR\         RR/# ©rS   rT   rs   Nrm   )rW   s   "rO   rY   rY   þ   s   € ÷ ,ñ ,œð ,¨Tñ ,rN   c                 ót   € \        4       pV P                  P                  ! R/ VB pVP                  W4       R # )Nr1   )r    r   rW   rj   )rT   Úkwargsr‡   rU   s   &,  rO   rj   rj   þ   s.   € Ü‹\€FØ ×(Ñ(×/Ò/Ñ9°&Ñ9€KØ
‡J�Jˆ~Ö+rN   c                ó(   € V ^8„  d   QhR\         RR/# r¢   rm   )rW   s   "rO   rY   rY     s   € ÷ "ñ "œ6ð " dñ "rN   c                 ó<   € \        4       pVP                  V 4       R # rž   )r    rp   )rT   r‡   s   & rO   rp   rp     s   € Ü‹\€FØ
‡M�M�.Ö!rN   c                ó:   € V ^8„  d   QhR\         \        ,          /# r‹   rŒ   )rW   s   "rO   rY   rY   	  s   € ÷ ñ Œd”3�iñ rN   c                  ó6   € \        4       p V P                  4       # rž   )r    rš   )r‡   s    rO   rš   rš   	  s   € Ü‹\€FØ�;‰;‹=ÐrN   )r   r   r   r   )Úloggingrd   Úcollectionsr   Úenumr   Útypingr   Úuaclientr   r   r   r	   r
   Ú	getLoggerÚreplace_top_level_logger_namer2   r^   Úget_event_loggerÚeventr   r   rQ   rŸ   r    rj   rp   rš   r1   rN   rO   Ú<module>r²      sŽ   ðÛ Û 	Ý "Ý Ý ç CÕ Cà×Ò˜×:Ò:¸8ÓDÓE€Ø×%Ò%Ó'€ÙØÒIóÐ ô
`Ð ô `÷F}ñ }ð@ €òõ,õ"÷
rN   