DokuWiki

It's better when it's simple

User Tools

Site Tools


auth:xmpp

This is an old revision of the document!


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

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)

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki