Skip to content
Snippets Groups Projects
Commit d2fb55d5 authored by Andreas Gohr's avatar Andreas Gohr
Browse files

Merge pull request #541 from splitbrain/multidomainad

Show a domain dropdown when multiple AD domains are configured
parents 1b876e64 85db969e
No related branches found
No related tags found
No related merge requests found
<?php
/**
* DokuWiki Plugin addomain (Action Component)
*
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
* @author Andreas Gohr <gohr@cosmocode.de>
*/
// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
/**
* Class action_plugin_addomain
*/
class action_plugin_authad extends DokuWiki_Action_Plugin {
/**
* Registers a callback function for a given event
*/
public function register(Doku_Event_Handler &$controller) {
$controller->register_hook('AUTH_LOGIN_CHECK', 'BEFORE', $this, 'handle_auth_login_check');
$controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'handle_html_loginform_output');
}
/**
* Adds the selected domain as user postfix when attempting a login
*
* @param Doku_Event $event
* @param array $param
*/
public function handle_auth_login_check(Doku_Event &$event, $param) {
global $INPUT;
/** @var auth_plugin_authad $auth */
global $auth;
if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
if($INPUT->str('dom')) {
$usr = $auth->cleanUser($event->data['user']);
$dom = $auth->_userDomain($usr);
if(!$dom) {
$usr = "$usr@".$INPUT->str('dom');
}
$INPUT->post->set('u', $usr);
$event->data['user'] = $usr;
}
}
/**
* Shows a domain selection in the login form when more than one domain is configured
*
* @param Doku_Event $event
* @param array $param
*/
public function handle_html_loginform_output(Doku_Event &$event, $param) {
global $INPUT;
/** @var auth_plugin_authad $auth */
global $auth;
if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
$domains = $auth->_getConfiguredDomains();
if(count($domains) <= 1) return; // no choice at all
/** @var Doku_Form $form */
$form =& $event->data;
// any default?
$dom = '';
if($INPUT->has('u')) {
$usr = $auth->cleanUser($INPUT->str('u'));
$dom = $auth->_userDomain($usr);
// update user field value
if($dom) {
$usr = $auth->_userName($usr);
$pos = $form->findElementByAttribute('name', 'u');
$ele =& $form->getElementAt($pos);
$ele['value'] = $usr;
}
}
// add select box
$element = form_makeListboxField('dom', $domains, $dom, $this->getLang('domain'), '', 'block');
$pos = $form->findElementByAttribute('name', 'p');
$form->insertElement($pos + 1, $element);
}
}
// vim:ts=4:sw=4:et:
\ No newline at end of file
......@@ -511,6 +511,31 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
return $opts;
}
/**
* Returns a list of configured domains
*
* The default domain has an empty string as key
*
* @return array associative array(key => domain)
*/
public function _getConfiguredDomains() {
$domains = array();
if(empty($this->conf['account_suffix'])) return $domains; // not configured yet
// add default domain, using the name from account suffix
$domains[''] = ltrim($this->conf['account_suffix'], '@');
// find additional domains
foreach($this->conf as $key => $val) {
if(is_array($val) && isset($val['account_suffix'])) {
$domains[$key] = ltrim($val['account_suffix'], '@');
}
}
ksort($domains);
return $domains;
}
/**
* Check provided user and userinfo for matching patterns
*
......
<?php
/**
* German language file for addomain plugin
*
* @author Andreas Gohr <gohr@cosmocode.de>
*/
$lang['domain'] = 'Anmelde-Domäne';
//Setup VIM: ex: et ts=4 :
<?php
/**
* English language file for addomain plugin
*
* @author Andreas Gohr <gohr@cosmocode.de>
*/
$lang['domain'] = 'Logon Domain';
//Setup VIM: ex: et ts=4 :
<?php
/**
* Korean language file for addomain plugin
*
* @author Myeongjin <aranet100@gmail.com>
*/
$lang['domain'] = '로그온 도메인';
//Setup VIM: ex: et ts=4 :
base authad
author Andreas Gohr
email andi@splitbrain.org
date 2013-04-25
date 2014-02-14
name Active Directory Auth Plugin
desc Provides user authentication against a Microsoft Active Directory
url http://www.dokuwiki.org/plugin:authad
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment