Skip to content
Snippets Groups Projects
Commit 3b0edcee authored by Thijs Kinkhorst's avatar Thijs Kinkhorst
Browse files

Merge branch 'unt01d-auth_source_factories'

parents d2dd5cca d6106c94
Branches
Tags
No related merge requests found
<?php <?php
use SimpleSAML\Auth\SourceFactory;
/** /**
* This class defines a base class for authentication source. * This class defines a base class for authentication source.
...@@ -295,11 +296,26 @@ abstract class SimpleSAML_Auth_Source ...@@ -295,11 +296,26 @@ abstract class SimpleSAML_Auth_Source
self::validateSource($config, $authId); self::validateSource($config, $authId);
$className = SimpleSAML\Module::resolveClass($config[0], 'Auth_Source', 'SimpleSAML_Auth_Source'); $id = $config[0];
$info = array('AuthId' => $authId); $info = array('AuthId' => $authId);
$authSource = null;
unset($config[0]); unset($config[0]);
return new $className($info, $config);
try {
// Check whether or not there's a factory responsible for instantiating our Auth Source instance
$factoryClass = SimpleSAML\Module::resolveClass($id, 'Auth_Source_Factory', 'SimpleSAML\Auth\SourceFactory');
/** @var SourceFactory $factory */
$factory = new $factoryClass;
$authSource = $factory->create($info, $config);
} catch (Exception $e) {
// If not, instantiate the Auth Source here
$className = SimpleSAML\Module::resolveClass($id, 'Auth_Source', 'SimpleSAML_Auth_Source');
$authSource = new $className($info, $config);
}
return $authSource;
} }
......
<?php
namespace SimpleSAML\Auth;
use SimpleSAML_Auth_Source;
interface SourceFactory
{
/**
* @param array $info
* @param array $config
* @return SimpleSAML_Auth_Source
*/
public function create(array $info, array $config);
}
<?php
namespace SimpleSAML\Test\Auth;
use SimpleSAML\Auth\SourceFactory;
use SimpleSAML\Test\Utils\ClearStateTestCase;
/**
* Tests for SimpleSAML_Auth_Source
*/
class SourceTest extends ClearStateTestCase
{
public function testParseAuthSource()
{
$class = new \ReflectionClass('SimpleSAML_Auth_Source');
$method = $class->getMethod('parseAuthSource');
$method->setAccessible(true);
// test direct instantiation of the auth source object
$authSource = $method->invokeArgs(null, ['test', ['SimpleSAML\Test\Auth\TestAuthSource']]);
$this->assertInstanceOf('SimpleSAML\Test\Auth\TestAuthSource', $authSource);
// test instantiation via an auth source factory
$authSource = $method->invokeArgs(null, ['test', ['SimpleSAML\Test\Auth\TestAuthSourceFactory']]);
$this->assertInstanceOf('SimpleSAML\Test\Auth\TestAuthSource', $authSource);
}
}
class TestAuthSource extends \SimpleSAML_Auth_Source
{
public function authenticate(&$state)
{
}
}
class TestAuthSourceFactory implements SourceFactory
{
public function create(array $info, array $config)
{
return new TestAuthSource($info, $config);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment