mCfg = BaseAuth::getAuthMethod($pAuthId);
$this->mCfg['auth_id'] = $pAuthId;
foreach ($this->getSettings() as $op_id => $op) {
$var_id = substr($op_id,strrpos($op_id,"_")+1);
$var = $gBitSystem->getConfig($op_id, $op['default']);
if ($op['type']=="checkbox") {
$var = $var== "y";
}
$this->mConfig[$var_id]=$var;
}
}
public static function &getAuthMethods() {
static $authMethod = [];
static $scaned = false;
if (!$scaned) {
$scaned = true;
BaseAuth::scanAuthPlugins();
}
return $authMethod;
}
public static function getAuthMethod( $pAuthId ) {
$authMethod =& BaseAuth::getAuthMethods();
if (empty($authMethod[$pAuthId])) return null;
return $authMethod[$pAuthId];
}
public static function setAuthMethod($pAuthId,&$method) {
$authMethod =& BaseAuth::getAuthMethods();
$authMethod[$pAuthId]=$method;
}
public static function scanAuthPlugins() {
global $gBitSystem;
$authDir = $gBitSystem->getConfig( 'users_auth_plugins_dir', USERS_PKG_PATH.'auth/' );
if( is_dir( $authDir ) && $authScan = scandir( $authDir ) ) {
foreach( $authScan as $plugDir ) {
if( $plugDir != 'CVS' && substr($plugDir,0,1)!='.' && is_dir( $authDir.$plugDir ) ) {
BaseAuth::register( $plugDir, [
'name' => strtoupper( $plugDir ) . ' Auth',
'file' => $authDir . $plugDir . '/auth.php',
'class' => '\\Bitweaver\\Users\\' . ucfirst( $plugDir ) . 'Auth',
] );
}
}
}
}
public static function register($id,$hash) {
global $gBitSystem;
$err = false;
$method = BaseAuth::getAuthMethod($id);
if (! empty($method)) {
BaseAuth::authError("Auth Registration Failed: $id already registered");
$err = true;
}
if (empty($hash['name'])) {
BaseAuth::authError("Auth Registration Failed: $id: No Name given");
$err = true;
}
if (empty($hash['file'])) {
BaseAuth::authError("Auth Registration Failed: $id: No file given");
$err = true;
} elseif(!file_exists($hash['file'])) {
BaseAuth::authError("Auth Registration Failed: $id: File (".basename($hash['file']).") doesn't exist");
$err = true;
}
if (empty($hash['class'])) {
BaseAuth::authError("Auth Registration Failed: $id: No class given");
$err = true;
}
if (!$err) {
BaseAuth::setAuthMethod($id,$hash);
}
}
public static function authError($str) {
$warning = '
'.$str.'
';
print $warning;
}
public static function getAuthMethodCount() {
$methods = BaseAuth::getAuthMethods();
if (empty($methods)) return 0;
return count($methods);
}
public function validate($user,$pass,$challenge,$response) {
if (!$this->isSupported()) return false;
$this->mLogin = $user;
$this->mInfo['login']=$user;
$this->mInfo['password']=$pass;
}
public function getUserData() {
return $this->mInfo;
}
public function isSupported() {
$this->mErrors[] = "BaseAuth is not an authentcation method";
return false;
}
public function createUser(&$userattr) {
$this->mErrors[] = "BaseAuth is not an authentcation method";
return false;
}
public function getSettings() {
return [];
}
public function canManageAuth() {
$this->mErrors[] = "BaseAuth is not an authentcation method";
return false;
}
public function getRegistrationFields() {
return [];
}
public static function isActive($package) {
global $gBitSystem;
if (empty($package) ) {
return false;
}
for ($i=0;$igetConfig("users_auth_method_$i",$default)== $package) {
return true;
}
}
return false;
}
public static function init( $pAuthMixed ) {
global $gBitSystem;
if( is_numeric( $pAuthMixed ) ) {
$default="";
if ($pAuthMixed==0) {
$default="bit";
}
$authPlugin = $gBitSystem->getConfig("users_auth_method_$pAuthMixed",$default);
if (!empty( $authPlugin ) ) {
return BaseAuth::init( $authPlugin );
}
} elseif (!empty($pAuthMixed)) {
$authPlugin=BaseAuth::getAuthMethod( $pAuthMixed );
if (file_exists( $authPlugin['file'] )) {
require_once $authPlugin['file'];
$cl = $authPlugin['class'];
$instance = new $cl();
if( $instance->isSupported() ) {
return $instance;
}
}
}
return false;
}
public static function getConfig() {
global $gBitSystem;
$authSettings = [];
foreach( BaseAuth::getAuthMethods() as $meth_name => $method ) {
$instance = BaseAuth::init($meth_name) ;
if ($instance) {
foreach ($instance->getSettings() as $op_id => $op) {
if (!empty($_REQUEST[$op_id])) {
if( $op['type'] == 'checkbox' ) {
simple_set_toggle( $op_id, USERS_PKG_NAME );
} else {
simple_set_value( $op_id, USERS_PKG_NAME );
}
}
$value = $gBitSystem->getConfig($op_id, $op['default']);
$op['value']=$value;
$method['options'][$op_id] = $op;
}
$method['canManageAuth'] = $instance->canManageAuth();
$authSettings['avail'][$meth_name]=$method;
} elseif( is_object( $instance ) ) {
$authSettings['err'][$meth_name]=implode("
",$instance->mErrors);
}
}
if (!empty($_REQUEST["loginprefs"])) {
$used =[];
for ($i=0,$j=0;$istoreConfig( "users_auth_method_$i",null, USERS_PKG_NAME );
if (empty($_REQUEST["users_auth_method_$i"])) {
$j--;
} elseif(!empty($used[$_REQUEST["users_auth_method_$i"]])) {
$j--;
} else {
$used[$_REQUEST["users_auth_method_$i"]]="stored_$j";
$gBitSystem->storeConfig( "users_auth_method_$j", $_REQUEST["users_auth_method_$i"], USERS_PKG_NAME );
}
}
}
$canManageAuth = false;
for ($i=0;$igetConfig("users_auth_method_$i",$default);
if (!$canManageAuth&&!empty($authSettings['avail_method'][$i]['value'])) {
$canManageAuth = $authSettings['avail'][$authSettings['avail_method'][$i]['value']]['canManageAuth'];
}
}
if (($gBitSystem->getConfig('users_allow_register','y')=='y')&&!$canManageAuth) {
$authSettings['err']['bit_reg']="Registration is enabled but there are no Auth Methods that support this, Registration won't work!";
}
$method['active']=BaseAuth::isActive($authSettings['avail'][$meth_name] ?? 'BitAuth');
return $authSettings;
}
}