{: NES 0.9 none :} {: # ---------------------------------------------------------------------------- NES 0.9 beta by - Skriptke Copyright 2009 - 2010 Enrique F. Castañón Licensed under the GNU GPL. http://sourceforge.net/projects/nes/ Sample to use Nes; ---------------------------------------------------------------------------- :}

Plugin Captcha

Descripción

Muestra un Captcha.

Cargar el Plugin

Para cargar cualquier Plugin debemos añadirlo a la lista de script de nuestro archivo nhtml:

{: NES 1.0 ('{: * cfg_plugin_top_dir :}/plugin.pl','my_file.pl') :}

El orden es importante, para Captcha es necesario cargar primero:
    
{: NES 1.0 ('{: * cfg_plugin_top_dir :}/captcha.pl','my_file.pl') :}

Si se va a incluir Captcha dentro de Forms es necesario cargar forms_captcha.pl en vez de forms.pl:
    
{: NES 1.0 ('{: * cfg_plugin_top_dir :}/forms_captcha.pl','my_file.pl') :}

Ver: Plugin Froms, Plugins

Ejemplo

archivo.nhtml:

{: NES 1.0 ('{: * cfg_plugin_top_dir :}/captcha.pl','archivo.pl') :}
<html>
  <head>
    <title>Nes sample/title>
  </head>
  <body>
    ...
    {: & captcha (the_name,ascii) 
        ...
        {: & captcha_code :}
        <input type="text" name="the_name"  size="8" />
        ...
        {: ~ ( * nes_captcha_plugin_fatal_error_the_name )
            <b>Código incorrecto</b> 
        :}
        ...
    :}
    ...
  </body>
</html>

archivo.pl:
   
use Nes;

my $nes = Nes::Singleton->new('archivo.nhtml');

# Obtenemos la dirección del Captcha
my $captcha = nes_plugin->get('captcha_plugin','the_name');

# Comprobamos que es correcto mediante la variable {'is_ok'}
if ( $captcha->{'is_ok'} ) {
  ...
} else  {
  ...
}

$nes->out();

Formato

{: & captcha (name,type,digits,noise,size,sig,spc,expire,expite_last,attempts) 
        [HTML]
        {: & captcha_code :}
        [HTML]
:}

Sólo name y type son obligatorios, el resto de parámetros si no se indican se leeran de archivo de configuración o tomarán sus valores por defecto.

name:

El nombre del Captcha, debe conincidir con el del campo input con el valor del Captcha:

 {: & captcha (the_name,ascii)
    ...
    <input type="text" name="the_name"  size="8" />
    ...
    

type:

El tipo de Captcha. En ésta versión únicamente está disponible el tipo ascii.

digits:

Número de dígitos que mostrará el Captcha. Por defecto mostrará un número aleatorio de entre 5 y 7 dígitos.

noise:

Cantidad de ruido, entre 0 y 9, 0 es sin ruido y 9 el máximo. Dificulta su detección por robots. Por defecto el nivel de ruido es de 2.

size:

Tamaño de la fuente del Captcha. El tamaño por defecto es 2. Si size es none el Captcha se mostrará sin formato.

sig:

Símbolo que se utiliza como relleno. Por defecto el Captcha mostrará un caracter al azar.

spc:

Símbolo que se utiliza como fondo. Por defecto el Captcha mostrará un caracter al azar.

expire:

Tiempo de expiración del Captcha a partir del cual ya no será válido. El tiempo se indica con un sufijo; s: segundos, m: minutos, h: horas, d: dias, M: meses, y: años, ej.:

 30s # 30 segundos
 5m  # 5 minutos
 1M  # 1 mes
 

* expire dentro del Plugin Forms

Cuando el Captcha va dentro del Plugin Forms, los valores de expiración se deben hacer coincidir con Forms.

attempts:

En formato: número de intentos / tiempo. Es el máximo de intentos permitido, una vez llegado al máximo, en cualquier tiempo, hay que esperar el tiempo indicado o dará error aunque los datos seán válidos.

 10/5 # Después de 10 intentos hay que esperar 5 minutos

El tiempo de expiración se controla mediante la variable forms_plugin_expire_attempts del archivo de configuración .nes.cfg

{: & captcha_code :}

Lo colocaremos donde se desee que aparezca la imagen del Captcha:

    ...
    <td >
    {: & captcha_code :} 
    </td>
    ...
    

Variables de entorno

Último mensaje lanzado por el Captcha: (se incluye para depuración)

{: * nes_captcha_plugin_(name_catpcha)_error_last :}

Cuenta del número de intentos:

{: * nes_captcha_plugin_(name_catpcha)_attempts :} 

Será 1 si el Captcha es correcto:

{: * nes_captcha_plugin_(name_catpcha)_is_ok :} 

Número de error del Captcha, cualquier valor no 0 indica que el Captcha no es válido:

{: * nes_captcha_plugin_(name_catpcha)_error_fatal :} 

0: No hay error. (no supone que que el Captcha sea correcto)
1: La Cookie ha expirado o no existe.
2: Se ha enviado el campo sin valor.
3: Se ha alcanzado el máximo de intentos.
4: * Se ha intentado usar una Cookie ya usada.
5: No coninciden la clave del campo con la del Captcha.

* El botón "Back" del Navegador puede dar este tipo de errores.

Estas variables están disponibles desde Perl como:

use Nes;
my = Nes::Singleton:Singleton->new('archivo.nhtml');

# Obtenemos la dirección del Captcha
my $captcha = nes_plugin->get('captcha_plugin','the_name');

# {: * nes_captcha_plugin_(name_catpcha)_error_last :} 
$captcha->{'last_error'};

# {: * nes_captcha_plugin_(name_catpcha)_error_fatal :} 
$captcha->{'fatal_error'};

# {: * nes_captcha_plugin_(name_catpcha)_attempts :} 
$captcha->{'attempts'};

# {: * nes_captcha_plugin_(name_catpcha)_is_ok :} 
$captcha->{'is_ok'};

Configuración .nes.cfg

# Nombre del campo input del formulario que controla el Captcha
captcha_plugin_start           = nes_captcha_start

# tiempo suficiente para rellenar el formulario, 15m son 15 minutos
# sufijo tiempo:  s: segundos, m: minutos, h: horas, d: dias, M: meses, y: años
captcha_plugin_expire          = 15m

captcha_plugin_digits          = 0
captcha_plugin_noise           = 2
captcha_plugin_size            = 2
captcha_plugin_sig             = 
captcha_plugin_spc             = 

# sufijo del archivo temporal
captcha_plugin_suffix          = .captcha_plugin_tmp

# número maximo de intentos / minutos
# 10/5 es 10 intentos en cualquier tiempo, despues de 10 intentos tendrá
# que esperar 5 minutos para volver a intentarlo o dará error
captcha_plugin_max_attempts    = 10/5

# tiempo de expiración de los archivos temporales
# guarda el valor de attempts durante el tiempo indicado aquí
captcha_plugin_expire_attempts = 1h

Más ejemplos


{: include ('./Test Captcha.html') :}

Puedes ver un ejemplo real: comentario