mediawiki

Restringir acceso a páginas de mediawiki por grupos

Restringir el acceso a páginas de mediawiki por grupos

Vamos a utilizar la extension CategoryPermissions para establecer permisos a los artículos de las categorías. De esta manera podemos restringir el acceso a una página de mediawiki ependiendo de si el usuario pertnece a un grupo o no. Como siempre la última versión de como hacerlo esta en mi wiki.

Instalación

Tendremos que añadir el fichero de nombre CategoryPermissions.php a la carpeta extensions de nuestra mediawiki con el contenído que se le indica aquí.

Una vez hecho esto tendremos que añadir al final del archivo LocalSettings.php (que se encuentra en la raiz de nuestra mediawiki) las siguientes lineas:

 require_once("$IP/extensions/CategoryPermissions.php");
 $wgGroupDefaultAllow=true; //set to true to allow everyone access to pages without a category
 $wgCategoryExclusive=array("Category:cat_name","Category:cat2_name");//deny access to these categories for anyone not in the group

Con la variable $wgGroupDefaultAllow indicamos que el accesso a pagínas sin categorias esta permitido.

Uso

Cuando queramos añadir nuevos permisos tendremos que editar el fichero LocalSettings.php (que se encuentra en la raiz de nuestra mediawiki) para añadirle las lineas correspondientes. Las lineas tienen la siguiente estructura:

 $wgGroupPermissions['NOMBRE_GRUPO']['Category:NOMBRE_CATEGORIA_NOMBRE_PERMISO']=VALOR;
  • NOMBRE_GRUPO: Nombre del grupo alq ue se le quiere dar el permiso indicado para la categoria indicada.
  • NOMBRE_CATEGORIA: Nombre de la categoría a la que se le da el permiso indicado para el grupo indicado. Si en vez de Category:NOMBRE_CATEGORIA se pone *, el permiso para el grupo indicado será asignado a todas las categorías.
  • NOMBRE_PERMISO: read, move, edit, create, ...
  • VALOR: true o false.

Ejemplos

  • Si queremos tener una categoría de nombre Seguridad_admin en la que el grupo de usuarios de nombre admin tenga permisos de lectura, escritura, movimiento y creación tendremosq ue añadir als siguientes lineas al archivo LocalSettings.php (que se encuentra en la raiz de nuestra mediawiki):
 $wgGroupPermissions['admin']['Category:Seguridad_admin_read']=true;
 $wgGroupPermissions['admin']['Category:Seguridad_admin_edit']=true;
 $wgGroupPermissions['admin']['Category:Seguridad_admin_move']=true;
 $wgGroupPermissions['admin']['Category:Seguridad_admin_create']=true;
  • Damos permiso de lectura para los usuarios del grupo readers para todas las categorias:
$wgGroupPermissions['readers']['*_read']=true;

Problemas

Cuando utilizamos esta extensión nos encontramos con el problema de que a partir de entonces tienes que definir el accesso de todas las categorias que tengas en la wiki. Si no añades los permisos para una categoría, nadie tendrá permisos para ver el contenido de esta. Esto a mi no me gusta mucho porque lo que quería era tener una serie de categorias para los permisos y otras no.

Pero esto no es irremediable. Mi solución es tener una lista de categorías que empiecen por Seguridad_ que serán a las que se le aplicaran los permisos y a las demás no. Para eso tendremos que editar el fichero CategoryPermissions.php (que se encuentra en la carpeta de extensiones de nuestra mediawiki) y añadir al final del bucle las siguientes lineas:

 foreach( $parentCategories as $category=>$dd)
 {
   ...
   if (!ereg("Seguridad_*", $category)) {
      $user_allowed=true;
   }
 }//foreach( $parentCategories as $category=>$dd)

Usar Sitemaps en mediawiki

Sitemap

Estos días he caido en que mediawiki no debe de estar muy optimizada para salir muy arriba en los resultados de los buscadores. A esto se le llama SEO (Optimización para Motores de Búsqueda). En el blog y demás webs que hago, al usar drupal, poco más hay que hacer para cumplir lo básico del SEO, pero mediawiki tienes que hacerlo tu.

Por eso me he puesto a investigar en como mejorar y de lo mas básico que he leído del SEO es que tu sitio tenga un sitemap: un archivo con los enlaces a todos sus artículos. De esta manera los buscadores pueden saber inmediatamente los articulos de tu mediawiki leyendo este archivo y te posicionarán mejor.

Para ello existe una extensión llamada Google Sitemap que te crea un sitemap con los enlaces de tu mediawiki. Para instalarla tendremos que hacer lo siguiente:

  • En la carpeta extensions creamos el fichero GoogleSitemap.php con el contenido que nos muestra aquí.
  • En la carpeta includes (Si tenemos la versión 1.13 de mediawiki tendremos que ponerlo en  includes/specials en vez de en includes) creamos el fichero SpecialGoogleSitemap.php con el contenido que nos dice aquí.
  • Ahora tenemos que editar el fichero includes/SpecialPage.php y añadimos la línea 'GoogleSitemap' => array( 'SpecialPage', 'GoogleSitemap' ), al final del vector $mList de esta manera:
...
static public $mList = array(
    'DoubleRedirects' => array( 'SpecialPage', 'DoubleRedirects' ),
    ...
    'Listbots' => array( 'SpecialRedirectToSpecial', 'Listbots', 'Listusers', 'bot' ),
    'GoogleSitemap' => array( 'SpecialPage', 'GoogleSitemap' ),
);
...
  • Después editaremos el fichero languages/messages/MessagesEn.php y añadimos la línea 'googlesitemap' => 'Google Site Map', en el vector messages de la siguiente manera:
$messages = array(
   ...
   'googlesitemap' => 'Google Site Map', 
); 
  • Activaremos la extensión añadiendo la siguiente línea al final del archivo LocalSettings.php en la raiz de nuestra mediawiki:
require_once("$IP/extensions/GoogleSitemap.php"); 
  • Por último crearemos el fichero en blanco en la raiz de mediawiki y le daremos todos permisos de escritura:
>> cd RAIZ_DE_TU_MEDIAWIKI
>> vi sitemap.xml
>> chmod 777 sitemap.xml

Ya tenemos la extensión instalada. Ahora tenemos que indicarle a los buscadores donde está el sitemap. Para ello podemos hacerlo a través de herramientas suyas en sus webs o indicarselo en un fichero llamado robots.txt para que lo coja automáticamente. Editaremos este fichero que se encontrará en la raiz de la mediawiki (si no existe  lo crearemos) y pondremos la siguiente línea:

sitemap: http://LA_URL_DE_TU_MEDIAWIKI/sitemap.xml

Ahora habrá que ver si funciona de verdad y seguir buscando extensiones SEO para mediawiki. Como siempre la última versión en mi wiki.

Poner un captcha en mediawiki

Recaptcha en mediawiki

Si tenemos la wiki abierta a la edición de cualquiera, podemos tener problemas de spam. Para evitarlo podremos usar un servicio de captcha (imagenes con numeros y letras) llamado recaptcha que nos suministrará de la imagen para que la gente que edite nuestra mediawiki tenga que introducir el codigo dibujado en la imagen y asi demuestre que es una persona y no un robot.

Para instalarlo tendrémos que bajarnos de esta web http://code.google.com/p/recaptcha/downloads/list?q=MW-Latest la extensión de este servicio para la mediawiki:

>> wget http://recaptcha.googlecode.com/files/recaptcha-mediawiki-1.7.zip
>> unzip recaptcha-mediawiki-1.7.zip

Ahora tendremos que crear las keys para acceder al servicio recaptcha a través de esta web https://admin.recaptcha.net/recaptcha/createsite/?app=mediawiki. Necesitaremos tener una cuenta, si no la tenemos podemos crearnosla gratuitamente.

Una vez tengamos las keys tendrémso que modificar el fichero LocalSettings.php que se encuentra en la raiz de nuestra mediawiki y añadiremos las siguientes líneas (poniendo nuestras keys publicas y privadas en vez de las del ejemplo):

##################################################
##### Recaptcha
##################################################
require_once( "$IP/extensions/recaptcha/ReCaptcha.php" );
// Sign up for these at http://recaptcha.net/api/getkey
$recaptcha_public_key = '6Lfh-QQAAAAGtzjyFUNXpdgdgMIx7KFHxwMereNEKcpN';
$recaptcha_private_key = '6Lfh-QQAArAAAIzBrrfhdfgfgsU7MvrwQ5cnerrasLzl3J';

Por defecto el captcha saldrá cuando un nuevo usuario se registra, cuando un usuario edita un contenido con links externos o cuando hay un ataque de fuerza bruta para sacar un password.

Pero podemos, por ejemplo forzar a que todas las ediciones tengan que pasar por un captcha (sean con linkks externos o sin ellos). Añadiremos también la siguiente línea al fichero LocalSettings.php:

$wgCaptchaTriggers['edit'] = true;

Para que a los usuarios registrados no les salga nunca, tendremos que añadir también la siguiente línea al fichero LocalSettings.php':'

$wgGroupPermissions['user' ]['skipcaptcha'] = false;

Como siempre el artículo actualizado en mi wiki.

Gestionar grupos en mediawiki

Grupos en mediawiki

Mediawiki será muy bueno para controlar cambios, pero lo que es gestionar es de lo peor que he visto. Aunque por defecto tiene soporte a grupos, no es nada facil usar esta característica. Para Gestionar los grupos, vamos a usar una extensión llamada GroupPermissionsManager.

Para instalarla nos bajamos los ficheros de la extensión y los ponemos en la carpeta de las extensiones:

>> cd CARPETA_RAIZ_MEDIAWIKI
>> cd extensions
>> svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/GroupPermissionsManager

Activamos la extensión editando el fichero LocalSettings.php de nuestra mediawiki y añadimos la siguiente línea:

require_once("$IP/extensions/GroupPermissionsManager/GroupPermissionsManager.php");

Ahora tendremos que ir a la carpeta de la extensión y crear una carpeta de nombre config que pueda ser escrita por el usuario del apache (en mi caso es www-data):

>> cd CARPETA_RAIZ_MEDIAWIKI
>> cd extensions/GroupPermissionsManager
>> mkdir config
>> chown www-data:www-data config

Una vez instalado vamos a ver como usarlo. No encontré una forma sencilla de crear grupos, la única forma que encontré fue añadirle algún permiso a mano a un grupo que no existiera. Por ejemplo: para crear un grupo de nombre NOMBRE_GRUPO, tendremos que ir al fichero LocalSettings.php y añadir la siguiente línea (por ejemplo dándole permiso de lectura de las páginas):

$wgGroupPermissions['NOMBRE_GRUPO']['read'] = true;

Con esto ya nos aparecerá el grupo en la página de gestión de los permisos de los grupos: http://URL_DE_TU_WIKI/index.php/Especial:GroupPermissions. Ahi podremos buscar el nuevo grupo y darle los permisos que queramos.

Para añadir a un usuario a nuestro grupo, tendremos que ir a la página http://URL_DE_TU_WIKI/index.php/Especial:Userrights buscar el nombre del usuario a añadir y añadirle nuestro nuevo grupo.

Por último recordaros que como siempre la forma de hacer esto estara actualizada siempre en mi wiki.

Citas en Mediawiki

Extensión Cite en Mediawiki

La extensión Cite para la Mediawiki nos permite poner citas en el texto (como podemos ver en la imagen anterior). En este artículo podremos ver como instalarla y como usarla.

 Instalación

Primero tendremos que poner los archivos de la extensión en la carpeta de las extensiones de nuestra Mediawiki:

>> cd extensions
>> svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/Cite/

Después de esto tendremos qeu indicarle a la Mediawiki que cargue esta extensión. Para ello tendremos que añadir la siguiente línea al final del archivo LocalSettings.php que se encuentra en la carpeta raíz de nuestra Mediawiki:

$wgAllowCiteGroups = true;
require_once("extensions/Cite/Cite.php");

Ya tenemos instalada la extensión Cite en nuestra Mediawiki.

 Uso

 Para poner una cita usaríamos el siguiente texto:

 <ref> Texto de la cita </ref>

 Para mostrar las citas pondremos el siguiente texto:

<references />

 También se puede poner una cita varias veces, hacer grupos de citas para mostrarlas juntas, ... Todo esto lo podréis ver más explicado y siempre actualizado en mi wiki.

temas: 

Coloreado del codigo fuente en Mediawiki

Ejemplo de coloreado de codigo en la mediawiki

Disponemos de una extensión para mediawiki llamada SyntaxHighlight GeSHi que nos permite colorear un código fuente en colores dependiendo del lenguaje de programación. De esta manera cuando vayamos a poner un código fuente de un programa, podemos indicarle que lenguajes de programación es y nos coloreara el código para que este sea mas legible.

 Instalación

Para la instalación tendremos que seguir los siguientes pasos:

>> cd extensions
>> svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SyntaxHighlight_GeSHi
>> cd SyntaxHighlight_GeSHi
>> svn co http://geshi.svn.sourceforge.net/svnroot/geshi/branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/ geshi

Añadimos la siguiente línea a nuestro archivo LocalSettings.php:

require_once("extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");

Ya lo tenemos instalado.

 Uso

 La estructura para colorear un código sería la siguiente:

   <source lang="LENGUAJE">
      'CÓDIGO
   </source>

Además del parametro lang, podemos usar los siguientes parametros:

Los lenguajes con los que es compatible: actionscript, ada, apache, applescript, asm, asp, autoit, bash, blitzbasic, bnf, c, caddcl, cadlisp, cfdg, cfm, cpp-qt, cpp, csharp, css, c_mac , d, delphi, diff, div, dos, eiffel, fortran, freebasic, gml, groovy, html4strict, idl, ini, inno, io, java, java5, javascript, latex, lisp , lua, matlab, mirc, mpasm, mysql, nsis, objc, ocaml-brief, ocaml, oobas, oracle8, pascal, perl, php-brief, php, plsql, python, qbasic, reg, robots , ruby, sas, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, vhdl, visualfoxpro, winbatch, xml, z8.

En la introwiki podréis encontrar siempre toda la última información de esta extensión, así como la forma de instalara, usarla, configurarla. etc

 

temas: 

Actualizando mi introwiki

Logo de mediawiki

Hoy me he acordado que desde que instale mi wikipedia, no he mirado si había actualizaciones. Y como era de esperar, si que las había. Así que me he decidido a actualizarla a la última versión (1.12). A continuación os voy a poner los pasos que he seguido, y en esta url tendréis este proceso siempre actualizado, ya que en este articulo si hay nuevos cambios en el proceso de la actualización no se verán reflejados. Empecemos con lo que tenéis qeu hacer:

Para saber que versión tenemos iremos a este enlace pero con la dirección de vuestra mediawiki:

http://URL/index.php?title=Special:Version

Lo primero que tendremos que hacer sera hacer un BAKCUP de nuestra mediawiki (Archivos y base de datos):

>> cd CARPETA_DE_MEDIAWIKI
>> tar -czf wiki.tar.gz .
>> mysqldump -u USUARIOS_DE_LA_BD -p CONTRASEÑA_DEL_USUARIO NOMBRE_DE_LA_BD > bakcup.sql

Ahora nos descargamos la ultima versión de la mediawiki (en este momento la 1.12):

>> wget  http://download.wikimedia.org/mediawiki/1.12/mediawiki-1.12.0.tar.gz
>> gzip -d mediawiki-1.12.0.tar.gz
>> tar -xvf mediawiki-1.12.0.tar
>> cp -R mediawiki-1.12.0/* CARPETA_DE_NUESTRA_WIKI

Ahora nos guardamos la configuración, dejando sin configuración la mediawiki para que salte el instalador y damos permisos de escritura a la carpeta config:

>> mv LocalSettings.php LocalSettings.php.old
>> chmod go+w config

Vamos a la página principal de nuestra mediawiki y nos aparecerá un mensaje como este:

Please set up the wiki first.

Le damos al enlace set up de este texto y nos llevará a la página donde tendremos que meter los mismos datos que metimos cuando la instalamos (Si no nos acordamos lo miramos en el fichero LocalSettings.php.old). Le damos a instalar y ella detectará que ya hay una versión anterior y actualizara la estructura de la base de datos.

Ahora ponemos nuestra configuración anterior y quitamos los permisos a la carpeta config:

>> mv LocalSettings.old.php LocalSettings.php
>> chmod go-w config

Ya tenemos la mediawiki actualizada. Para comprobarlo iremos a la siguiente url y comprobaremos que nos dice que tenemos la nueva versión:

http://URL/index.php?title=Special:Version
temas: