U
    ˆjç  ã                   @   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ddddg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räe)ƒ  dS )&é    N)Úreactor)ÚFactory)ÚbasicÚtestZtwistediL  TFs(   +OK POP3 localhost v2003.83 server readys   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   úD/tmp/pip-unpacked-wheel-j5h_c8_q/twisted/mail/test/pop3testserver.pyÚ__init__6   s    zPOP3TestServer.__init__c                 C   s   |   t¡ d S ©N)ÚsendLineÚSTAT©r   Úreqr   r   r   ÚsendSTATResp<   s    zPOP3TestServer.sendSTATRespc                 C   s   |   t¡ d S r   )r   ÚUIDLr   r   r   r   ÚsendUIDLResp?   s    zPOP3TestServer.sendUIDLRespc                 C   s   |   t¡ d S r   )r   ÚLISTr   r   r   r   ÚsendLISTRespB   s    zPOP3TestServer.sendLISTRespc                 C   sj   | j d krtg| _ tr"| j  t¡ tr2| j  t¡ tD ]}| j  |¡ q6d | 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   s0   t r|  ¡  d S tr$t d| j¡ n|  ¡  d S )Né   )ÚDENY_CONNECTIONÚ
disconnectÚSLOW_GREETINGr   Z	callLaterÚsendGreeting©r   r   r   r   ÚconnectionMadeV   s    zPOP3TestServer.connectionMadec                 C   s   |   t¡ d S r   )r   ÚCONNECTION_MADEr,   r   r   r   r+   a   s    zPOP3TestServer.sendGreetingc                    s$  |  ¡ ‰ ‡ fdd„}trdS tr,|  ¡  dS |dƒrPtrD|  t¡ n|  ¡  �nÐ|dƒrhtrh|  	¡  �n¸|dƒrÆt
r‚|  t¡ dS d}z| d¡d | _t}W n tk
r¶   t}Y nX |  |¡ �nZ|d	ƒ�rNd}zR| d¡d }| jdksø|dk� rþt}n&| jtk�r |tk�r t}d
| _nt}W n tk
�r@   t}Y nX |  |¡ nÒ|dƒ�rrd| _|  t¡ |  ¡  n®t�r„|  t¡ nœ| j�s˜|  t¡ nˆ|dƒ�r®|  t¡ nr|dƒ�rÎt�rÂdS |  t¡ nR|dƒ�rît�râdS |  t¡ n2|dƒ�r t�rdS t�s|  t¡ dS |  t¡ dS )zError Conditionsc                    s   ˆ   | ¡dkS )Néÿÿÿÿ)Úfind)Ús©Zuliner   r   Ú<lambda>h   ó    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   Úliner0   r%   Úpwdr   r2   r   ÚlineReceivedd   s|    











zPOP3TestServer.lineReceivedc                 C   s6   t r(| jd k	r(|  d¡ | j | j¡ n
|  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   )rL   ZloseConnectionr,   r   r   r   r)   Â   s    zPOP3TestServer.disconnect)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r&   r-   r+   rK   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    rR   c                 C   s\  |   ¡ dkrdatdƒ �n<|   ¡ dkr8datdƒ �n |   ¡ dkrTdatdƒ �n|   ¡ d	krndatd
ƒ nê|   ¡ dkrˆdatd
ƒ nÐ|   ¡ dkr¢datdƒ n¶|   ¡ dkr¼datdƒ nœ|   ¡ dkrÖda	tdƒ n‚|   ¡ dkrðda
tdƒ nh|   ¡ dk�rdatdƒ nL|   ¡ dk�r(datdƒ n0|   ¡ dk�rHttƒ t ¡  n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    rR   r   rF   r:   r=   r(   r9   ÚBAD_TLS_RESPONSEr8   rH   r*   rP   ÚusageÚsysÚexit)Úargr   r   r   Ú
processArgÚ   sL    








rZ   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 messagesr6   )ÚlenrW   ÚargvrR   rZ   r   r	   Úprotocolr   Z	listenTCPÚPORTÚrun)ÚargsrY   Úfr   r   r   Úmain  s    

rc   Ú__main__)+rW   Ztwisted.internetr   Ztwisted.internet.protocolr   Ztwisted.protocolsr   rB   rC   r_   r    r   rF   r:   r=   r(   r9   rU   r8   rH   r*   r.   r"   r!   r   r;   r?   rA   rD   Z	TLS_ERRORrE   rG   r   r   r   r   ZLineReceiverr	   rV   rR   rZ   rc   rM   r   r   r   r   Ú<module>   sP    A