o
    Òó·iñ  ã                   @  sò   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
mZmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZ d d	lmZ erTd d
lmZ d dlmZ G dd„ dejƒZG dd„ dej ƒZ ee e!e!e"gee# f Z$ddd„Z%dS ) é    )Úannotations)ÚTYPE_CHECKINGÚCallable)Úerror)Ú	transport)ÚdeferÚprotocolÚreactor)ÚIPv4AddressÚIPv6Address)ÚDeferredÚmaybeDeferred)ÚIAddressÚ
IConnectorÚIListeningPortÚIReactorTCP)ÚFailure)ÚConchOptions)ÚSSHUserAuthClientc                   @  s4   e Zd Zddd„Zddd„Zddd„Zddd„ZdS )ÚSSHClientFactoryÚdúDeferred[None]Úoptionsr   ÚverifyHostKeyÚ_VHKÚuserAuthObjectr   ÚreturnÚNonec                 C  s   || _ || _|| _|| _d S ©N)r   r   r   r   )Úselfr   r   r   r   © r    úaC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/conch/client/direct.pyÚ__init__   s   
zSSHClientFactory.__init__Ú	connectorr   Úreasonr   c                 C  s   | j d r| ¡  d S d S )NZ	reconnect)r   Úconnect)r   r#   r$   r    r    r!   ÚclientConnectionLost'   s   
ÿz%SSHClientFactory.clientConnectionLostc                 C  s*   | j d u rd S | j d }| _ | |¡ d S r   )r   Úerrback)r   r#   r$   r   r    r    r!   ÚclientConnectionFailed+   s   
z'SSHClientFactory.clientConnectionFailedÚaddrr   ÚSSHClientTransportc                 C  sh   t | ƒ}| jd r| jd |_| jd r| jd |_| jd r'dg|jdd…< | jd r2| jd |_|S )NÚciphersZmacsÚcompresss   zlibr   é   zhost-key-algorithms)r*   r   ZsupportedCiphersZsupportedMACsZsupportedCompressionsZsupportedPublicKeys)r   r)   Útransr    r    r!   ÚbuildProtocol1   s   



zSSHClientFactory.buildProtocolN)
r   r   r   r   r   r   r   r   r   r   )r#   r   r$   r   r   r   )r)   r   r   r*   )Ú__name__Ú
__module__Ú__qualname__r"   r&   r(   r/   r    r    r    r!   r      s
    


r   c                   @  s^   e Zd ZU ded< ddd„Zddd
d„Zdd„ Zdd„ Zdd„ Zd dd„Z	dd„ Z
dd„ ZdS )!r*   r   Úfactoryr   r   c                 C  s   || _ d | _d S r   )r3   Ú
unixServer)r   r3   r    r    r!   r"   B   s   
zSSHClientTransport.__init__Nr$   úFailure | Nonec                   s<   ˆj rtˆj jƒ}d ˆ_ nt d ¡}| ‡ ‡fdd„¡ d S )Nc                   s   t j ˆˆ ¡S r   )r   r*   ÚconnectionLost)Úx©r$   r   r    r!   Ú<lambda>T   s    z3SSHClientTransport.connectionLost.<locals>.<lambda>)r4   r   ÚstopListeningr   ZsucceedZaddCallback)r   r$   r   r    r8   r!   r6   F   s   
ÿz!SSHClientTransport.connectionLostc                 C  s8   | j jd u rd S | j jd }| j _| t ||¡¡ d S r   )r3   r   r'   r   Ú
ConchError)r   ÚcodeÚdescr   r    r    r!   ÚreceiveErrorW   s   zSSHClientTransport.receiveErrorc                 C  sH   | j jd u rd S | j jd }| j _tj | ||¡ | t ||¡¡ d S r   )r3   r   r   r*   ÚsendDisconnectr'   r   r;   )r   r<   r$   r   r    r    r!   r?   ]   s
   z!SSHClientTransport.sendDisconnectc                 C  s(   | j jd|||d� |rt|ƒ d S d S )Nz!Received Debug Message: {message})ÚmessageÚalwaysDisplayÚlang)Ú_logÚdebugÚprint)r   rA   r@   rB   r    r    r!   ÚreceiveDebugd   s   üÿzSSHClientTransport.receiveDebugÚpubKeyÚbytesÚfingerprintÚstrúDeferred[bool]c                 C  sJ   | j }|d us	J ‚| ¡ }t|ttfƒsJ dƒ‚| j | |j d¡||¡S )Nz+Address must have a host to verify against.zutf-8)	r   ZgetPeerÚ
isinstancer
   r   r3   r   ÚhostÚencode)r   rG   rI   r   Zpeerr    r    r!   r   n   s   ÿþÿz SSHClientTransport.verifyHostKeyc                 C  s\   | j jd|d� tj | |¡ |jdkr*| jjd ur,| jjd }| j_| d ¡ d S d S d S )Nz"setting client server to {service})Úservicezssh-userauth)	rC   Úinfor   r*   Ú
setServiceÚnamer3   r   Úcallback)r   rO   r   r    r    r!   rQ   y   s   þzSSHClientTransport.setServicec                 C  s   |   | jj¡ d S r   )ZrequestServicer3   r   )r   r    r    r!   ÚconnectionSecure€   s   z#SSHClientTransport.connectionSecure)r3   r   r   r   r   )r$   r5   r   r   )rG   rH   rI   rJ   r   rK   )r0   r1   r2   Ú__annotations__r"   r6   r>   r?   rF   r   rQ   rT   r    r    r    r!   r*   >   s   
 


r*   rM   rJ   ÚportÚintr   r   r   r   r   r   r   r   c                 C  s,   t  ¡ }t||||ƒ}ttƒ | ||¡ |S r   )r   r   r   r   r	   Z
connectTCP)rM   rV   r   r   r   r   r3   r    r    r!   r%   ‡   s   r%   N)rM   rJ   rV   rW   r   r   r   r   r   r   r   r   )&Ú
__future__r   Útypingr   r   Ztwisted.conchr   Ztwisted.conch.sshr   Ztwisted.internetr   r   r	   Ztwisted.internet.addressr
   r   Ztwisted.internet.deferr   r   Ztwisted.internet.interfacesr   r   r   r   Ztwisted.python.failurer   Ztwisted.conch.client.optionsr   Ztwisted.conch.ssh.userauthr   ZClientFactoryr   r*   rH   rJ   Úboolr   r%   r    r    r    r!   Ú<module>   s    $F