Qué es Gulcas?
La lista de correo
Normas de uso
Fotos
Wiki
Hackit
Autenticación mediawiki contra Drupal
Por ejemplo, aquí en el portal de Gulcas (CMS Drupal) cualquiera puede escribir una noticia o entrada de blog si ha sido autenticado previamente, también disponemos de un wiki donde se sigue la misma política, cualquiera puede editar si ha sido previamente autenticado.
Como esta no es la forma natural de operar del wiki (mediawiki) en el 2005 parchee mediawiki para que usara la autenticación de Drupal para autenticar contra mediawiki y evitar que el usuario tenga que loggear otra vez.
De este modo si intentamos acceder al wiki sin estar autenticados, aparece:

Entonces, loggeamos en Drupal y automáticamente al acceder al wiki somos autenticados en mediawiki usando los mismos credenciales que tenemos en el portal (Drupal):

De esta manera solo los usuarios autenticados pueden escribir y modificar datos.
Para ello, hay que parchear el index.php que trae mediawiki, en este caso yo use la versión 1.13.2 de la siguiente manera:
--- index.php 2008-11-10 14:19:44.000000000 +0100
+++ index.php.bak 2008-11-10 00:20:15.000000000 +0100
@@ -34,12 +34,6 @@
* http://www.gnu.org/copyleft/gpl.html
*/
-# Incluimos script con la autenticacion drupal -> mediawiki
-require "autenticaVSdrupal.php";
-
-if (!esta_autenticado_drupal()) {
- exit;
-}
# Initialise common code
$preIP = dirname( __FILE__ );
@@ -96,9 +90,6 @@
$mediaWiki->setVal( 'UseExternalEditor', $wgUseExternalEditor );
$mediaWiki->setVal( 'UsePathInfo', $wgUsePathInfo );
-# Comprobamos si ese usuario Drupal ya existe y lo creamos,
-# o simplemente cargamos sus datos:
-checkDrupalUser();
$mediaWiki->initialize( $wgTitle, $wgArticle, $wgOut, $wgUser, $wgRequest );
$mediaWiki->finalCleanup ( $wgDeferredUpdateList, $wgOut );
Y añadir este nuevo fichero (autenticaVSdrupal.php) en la raiz de mediawiki:
<?php
#
# Drupal-MediaWiki authentication link
#
# jack Oct, 2005.
# jack /at/ gulcas.org
#
# Changelog:
# Modified on 10.Nov.08: Changed cookie's name and
# adapted to new mediawiki version 1.13.
#
/**************************************************************************
* First of all we check if that user is already succesfully log into Drupal
* if it is not, we send that user to the log in webpage, else let's gooo
**************************************************************************/
function esta_autenticado_drupal() {
global $NombreUsuario, $uid;
if (!isset($_COOKIE)) {
// Forwards the unauthorized user to log in webpage.
header('Location: http://XXXXXXXXX');
return false;
}
else {
$cookie_key= array_values($_COOKIE);
$cookie_value= $cookie_key[0];
// Credentials to access into drupal database:
$link= mysql_connect("XXXXX", "XXXXXX", "XXXXX") or exit;
// Drupal database:
mysql_select_db("XXXXX");
$query_uid= "SELECT uid FROM sessions WHERE sid='".$cookie_value."'";
$result= mysql_query($query_uid);
$res= mysql_fetch_row($result);
$uid= $res[0];
//echo "UID: $uid";
//echo "Cookie: $cookie_value";
mysql_free_result($result);
if ($uid == 0) {
mysql_close($link);
// Forwards the unauthorized user to log in webpage.
header('Location: http://XXXXXXXXX');
return false;
}
$query_name= "SELECT name FROM users WHERE uid='".$uid."'";
$result= mysql_query($query_name);
$res= mysql_fetch_row($result);
$NombreUsuario= $res[0];
mysql_free_result($result);
mysql_close($link);
return true;
}
}
/***********************************************************************
* Now we check if that drupal authenticated user exists in mediawiki
* database (he/she has already log in before in mediawiki), when not the
* new mediawiki user is created and stored into the database, else
* his/her data is loaded into this session.
***********************************************************************/
function checkDrupalUser() {
global $uid,$NombreUsuario;
$wgUser= User::newFromName($NombreUsuario);
// Does this user exist?
$sql = "SELECT * FROM user WHERE user_name='".$wgUser->getName()."'";
$db = wfGetDB( DB_SLAVE );
$res = $db->query( $sql );
if ( $db->numRows( $res ) > 0 ) {
$row= $db->fetchObject( $res );
$id= $row->user_id;
$wgUser->setId( $id ); // Compulsory set the UID, else anon user
$wgUser->loadFromDatabase();
} else {
$wgUser->setId( $uid );
$wgUser->addToDatabase();
}
$wgUser->setCookies();
$wgUser->saveSettings();
$db->freeResult( $res );
}
?>
Enjoy ;-)
- blog de jack
- Inicie sesión o regístrese para enviar comentarios


Ya hacía tiempo que quería
Ya hacía tiempo que quería leer un poco MCITP 70-642 Tutorials
sobre este tema, para saber si los antiguos iBook 100% PowerPC, 100% Big Endian también llevaban preparado algun tipo de soporte para eso que llaman "Trusted Computing", 642-524 Labs Books
tranquilidad en el frente, parece que no.A continuación, resumo lo que he leido, si alguien ve algún dato erróneo o alguna novedad que responda a este post.Desde mediados del 2005 Cisco 642-982 Dumps, Apple vende los nuevos iMacs/MacBooks con procesador Intel, además llevan el chip de Infineon para "Trusted Computing", la gran duda es si este chip ya está activado o no.VCP-410 Braindumps
Solucionado error de actualización
Hola a todos,
Comprobé que este parche daba un error bastante extraño al intentar acceder al wiki con un usuario registrado desde gulcas. El problema estaba en parte en que esta versión del wiki no registra las variables globales, al menos eso es lo que he entendido. La solución pasa por reescribir la función checkDrupalUser(). Lo demas no hace falta tocarlo.
function checkDrupalUser() { global $uid,$NombreUsuario, $wgUser; $userid = User::idFromName($NombreUsuario); if($userid!=null){ $u=User::newFromid($userid); $u->setId($userid); $u->loadFromId(); } else { $u=User::newFromName($Nombreusuario); $u->setId($uid); $u->addToDatabase(); } $wgUser=$u; $wgUser->setToken(true); $wgUser->saveSettings(); }Un saludo