o
    ‹Íf#   ã                   @   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ÚtestÚ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                   @   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)ÚselfÚcontextFactory© r   úB/usr/lib/python3/dist-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   Ú	callLaterÚsendGreeting©r   r   r   r   ÚconnectionMadeV   s   zPOP3TestServer.connectionMadec                 C   r   r   )r   ÚCONNECTION_MADEr1   r   r   r   r0   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©Ú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   Úliner5   r)   Úpwdr   r7   r   ÚlineReceivedd   s„   
ÿ€ÿ


ùzPOP3TestServer.lineReceivedc                 C   sJ   | j d u r	|  ¡  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   Ú
getContextr$   r   Ú	transportrA   r1   r   r   r   rA   »   s   

zPOP3TestServer.startTLSc                 C   s   | j  ¡  d S r   )rR   ÚloseConnectionr1   r   r   r   r-   Å   r   zPOP3TestServer.disconnectc                 C   sF   zddl m} W n ty   d | _Y d S w | ¡ | _|jj| j_d S )Nr   )Ússl)Útwisted.internetrT   ÚImportErrorr   ÚClientContextFactoryÚSSLÚTLSv1_METHODÚmethod)r   rT   r   r   r   rQ   È   s   ÿ
zPOP3TestServer.getContextr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r*   r2   r0   rP   rA   r-   rQ   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   r`   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 )NÚno_sslFzNON-SSLÚno_uidlzNON-UIDLÚbad_respTzInvalid Server ResponseÚbad_cap_respzInvalid Capability ResponseÚbad_login_respÚdenyzDeny ConnectionÚdropzDrop ConnectionÚbad_tlszBad TLS ResponseÚtimeoutzTimeout ResponseÚto_deferredzTimeout Deferred ResponseÚslowzSlow Greetingz--help)Úlowerr$   r`   r!   rK   r?   rB   r,   r>   ÚBAD_TLS_RESPONSEr=   rM   r.   r^   ÚusageÚsysÚexit)Úargr   r   r   Ú
processArgæ   sL   rr   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 messagesr;   )Úlenro   Úargvr`   rr   r   r
   Úprotocolr   Ú	listenTCPÚPORTÚrun)Úargsrq   Úfr   r   r   Úmain(  s   

r|   Ú__main__)+ro   rU   r   Útwisted.internet.protocolr   Útwisted.protocolsr   rG   rH   rx   r$   r!   rK   r?   rB   r,   r>   rm   r=   rM   r.   r3   r&   r%   r#   r@   rD   rF   rI   Ú	TLS_ERRORrJ   rL   r   r   r   r    ÚLineReceiverr
   rn   r`   rr   r|   r[   r   r   r   r   Ú<module>   sV    B
ÿ