2007-09-14 05:12:21 +02:00
|
|
|
<?php
|
2016-06-23 01:37:22 +02:00
|
|
|
|
|
|
|
namespace SilverStripe\Security;
|
|
|
|
|
2016-08-19 00:51:35 +02:00
|
|
|
use SilverStripe\Core\Object;
|
|
|
|
use SilverStripe\Control\Controller;
|
|
|
|
use SilverStripe\Forms\Form;
|
2016-06-23 01:37:22 +02:00
|
|
|
|
2007-09-14 05:12:21 +02:00
|
|
|
/**
|
|
|
|
* Abstract base class for an authentication method
|
|
|
|
*
|
|
|
|
* This class is used as a base class for the different authentication
|
|
|
|
* methods like {@link MemberAuthenticator} or {@link OpenIDAuthenticator}.
|
|
|
|
*
|
|
|
|
* @author Markus Lanthaler <markus@silverstripe.com>
|
|
|
|
*/
|
2007-09-16 02:44:30 +02:00
|
|
|
abstract class Authenticator extends Object {
|
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* This variable holds all authenticators that should be used
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
2016-06-23 01:37:22 +02:00
|
|
|
private static $authenticators = array('SilverStripe\\Security\\MemberAuthenticator');
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Used to influence the order of authenticators on the login-screen
|
|
|
|
* (default shows first).
|
2014-08-15 08:53:05 +02:00
|
|
|
*
|
2012-12-08 12:20:20 +01:00
|
|
|
* @var string
|
|
|
|
*/
|
2016-06-23 01:37:22 +02:00
|
|
|
private static $default_authenticator = 'SilverStripe\\Security\\MemberAuthenticator';
|
2012-12-08 12:20:20 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to authenticate an user
|
|
|
|
*
|
|
|
|
* @param array $RAW_data Raw data to authenticate the user
|
|
|
|
* @param Form $form Optional: If passed, better error messages can be
|
|
|
|
* produced by using
|
|
|
|
* {@link Form::sessionMessage()}
|
|
|
|
* @return bool|Member Returns FALSE if authentication fails, otherwise
|
|
|
|
* the member object
|
|
|
|
*/
|
2012-03-27 06:04:11 +02:00
|
|
|
public static function authenticate($RAW_data, Form $form = null) {
|
|
|
|
}
|
2007-09-14 05:12:21 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Method that creates the login form for this authentication method
|
|
|
|
*
|
2016-06-23 01:37:22 +02:00
|
|
|
* @param Controller $controller The parent controller, necessary to create the
|
2012-12-08 12:20:20 +01:00
|
|
|
* appropriate form action tag
|
|
|
|
* @return Form Returns the login form to use with this authentication
|
|
|
|
* method
|
|
|
|
*/
|
2012-03-27 06:04:11 +02:00
|
|
|
public static function get_login_form(Controller $controller) {
|
|
|
|
}
|
2007-09-14 21:13:12 +02:00
|
|
|
|
2014-10-06 05:01:33 +02:00
|
|
|
/**
|
|
|
|
* Method that creates the re-authentication form for the in-CMS view
|
|
|
|
*
|
|
|
|
* @param Controller $controller
|
|
|
|
*/
|
|
|
|
public static function get_cms_login_form(Controller $controller) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Determine if this authenticator supports in-cms reauthentication
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public static function supports_cms() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2007-09-14 21:13:12 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Get the name of the authentication method
|
|
|
|
*
|
|
|
|
* @return string Returns the name of the authentication method.
|
|
|
|
*/
|
2012-03-27 06:04:11 +02:00
|
|
|
public static function get_name() {
|
|
|
|
}
|
2007-09-15 02:08:23 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
public static function register($authenticator) {
|
2014-10-06 05:01:33 +02:00
|
|
|
self::register_authenticator($authenticator);
|
2012-12-08 12:20:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Register a new authenticator
|
|
|
|
*
|
|
|
|
* The new authenticator has to exist and to be derived from the
|
|
|
|
* {@link Authenticator}.
|
|
|
|
* Every authenticator can be registered only once.
|
|
|
|
*
|
|
|
|
* @param string $authenticator Name of the authenticator class to
|
|
|
|
* register
|
|
|
|
* @return bool Returns TRUE on success, FALSE otherwise.
|
|
|
|
*/
|
|
|
|
public static function register_authenticator($authenticator) {
|
|
|
|
$authenticator = trim($authenticator);
|
|
|
|
|
|
|
|
if(class_exists($authenticator) == false)
|
|
|
|
return false;
|
|
|
|
|
2016-06-23 01:37:22 +02:00
|
|
|
if(is_subclass_of($authenticator, 'SilverStripe\\Security\\Authenticator') == false)
|
2012-12-08 12:20:20 +01:00
|
|
|
return false;
|
|
|
|
|
|
|
|
if(in_array($authenticator, self::$authenticators) == false) {
|
|
|
|
if(call_user_func(array($authenticator, 'on_register')) === true) {
|
|
|
|
array_push(self::$authenticators, $authenticator);
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
public static function unregister($authenticator) {
|
|
|
|
self::unregister_authenticator($authenticator);
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2008-04-09 13:14:30 +02:00
|
|
|
/**
|
|
|
|
* Remove a previously registered authenticator
|
|
|
|
*
|
|
|
|
* @param string $authenticator Name of the authenticator class to register
|
|
|
|
* @return bool Returns TRUE on success, FALSE otherwise.
|
|
|
|
*/
|
|
|
|
public static function unregister_authenticator($authenticator) {
|
|
|
|
if(call_user_func(array($authenticator, 'on_unregister')) === true) {
|
2014-10-06 05:01:33 +02:00
|
|
|
if(in_array($authenticator, self::$authenticators)) {
|
|
|
|
unset(self::$authenticators[array_search($authenticator, self::$authenticators)]);
|
|
|
|
}
|
|
|
|
}
|
2008-04-09 13:14:30 +02:00
|
|
|
}
|
2007-09-15 02:08:23 +02:00
|
|
|
|
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Check if a given authenticator is registered
|
|
|
|
*
|
|
|
|
* @param string $authenticator Name of the authenticator class to check
|
|
|
|
* @return bool Returns TRUE if the authenticator is registered, FALSE
|
|
|
|
* otherwise.
|
|
|
|
*/
|
|
|
|
public static function is_registered($authenticator) {
|
|
|
|
return in_array($authenticator, self::$authenticators);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all registered authenticators
|
|
|
|
*
|
|
|
|
* @return array Returns an array with the class names of all registered
|
|
|
|
* authenticators.
|
|
|
|
*/
|
|
|
|
public static function get_authenticators() {
|
|
|
|
// put default authenticator first (mainly for tab-order on loginform)
|
|
|
|
if($key = array_search(self::$default_authenticator,self::$authenticators)) {
|
|
|
|
unset(self::$authenticators[$key]);
|
|
|
|
array_unshift(self::$authenticators, self::$default_authenticator);
|
|
|
|
}
|
|
|
|
|
|
|
|
return self::$authenticators;
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Set a default authenticator (shows first in tabs)
|
|
|
|
*
|
|
|
|
* @param string
|
|
|
|
*/
|
|
|
|
public static function set_default_authenticator($authenticator) {
|
|
|
|
self::$default_authenticator = $authenticator;
|
2014-08-15 08:53:05 +02:00
|
|
|
|
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public static function get_default_authenticator() {
|
|
|
|
return self::$default_authenticator;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Callback function that is called when the authenticator is registered
|
|
|
|
*
|
|
|
|
* Use this method for initialization of a newly registered authenticator.
|
|
|
|
* Just overload this method and it will be called when the authenticator
|
|
|
|
* is registered.
|
|
|
|
* <b>If the method returns FALSE, the authenticator won't be
|
|
|
|
* registered!</b>
|
|
|
|
*
|
|
|
|
* @return bool Returns TRUE on success, FALSE otherwise.
|
|
|
|
*/
|
|
|
|
protected static function on_register() {
|
|
|
|
return true;
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-12-08 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Callback function that is called when an authenticator is removed.
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
protected static function on_unregister() {
|
|
|
|
return true;
|
|
|
|
}
|
2007-09-14 05:12:21 +02:00
|
|
|
}
|
|
|
|
|