Bonjour,
Le plugin hikashop recaptcha permet de protéger la création de compte Joomla. Il s'intègre à la "mécanique" Joomla en s'insérant aussi dans les formulaires "classiques" de Joomla (création de compte, contact, etc...). Le plugin prévoit aussi le traitement particulier de certains composants pour lesquels, soit il arrive à s'insérer (render), soit il bypass la vérification (return true).
Il faudrait que dans les options du plugin on puisse ajouter manuellement des composants pour lesquels on ne veut pas que ce plugin fasse de vérification du reCaptcha car cela bloque la suite du mécanisme.
Cas de figure :
Nous utilisons à la fois HikaShop et Fabrik sur plusieurs sites. Ce dernier permet de bâtir de puissantes applications spécifiques. Il dispose de ses propres plugins pour créer un compte User et pour afficher un recaptcha. En l'état, au moment du "createUser", le plugin Hika est déclenché et il fait un checkRecaptcha. Etant donné qu'il n'a pas fait un "render" car Fabrik n'est pas défini au début du onAfterRender, la validation est fausse et il génère un message d'erreur en interrompant le processus Fabrik.
Dans le onBeforeStoreUser, il y a une liste "hard coded" de composants qui bypasse le checkCaptcha si on n'est pas dans un contexte assumé par le "render" (captcha affiché).
Mais dans le onBeforeUserCreate, on fait le checkCaptcha sans ce contrôle.
J'ai donc fait la modif suivante :
function onBeforeUserCreate(&$user, &$do){
$app = JFactory::getApplication();
if ($app->isAdmin() || (@$_REQUEST['option']=='com_updateme' && @$_REQUEST['ctrl']=='subscription' && @$_REQUEST['task']=='api')) return true;
$this->_init();
if(!$this->params->get('registration',1)){
return true;
}
// apchea
$components = array('com_fabrik');
if (in_array(@$_REQUEST['option'],$components)) return true;
// apchea
$do = $this->_checkCaptcha();
}
Il me semble que cette liste de composants "autorisés" devrait être définie au niveau de la classe et utilisée à cet endroit aussi ?
Evidemment, ce serait encore mieux qu'il soit possible d'ajouter Fabrik à la liste des composants assumés par votre plugin. Ce serait plus homogène. Mais c'est nettement plus compliqué !
Merci de prévoir une solution à minima pour ne pas avoir à "hacker" le plugin lors des prochaines mises à jour.
Laurent