Para adicionar Captcha no RoundCube, precisamos modificar 2 arquivos importantes:
No RoundCube versão 8 (acabei de testar 8.4 e 8.7):
edite: roundcube dir / program / include / rcube template.php e adicione essas linhas na função login_form e antes de $ out = $ input_task-> show (); linha:
ob_start();
$rand = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$_SESSION['ca'] = $rand;
$im = @imagecreate(150,20);
$back = imagecolorallocatealpha($im,255,255,255,127);
$text = imagecolorallocate($im,233,14,91);
imagestring($im,20,40,2,$rand,$text);
imagepng($im);
$bimg = base64_encode(ob_get_contents());
imagedestroy($im);
ob_end_clean();
$attr['src'] = 'data:image/gif;base64,'.$bimg;
$img_captcha = html::img($attr);
$input_captcha = new html_inputfield(array('name' => '_captcha', 'id' => 'rcmlogincaptcha'));
$table->add('title', html::label('captcha', Q(rcube_label('captcha_img'))));
$table->add('captcha',$img_captcha);
$table->add('title', html::label('rcmlogincaptcha', Q(rcube_label('captcha'))));
$table->add('input',$input_captcha->show());
Atualize sua página de Login para ver o Captcha que apareceu.
Ok, para validar o Captcha, precisamos editar o arquivo index.php.
edite: roundcube_dir / index.php adicione essas linhas antes de $ RCMAIL-> kill_session (); :
$ca = $_SESSION['ca'];
$captcha = trim(get_input_value('_captcha', RCUBE_INPUT_POST));
E mude isso se :
if ($auth['valid'] && !$auth['abort'] && ...
Para
if ($ca == $captcha && $auth['valid'] && !$auth['abort'] && ...
Agora precisamos apenas adicionar captcha e captcha_img aos rótulos na localização.
Abra o arquivo de localização, por exemplo en_US.
edit: / roundcube dir / program / localization / en US / labels.inc e adicione estas linhas no final do arquivo:
$labels['captcha_img'] = 'Captcha image';
$labels['captcha'] = 'captcha';
Agora, o captcha deve funcionar corretamente.
Agora, sobre o Captcha no RoundCube versão 9.x (acabei de verificar 9.5):
Para adicionar Captcha na página de login:
editar: / program / include / rcmail output html.php e adicionar essas linhas na função login_form e antes de $ out = $ input_task-> show (); :
ob_start();
$rand = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$_SESSION['ca'] = $rand;
$im = @imagecreate(150,20);
$back = imagecolorallocatealpha($im,255,255,255,127);
$text = imagecolorallocate($im,233,14,91);
imagestring($im,20,40,2,$rand,$text);
imagepng($im);
$bimg = base64_encode(ob_get_contents());
imagedestroy($im);
ob_end_clean();
$attr['src'] = 'data:image/gif;base64,'.$bimg;
$img_captcha = html::img($attr);
$input_captcha = new html_inputfield(array('name' => '_captcha', 'id' => 'rcmlogincaptcha'));
$table->add('title', html::label('captcha', html::quote($this->app->gettext('captcha'))));
$table->add('captcha',$img_captcha);
$table->add('title', html::label('rcmlogincaptcha', html::quote($this->app->gettext('captcha'))));
$table->add('input',$input_captcha->show());
Ok, para validar o captcha, precisamos editar o arquivo index.php.
edite: roundcube_dir / index.php adicione essas linhas antes de $ RCMAIL-> kill_session (); :
$ca = $_SESSION['ca'];
$captcha = trim(rcube_utils::get_input_value('_captcha', rcube_utils::INPUT_POST));
E mude isso se :
if ($auth['valid'] && !$auth['abort'] && ...
Para
if ($ca == $captcha && $auth['valid'] && !$auth['abort'] && ...
E, finalmente, adicione estas linhas ao arquivo de localização:
$labels['captcha_img'] = 'Captcha image';
$labels['captcha'] = 'captcha';
Boa sorte