o
    Òó·i.  ã                   @   s  d dl mZ d dl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 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZmZ edƒZedƒZedur`d dlmZmZ eeƒG dd„ dƒƒZ edu rqdnedu rwdndZ!G dd„ dej"ƒZ#G dd„ dej"ƒZ$dS )é    )Úimplementer)Ú
IConchUser)ÚAllowAnonymousAccessÚ'InMemoryUsernamePasswordDatabaseDontUse)Ú	AnonymousÚ
IAnonymousÚIUsernamePasswordÚUsernamePassword)ÚLoginDenied)ÚPortal)ÚIReactorProcess)ÚUserDatabase)ÚrequireModule)Úunittesté   )Ú
StubClientÚStubConnectionÚcryptographyztwisted.conch.unixN)ÚUnixConchUserÚUnixSSHRealmc                   @   s0   e Zd ZdZdd„ Zdi dddddfdd„ZdS )	ÚMockProcessSpawnerzC
    An L{IReactorProcess} that logs calls to C{spawnProcess}.
    c                 C   s
   g | _ d S )N)Ú_spawnProcessCalls)Úself© r   úbC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/conch/test/test_unix.pyÚ__init__(   s   
zMockProcessSpawner.__init__r   Nr   c
           
      C   s$   | j  |||||||||	dœ	¡ dS )zQ
        Log a call to C{spawnProcess}. Do not actually spawn a process.
        )	ÚprocessProtocolÚ
executableÚargsÚenvÚpathÚuidÚgidÚusePTYÚchildFDsN)r   Úappend)
r   r   r   r   r   r    r!   r"   r#   r$   r   r   r   ÚspawnProcess+   s   ÷ÿzMockProcessSpawner.spawnProcess)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r   r   r   r   r   "   s    ör   zCannot run without cryptographyzUnix system requiredc                   @   s   e Zd ZeZddd„ZdS )ÚTestSSHSessionForUnixConchUserÚreturnNc           
      C   sŠ   t ƒ }d}d}|j||d� |  td|¡ tƒ }t|ƒ}ttƒ d�|_tj	||d�}d}dg}| 
||¡ |j\}	|  ||	d	 d
 ¡ dS )zn
        C{execCommand} sets the C{HOME} environment variable to the avatar's home
        directory.
        z/made/up/path/Úuser©ÚhomeÚpwd)Ú	transport)ZreactorNznot-actually-executedr   ÚHOME)r   ÚaddUserÚpatchÚunixr   r   r   r   ÚconnZSSHSessionForUnixConchUserZexecCommandr   ÚassertEqual)
r   ÚuserdbZhomeDirectoryZuserNameZmockReactorÚavatarÚsessionÚprotocolÚcommandÚcallr   r   r   ÚtestExecCommandEnvironmentU   s   z9TestSSHSessionForUnixConchUser.testExecCommandEnvironment©r,   N)r'   r(   r)   Ú
shouldSkipÚskipr>   r   r   r   r   r+   R   s    r+   c                   @   s(   e Zd ZdZeZddd„Zddd„ZdS )	ÚTestUnixSSHRealmz$
    Tests for L{UnixSSHRealm}.
    r,   Nc           
      C   s”   t ƒ }d}|jd|d� |  td|¡ tdd�}ttƒ |gƒ}tddƒ}| |dt	¡}|  
|¡\}}}	|  |t¡ t|tƒs@J ‚|  | ¡ |¡ dS )	zt
        L{UnixSSHRealm} is an L{IRealm} whose C{.requestAvatar} method returns
        a L{UnixConchUser}.
        z/testing/home/valuer-   r.   r0   s   password)r-   s   userN)r   r3   r4   r5   r   r   r   r	   Úloginr   ZsuccessResultOfÚassertIsInstancer   Ú
isinstancer7   Z
getHomeDir)
r   r8   r/   ZpwdbÚpÚcredsÚresultZresultInterfacer9   Zlogoutr   r   r   Útest_unixSSHRealmq   s   

z"TestUnixSSHRealm.test_unixSSHRealmc                 C   s@   t tƒ tƒ gƒ}| ttƒ ƒdt¡}|  |¡}|  |j	t
¡ dS )z?
        L{UnixSSHRealm} will refuse anonymous logins.
        N)r   r   r   rC   r   r   r   ZfailureResultOfrD   Úvaluer
   )r   rF   rH   ZloginDeniedr   r   r   Ú"test_unixSSHRefusesAnonymousLogins‡   s   
z3TestUnixSSHRealm.test_unixSSHRefusesAnonymousLoginsr?   )r'   r(   r)   r*   r@   rA   rI   rK   r   r   r   r   rB   j   s
    
rB   )%Zzope.interfacer   Ztwisted.conch.interfacesr   Ztwisted.cred.checkersr   r   Ztwisted.cred.credentialsr   r   r   r	   Ztwisted.cred.errorr
   Ztwisted.cred.portalr   Ztwisted.internet.interfacesr   Ztwisted.python.fakepwdr   Ztwisted.python.reflectr   Ztwisted.trialr   Ztest_sessionr   r   r   r5   Ztwisted.conch.unixr   r   r   r@   ZTestCaser+   rB   r   r   r   r   Ú<module>   s2   (ÿÿû	