diff --git a/lib/plugins/authad/action.php b/lib/plugins/authad/action.php index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..97be9897e676303a238097aa879c33118714c3ff 100644 --- a/lib/plugins/authad/action.php +++ b/lib/plugins/authad/action.php @@ -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: \ No newline at end of file diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index a0fec7b52b890d494d8927aa58be0b3f01d84df0..0860e5756af7a39a588027e79979afa3dcbb63ff 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -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 * diff --git a/lib/plugins/authad/lang/de/lang.php b/lib/plugins/authad/lang/de/lang.php new file mode 100644 index 0000000000000000000000000000000000000000..3f275750c7526fb582d776e4b4f4f1e143481857 --- /dev/null +++ b/lib/plugins/authad/lang/de/lang.php @@ -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 : diff --git a/lib/plugins/authad/lang/en/lang.php b/lib/plugins/authad/lang/en/lang.php new file mode 100644 index 0000000000000000000000000000000000000000..e2967d662d254081f5f9d2c081b8a04e1d6cd730 --- /dev/null +++ b/lib/plugins/authad/lang/en/lang.php @@ -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 : diff --git a/lib/plugins/authad/lang/ko/lang.php b/lib/plugins/authad/lang/ko/lang.php new file mode 100644 index 0000000000000000000000000000000000000000..1aa436708df72cdd246bd195ebde60edf02d0946 --- /dev/null +++ b/lib/plugins/authad/lang/ko/lang.php @@ -0,0 +1,10 @@ +<?php +/** + * Korean language file for addomain plugin + * + * @author Myeongjin <aranet100@gmail.com> + */ + +$lang['domain'] = '로그온 ë„ë©”ì¸'; + +//Setup VIM: ex: et ts=4 : diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt index 3af1ddfbebe1f47894351fcd558c17b2f7390b34..8774fcf3cd8f57a6168ba356dc52abbb0c2dd78a 100644 --- a/lib/plugins/authad/plugin.info.txt +++ b/lib/plugins/authad/plugin.info.txt @@ -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