o
    bK                     @   s   d 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 ddlmZmZ ddlmZ G dd	 d	ZG d
d dZee
jG dd dejZG dd dejejZG dd dZG dd dejZdS )z9
insults/SSH integration support.

@author: Jp Calderone
    )Dict)implementer)avatarerror
interfaces)insults)factorysession)
componentsc                   @   s    e Zd ZdZdd Zdd ZdS )_Gluez
    A feeble class for making one attribute look like another.

    This should be replaced with a real class at some point, probably.
    Try not to write new code that uses it.
    c                 K   s   | j | d S N)__dict__update)selfkw r   ;/usr/lib/python3/dist-packages/twisted/conch/manhole_ssh.py__init__   s   z_Glue.__init__c                 C   s   t | jd|)Nzhas no attribute)AttributeErrorname)r   r   r   r   r   __getattr__       z_Glue.__getattr__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )TerminalSessionTransportc                    sx   |_  _|_j jj tjj fdddd fdd}jtj j|dd jj	|| d S )Nc                      s    j S r   )conn	sendCloser   )r   protoSessionr   r   <lambda>/   s    z3TerminalSessionTransport.__init__.<locals>.<lambda>zSSH Proto Transport)writeloseConnectionr   c                      s    j   d S r   )protor#   r   r   r   r   r#   4   r   z9TerminalSessionTransport.__init__.<locals>.loseConnectionzChained Proto Transport)
r$   r   chainedProtocolr	   makeConnectionr   dataReceivedr"   terminalProtocolterminalSize)r   r$   r&   r   widthheightr#   r   )r   r    r   r   r   %   s(   z!TerminalSessionTransport.__init__Nr   r   r   r   r   r   r   r   r   $       r   c                   @   sF   e Zd ZeZejZdd Zdd Z	dd Z
dd Zd	d
 Zdd ZdS )TerminalSessionc                 C   s   |d d \| _ | _d S )N   )r,   r+   )r   term
windowSizeattrsr   r   r   getPtyM   s   zTerminalSession.getPtyc                 C   s&   |  ||  t| j| j| j d S r   )transportFactorychainedProtocolFactoryiconch
IConchUseroriginalr+   r,   )r   r$   r   r   r   	openShellP   s   
zTerminalSession.openShellc                 C   s
   t d)NzCannot execute commands)econch
ConchError)r   r$   cmdr   r   r   execCommandY      
zTerminalSession.execCommandc                 C      t d)Nz,Unimplemented: TerminalSession.windowChangedNotImplementedError)r   newWindowSizer   r   r   windowChanged\      zTerminalSession.windowChangedc                 C   r@   )Nz*Unimplemented: TerminalSession.eofReceivedrA   r%   r   r   r   eofReceived`   rE   zTerminalSession.eofReceivedc                 C      d S r   r   r%   r   r   r   closedd   s   zTerminalSession.closedN)r   r   r   r   r5   r   ServerProtocolr6   r4   r:   r>   rD   rF   rH   r   r   r   r   r/   H   s    	r/   c                   @   r   )TerminalUserc                 C   s*   t j| | tj|  tj| jd< d S )Ns   session)r
   Adapterr   r   	ConchUserr	   
SSHSessionchannelLookup)r   r9   avatarIdr   r   r   r   j   s   zTerminalUser.__init__Nr-   r   r   r   r   rJ   i   r.   rJ   c                   @   s8   e Zd ZeZeZeZe	j
Zdd ZdddZdd ZdS )	TerminalRealmc                 C   sN   t  }| ||}| |}| j|_| j|_|tj| |tj	| |S r   )
r
   ComponentizeduserFactorysessionFactoryr5   r6   setComponentr7   r8   ISession)r   rO   compusersessr   r   r   
_getAvatarw   s   
zTerminalRealm._getAvatarNc                 C   s   |d ur	|| _ d S d S r   )r5   )r   r5   r   r   r   r      s   
zTerminalRealm.__init__c                 G   s4   |D ]}|t ju rt j| |dd f  S qt )Nc                   S   rG   r   r   r   r   r   r   r!      s    z-TerminalRealm.requestAvatar.<locals>.<lambda>)r7   r8   rY   rB   )r   rO   mindr   ir   r   r   requestAvatar   s
   
zTerminalRealm.requestAvatarr   )r   r   r   rJ   rR   r/   rS   r   r5   r   rI   r6   rY   r   r\   r   r   r   r   rP   p   s    
rP   c                   @   s>   e Zd ZU i Zeeef ed< i Zeeef ed< dd ZdS )ConchFactory
publicKeysprivateKeysc                 C   s
   || _ d S r   )portal)r   r`   r   r   r   r      r?   zConchFactory.__init__N)	r   r   r   r^   r   bytes__annotations__r_   r   r   r   r   r   r]      s   
 r]   N)r   typingr   zope.interfacer   twisted.conchr   r   r;   r   r7   twisted.conch.insultsr   twisted.conch.sshr   r	   twisted.pythonr
   r   r   rU   rK   r/   rL   rJ   rP   
SSHFactoryr]   r   r   r   r   <module>   s   $ 