
    Vh#                        d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ dZ ee	j                         G d d             Z G d	 d
ej                         Z G d dej$                        Z G d dej$                        Zy)    )implementer)defer)unittest)jidsaslsasl_mechanisms	xmlstream)domish urn:ietf:params:xml:ns:xmpp-saslc                   .    e Zd ZdZdZdZdZd Zd Zd Z	y)DummySASLMechanisma  
    Dummy SASL mechanism.

    This just returns the initialResponse passed on creation, stores any
    challenges and replies with the value of C{response}.

    @ivar challenge: Last received challenge.
    @type challenge: C{unicode}.
    @ivar initialResponse: Initial response to be returned when requested
                           via C{getInitialResponse} or L{None}.
    @type initialResponse: C{unicode}
    NDUMMY    c                     || _         y NinitialResponse)selfr   s     R/home/dcms/DCMS/lib/python3.12/site-packages/twisted/words/test/test_jabbersasl.py__init__zDummySASLMechanism.__init__"   s
    .r   c                     | j                   S r   r   r   s    r   getInitialResponsez%DummySASLMechanism.getInitialResponse%   s    ###r   c                 (    || _         | j                  S r   )	challengeresponse)r   r   s     r   getResponsezDummySASLMechanism.getResponse(   s    "}}r   )
__name__
__module____qualname____doc__r   namer   r   r   r    r   r   r   r      s'     IDH/$r   r   c                       e Zd ZdZdZd Zy)DummySASLInitiatingInitializerac  
    Dummy SASL Initializer for initiating entities.

    This hardwires the SASL mechanism to L{DummySASLMechanism}, that is
    instantiated with the value of C{initialResponse}.

    @ivar initialResponse: The initial response to be returned by the
                           dummy SASL mechanism or L{None}.
    @type initialResponse: C{unicode}.
    Nc                 8    t        | j                        | _        y r   )r   r   	mechanismr   s    r   setMechanismz+DummySASLInitiatingInitializer.setMechanism;   s    +D,@,@Ar   )r   r   r    r!   r   r(   r#   r   r   r%   r%   -   s    	 OBr   r%   c                   R    e 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y)SASLInitiatingInitializerTestsz5
    Tests for L{sasl.SASLInitiatingInitializer}
    c                 t   g | _         t        j                         | _        t        j                  | j                        | _        | j                   j
                  | j                  _        | j                  j                          | j                  j                  d       t        | j                        | _
        y )Ns   <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>)outputr	   Authenticatorauthenticator	XmlStreamappendsendconnectionMadedataReceivedr%   initr   s    r   setUpz$SASLInitiatingInitializerTests.setUpD   s    &446",,T-?-?@"kk00%%'##<	

 34>>B	r   c                     t        j                  d      }|j                  d       t        j                          j
                  _         j
                  j                  |        j                   j
                  j                  t        j                          j
                  j                  j                   fd        j
                  j                  S )zL
        Test that the SASL error condition is correctly extracted.
        )r   failurenot-authorizedc                 <    j                  d| j                        S )Nr8   )assertEqual	condition)er   s    r   <lambda>z?SASLInitiatingInitializerTests.test_onFailure.<locals>.<lambda>\   s    d&&'7E r   )r
   Element
addElementr   Deferredr4   	_deferred	onFailureassertFailurer   SASLAuthErroraddCallback)r   r7   s   ` r   test_onFailurez-SASLInitiatingInitializerTests.test_onFailureR   s     ..!PQ+,#nn.				G$499..0B0BC		''E	
 yy"""r   c                 P   d| j                   _        | j                   j                          | j                  d   }| j	                  t
        |j                         | j	                  d|j                         | j	                  d|d          | j	                  dt        |             y)zH
        Test starting authentication with an initial response.
        s   dummyr   authr   r'   zZHVtbXk=N)	r4   r   startr,   r:   NS_XMPP_SASLurir"   strr   rH   s     r   test_sendAuthInitialResponsez;SASLInitiatingInitializerTests.test_sendAuthInitialResponse`   s|     %-		!		{{1~txx0+${"34SY/r   c                     d| j                   _        | j                   j                          | j                  d   }| j	                  dt        |             y)zK
        Test starting authentication without an initial response.
        Nr    r4   r   rI   r,   r:   rL   rM   s     r   test_sendAuthNoInitialResponsez=SASLInitiatingInitializerTests.test_sendAuthNoInitialResponsel   s?     %)		!		{{1~SY'r   c                     d| j                   _        | j                   j                          | j                  d   }| j	                  dt        |             y)zS
        Test starting authentication where the initial response is empty.
        r   r   =NrQ   rM   s     r   !test_sendAuthEmptyInitialResponsez@SASLInitiatingInitializerTests.test_sendAuthEmptyInitialResponseu   s?     %(		!		{{1~c$i(r   c                 ^   | j                   j                         }t        j                  t        df      }|j                  d       | j                   j                  |       | j                  d| j                   j                  j                         | j                   j                  d       |S )z5
        Test receiving a challenge message.
        r   bXkgY2hhbGxlbmdls   my challengeN)r4   rI   r
   r>   rJ   
addContentonChallenger:   r'   r   	onSuccessr   dr   s      r   test_onChallengez/SASLInitiatingInitializerTests.test_onChallenge~   s     IIOONNL+#>?	/0		i($))*=*=*G*GH		D!r   c                    | j                   j                         }t        j                  t        df      }|j                  d       d| j                   j                  _        | j                   j                  |       | j                  d   }| j                  dt        |             | j                   j                  d       |S )zS
        A non-empty response gets encoded and included as character data.
        r   rW   s   response   zcmVzcG9uc2U=N)r4   rI   r
   r>   rJ   rX   r'   r   rY   r,   r:   rL   rZ   )r   r\   r   r   s       r   test_onChallengeResponsez7SASLInitiatingInitializerTests.test_onChallengeResponse   s     IIOONNL+#>?	/0'2		$		i(;;q>X7		D!r   c                 <   | j                   j                         }t        j                  t        df      }| j                   j                  |       | j                  d| j                   j                  j                         | j                   j                  d       |S )z<
        Test receiving an empty challenge message.
        r   r   N)
r4   rI   r
   r>   rJ   rY   r:   r'   r   rZ   r[   s      r   test_onChallengeEmptyz4SASLInitiatingInitializerTests.test_onChallengeEmpty   sp     IIOONNL+#>?			i(dii11;;<		D!r   c                    | j                   j                         }t        j                  t        df      }|j                  d       | j                   j                  |       | j                  |t        j                         |S )zJ
        Test receiving a challenge message with illegal padding.
        r   zbXkg=Y2hhbGxlbmdl
r4   rI   r
   r>   rJ   rX   rY   rC   r   SASLIncorrectEncodingErrorr[   s      r   test_onChallengeIllegalPaddingz=SASLInitiatingInitializerTests.test_onChallengeIllegalPadding   c     IIOONNL+#>?	01		i(1d==>r   c                    | j                   j                         }t        j                  t        df      }|j                  d       | j                   j                  |       | j                  |t        j                         |S )zM
        Test receiving a challenge message with illegal characters.
        r   zbXkg*Y2hhbGxlbmdlrd   r[   s      r   !test_onChallengeIllegalCharactersz@SASLInitiatingInitializerTests.test_onChallengeIllegalCharacters   rg   r   c                    | j                   j                         }t        j                  t        df      }|j                  d       | j                   j                  |       | j                  |t        j                         |S )z?
        Test receiving a malformed challenge message.
        r   ard   r[   s      r   test_onChallengeMalformedz8SASLInitiatingInitializerTests.test_onChallengeMalformed   sb     IIOONNL+#>?	S!		i(1d==>r   N)r   r   r    r!   r5   rF   rN   rR   rU   r]   r`   rb   rf   ri   rl   r#   r   r   r*   r*   ?   s?    C#
0()
				r   r*   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
*SASLInitiatingInitializerSetMechanismTestszB
    Test for L{sasl.SASLInitiatingInitializer.setMechanism}.
    c                    g | _         t        j                         | _        t        j                  | j                        | _        | j                   j
                  | j                  _        | j                  j                          | j                  j                  d       t        j                  | j                        | _        y )Nz<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>)r,   r	   r-   r.   r/   r0   r1   r2   r3   r   SASLInitiatingInitializerr4   r   s    r   r5   z0SASLInitiatingInitializerSetMechanismTests.setUp   s    &446",,T-?-?@"kk00%%'##;	
 224>>B	r   c                 0   t        j                  t        df      }|j                  d|       || j                  j
                  |j                  |j                  f<   | j                  j                          | j                  j                  j                  S )zX
        Set up the XML Stream to have a SASL feature with the given mechanism.
        
mechanismsr'   )content)r
   r>   rJ   r?   r	   featuresrK   r"   r4   r(   r'   )r   r"   features      r   _setMechanismz8SASLInitiatingInitializerSetMechanismTests._setMechanism   sq     ..,!=>;5?Fgll ;<		 yy""'''r   c                     t        j                  d      | j                  _         d| j                  _        d}| j	                  || j                  |             y)zI
        Test setting ANONYMOUS as the authentication mechanism.
        example.comN	ANONYMOUSr   JIDr.   passwordr:   rv   r   r"   s     r   test_anonymousz9SASLInitiatingInitializerSetMechanismTests.test_anonymous   sI     "%!7&*#t11$78r   c                     t        j                  d      | j                  _         d| j                  _        d}| j	                  || j                  |             y)zE
        Test setting PLAIN as the authentication mechanism.
        test@example.comsecretPLAINNrz   r}   s     r   
test_plainz5SASLInitiatingInitializerSetMechanismTests.test_plain   sJ     "%);!<&.#t11$78r   c                     t        j                  d      | j                  _         d| j                  _        d}| j	                  || j                  |             y)zJ
        Test setting DIGEST-MD5 as the authentication mechanism.
        r   r   z
DIGEST-MD5Nrz   r}   s     r   test_digestz6SASLInitiatingInitializerSetMechanismTests.test_digest   sJ     "%);!<&.#t11$78r   c                     t        j                  d      | j                  _         d| j                  _        | j	                  t
        j                  | j                  d       y)zK
        Test using an unacceptable SASL authentication mechanism.
        r   r   SOMETHING_UNACCEPTABLENr   r{   r.   r|   assertRaisesr   SASLNoAcceptableMechanismrv   r   s    r   test_notAcceptablez=SASLInitiatingInitializerSetMechanismTests.test_notAcceptable  sL    
 "%);!<&.#**D,>,>@X	
r   c                     t        j                  d      | j                  _         d| j                  _        | j	                  t
        j                  | j                  d       y)zW
        Test using an unacceptable SASL authentication mechanism with no JID.
        rx   r   r   Nr   r   s    r   test_notAcceptableWithoutUserzHSASLInitiatingInitializerSetMechanismTests.test_notAcceptableWithoutUser  sK     "%!7&.#**D,>,>@X	
r   N)r   r   r    r!   r5   rv   r~   r   r   r   r   r#   r   r   rn   rn      s+    C	(999

	
r   rn   N)zope.interfacer   twisted.internetr   twisted.trialr   twisted.words.protocols.jabberr   r   r   r	   twisted.words.xishr
   rJ   ISASLMechanismr   rp   r%   TestCaser*   rn   r#   r   r   <module>r      s   
 ' " " P P %1 _++,  -:BT%C%C B$CX%6%6 CLR
1B1B R
r   