U
    
W[                     @   s   d 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 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
    )implementer)avatar
interfaceserror)factorysession)
components)insultsc                   @   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|d S )Nzhas no attribute)AttributeErrorname)r   r   r   r   r   __getattr__   s    z_Glue.__getattr__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r
      s   r
   c                   @   s   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   )ZconnZ	sendCloser   )r   protoSessionr   r   <lambda>.       z3TerminalSessionTransport.__init__.<locals>.<lambda>zSSH Proto Transport)writeloseConnectionr   c                      s    j   d S r   )protor   r   r   r   r   r   1   s    z9TerminalSessionTransport.__init__.<locals>.loseConnectionzChained Proto Transport)
r    r   chainedProtocolr   ZmakeConnectionr
   ZdataReceivedr   ZterminalProtocolZ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   $   s   r   c                   @   s6   e Zd ZeZej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   ZtermZ
windowSizeZattrsr   r   r   getPtyH   s    zTerminalSession.getPtyc                 C   s&   |  ||  t| j| j| j d S r   )transportFactorychainedProtocolFactoryiconch
IConchUseroriginalr#   r$   )r   r    r   r   r   	openShellL   s     
 zTerminalSession.openShellc                 C   s   t dd S )NzCannot execute commands)econchZ
ConchError)r   r    cmdr   r   r   execCommandS   s    zTerminalSession.execCommandc                 C   s   d S r   r   r!   r   r   r   closedW   s    zTerminalSession.closedN)r   r   r   r   r)   r	   ServerProtocolr*   r(   r.   r1   r2   r   r   r   r   r&   C   s   r&   c                   @   s   e Zd Zdd ZdS )TerminalUserc                 C   s*   t j| | tj|  tj| jd< d S )Ns   session)r   Adapterr   r   	ConchUserr   Z
SSHSessionZchannelLookup)r   r-   avatarIdr   r   r   r   ]   s    zTerminalUser.__init__Nr%   r   r   r   r   r4   \   s   r4   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   ZComponentizeduserFactorysessionFactoryr)   r*   ZsetComponentr+   r,   ISession)r   r7   compuserZsessr   r   r   
_getAvatark   s    
zTerminalRealm._getAvatarNc                 C   s   |d k	r|| _ d S r   )r)   )r   r)   r   r   r   r   y   s    zTerminalRealm.__init__c                 G   s8   |D ](}|t jkrt j| |dd f  S qt d S )Nc                   S   s   d S r   r   r   r   r   r   r      r   z-TerminalRealm.requestAvatar.<locals>.<lambda>)r+   r,   r>   NotImplementedError)r   r7   Zmindr   ir   r   r   requestAvatar~   s    

zTerminalRealm.requestAvatar)N)r   r   r   r4   r9   r&   r:   r   r)   r	   r3   r*   r>   r   rA   r   r   r   r   r8   d   s   
r8   c                   @   s   e Zd Zi Zi Zdd ZdS )ConchFactoryc                 C   s
   || _ d S r   )portal)r   rC   r   r   r   r      s    zConchFactory.__init__N)r   r   r   Z
publicKeysZprivateKeysr   r   r   r   r   rB      s   rB   N)r   Zzope.interfacer   Ztwisted.conchr   r   r+   r   r/   Ztwisted.conch.sshr   r   Ztwisted.pythonr   Ztwisted.conch.insultsr	   r
   r   r;   r5   r&   r6   r4   r8   Z
SSHFactoryrB   r   r   r   r   <module>   s   $