1st version of the mathcaptcha addon
This commit is contained in:
parent
03de600b11
commit
0b5080eaa1
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Math-Captcha
|
||||
* Description: This addon adds a smal calculation, which needs to be solved correctly before a new registration can be done
|
||||
* Version: 0.1
|
||||
* Author: Tobias Diekershoff <tobias@social.diekershoff.de>
|
||||
* License: MIT style
|
||||
**/
|
||||
|
||||
use Friendica\App;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\L10n;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Core\System;
|
||||
|
||||
function mathcaptcha_install()
|
||||
{
|
||||
Hook::register('register_form', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_register_form');
|
||||
Hook::register('register_post', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_register_post');
|
||||
Hook::register('template_vars', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_template_vars');
|
||||
}
|
||||
|
||||
function mathcaptcha_uninstall()
|
||||
{
|
||||
Hook::unregister('register_form', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_register_form');
|
||||
Hook::unregister('register_post', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_register_post');
|
||||
Hook::unregister('template_vars', 'addon/mathcaptcha/mathcaptcha.php', 'mathcaptcha_template_vars');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the captcha was solved correctly when posting the registration form
|
||||
*/
|
||||
function mathcaptcha_register_post(App $a, &$b)
|
||||
{
|
||||
$solution = 0;
|
||||
switch ($_SESSION['mathcaptcha_op']){
|
||||
case 0:
|
||||
$solution = $_SESSION['mathcaptcha_n1'] + $_SESSION['mathcaptcha_n2'];
|
||||
break;
|
||||
case 1:
|
||||
$solution = $_SESSION['mathcaptcha_n1'] - $_SESSION['mathcaptcha_n2'];
|
||||
break;
|
||||
case 2:
|
||||
$solution = $_SESSION['mathcaptcha_n1'] * $_SESSION['mathcaptcha_n2'];
|
||||
break;
|
||||
}
|
||||
unset($_SESSION['mathcaptcha_n1']);
|
||||
unset($_SESSION['mathcaptcha_n2']);
|
||||
unset($_SESSION['mathcaptcha_op']);
|
||||
$post = $b['post'];
|
||||
if ($solution == $post['mathcaptcha']) {
|
||||
return true;
|
||||
} else {
|
||||
notice(L10n::t('The solution for the captcha was incorrect'));
|
||||
$a->internalRedirect('/register');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the captcha to the register form
|
||||
*/
|
||||
function mathcaptcha_register_form(App $a, &$b)
|
||||
{
|
||||
$tpl = $b['template'];
|
||||
$oldPath = $tpl->filename;
|
||||
$newPath = 'addon/mathcaptcha/templates/register.tpl';
|
||||
if (strpos($oldPath, 'theme') == true)
|
||||
{
|
||||
$theme = explode('/', $oldPath)[2];
|
||||
$newThemePath = 'addon/mathcaptcha/templates/theme/'.$theme.'/register.tpl';
|
||||
if (file_exists($newThemePath)) {
|
||||
$newPath = $newThemePath;
|
||||
}
|
||||
}
|
||||
if (file_exists($newPath)) {
|
||||
$b['template'] = Renderer::getMarkupTemplate($newPath);
|
||||
$b['template']->filename = $newPath;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* add template variables to the registration template
|
||||
*/
|
||||
function mathcaptcha_template_vars(App $a, &$arr)
|
||||
{
|
||||
// if the template currently processed is the register.tpl
|
||||
// add some new variables to the list of template variables
|
||||
if ($arr['template']=='register.tpl')
|
||||
{
|
||||
unset($_SESSION['mathcaptcha_n1']);
|
||||
unset($_SESSION['mathcaptcha_n2']);
|
||||
unset($_SESSION['mathcaptcha_op']);
|
||||
$num1 = rand(1, 10);
|
||||
$num2 = rand(1, 10);
|
||||
$operator = rand(0, 2);
|
||||
$_SESSION['mathcaptcha_n1'] = $num1;
|
||||
$_SESSION['mathcaptcha_n2'] = $num2;
|
||||
$_SESSION['mathcaptcha_op'] = $operator;
|
||||
$ops = ['+','-','×'];
|
||||
$task = strval($num1)." ".$ops[$operator]." ".strval($num2);
|
||||
$arr['vars'] = array_merge($arr['vars'], [
|
||||
'$captchaTitle'=>L10n::t('Captcha'),
|
||||
'$captchaDescription'=>L10n::t('In order to continue with the registration, please solve the following calculation.'),
|
||||
'$mathcaptcha'=> ['mathcaptcha', $task, '', L10n::t('You have to type in the solution of the calculation'), 'required']
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue