allow configuring user backends in config.php

This commit is contained in:
Robin Appelman 2012-09-01 02:48:54 +02:00
parent f67aef608f
commit 3dacf149de
2 changed files with 35 additions and 1 deletions

View File

@ -351,6 +351,9 @@ class OC{
}
}
//setup extra user backends
OC_User::setupBackends();
// register cache cleanup jobs
OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc');
OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
@ -423,6 +426,7 @@ class OC{
// Someone is logged in :
if(OC_User::isLoggedIn()) {
OC_App::loadApps();
OC_User::setupBackends();
if(isset($_GET["logout"]) and ($_GET["logout"])) {
OC_User::logout();
header("Location: ".OC::$WEBROOT.'/');
@ -469,7 +473,7 @@ class OC{
}
protected static function handleLogin() {
OC_App::loadApps(array('prelogin','authentication'));
OC_App::loadApps(array('prelogin'));
$error = false;
// remember was checked after last login
if (OC::tryRememberLogin()) {
@ -517,7 +521,12 @@ class OC{
|| ($_SESSION['sectoken']!=$_POST['sectoken']) ) {
return false;
}
OC_App::loadApps();
//setup extra user backends
OC_User::setupBackends();
if(OC_User::login($_POST["user"], $_POST["password"])) {
if(!empty($_POST["remember_login"])){
if(defined("DEBUG") && DEBUG) {

View File

@ -40,6 +40,8 @@ class OC_User {
// The backend used for user management
private static $_usedBackends = array();
private static $_setupedBackends = array();
// Backends available (except database)
private static $_backends = array();
@ -114,6 +116,28 @@ class OC_User {
self::$_usedBackends=array();
}
/**
* setup the configured backends in config.php
*/
public static function setupBackends(){
$backends=OC_Config::getValue('user_backends',array());
foreach($backends as $i=>$config){
$class=$config['class'];
$arguments=$config['arguments'];
if(class_exists($class) and array_search($i,self::$_setupedBackends)===false){
// make a reflection object
$reflectionObj = new ReflectionClass($class);
// use Reflection to create a new instance, using the $args
$backend = $reflectionObj->newInstanceArgs($arguments);
self::useBackend($backend);
$_setupedBackends[]=$i;
}else{
OC_Log::write('core','User backend '.$class.' not found.',OC_Log::ERROR);
}
}
}
/**
* @brief Create a new user
* @param $uid The username of the user to create
@ -253,6 +277,7 @@ class OC_User {
public static function isLoggedIn(){
if( isset($_SESSION['user_id']) AND $_SESSION['user_id']) {
OC_App::loadApps(array('authentication'));
self::setupBackends();
if (self::userExists($_SESSION['user_id']) ){
return true;
}