o
    Òó·iç  ã                   @   sê   d dl Z d dlmZ d dlmZ d dlmZ dZdZdZ	da
dad	ad	ad	ad	ad	ad	ad	ad	ad	a	 d
Zg d¢ZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#G dd„ dej$ƒZ%dZ&dd„ Z'dd„ Z(d d!„ Z)e*d"krse)ƒ  dS dS )#é    N)Úreactor)ÚFactory)ÚbasicÚtestZtwistediL  TFs(   +OK POP3 localhost v2003.83 server ready)s   TOPs   LOGIN-DELAY 180ó   USERs
   SASL LOGINó   STLSó   UIDLs   -ERR Unknown requests   +OK Command Completeds   -ERR LOGIN faileds   +OK Mailbox open, 0 messagess*   -ERR server side error start TLS handshakes   +OK quit completeds'   -ERR Unknown AUHORIZATION state commands   +OK 0 0s    +OK Unique-ID listing follows
.s#   +OK Mailbox scan listing follows
.s   +OK Capability list follows:c                   @   s^   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚPOP3TestServerNc                 C   s   d| _ d | _d | _|| _d S )NF)ÚloggedInÚcapsÚtmpUserÚctx)ÚselfZcontextFactory© r   úfC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/mail/test/pop3testserver.pyÚ__init__6   s   
zPOP3TestServer.__init__c                 C   ó   |   t¡ d S ©N)ÚsendLineÚSTAT©r   Úreqr   r   r   ÚsendSTATResp<   ó   zPOP3TestServer.sendSTATRespc                 C   r   r   )r   ÚUIDLr   r   r   r   ÚsendUIDLResp?   r   zPOP3TestServer.sendUIDLRespc                 C   r   r   )r   ÚLISTr   r   r   r   ÚsendLISTRespB   r   zPOP3TestServer.sendLISTRespc                 C   sj   | j d u r	tg| _ tr| j  t¡ tr| j  t¡ tD ]}| j  |¡ qd | j ¡}|d7 }|  	|¡ d S )Ns   
s   
.)
r   Ú	CAP_STARTÚUIDL_SUPPORTÚappendÚCAPABILITIES_UIDLÚSSL_SUPPORTÚCAPABILITIES_SSLÚCAPABILITIESÚjoinr   )r   ÚcapÚrespr   r   r   ÚsendCapabilitiesE   s   
zPOP3TestServer.sendCapabilitiesc                 C   s2   t r|  ¡  d S trt d| j¡ d S |  ¡  d S )Né   )ÚDENY_CONNECTIONÚ
disconnectÚSLOW_GREETINGr   Z	callLaterÚsendGreeting©r   r   r   r   ÚconnectionMadeV   s   zPOP3TestServer.connectionMadec                 C   r   r   )r   ÚCONNECTION_MADEr.   r   r   r   r-   a   r   zPOP3TestServer.sendGreetingc                    s  |  ¡ ‰ ‡ fdd„}trdS tr|  ¡  dS |dƒr)tr#|  t¡ dS |  ¡  dS |dƒr5tr5|  	¡  dS |dƒrct
rB|  t¡ dS d}z| d¡d | _t}W n ty[   t}Y nw |  |¡ dS |d	ƒr¢d}z&| d¡d }| jdu sz|du r}t}n| jtkrŒ|tkrŒt}d
| _nt}W n tyš   t}Y nw |  |¡ dS |dƒr´d| _|  t¡ |  ¡  dS tr½|  t¡ dS | jsÇ|  t¡ dS |dƒrÒ|  t¡ dS |dƒrátrÚdS |  t¡ dS |dƒrðtrédS |  t¡ dS |dƒ�r
trùdS t�s|  t¡ dS |  t¡ dS dS )zError Conditionsc                    s   ˆ   | ¡dkS )Néÿÿÿÿ)Úfind)Ús©Zuliner   r   Ú<lambda>h   s    z-POP3TestServer.lineReceived.<locals>.<lambda>Ns   CAPAr   r   ú é   s   PASSTs   QUITFs   NOOPs   STATs   LISTr   )ÚupperÚTIMEOUT_RESPONSEÚDROP_CONNECTIONr+   ÚINVALID_CAPABILITY_RESPONSEr   ÚINVALID_RESPONSEr(   r"   ÚstartTLSÚINVALID_LOGIN_RESPONSEÚsplitr   ÚVALID_RESPONSEÚBaseExceptionÚAUTH_DECLINEDÚUSERÚPASSÚAUTH_ACCEPTEDr
   ÚLOGOUT_COMPLETEÚINVALID_SERVER_RESPONSEÚNOT_LOGGED_INÚTIMEOUT_DEFERREDr   r   r   r   )r   Úliner2   r'   Úpwdr   r4   r   ÚlineReceivedd   s„   
ÿ€ÿ


ùzPOP3TestServer.lineReceivedc                 C   s8   t r| jd ur|  d¡ | j | j¡ d S |  d¡ d S )Ns   +OK Begin TLS negotiation nows   -ERR TLS not available)r"   r   r   Ú	transportr=   r.   r   r   r   r=   »   s   
zPOP3TestServer.startTLSc                 C   s   | j  ¡  d S r   )rM   ZloseConnectionr.   r   r   r   r+   Â   r   zPOP3TestServer.disconnectr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r(   r/   r-   rL   r=   r+   r   r   r   r   r	   5   s    
Wr	   aü  popServer.py [arg] (default is Standard POP Server with no messages)
no_ssl  - Start with no SSL support
no_uidl - Start with no UIDL support
bad_resp - Send a non-RFC compliant response to the Client
bad_cap_resp - send a non-RFC compliant response when the Client sends a 'CAPABILITY' request
bad_login_resp - send a non-RFC compliant response when the Client sends a 'LOGIN' request
deny - Deny the connection
drop - Drop the connection after sending the greeting
bad_tls - Send a bad response to a STARTTLS
timeout - Do not return a response to a Client request
to_deferred - Do not return a response on a 'Select' request. This
              will test Deferred callback handling
slow - Wait 20 seconds after the connection is made to return a Server Greeting
c                 C   s   t d|  ƒ d S )NzServer Starting in %s mode)Úprint)Úmsgr   r   r   ÚprintMessageÖ   s   rS   c                 C   sh  |   ¡ dkrdatdƒ d S |   ¡ dkrdatdƒ d S |   ¡ dkr*datdƒ d S |   ¡ d	kr8datd
ƒ d S |   ¡ dkrFdatd
ƒ d S |   ¡ dkrTdatdƒ d S |   ¡ dkrbdatdƒ d S |   ¡ dkrpda	tdƒ d S |   ¡ dkr~da
tdƒ d S |   ¡ dkrŒdatdƒ d S |   ¡ dkršdatdƒ d S |   ¡ dkrªttƒ t ¡  d S ttƒ t ¡  d S )NZno_sslFzNON-SSLZno_uidlzNON-UIDLZbad_respTzInvalid Server ResponseZbad_cap_respzInvalid Capability ResponseZbad_login_respZdenyzDeny ConnectionZdropzDrop ConnectionZbad_tlszBad TLS ResponseÚtimeoutzTimeout ResponseZto_deferredzTimeout Deferred ResponseZslowzSlow Greetingz--help)Úlowerr"   rS   r   rG   r;   r>   r*   r:   ÚBAD_TLS_RESPONSEr9   rI   r,   rQ   ÚusageÚsysÚexit)Úargr   r   r   Ú
processArgÚ   sL   r[   c                  C   s\   t tjƒdk rtdƒ ntjdd … } | D ]}t|ƒ qtƒ }t|_t 	t
|¡ t ¡  d S )Né   zPOP3 with no messagesr7   )ÚlenrX   ÚargvrS   r[   r   r	   Úprotocolr   Z	listenTCPÚPORTÚrun)ÚargsrZ   Úfr   r   r   Úmain  s   

rd   Ú__main__)+rX   Ztwisted.internetr   Ztwisted.internet.protocolr   Ztwisted.protocolsr   rC   rD   r`   r"   r   rG   r;   r>   r*   r:   rV   r9   rI   r,   r0   r$   r#   r!   r<   r@   rB   rE   Z	TLS_ERRORrF   rH   r   r   r   r   ZLineReceiverr	   rW   rS   r[   rd   rN   r   r   r   r   Ú<module>   sV    A
ÿ