Skip to content

Commit

Permalink
Merge pull request #541 from splitbrain/multidomainad
Browse files Browse the repository at this point in the history
Show a domain dropdown when multiple AD domains are configured
  • Loading branch information
splitbrain committed Mar 5, 2014
2 parents 1b876e6 + 85db969 commit d2fb55d
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 1 deletion.
91 changes: 91 additions & 0 deletions lib/plugins/authad/action.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?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:
25 changes: 25 additions & 0 deletions lib/plugins/authad/auth.php
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,31 @@ protected function _loadServerConfig($domain) {
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
*
Expand Down
10 changes: 10 additions & 0 deletions lib/plugins/authad/lang/de/lang.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
/**
* German language file for addomain plugin
*
* @author Andreas Gohr <gohr@cosmocode.de>
*/

$lang['domain'] = 'Anmelde-Domäne';

//Setup VIM: ex: et ts=4 :
10 changes: 10 additions & 0 deletions lib/plugins/authad/lang/en/lang.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
/**
* English language file for addomain plugin
*
* @author Andreas Gohr <gohr@cosmocode.de>
*/

$lang['domain'] = 'Logon Domain';

//Setup VIM: ex: et ts=4 :
10 changes: 10 additions & 0 deletions lib/plugins/authad/lang/ko/lang.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
/**
* Korean language file for addomain plugin
*
* @author Myeongjin <aranet100@gmail.com>
*/

$lang['domain'] = '로그온 도메인';

//Setup VIM: ex: et ts=4 :
2 changes: 1 addition & 1 deletion lib/plugins/authad/plugin.info.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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 comments on commit d2fb55d

Please sign in to comment.