o
    i
                  
   @   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   


"+