Back to top

Autore Topic: plugin Captcha integrare creazione immagine in joomla  (Letto 4567 volte)

Offline davidepc

  • Esploratore
  • **
  • Post: 144
    • Mostra profilo
Buongiorno a tutti sto sviluppando un semplice plugin captcha.
Per come l'ho creato ora ho utilizzato una soluzione poco corretta ovvero lo script PHP che crea l'immagine e' uno script esterno a joomla che riceve in get una stringa (ovviamente criptata), la decripta e genera l'immagine.
La mia domanda e' come potrei integrarlo in joomla visto che la creazione immagine deve esser fatta da un file separato(visto che per far "capire" che e' un immagine gli devo settare gli header('Content-Type: image/jpeg'))? Avevo pensato di creare un componente ma dover creare un componente solo per poter usare un controller(o una view richiamata con tmpl=raw) non mi sembra una grande idea.

Grazie per i suggerimenti
Davide
Davide Granata
Web developer PHP
www.davidepc.com

Offline davidepc

  • Esploratore
  • **
  • Post: 144
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #1 il: 16 Set 2013, 09:16:45 »
Cosa mi suggerite? Devo per forza creare un componente per fare cio'?

Grazie
Davide
Davide Granata
Web developer PHP
www.davidepc.com

Offline j3n4

  • Esploratore
  • **
  • Post: 77
  • Sesso: Maschio
  • We are Borg
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #2 il: 18 Set 2013, 09:18:43 »
Premesso che lo script che intendi usare sia un Javascript e non uno script per la bash.
La tua domanda corretta dovrebbe essere: Posso includere un javascript nel pacchetto di installazione del plugin? La risposta è si.




We are BORG

Offline davidepc

  • Esploratore
  • **
  • Post: 144
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #3 il: 19 Set 2013, 11:06:20 »
Ciao Grazie per la risposta pero' non e' quello che mi serve.
Mi serve sapere come integrare in joomla lo script php che genera l'immagine.
In pratica adesso nel plugin creo l'immagine chiamando un php esterno al quale passo come parametro il codice di sicurezza generato(ovviamente criptato).
In pratica nel plugin ho un codice del genere
Codice: [Seleziona]
<img src="genera.php?s=CODICE_IMMAGINE_CRIPATO" />
Funziona pero' in genere cerco di adottare soluzioni piu' pulite per i miei clienti e questa non mi sembra molto buona.
Grazie
Saluti

Davide Granata
Web developer PHP
www.davidepc.com

Offline j3n4

  • Esploratore
  • **
  • Post: 77
  • Sesso: Maschio
  • We are Borg
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #4 il: 19 Set 2013, 11:46:34 »
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

E poi il resto del tuo script, a questo punto ti conviene fare una classe che poi chiami quando ti serve.
We are BORG

Offline davidepc

  • Esploratore
  • **
  • Post: 144
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #5 il: 20 Set 2013, 11:00:56 »
Il problema e' che richiamandolo come indicato sopra(tramite il tag img come fosse un immagine) lo script non e' integrato in joomla.
Lo script ha bisogno di impostare i suoi header per essere visto come immagine.


Davide Granata
Web developer PHP
www.davidepc.com

Offline j3n4

  • Esploratore
  • **
  • Post: 77
  • Sesso: Maschio
  • We are Borg
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #6 il: 20 Set 2013, 11:38:37 »
Infatti.
Per questo motivo ti ho detto che ti conviene creare una classe, e poi fai il print della sua elaborazione.

We are BORG

Offline davidepc

  • Esploratore
  • **
  • Post: 144
    • Mostra profilo
Re:plugin Captcha integrare creazione immagine in joomla
« Risposta #7 il: 15 Nov 2013, 13:11:17 »
Ancora non ho risolto o meglio il codice che ho scritto funziona pero' non mi piace per nulla il metodo che ho usato avete qualche suggerimento?
Vi posto il codice completo.
Questo e' il codice del plugin di tipo captha:
Codice: [Seleziona]
<?php
/**
 * @package     Joomla.Plugin
 * @subpackage  Captcha
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

jimport('joomla.environment.browser');

/**
 * captchareadable Plugin.
 * Based on the oficial captchareadable library( http://captchareadable.net/plugins/php/ )
 *
 * @package     Joomla.Plugin
 * @subpackage  Captcha
 * @since       2.5
 */
class plgCaptchacaptchareadable extends JPlugin
{
    public function 
__construct($subject$config)
    {
        
parent::__construct($subject$config);
        
$this->loadLanguage();
    }
    
    
/**
     * Initialise the captcha
     *
     * @param    string    $id    The id of the field.
     *
     * @return    Boolean    True on success, false otherwise
     *
     * @since  2.5
     */
    
public function onInit($id)
    {
        
$rand    substr(uniqid(''true), -5);
        
$stringa $this->randomCode(5);
        
$stringa $rand;
        
$valf $this->encrypt_string(strtoupper(substr($stringa05)));
        
$session =& JFactory::getSession();
        
$session->set('myvar'$valf);
        echo 
'<img src="' JURI::base() . 'plugins/captcha/captchareadable/' 'aa.php?f=' $valf '" name="imc" id="imc">';
        echo 
'<input type ="text" name="risp" id="risp" maxlength="5">';
        return 
true;
    }
    
    
/**
     * Gets the challenge HTML
     *
     * @return  string  The HTML to be embedded in the form.
     *
     * @since  2.5
     */
    
public function onDisplay($name$id$class)
    {
        return 
'<div id="dynamic_captchareadable_1"></div>';
    }
    
    
/**
     * Calls an HTTP POST function to verify if the user's guess was correct
     *
     * @return  True if the answer is correct, false otherwise
     *
     * @since  2.5
     */
    
public function onCheckAnswer($code)
    {
        
$response JRequest::getString('risp''');
        
$session =& JFactory::getSession();
        if (
$response != '' && $response == $this->decrypt_string($session->get('myvar''empty'))) {
            
$session->set('myvar''');
            return 
true;
        } else {
            
$this->_subject->setError(JText::_('Error'));
            return 
false;
        }
    }
    
    
    
    protected function 
randomCode($length 4)
    {
        
$session JFactory::getSession();
        
$rand    substr(uniqid(''true), -5);
        
$session->set('captcod'md5($rand));
        return 
$rand;
    }
    function 
encrypt_string($input)
    {
        
$inputlen strlen($input); 
        
$randkey  rand(19); 
        
$i 0;
        while (
$i $inputlen) {
            
$inputchr[$i] = (ord($input[$i]) - $randkey); 
            
$i++; 
        }
        
$encrypted implode('.'$inputchr) . '.' . (ord($randkey) + 50);
        return 
$encrypted;
    }
    
    function 
decrypt_string($input)
    {
        
$input_count strlen($input);
        
$dec explode("."$input); 
        
$x   count($dec);
        
$y   $x 1
        
$calc    $dec[$y] - 50;
        
$randkey chr($calc); 
        
$i 0;
        while (
$i $y) {
            
$array[$i] = $dec[$i] + $randkey
            
$real .= chr($array[$i]); 
            
$i++;
        }
        
$input $real;
        return 
$input;
    }
}
Come vedete a riga 34(con echo '<img src="' . JURI::base() . 'plugins/captcha/captchareadable/' . 'aa.php?f=) chiamo lo script PHP che crea l'immagine(di nome aa.php).
Questo il codice dello script che crea l'immagine
Codice: [Seleziona]
<?php
define
('_JEXEC',1);
defined('_JEXEC') or die;

function 
decrypt_string($input)
{
  
$input_count strlen($input);
  
$dec explode("."$input);
  
$x count($dec);
  
$y $x-1;
  
$calc $dec[$y]-50;
  
$randkey chr($calc);
  
$i 0;
   while (
$i $y)
  {
    
$array[$i] = $dec[$i]+$randkey
    
$real .= chr($array[$i]); 
    
$i++;
  };
$input $real;
return 
$input;
}

$risultato decrypt_string($_GET['f'],"mysecretkey");
$immagine imagecreatefromjpeg("captcha.jpg");
$testo imagecolorallocate($immagine255255255);
$white imagecolorallocate($immagine255255255);
$grey imagecolorallocate($immagine128128128);
$black imagecolorallocate($immagine000);
$text $risultato;
$font 'verdana.ttf';
imagettftext($immagine1501020$white$font$text);
header("Content-type: image/jpeg");
imagejpeg($immagine);
?>

In pratica quando io apro una pagina che deve contenere un capthca viene generato un numero casuale e salvato in una variabile di sessione.
Questo numero casuale viene criptato e viene richiamato come fosse un immagine lo script aa.php passandogli in get il codice criptato, lui(aa.php) lo decripta e restituisce in output appunto un immagine del captha con il codice generato.

Come vedete e' un funzionamento abbastanza semplice ma contorto e per nulla MVC >:(
Avete qualche suggerimento?

grazie
Davide
 
Davide Granata
Web developer PHP
www.davidepc.com

 



Web Design Bolzano Kreatif