§
    Ètºf’  ã                   óÂ   — d Z ddlZddlZddlmZ ddlmZ ddlmZ  G d„ d¦  «        Z	 G d„ d	¦  «        Z
 G d
„ de
ej        ¦  «        Z G d„ de
ej        ¦  «        ZdS )z
Support for relaying mail.
é    N)ÚUNIXAddress)Úsmtp)Úlogc                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )	ÚDomainQueuerzM
    An SMTP domain which add messages to a queue intended for relaying.
    Fc                 ó"   — || _         || _        d S ©N)ÚserviceÚauthed)Úselfr
   Úauthenticateds      úQ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/mail/relay.pyÚ__init__zDomainQueuer.__init__   s   € ØˆŒØ#ˆŒˆˆó    c                 óž  ‡ ‡— ‰                       ‰j        ‰j        ¦  «        r˜t          dt	          ‰j        ¦  «                             dd¦  «        ¦  «        }t          dt	          ‰j        ¦  «                             dd¦  «        ¦  «        }t          |¦  «        dk    rt          |¦  «        dk    rˆ ˆfd„S t          j	        ‰¦  «        ‚)a‘  
        Check whether mail can be relayed to a user.

        @type user: L{User}
        @param user: A user.

        @rtype: no-argument callable which returns L{IMessage <smtp.IMessage>}
            provider
        @return: A function which takes no arguments and returns a message
            receiver for the user.

        @raise SMTPBadRcpt: When mail cannot be relayed to the user.
        Nú@é   é   c                  ó.   •— ‰                       ‰¦  «        S r	   )ÚstartMessage)r   Úusers   €€r   ú<lambda>z%DomainQueuer.exists.<locals>.<lambda>-   s   ø€ ˜t×0Ò0°Ñ6Ô6€ r   )
Ú	willRelayÚdestÚprotocolÚfilterÚstrÚorigÚsplitÚlenr   ÚSMTPBadRcpt)r   r   r   r   s   ``  r   ÚexistszDomainQueuer.exists   s®   øø€ ð �>Š>˜$œ) T¤]Ñ3Ô3ð 	7å˜$¥ D¤I¡¤× 4Ò 4°S¸!Ñ <Ô <Ñ=Ô=ˆDÝ˜$¥ D¤I¡¤× 4Ò 4°S¸!Ñ <Ô <Ñ=Ô=ˆDÝ�4‰yŒy˜AŠ~ˆ~¥# d¡)¤)¨q¢. .Ø6Ð6Ð6Ð6Ð6Ð6ÝÔ˜tÑ$Ô$Ð$r   c                 ó‚   — |j                              ¦   «         }| j        pt          |t          ¦  «        p
|j        dk    S )z¥
        Check whether we agree to relay.

        The default is to relay for all connections over UNIX
        sockets and all connections from localhost.
        z	127.0.0.1)Ú	transportÚgetPeerr   Ú
isinstancer   Úhost)r   Úaddressr   Úpeers       r   r   zDomainQueuer.willRelay0   s;   € ð Ô!×)Ò)Ñ+Ô+ˆØŒ{ÐW�j¨­{Ñ;Ô;ÐW¸t¼yÈKÒ?WÐWr   c           	      ór  — | j         j        }|                     ¦   «         \  }}|5  t          j        dt          |j        ¦  «        ›dt          |j        ¦  «        ›�¦  «         t          j	        t          |j        ¦  «        t          |j        ¦  «        g|¦  «         ddd¦  «         n# 1 swxY w Y   |S )zÜ
        Create an envelope and a message receiver for the relay queue.

        @type user: L{User}
        @param user: A user.

        @rtype: L{IMessage <smtp.IMessage>}
        @return: A message receiver.
        zQueueing mail z -> N)
r
   ÚqueueÚcreateNewMessager   Úmsgr   r   r   ÚpickleÚdump)r   r   r+   ÚenvelopeFileÚsmtpMessages        r   r   zDomainQueuer.startMessage:   sð   € ð ”Ô"ˆØ$)×$:Ò$:Ñ$<Ô$<Ñ!ˆ�kØð 	Hð 	HÝŒGÐM¥S¨¬¡^¤^ÐMÐM½3¸t¼y¹>¼>ÐMÐMÑNÔNÐNÝŒK�˜TœY™œ­¨T¬Y©¬Ð8¸,ÑGÔGÐGð	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	Hð Ðs   ¦A:B,Â,B0Â3B0N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r   r   © r   r   r   r      sb   € € € € € ðð ð$ð $ð $ð $ð%ð %ð %ð,Xð Xð Xðð ð ð ð r   r   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚRelayerMixinc                 ó`  — g | _         g | _        |D ]œ}t          |dz   d¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |dz   ¦  «        }|                     |¦  «         | j                              |¦  «         | j                             |¦  «         Œ�d S )Nú-HÚrbú-D)ÚmessagesÚnamesÚopenr.   ÚloadÚappend)r   ÚmessagePathsÚmessageÚfpÚmessageContentss        r   ÚloadMessageszRelayerMixin.loadMessagesQ   sð   € ØˆŒØˆŒ
Ø#ð 	'ð 	'ˆGÝ�g ‘n dÑ+Ô+ð 2¨rÝ"(¤+¨b¡/¤/�ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2å�g ‘nÑ%Ô%ˆBØ×"Ò" 2Ñ&Ô&Ð&ØŒM× Ò  Ñ1Ô1Ð1ØŒJ×Ò˜gÑ&Ô&Ð&Ð&ð	'ð 	's   ¦AÁA	ÁA	c                 ó:   — | j         sd S | j         d         d         S )Nr   ©r=   ©r   s    r   ÚgetMailFromzRelayerMixin.getMailFrom\   ó#   € ØŒ}ð 	Ø�4ØŒ}˜QÔ Ô"Ð"r   c                 ó<   — | j         sd S | j         d         d         gS )Nr   r   rH   rI   s    r   Ú	getMailTozRelayerMixin.getMailToa   s&   € ØŒ}ð 	Ø�4Ø”˜aÔ  Ô#Ð$Ð$r   c                 ó:   — | j         sd S | j         d         d         S )Nr   r   rH   rI   s    r   ÚgetMailDatazRelayerMixin.getMailDataf   rK   r   c                 óÊ   — |t           j        v rDt          j        | j        d         dz   ¦  «         t          j        | j        d         dz   ¦  «         | j        d= | j        d= dS )z·Since we only use one recipient per envelope, this
        will be called with 0 or 1 addresses. We probably want
        to do something with the error message if we failed.
        r   r<   r:   N)r   ÚSUCCESSÚosÚremover>   r=   )r   ÚcodeÚrespÚnumOkÚ	addressesr   s         r   ÚsentMailzRelayerMixin.sentMailk   s^   € ð
 •4”<ÐÐåŒI�d”j ”m dÑ*Ñ+Ô+Ð+ÝŒI�d”j ”m dÑ*Ñ+Ô+Ð+ØŒM˜!ÐØŒJ�qˆMˆMˆMr   N)r2   r3   r4   rF   rJ   rM   rO   rX   r6   r   r   r8   r8   L   s_   € € € € € ð
	'ð 	'ð 	'ð#ð #ð #ð
%ð %ð %ð
#ð #ð #ð

ð 
ð 
ð 
ð 
r   r8   c                   ó   — e Zd ZdZd„ ZdS )ÚSMTPRelayerz)
    A base class for SMTP relayers.
    c                 ód   — t          j        j        | g|¢R i |¤Ž |                      |¦  «         dS )aŽ  
        @type messagePaths: L{list} of L{bytes}
        @param messagePaths: The base filename for each message to be relayed.

        @type args: 1-L{tuple} of (0) L{bytes} or 2-L{tuple} of
            (0) L{bytes}, (1) L{int}
        @param args: Positional arguments for L{SMTPClient.__init__}

        @type kw: L{dict}
        @param kw: Keyword arguments for L{SMTPClient.__init__}
        N)r   Ú
SMTPClientr   rF   ©r   rB   ÚargsÚkws       r   r   zSMTPRelayer.__init__}   sA   € õ 	ŒÔ  Ð3¨Ð3Ð3Ð3°Ð3Ð3Ð3Ø×Ò˜,Ñ'Ô'Ð'Ð'Ð'r   N©r2   r3   r4   r5   r   r6   r   r   rZ   rZ   x   s-   € € € € € ðð ð(ð (ð (ð (ð (r   rZ   c                   ó   — e Zd ZdZd„ ZdS )ÚESMTPRelayerz*
    A base class for ESMTP relayers.
    c                 ód   — t          j        j        | g|¢R i |¤Ž |                      |¦  «         dS )a�  
        @type messagePaths: L{list} of L{bytes}
        @param messagePaths: The base filename for each message to be relayed.

        @type args: 3-L{tuple} of (0) L{bytes}, (1) L{None} or
            L{ClientContextFactory
            <twisted.internet.ssl.ClientContextFactory>},
            (2) L{bytes} or 4-L{tuple} of (0) L{bytes}, (1) L{None}
            or L{ClientContextFactory
            <twisted.internet.ssl.ClientContextFactory>}, (2) L{bytes},
            (3) L{int}
        @param args: Positional arguments for L{ESMTPClient.__init__}

        @type kw: L{dict}
        @param kw: Keyword arguments for L{ESMTPClient.__init__}
        N)r   ÚESMTPClientr   rF   r]   s       r   r   zESMTPRelayer.__init__’   sB   € õ" 	ÔÔ! $Ð4¨Ð4Ð4Ð4°Ð4Ð4Ð4Ø×Ò˜,Ñ'Ô'Ð'Ð'Ð'r   Nr`   r6   r   r   rb   rb   �   s-   € € € € € ðð ð(ð (ð (ð (ð (r   rb   )r5   rR   r.   Útwisted.internet.addressr   Útwisted.mailr   Útwisted.pythonr   r   r8   r\   rZ   rd   rb   r6   r   r   ú<module>rh      s  ðð
ð ð 
€	€	€	Ø €€€à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ðv)ð )ð )ð )ð )ñ )ô )ð )ðX(ð (ð (ð (ð (�, ¤ñ (ô (ð (ð*(ð (ð (ð (ð (�< Ô!1ñ (ô (ð (ð (ð (r   