Вход Регистрация
Файл: src/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php
Строк: 325
<?php

class Swift_Transport_Esmtp_Auth_NTLMAuthenticatorTest extends SwiftMailerTestCase
{
    private 
$_message1 '4e544c4d535350000100000007020000';
    private 
$_message2 '4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000';
    private 
$_message3 '4e544c4d5353500003000000180018006000000076007600780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d00420045005200bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000';

    public function 
setUp()
    {
        if (!
function_exists('mcrypt_module_open') || !function_exists('openssl_random_pseudo_bytes') || !function_exists('bcmul') || !function_exists('iconv')) {
            
$this->markTestSkipped(
                
'One of the required functions is not available.'
             
);
        }
    }

    public function 
testKeywordIsNtlm()
    {
        
$login $this->_getAuthenticator();
        
$this->assertEquals('NTLM'$login->getAuthKeyword());
    }

    public function 
testMessage1Generator()
    {
        
$login $this->_getAuthenticator();
        
$message1 $this->_invokePrivateMethod('createMessage1'$login);

        
$this->assertEquals($this->_message1bin2hex($message1),
            
'%s: We send the smallest ntlm message which should never fail.'
        
);
    }

    public function 
testLMv1Generator()
    {
        
$password 'test1234';
        
$challenge 'b019d38bad875c9d';
        
$lmv1 '1879f60127f8a877022132ec221bcbf3ca016a9f76095606';

        
$login $this->_getAuthenticator();
        
$lmv1Result $this->_invokePrivateMethod('createLMPassword'$login, array($password$this->hex2bin($challenge)));

        
$this->assertEquals($lmv1bin2hex($lmv1Result),
            
'%s: The keys should be the same cause we use the same values to generate them.'
        
);
    }

    public function 
testLMv2Generator()
    {
        
$username 'user';
        
$password 'SecREt01';
        
$domain 'DOMAIN';
        
$challenge '0123456789abcdef';
        
$lmv2 'd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344';

        
$login $this->_getAuthenticator();
        
$lmv2Result $this->_invokePrivateMethod('createLMv2Password'$login, array($password$username$domain$this->hex2bin($challenge), $this->hex2bin('ffffff0011223344')));

        
$this->assertEquals($lmv2bin2hex($lmv2Result),
            
'%s: The keys should be the same cause we use the same values to generate them.'
        
);
    }

    public function 
testMessage3v1Generator()
    {
        
$username 'test';
        
$domain 'TESTNT';
        
$workstation 'MEMBER';
        
$lmResponse '1879f60127f8a877022132ec221bcbf3ca016a9f76095606';
        
$ntlmResponse 'e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a';
        
$message3T '4e544c4d5353500003000000180018006000000018001800780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d004200450052001879f60127f8a877022132ec221bcbf3ca016a9f76095606e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a';

        
$login $this->_getAuthenticator();
        
$message3 $this->_invokePrivateMethod('createMessage3'$login, array($domain$username$workstation$this->hex2bin($lmResponse), $this->hex2bin($ntlmResponse)));

        
$this->assertEquals($message3Tbin2hex($message3),
            
'%s: We send the same information as the example is created with so this should be the same'
        
);
    }

    public function 
testMessage3v2Generator()
    {
        
$username 'test';
        
$domain 'TESTNT';
        
$workstation 'MEMBER';
        
$lmResponse 'bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9';
        
$ntlmResponse 'caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000';

        
$login $this->_getAuthenticator();
        
$message3 $this->_invokePrivateMethod('createMessage3'$login, array($domain$username$workstation$this->hex2bin($lmResponse), $this->hex2bin($ntlmResponse)));

        
$this->assertEquals($this->_message3bin2hex($message3),
            
'%s: We send the same information as the example is created with so this should be the same'
        
);
    }

    public function 
testGetDomainAndUsername()
    {
        
$username "DOMAINuser";

        
$login $this->_getAuthenticator();
        list(
$domain$user) = $this->_invokePrivateMethod('getDomainAndUsername'$login, array($username));

        
$this->assertEquals('DOMAIN'$domain,
            
'%s: the fetched domain did not match'
        
);
        
$this->assertEquals('user'$user,
            
'%s: the fetched user did not match'
        
);
    }

    public function 
testGetDomainAndUsernameWithExtension()
    {
        
$username "domain.comuser";

        
$login $this->_getAuthenticator();
        list(
$domain$user) = $this->_invokePrivateMethod('getDomainAndUsername'$login, array($username));

        
$this->assertEquals('domain.com'$domain,
            
'%s: the fetched domain did not match'
        
);
        
$this->assertEquals('user'$user,
            
'%s: the fetched user did not match'
        
);
    }

    public function 
testGetDomainAndUsernameWithAtSymbol()
    {
        
$username 'user@DOMAIN';

        
$login $this->_getAuthenticator();
        list(
$domain$user) = $this->_invokePrivateMethod('getDomainAndUsername'$login, array($username));

        
$this->assertEquals('DOMAIN'$domain,
            
'%s: the fetched domain did not match'
        
);
        
$this->assertEquals('user'$user,
            
'%s: the fetched user did not match'
        
);
    }

    public function 
testGetDomainAndUsernameWithAtSymbolAndExtension()
    {
        
$username 'user@domain.com';

        
$login $this->_getAuthenticator();
        list(
$domain$user) = $this->_invokePrivateMethod('getDomainAndUsername'$login, array($username));

        
$this->assertEquals('domain.com'$domain,
            
'%s: the fetched domain did not match'
        
);
        
$this->assertEquals('user'$user,
            
'%s: the fetched user did not match'
        
);
    }

    public function 
testSuccessfulAuthentication()
    {
        
$domain 'TESTNT';
        
$username 'test';
        
$secret 'test1234';

        
$ntlm $this->_getAuthenticator();
        
$agent $this->_getAgent();
        
$agent->shouldReceive('executeCommand')
              ->
once()
              ->
with('AUTH NTLM '.base64_encode(
                        
$this->_invokePrivateMethod('createMessage1'$ntlm)
                    ).
"rn", array(334))
              ->
andReturn('334 '.base64_encode($this->hex2bin('4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000')));
        
$agent->shouldReceive('executeCommand')
              ->
once()
              ->
with(base64_encode(
                        
$this->_invokePrivateMethod('createMessage3'$ntlm, array($domain$username$this->hex2bin('4d0045004d00420045005200'), $this->hex2bin('bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'), $this->hex2bin('caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000'))
                    )).
"rn", array(235));

        
$this->assertTrue($ntlm->authenticate($agent$username.'@'.$domain$secret$this->hex2bin('30fa7e3c677bc301'), $this->hex2bin('f5ce3d2401c8f6e9')),
            
'%s: The buffer accepted all commands authentication should succeed'
        
);
    }

    public function 
testAuthenticationFailureSendRsetAndReturnFalse()
    {
        
$domain 'TESTNT';
        
$username 'test';
        
$secret 'test1234';

        
$ntlm $this->_getAuthenticator();
        
$agent $this->_getAgent();
        
$agent->shouldReceive('executeCommand')
              ->
once()
              ->
with('AUTH NTLM '.base64_encode(
                        
$this->_invokePrivateMethod('createMessage1'$ntlm)
                    ).
"rn", array(334))
              ->
andThrow(new Swift_TransportException(''));
        
$agent->shouldReceive('executeCommand')
              ->
once()
              ->
with("RSETrn", array(250));

        
$this->assertFalse($ntlm->authenticate($agent$username.'@'.$domain$secret$this->hex2bin('30fa7e3c677bc301'), $this->hex2bin('f5ce3d2401c8f6e9')),
            
'%s: Authentication fails, so RSET should be sent'
        
);
    }

    
// -- Private helpers
    
private function _getAuthenticator()
    {
        return new 
Swift_Transport_Esmtp_Auth_NTLMAuthenticator();
    }

    private function 
_getAgent()
    {
        return 
$this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing();
    }

    private function 
_invokePrivateMethod($method$instance, array $args = array())
    {
        
$methodC = new ReflectionMethod($instancetrim($method));
        
$methodC->setAccessible(true);

        return 
$methodC->invokeArgs($instance$args);
    }

    
/**
     * Hex2bin replacement for < PHP 5.4.
     *
     * @param string $hex
     *
     * @return string Binary
     */
    
protected function hex2bin($hex)
    {
        return 
function_exists('hex2bin') ? hex2bin($hex) : pack('H*'$hex);
    }
}
Онлайн: 1
Реклама