U
    sÍ@g7   ã                   @   sô   d dl mZ d dlmZ d dlmZ d dlmZ d dl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 )'é    )Úprint_function)ÚFactory)Úbasic)ÚreactorNZ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                   @   sf   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d„ ZdS )ÚPOP3TestServerNc                 C   s   d| _ d | _d | _|| _d S )NF)ÚloggedInÚcapsÚtmpUserÚctx)ÚselfZcontextFactory© r   úB/usr/lib/python3/dist-packages/twisted/mail/test/pop3testserver.pyÚ__init__;   s    zPOP3TestServer.__init__c                 C   s   |   t¡ d S ©N)ÚsendLineÚSTAT©r   Zreqr   r   r   ÚsendSTATRespB   s    zPOP3TestServer.sendSTATRespc                 C   s   |   t¡ d S r   )r   ÚUIDLr   r   r   r   ÚsendUIDLRespF   s    zPOP3TestServer.sendUIDLRespc                 C   s   |   t¡ d S r   )r   ÚLISTr   r   r   r   ÚsendLISTRespJ   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   ZcapÚrespr   r   r   ÚsendCapabilitiesN   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   ÚconnectionMade`   s    zPOP3TestServer.connectionMadec                 C   s   |   t¡ d S r   )r   ÚCONNECTION_MADEr*   r   r   r   r)   l   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}Y nX |  |¡ nN|d	ƒr:d}zP| 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}Y nX |  |¡ nÒ|dƒr^d| _|  t¡ |  ¡  n®trp|  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>t   ó    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ÚAUTH_DECLINEDÚUSERÚPASSÚAUTH_ACCEPTEDr
   ÚLOGOUT_COMPLETEÚINVALID_SERVER_RESPONSEÚNOT_LOGGED_INÚTIMEOUT_DEFERREDr   r   r   r   )r   Úliner.   r#   Úpwdr   r0   r   ÚlineReceivedp   s|    











zPOP3TestServer.lineReceivedc                 C   sH   | j d kr|  ¡  tr:| j d k	r:|  d¡ | j | j ¡ n
|  d¡ d S )Ns   +OK Begin TLS negotiation nows   -ERR TLS not available)r   Ú
getContextr   r   Ú	transportr:   r*   r   r   r   r:   È   s    

zPOP3TestServer.startTLSc                 C   s   | j  ¡  d S r   )rJ   ZloseConnectionr*   r   r   r   r'   Ó   s    zPOP3TestServer.disconnectc                 C   sF   zddl m} W n tk
r*   d | _Y nX | ¡ | _|jj| j_d S )Nr   )Ússl)Útwisted.internetrK   ÚImportErrorr   ZClientContextFactoryZSSLZTLSv1_METHODÚmethod)r   rK   r   r   r   rI   ×   s    
zPOP3TestServer.getContext)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r$   r+   r)   rH   r:   r'   rI   r   r   r   r   r	   :   s   
X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    rT   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 ResponseZtimeoutzTimeout ResponseZto_deferredzTimeout Deferred ResponseZslowzSlow Greetingz--help)Úlowerr   rT   r   rC   r8   r;   r&   r7   ÚBAD_TLS_RESPONSEr6   rE   r(   rR   Ú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 messagesr4   )ÚlenrX   ÚargvrT   r[   r   r	   Zprotocolr   Z	listenTCPÚPORTÚrun)ÚargsrZ   Úfr   r   r   Úmain6  s    

rc   Ú__main__)-Z
__future__r   Ztwisted.internet.protocolr   Ztwisted.protocolsr   rL   r   rX   r?   r@   r_   r   r   rC   r8   r;   r&   r7   rV   r6   rE   r(   r,   r!   r    r   r9   r=   r>   rA   Z	TLS_ERRORrB   rD   r   r   r   r   ZLineReceiverr	   rW   rT   r[   rc   rO   r   r   r   r   Ú<module>   sZ   ü (A