o
    x[h
  ã                
   @   sð   U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ degeg dœZeed< e e¡Zdd„ Zddd„Zdd„ Z	d dd„Zdede
dede ddf
dd„Z!dS )!z;SSH AuthKey Fingerprints: Log fingerprints of user SSH keysé    N)Ússh_utilÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROSÚug_util)Úlog_util)ÚPER_INSTANCE)ÚSimpleTableÚcc_ssh_authkey_fingerprints)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetac                 C   s4   g }t dt| ƒdƒD ]}| | ||d … ¡ q
|S )Nr   é   )ÚrangeÚlenÚappend)Úbin_hashÚsplit_upÚi© r   úN/usr/lib/python3/dist-packages/cloudinit/config/cc_ssh_authkey_fingerprints.pyÚ_split_hash   s   r   Úsha256c              	   C   sP   | sdS zt  |¡}| t | ¡¡ d t| ¡ ƒ¡W S  tt	fy'   Y dS w )NÚ ú:ú?)
ÚhashlibÚnewÚupdateÚbase64Ú	b64decodeÚjoinr   Ú	hexdigestÚ	TypeErrorÚ
ValueError)Úb64_textÚ	hash_methÚhasherr   r   r   Ú_gen_fingerprint&   s   
ür,   c                 C   s:   t | j| j| j| jgƒr| jr| j ¡  ¡ tjv rdS dS )NTF)	ÚanyÚkeytyper#   ÚcommentÚoptionsÚlowerÚstripr   ÚVALID_KEY_TYPES)Úentryr   r   r   Ú_is_printable_key5   s   ÿr5   ú	ci-info: c                 C   sê   |sd|| f }t j|ddd� d S dd| ddg}t|ƒ}|D ] }t|ƒr@|jp*d	t|j|ƒp1d	|jp5d	|jp9d	g}	| 	|	¡ q | 
¡ }
|
 ¡ }tt|td
�ƒ}t d|| f d|¡g}| |¡ |D ]}t jd||f ddd� qdd S )Nz9%sno authorized SSH keys fingerprints found for user %s.
TF)ÚconsoleÚstderrÚKeytypezFingerprint (%s)ÚOptionsÚCommentú-)Úkeyz#Authorized keys from %s for user %sú+z%s%s
)Útextr8   r7   )r	   Ú	multi_logr   r5   r.   r,   r#   r0   r/   Úadd_rowÚ
get_stringÚ
splitlinesr   Úmaxr   ÚcenterÚextend)ÚuserÚkey_fnÚkey_entriesr*   ÚprefixÚmessageÚ
tbl_fieldsÚtblr4   ÚrowÚ	authtbl_sÚauthtbl_linesÚmax_lenÚlinesÚliner   r   r   Ú_pprint_key_entries?   sJ   ÿÿüü
€
ýÿ
ÿÿrT   ÚnameÚcfgÚcloudÚargsÚreturnc                 C   s–   t  | dd¡¡rt d| ¡ d S t  |dd¡}t ||j¡\}}| 	¡ D ]#\}}| d¡s3| d¡r:t d|¡ q%t
 |¡\}	}
t||	|
|ƒ q%d S )	NÚno_ssh_fingerprintsFz>Skipping module named %s, logging of SSH fingerprints disabledÚauthkey_hashr   Úno_create_homeÚsystemzXSkipping printing of ssh fingerprints for user '%s' because no home directory is created)r   Úis_trueÚgetÚLOGÚdebugÚget_cfg_option_strr   Únormalize_users_groupsÚdistroÚitemsr   Úextract_authorized_keysrT   )rU   rV   rW   rX   r*   ÚusersÚ_groupsÚ	user_nameÚ_cfgrH   rI   r   r   r   Úhandlej   s$   þýörk   )r   )r   r6   )"Ú__doc__r#   r    ÚloggingÚ	cloudinitr   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr   r   Úcloudinit.logr	   Úcloudinit.settingsr
   Úcloudinit.simpletabler   r   Ú__annotations__Ú	getLoggerÚ__name__r`   r   r,   r5   rT   ÚstrÚlistrk   r   r   r   r   Ú<module>   s0   ü


ÿ"+