404

[ Avaa Bypassed ]




Upload:

Command:

botdev@3.137.168.72: ~ $
# -*- test-case-name: twisted.conch.test.test_manhole -*-
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
insults/SSH integration support.

@author: Jp Calderone
"""

from zope.interface import implementer

from twisted.conch import avatar, interfaces as iconch, error as econch
from twisted.conch.ssh import factory, session
from twisted.python import components

from twisted.conch.insults import insults


class _Glue:
    """
    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.
    """
    def __init__(self, **kw):
        self.__dict__.update(kw)


    def __getattr__(self, name):
        raise AttributeError(self.name, "has no attribute", name)



class TerminalSessionTransport:
    def __init__(self, proto, chainedProtocol, avatar, width, height):
        self.proto = proto
        self.avatar = avatar
        self.chainedProtocol = chainedProtocol

        protoSession = self.proto.session

        self.proto.makeConnection(
            _Glue(write=self.chainedProtocol.dataReceived,
                  loseConnection=lambda: avatar.conn.sendClose(protoSession),
                  name="SSH Proto Transport"))

        def loseConnection():
            self.proto.loseConnection()

        self.chainedProtocol.makeConnection(
            _Glue(write=self.proto.write,
                  loseConnection=loseConnection,
                  name="Chained Proto Transport"))

        # XXX TODO
        # chainedProtocol is supposed to be an ITerminalTransport,
        # maybe.  That means perhaps its terminalProtocol attribute is
        # an ITerminalProtocol, it could be.  So calling terminalSize
        # on that should do the right thing But it'd be nice to clean
        # this bit up.
        self.chainedProtocol.terminalProtocol.terminalSize(width, height)



@implementer(iconch.ISession)
class TerminalSession(components.Adapter):
    transportFactory = TerminalSessionTransport
    chainedProtocolFactory = insults.ServerProtocol

    def getPty(self, term, windowSize, attrs):
        self.height, self.width = windowSize[:2]


    def openShell(self, proto):
        self.transportFactory(
            proto, self.chainedProtocolFactory(),
            iconch.IConchUser(self.original),
            self.width, self.height)


    def execCommand(self, proto, cmd):
        raise econch.ConchError("Cannot execute commands")


    def closed(self):
        pass



class TerminalUser(avatar.ConchUser, components.Adapter):
    def __init__(self, original, avatarId):
        components.Adapter.__init__(self, original)
        avatar.ConchUser.__init__(self)
        self.channelLookup[b'session'] = session.SSHSession



class TerminalRealm:
    userFactory = TerminalUser
    sessionFactory = TerminalSession

    transportFactory = TerminalSessionTransport
    chainedProtocolFactory = insults.ServerProtocol

    def _getAvatar(self, avatarId):
        comp = components.Componentized()
        user = self.userFactory(comp, avatarId)
        sess = self.sessionFactory(comp)

        sess.transportFactory = self.transportFactory
        sess.chainedProtocolFactory = self.chainedProtocolFactory

        comp.setComponent(iconch.IConchUser, user)
        comp.setComponent(iconch.ISession, sess)

        return user


    def __init__(self, transportFactory=None):
        if transportFactory is not None:
            self.transportFactory = transportFactory


    def requestAvatar(self, avatarId, mind, *interfaces):
        for i in interfaces:
            if i is iconch.IConchUser:
                return (iconch.IConchUser,
                        self._getAvatar(avatarId),
                        lambda: None)
        raise NotImplementedError()



class ConchFactory(factory.SSHFactory):
    publicKeys = {}
    privateKeys = {}

    def __init__(self, portal):
        self.portal = portal

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
client Folder 0755
insults Folder 0755
openssh_compat Folder 0755
scripts Folder 0755
ssh Folder 0755
test Folder 0755
ui Folder 0755
__init__.py File 515 B 0644
avatar.py File 1.4 KB 0644
checkers.py File 19.28 KB 0644
endpoints.py File 28.33 KB 0644
error.py File 2.65 KB 0644
interfaces.py File 12.76 KB 0644
ls.py File 2.49 KB 0644
manhole.py File 11.3 KB 0644
manhole_ssh.py File 3.9 KB 0644
manhole_tap.py File 5.24 KB 0644
mixin.py File 1.34 KB 0644
recvline.py File 11.25 KB 0644
stdio.py File 2.71 KB 0644
tap.py File 3.11 KB 0644
telnet.py File 37.64 KB 0644
ttymodes.py File 2.19 KB 0644
unix.py File 15.91 KB 0644