Merge pull request #1515 from Hardolaf/feature/auth-refactor

[feature/auth-refactor] Use a base class for all authentication providers
This commit is contained in:
Nathan Guse 2013-07-12 12:51:35 -07:00
commit 86b910692a
9 changed files with 155 additions and 84 deletions

View file

@ -678,8 +678,12 @@ class acp_board
$auth_plugins = array();
$auth_providers = $phpbb_container->get('auth.provider_collection');
foreach($auth_providers as $key => $value)
foreach ($auth_providers as $key => $value)
{
if (!($value instanceof phpbb_auth_provider_interface))
{
continue;
}
$auth_plugins[] = str_replace('auth.provider.', '', $key);
}

View file

@ -20,7 +20,7 @@ if (!defined('IN_PHPBB'))
*
* @package auth
*/
class phpbb_auth_provider_apache implements phpbb_auth_provider_interface
class phpbb_auth_provider_apache extends phpbb_auth_provider_base
{
/**
* Apache Authentication Constructor
@ -256,20 +256,4 @@ class phpbb_auth_provider_apache implements phpbb_auth_provider_interface
return false;
}
/**
* {@inheritdoc}
*/
public function acp($new)
{
return;
}
/**
* {@inheritdoc}
*/
public function logout($data, $new_session)
{
return;
}
}

View file

@ -0,0 +1,64 @@
<?php
/**
*
* @package auth
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Base authentication provider class that all other providers should implement
*
* @package auth
*/
abstract class phpbb_auth_provider_base implements phpbb_auth_provider_interface
{
/**
* {@inheritdoc}
*/
public function init()
{
return;
}
/**
* {@inheritdoc}
*/
public function autologin()
{
return;
}
/**
* {@inheritdoc}
*/
public function acp($new)
{
return;
}
/**
* {@inheritdoc}
*/
public function logout($data, $new_session)
{
return;
}
/**
* {@inheritdoc}
*/
public function validate_session($user)
{
return;
}
}

View file

@ -22,7 +22,7 @@ if (!defined('IN_PHPBB'))
*
* @package auth
*/
class phpbb_auth_provider_db implements phpbb_auth_provider_interface
class phpbb_auth_provider_db extends phpbb_auth_provider_base
{
/**
@ -45,14 +45,6 @@ class phpbb_auth_provider_db implements phpbb_auth_provider_interface
$this->php_ext = $php_ext;
}
/**
* {@inheritdoc}
*/
public function init()
{
return;
}
/**
* {@inheritdoc}
*/
@ -302,36 +294,4 @@ class phpbb_auth_provider_db implements phpbb_auth_provider_interface
'user_row' => $row,
);
}
/**
* {@inheritdoc}
*/
public function autologin()
{
return;
}
/**
* {@inheritdoc}
*/
public function acp($new)
{
return;
}
/**
* {@inheritdoc}
*/
public function logout($data, $new_session)
{
return;
}
/**
* {@inheritdoc}
*/
public function validate_session($user)
{
return;
}
}

View file

@ -22,7 +22,7 @@ if (!defined('IN_PHPBB'))
*
* @package auth
*/
class phpbb_auth_provider_ldap implements phpbb_auth_provider_interface
class phpbb_auth_provider_ldap extends phpbb_auth_provider_base
{
/**
* LDAP Authentication Constructor
@ -283,14 +283,6 @@ class phpbb_auth_provider_ldap implements phpbb_auth_provider_interface
);
}
/**
* {@inheritdoc}
*/
public function autologin()
{
return;
}
/**
* {@inheritdoc}
*/
@ -367,20 +359,4 @@ class phpbb_auth_provider_ldap implements phpbb_auth_provider_interface
{
return str_replace(array('*', '\\', '(', ')'), array('\\*', '\\\\', '\\(', '\\)'), $string);
}
/**
* {@inheritdoc}
*/
public function logout($data, $new_session)
{
return;
}
/**
* {@inheritdoc}
*/
public function validate_session($user)
{
return;
}
}

View file

@ -404,6 +404,12 @@ class phpbb_session
$method = basename(trim($config['auth_method']));
$provider = $phpbb_container->get('auth.provider.' . $method);
if (!($provider instanceof phpbb_auth_provider_interface))
{
throw new \RuntimeException($provider . ' must implement phpbb_auth_provider_interface');
}
$ret = $provider->validate_session($this->data);
if ($ret !== null && !$ret)
{

View file

@ -0,0 +1,13 @@
<?php
/**
*
* @package testing
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_auth_provider_acp_board_invalid
{
}

View file

@ -0,0 +1,16 @@
<?php
/**
*
* @package testing
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_auth_provider_acp_board_valid extends phpbb_auth_provider_base
{
public function login($username, $password)
{
return;
}
}

View file

@ -0,0 +1,48 @@
<?php
/**
*
* @package testing
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/acp/acp_board.php';
require_once dirname(__FILE__) . '/auth_provider/invalid.php';
require_once dirname(__FILE__) . '/auth_provider/valid.php';
class phpbb_acp_board_select_auth_method_test extends phpbb_test_case
{
protected $acp_board;
public static function select_auth_method_data()
{
return array(
array('acp_board_valid', '<option value="acp_board_valid" selected="selected">Acp_board_valid</option>'),
array('acp_board_invalid', '<option value="acp_board_valid">Acp_board_valid</option>'),
);
}
public function setUp()
{
parent::setUp();
global $phpbb_container;
$phpbb_container = new phpbb_mock_container_builder();
$phpbb_container->set('auth.provider_collection', array(
'auth.provider.acp_board_valid' => new phpbb_auth_provider_acp_board_valid,
'auth.provider.acp_board_invalid' => new phpbb_auth_provider_acp_board_invalid,
));
$this->acp_board = new acp_board();
}
/**
* @dataProvider select_auth_method_data
*/
public function test_select_auth_method($selected, $expected)
{
$this->assertEquals($expected, $this->acp_board->select_auth_method($selected));
}
}