o
    ç÷¡gu
  ã                   @   s`   d dl Z d dlZd dlZd dlZdd„ Zdd„ Zdd„ Zdd	„ ZG d
d„ dej	j
ƒZeej	_dS )é    Nc                 C   s0   t j | ¡rt j | ¡rtjj| d�S tj ¡ S )N)Úfilename)ÚosÚpathÚexistsÚisfileÚparamikoÚhostkeysÚHostKeys)r   © r
   ú8/usr/local/lib/python3.10/dist-packages/webssh/policy.pyÚload_host_keys   s   
r   c                  C   s   dd„ t tjƒ ¡ D ƒ} | S )Nc                 S   s@   i | ]\}}t |ƒt u rt|tjjƒr|tjjur| ¡ |“qS r
   )ÚtypeÚ
issubclassr   ÚclientÚMissingHostKeyPolicyÚlower)Ú.0ÚkÚvr
   r
   r   Ú
<dictcomp>   s    ÿÿþz)get_policy_dictionary.<locals>.<dictcomp>)Úvarsr   r   Úitems)Údicr
   r
   r   Úget_policy_dictionary   s   ÿr   c                 C   sZ   | }|   ¡ } |  d¡s| d7 } tƒ }t |¡ z||  }W |S  ty,   td |¡ƒ‚w )NÚpolicyzUnknown policy {!r})r   Úendswithr   ÚloggingÚdebugÚKeyErrorÚ
ValueErrorÚformat)r   Úorigin_policyr   Úclsr
   r
   r   Úget_policy_class   s   


þÿr#   c                 C   sZ   |d }|d }|d }| t jju r| |¡ d S | t jju r'|s)|s+tdƒ‚d S d S d S )NÚ	host_keysÚhost_keys_filenameÚsystem_host_keysz2Reject policy could not be used without host keys.)r   r   ÚAutoAddPolicyÚsaveÚRejectPolicyr   )Úpolicy_classÚhost_keys_settingsr$   r%   r&   r
   r
   r   Úcheck_policy_setting&   s   ÿþr,   c                   @   s(   e Zd ZdZe ¡ Zdd„ Zdd„ ZdS )r'   z#
    thread-safe AutoAddPolicy
    c                 C   sZ   |j  |¡p|j |¡}|d u rdS | | ¡ d ¡}|d u r dS ||kr+t |||¡‚d S )NT)Ú_system_host_keysÚlookupÚ
_host_keysÚgetÚget_namer   ÚBadHostKeyException)Úselfr   ÚhostnameÚkeyr   Úhost_keyr
   r
   r   Úis_missing_host_key:   s   
ÿÿz!AutoAddPolicy.is_missing_host_keyc              
   C   sÒ   | j �\ |  |||¡rO| ¡ }t d ||¡¡ |jj t	j
 |g|¡¡ t|jdƒ�}| d ||| ¡ ¡¡ W d   ƒ n1 sBw   Y  W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sbw   Y  d S )NzAdding {} host key for {}Úaz	{} {} {}
)Úlockr7   r1   r   Úinfor    r/   Ú_entriesÚappendr   r   ÚHostKeyEntryÚopenÚ_host_keys_filenameÚwriteÚ
get_base64)r3   r   r4   r5   ÚkeytypeÚfr
   r
   r   Úmissing_host_keyE   s&   
ÿÿ
ÿÿöÿ
"özAutoAddPolicy.missing_host_keyN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	threadingÚLockr9   r7   rD   r
   r
   r
   r   r'   4   s
    r'   )r   Úos.pathr   rI   r   r   r   r#   r,   r   r   r'   r
   r
   r
   r   Ú<module>   s    	"