auth:xmpp
This is an old revision of the document!
Table of Contents
XMPP/Jabber authentication
What does it do?
It authenticates users by logging into an XMPP server. This was originally conceived in order to have a website authenticate against email accounts set up on Gmail for a whole domain. It's really incomplete and “hacky.”
Requirements
- XMPPHP (http://code.google.com/p/xmpphp/)
Installation
Paste the code into “inc/auth/xmpp.php”, then add the following line to “conf/local.php”:
$conf['authtype'] = 'xmpp';
And remember to alter “xmpp.php”, so that it suits your configuration.
Code
<?php /** * XMPP/Jabber authentication backend * * http://www.dokuwiki.org/auth:xmpp * * XMPPHP from http://code.google.com/p/xmpphp/ under 'XMPPHP' dir is needed * for this to work at all. * * @license GPL 2 or any later version (http://www.gnu.org/licenses/gpl.html) * @author Mariusz Mazur <mmazur@kernel.pl> */ include 'XMPPHP/XMPP.php'; $server = 'talk.google.com'; $port = 5222; $domain = 'radioemiter.pl'; // we only accept page ids for auth_plain if(isset($_REQUEST['u'])) $_REQUEST['u'] = cleanID($_REQUEST['u']); /** * Check user+password [required auth function] * * Checks if the given user exists and the given * plaintext password is correct by trying to * connect to and authenticate against an xmpp * server. * * @author Mariusz Mazur <mmazur@kernel.pl> * @return bool */ function auth_checkPass($user,$pass){ global $server; global $port; global $domain; $conn = new XMPPHP_XMPP($server, $port, $user, $pass, 'dokuwiki', $domain, $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO); try { $conn->connect(); $conn->processUntil('session_start'); $conn->disconnect(); return true; } catch(XMPPHP_Exception $e) { return false; } } /** * Return user info [required auth function] * * Returns info about the given user needs to contain * at least these fields: * * name string full name of the user * mail string email address of the user * grps array list of groups the user is in * * No group support yet. * * @author Mariusz Mazur <mmazur@kernel.pl> */ function auth_getUserData($user){ $userinfo = array ("name" => $user, "mail" => "$user@$domain", "grps" => array ("user", "editors")); return $userinfo; } /** * Create a new User [required auth function] * * Returns false if the user already exists, null when an error * occurred and the cleartext password of the new user if * everything went well. * * This obviously always returns null, since sane admins * have account creation disabled on XMPP servers. * * @author Mariusz Mazur <mmazur@kernel.pl> */ function auth_createUser($user,$pass,$name,$mail){ msg('User account creation is unavailable..',-1); return null; } //Setup VIM: ex: et ts=2 enc=utf-8 :
Alternate Code
The above doesn't work for me, I don't know if the way Doku works has changed since it was written as i'm a first time user (above doesn't use class). The code below 'works' for me, same warnings as above really its a total hack and has very minimal functionality YMMV.
<?php /** * XMPP/Jabber authentication backend * * http://www.dokuwiki.org/auth:xmpp * * XMPPHP from http://code.google.com/p/xmpphp/ under 'XMPPHP' dir is needed * for this to work at all. * * @license GPL 2 or any later version (http://www.gnu.org/licenses/gpl.html) * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> * @author Mariusz Mazur <mmazur@kernel.pl> * @author Andreas Gohr <andi@splitbrain.org> * @author Paul Thomas <doku@paulthomas.eu> */ define('DOKU_AUTH', dirname(__FILE__)); require_once(DOKU_AUTH.'/basic.class.php'); require_once("/XMPPHP/XMPP.php"); class auth_xmpp extends auth_basic { var $server = "jabber.org"; var $port = 5222; var $domain = "jabberd.org"; /** * Constructor * * checks if the mysql interface is available, otherwise it will * set the variable $success of the basis class to false * * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> * @author Paul Thomas <doku@paulthomas.eu> */ function auth_xmpp() { global $conf; if (method_exists($this, 'auth_basic')) parent::auth_basic(); } /** * Checks if the given user exists and the given plaintext password * is correct. Furtheron it might be checked wether the user is * member of the right group * * Depending on which SQL string is defined in the config, password * checking is done here (getpass) or by the database (passcheck) * * @param $user user who would like access * @param $pass user's clear text password to check * @return bool * * @author Andreas Gohr <andi@splitbrain.org> * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> * @author Paul Thomas <doku@paulthomas.eu> */ function checkPass($user,$pass){ $conn = new XMPPHP_XMPP($this->server, $this->port, $user, $pass, "dokuwiki", $this->domain, $printlog=false, $loglevel=XMPPHP_Log::LEVEL_ERROR); try { $conn->connect(); $conn->processUntil('session_start'); $conn->disconnect(); $this->success = true; return true; } catch (XMPPHP_Exception $e) { $this->success = false; return false; } return false; } function getUserData($user){ $userinfo = array ("name" => $user, "mail" => "$user@$domain", "grps" => array ("user", "editors", "admin")); return $userinfo; } }
auth/xmpp.1238593642.txt.gz · Last modified: 2010-02-17 16:52 (external edit)