§
    Ètºfl  ã                   ó$  — d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZ  G d
„ d¦  «        Z G d„ d¦  «        Z eej        ¦  «         G d„ d¦  «        ¦   «         Z G d„ dej        ¦  «        Zd„ ZdS )z\
TAP plugin for creating telnet- and ssh-accessible manhole servers.

@author: Jp Calderone
é    )Úimplementer)ÚserviceÚstrports)ÚmanholeÚmanhole_sshÚtelnet)Úinsults)Úkeys)ÚcheckersÚportal)Úprotocol)ÚfilepathÚusagec                   ó   — e Zd Zd„ Zd„ ZdS )ÚmakeTelnetProtocolc                 ó   — || _         d S ©N)r   )Úselfr   s     úX/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/conch/manhole_tap.pyÚ__init__zmakeTelnetProtocol.__init__   s   € ØˆŒˆˆó    c                 óN   — t           j        }| j        f}t          j        |g|¢R Ž S r   )r   ÚAuthenticatingTelnetProtocolr   ÚTelnetTransport)r   ÚauthÚargss      r   Ú__call__zmakeTelnetProtocol.__call__   s,   € ÝÔ2ˆØ”ˆ~ˆÝÔ% dÐ2¨TÐ2Ð2Ð2Ð2r   N©Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ðð ð ð3ð 3ð 3ð 3ð 3r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚchainedProtocolFactoryc                 ó   — || _         d S r   )Ú	namespace)r   r&   s     r   r   zchainedProtocolFactory.__init__    s   € Ø"ˆŒˆˆr   c                 óJ   — t          j        t          j        | j        ¦  «        S r   )r	   ÚServerProtocolr   ÚColoredManholer&   ©r   s    r   r   zchainedProtocolFactory.__call__#   s   € ÝÔ%¥gÔ&<¸d¼nÑMÔMÐMr   Nr   r"   r   r   r$   r$      s7   € € € € € ð#ð #ð #ðNð Nð Nð Nð Nr   r$   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_StupidRealmc                 ó0   — || _         || _        || _        d S r   )ÚprotocolFactoryÚprotocolArgsÚprotocolKwArgs)r   ÚprotoÚaÚkws       r   r   z_StupidRealm.__init__)   s    € Ø$ˆÔØˆÔØ ˆÔÐÐr   c                 ó„   — t           j        |v r%t           j         | j        | j        i | j        ¤Žd„ fS t          ¦   «         ‚)Nc                  ó   — d S r   r"   r"   r   r   ú<lambda>z,_StupidRealm.requestAvatar.<locals>.<lambda>3   s   € ˜€ r   )r   ÚITelnetProtocolr.   r/   r0   ÚNotImplementedError)r   ÚavatarIdÚ
interfacess      r   ÚrequestAvatarz_StupidRealm.requestAvatar.   sN   € ÝÔ! ZÐ/Ð/åÔ&Ø$�Ô$ dÔ&7ÐO¸4Ô;NÐOÐOØ�ðð õ
 "Ñ#Ô#Ð#r   N)r   r    r!   r   r;   r"   r   r   r,   r,   '   s2   € € € € € ð!ð !ð !ð
$ð $ð $ð $ð $r   r,   c                   óB   — e Zd Zg d¢g d¢g d¢g d¢g d¢g d¢gZd„ Zd„ Zd	S )
ÚOptions)Ú
telnetPortÚtNzMstrports description of the address on which to listen for telnet connections)ÚsshPortÚsNzJstrports description of the address on which to listen for ssh connections)ÚpasswdÚpz/etc/passwdz1name of a passwd(5)-format username/password file)Ú	sshKeyDirNú<USER DATA DIR>z2Directory where the autogenerated SSH key is kept.)Ú
sshKeyNameNz
server.keyz&Filename of the autogenerated SSH key.)Ú
sshKeySizeNi   z,Size of the automatically generated SSH key.c                 óN   — t           j                             | ¦  «         d | d<   d S )Nr&   )r   r=   r   r*   s    r   r   zOptions.__init__\   s(   € ÝŒ×Ò˜tÑ$Ô$Ð$Ø ˆˆ[ÑÐÐr   c                 óR   — | d         €| d         €t          j        d¦  «        ‚d S d S )Nr>   r@   z<At least one of --telnetPort and --sshPort must be specified)r   Ú
UsageErrorr*   s    r   ÚpostOptionszOptions.postOptions`   s<   € Ø�ÔÐ%¨$¨y¬/Ð*AÝÔ"ØNñô ð ð &Ð%Ð*AÐ*Ar   N)r   r    r!   ÚoptParametersr   rK   r"   r   r   r=   r=   8   sŒ   € € € € € ð	
ð 	
ð 	
ð	
ð 	
ð 	
ð	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	UÐTÐTØRÐRÐRðA!€MðF!ð !ð !ðð ð ð ð r   r=   c                 óò  — t          j        ¦   «         }| d         }|€i }t          j        | d         ¦  «        }| d         r�t	          t
          j        t          j        t          j
        |¦  «        }t          j        ||g¦  «        }t          j        ¦   «         }t          |¦  «        |_        t!          j         | d         |¦  «        }|                     |¦  «         | d         �rt%          j        ¦   «         }t)          |¦  «        |_        t          j        ||g¦  «        }	t%          j        |	¦  «        }
| d         dk    r	| d         }ndd	lm}  |¦   «         }t1          j        |¦  «                             | d
         ¦  «        }t7          j        |t;          | d         ¦  «        ¦  «        }||
j        d<   ||
j        d<   t!          j         | d         |
¦  «        }|                     |¦  «         |S )a;  
    Create a manhole server service.

    @type options: L{dict}
    @param options: A mapping describing the configuration of
    the desired service.  Recognized key/value pairs are::

        "telnetPort": strports description of the address on which
                      to listen for telnet connections.  If None,
                      no telnet service will be started.

        "sshPort": strports description of the address on which to
                   listen for ssh connections.  If None, no ssh
                   service will be started.

        "namespace": dictionary containing desired initial locals
                     for manhole connections.  If None, an empty
                     dictionary will be used.

        "passwd": Name of a passwd(5)-format username/password file.

        "sshKeyDir": The folder that the SSH server key will be kept in.

        "sshKeyName": The filename of the key.

        "sshKeySize": The size of the key, in bits. Default is 4096.

    @rtype: L{twisted.application.service.IService}
    @return: A manhole service.
    r&   NrB   r>   r@   rD   rE   r   )ÚgetDataDirectoryrF   rG   s   ssh-rsa) r   ÚMultiServicer   ÚFilePasswordDBr,   r   ÚTelnetBootstrapProtocolr	   r(   r   r)   r   ÚPortalr   ÚServerFactoryr   r   ÚsetServiceParentr   ÚTerminalRealmr$   ÚConchFactoryÚtwisted.python._appdirsrN   r   ÚFilePathÚchildr
   Ú_getPersistentRSAKeyÚintÚ
publicKeysÚprivateKeys)ÚoptionsÚsvcr&   ÚcheckerÚtelnetRealmÚtelnetPortalÚtelnetFactoryÚtelnetServiceÚsshRealmÚ	sshPortalÚ
sshFactoryÚkeyDirrN   ÚkeyLocationÚsshKeyÚ
sshServices                   r   ÚmakeServicerl   g   sâ  € õ> Ô
Ñ
 Ô
 €Cà˜Ô$€IØÐØˆ	åÔ% g¨hÔ&7Ñ8Ô8€Gàˆ|Ôð ,Ý"ÝÔ*ÝÔ"ÝÔ"Øñ	
ô 
ˆõ ”} [°7°)Ñ<Ô<ˆå Ô.Ñ0Ô0ˆÝ!3°LÑ!AÔ!AˆÔÝ Ô(¨°Ô)>ÀÑNÔNˆØ×&Ò& sÑ+Ô+Ð+àˆyÔñ )ÝÔ,Ñ.Ô.ˆÝ*@ÀÑ*KÔ*KˆÔ'å”M (¨W¨IÑ6Ô6ˆ	Ý Ô-¨iÑ8Ô8ˆ
à�;ÔÐ#4Ò4Ð4Ø˜[Ô)ˆFˆFà@Ð@Ð@Ð@Ð@Ð@à%Ð%Ñ'Ô'ˆFåÔ'¨Ñ/Ô/×5Ò5°g¸lÔ6KÑLÔLˆåÔ*¨;½¸GÀLÔ<QÑ8RÔ8RÑSÔSˆØ,2ˆ
Ô˜jÑ)Ø-3ˆ
Ô˜zÑ*åÔ% g¨iÔ&8¸*ÑEÔEˆ
Ø×#Ò# CÑ(Ô(Ð(à€Jr   N)Ú__doc__Úzope.interfacer   Útwisted.applicationr   r   Útwisted.conchr   r   r   Útwisted.conch.insultsr	   Útwisted.conch.sshr
   Útwisted.credr   r   Útwisted.internetr   Útwisted.pythonr   r   r   r$   ÚIRealmr,   r=   rl   r"   r   r   ú<module>rw      s£  ððð ð 'Ð &Ð &Ð &Ð &Ð &à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø )Ð )Ð )Ð )Ð )Ð )Ø "Ð "Ð "Ð "Ð "Ð "Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðNð Nð Nð Nð Nñ Nô Nð Nð €ˆVŒ]ÑÔð$ð $ð $ð $ð $ñ $ô $ñ Ôð$ð ,ð ,ð ,ð ,ð ,ˆeŒmñ ,ô ,ð ,ð^Mð Mð Mð Mð Mr   