Ë
    GKÕiÔ!  ã                   ó8  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ  e j                   ej                  e«      «      Z e
j$                  «       Z edg d¢«      Z G d„ d	ee«      Z G d
„ d«      Zdad„ Zdeddfd„Zdeddfd„Zdee   fd„Zy)é    N)Ú
namedtuple)ÚEnum)ÚList)ÚdefaultsÚevent_loggerÚmessagesÚsystemÚutilÚNoticeFileDetails)Úorder_idÚlabelÚis_permanentÚmessagec                   ó¸  — e Zd Z edddej
                  ¬«      Z edddd¬«      Z ed	d
dej                  ¬«      Z edddej                  ¬«      Z	 edddej                  ¬«      Z edddej                  ¬«      Z edddej                  ¬«      Z edddej                  ¬«      Z edddej                  j                   ¬«      Z edddej"                  ¬«      Z edddej&                  ¬«      Z edddej*                  ¬«      Z edddd¬«      Z edd dej.                  ¬«      Z ed!d"dej2                  ¬«      Z ed#d$dej6                  ¬«      Zy%)&ÚNoticeÚcontract_expiredÚ5T)r   r   r   r   Ú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Ú80N)Ú__name__Ú
__module__Ú__qualname__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© ó    ú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Ø)ØØØ×?Ñ?ô	'Ð#ñ +Ø"ØØØ×+Ñ+ô	ÑrL   r   c                   ót   — e Zd Zdedefd„Zdefd„Zdedee   fd„Zdedede	fd	„Z
dedefd
„Zdee   fd„Zy)ÚNoticesManagerÚnotice_detailsÚdescriptionc                 óÊ  — t        j                  «       s+t        j                  d|j                  j
                  «       y|j                  j                  rt        j                  nt        j                  }dj                  |j                  j                  |j                  j
                  «      }t        j                  t        j                  j!                  ||«      |«       y)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_DIRECTORYÚformatr   r	   Ú
write_fileÚosÚpathÚjoin)ÚselfrP   rQ   Ú	directoryÚfilenames        rM   ÚaddzNoticesManager.addt   s¯   € ô ×)Ñ)Ô+Ü�K‰KØ@Ø×$Ñ$×*Ñ*ôð ð ×#Ñ#×0Ò0ô ×0Ò0ä×5Ñ5ð 	ð
 —>‘>Ø× Ñ ×)Ñ)¨>×+?Ñ+?×+EÑ+Eó
ˆô 	×ÑÜ�G‰G�L‰L˜ HÓ-Øõ	
rL   c                 óÈ  — t        j                  «       s+t        j                  d|j                  j
                  «       y|j                  j                  rt        j                  nt        j                  }dj                  |j                  j                  |j                  j
                  «      }t        j                  t        j                  j!                  ||«      «       y)ziDeletes a notice file.

        :param notice_details: Holds details concerning the notice file.
        z1NoticesManager.remove(%s) called as non-root userNrS   )r
   rT   rU   rV   rW   r   r   r   rX   rY   rZ   r   r	   Úensure_file_absentr\   r]   r^   )r_   rP   r`   ra   s       rM   ÚremovezNoticesManager.remove“   s©   € ô
 ×)Ñ)Ô+Ü�K‰KØCØ×$Ñ$×*Ñ*ôð ð ×#Ñ#×0Ò0ô ×0Ò0ä×5Ñ5ð 	ð
 —>‘>Ø× Ñ ×)Ñ)¨>×+?Ñ+?×+EÑ+Eó
ˆô 	×!Ñ!¤"§'¡'§,¡,¨y¸(Ó"CÕDrL   r`   Úreturnc           	      óð   — t        j                  |«      D �cg c]S  }t         j                  j                  t         j                  j	                  ||«      «      r| j                  ||«      r|‘ŒU c}S c c}w )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.
        )r\   Úlistdirr]   Úisfiler^   Ú_is_valid_notice_file)r_   r`   Ú	file_names      rM   Ú_get_notice_file_namesz%NoticesManager._get_notice_file_names©   s\   € ô  ŸZ™Z¨	Ó2ö
àÜ�w‰w�~‰~œbŸg™gŸl™l¨9°iÓ@ÔAØ×*Ñ*¨9°iÔ@ò ò
ð 	
ùò 
s   ˜AA3rk   c                 óÆ   — |t         j                  k(  }t        D �ch c]7  }|j                  |k(  r&dj	                  |j
                  |j                  «      ’Œ9 }}||v S c c}w )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.
        rS   )r   rX   r   r   rZ   r   r   )r_   r`   rk   Úis_permanent_dirÚnÚvalid_file_namess         rM   rj   z$NoticesManager._is_valid_notice_file¶   sh   € ð %¬×(LÑ(LÑLÐô ö
àØ�~‰~Ð!1Ò1ð �N‰N˜1Ÿ:™: q§w¡wÕ/ð
Ðð 
ð
 Ð,Ð,Ð,ùò
s   œ<Ac                 ó°   — |j                  d«      \  }}t        D ]9  }|j                  |k(  sŒ|j                  |k(  sŒ#|j                  j
                  c S  y)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   rW   r   )r_   rk   r   r   Únotices        rM   Ú_get_default_messagez#NoticesManager._get_default_messageÄ   sQ   € ð $Ÿ/™/¨#Ó.‰ˆ�%Üò 	,ˆFØ�‰ (Ó*¨v¯|©|¸uÓ/DØ—|‘|×+Ñ+Ò+ð	,ð rL   c                 ó
  — t         j                  t         j                  f}g }|D ]¤  }t        j                  j                  |«      sŒ#| j                  |«      }|D ]l  }	 t        j                  t        j                  j                  ||«      «      }|r|j                  |«       ŒK| j                  |«      }|j                  |«       Œn Œ¦ |j                  «        |S # t        $ r t        j                  d|z   «       Y Œ¦w xY w)zdGets all the notice files currently saved.

        :returns: List of notice file contents.
        zPermission error while reading )r   rX   rY   r\   r]   Úexistsrl   r	   Ú	load_filer^   ÚPermissionErrorrU   rV   Úappendrv   Úsort)r_   Únotice_directoriesÚnoticesÚnotice_directoryÚnotice_file_namesÚnotice_file_nameÚnotice_file_contentsÚdefault_messages           rM   ÚlistzNoticesManager.listÐ   s  € ô ×0Ñ0Ü×0Ñ0ð
Ðð ˆØ 2ò 	4ÐÜ—7‘7—>‘>Ð"2Ô3ØØ $× ;Ñ ;Ð<LÓ MÐØ$5ò 4Ð ðÜ+1×+;Ñ+;ÜŸ™Ÿ™Ð%5Ð7GÓHó,Ð(ñ (Ø—N‘NÐ#7Õ8à&*×&?Ñ&?Ø(ó'�Oð —N‘N ?Õ3ñ!4ð		4ð* 	�‰ŒØˆøô 'ò Ü—K‘KØ9Ð<LÑLôñ ð	ús   Á3CÃ!DÄDN)r1   r2   r3   r   Ústrrb   re   r   rl   Úboolrj   rv   r„   rK   rL   rM   rO   rO   s   s{   „ ð
àð
ð ó
ð>E Vó Eð,
°ð 
¸¸S¹	ó 
ð-¨sð -¸sð -Àtó -ð
¨cð 
°có 
ð �d˜3‘iô  rL   rO   c                  ó.   — t         €
t        «       a t         S ©N)Ú_notice_clsrO   rK   rL   rM   Ú
get_noticerŠ   ö   s   € äÐÜ$Ó&ˆäÐrL   rP   rf   c                 ót   — t        «       } | j                  j                  di |¤Ž}|j                  | |«       y )NrK   )rŠ   r   rZ   rb   )rP   Úkwargsru   rQ   s       rM   rb   rb   þ   s2   € Ü‹\€FØ/�.×(Ñ(×/Ñ/Ñ9°&Ñ9€KØ
‡J�Jˆ~˜{Õ+rL   c                 ó:   — t        «       }|j                  | «       y rˆ   )rŠ   re   )rP   ru   s     rM   re   re     s   € Ü‹\€FØ
‡M�M�.Õ!rL   c                  ó6   — t        «       } | j                  «       S rˆ   )rŠ   r„   )ru   s    rM   r„   r„   	  s   € Ü‹\€FØ�;‰;‹=ÐrL   )Úloggingr\   Úcollectionsr   Úenumr   Útypingr   Úuaclientr   r   r   r	   r
   Ú	getLoggerÚreplace_top_level_logger_namer1   rU   Úget_event_loggerÚeventr   r   rO   r‰   rŠ   rb   re   r…   r„   rK   rL   rM   ú<module>r˜      s¼   ðÛ Û 	Ý "Ý Ý ç CÕ Cà€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€Ø%ˆ×%Ñ%Ó'€ÙØÒIóÐ ô
`Ð ô `÷F}ñ }ð@ €òð,˜ð ,¨Tó ,ð"˜6ð " dó "ð
ˆd�3‰iô rL   