<?php
// локальная страница проверки через post (клик)
ignore_user_abort(true);
header('Content-Type: text/html; charset=UTF-8');
header('Expires: Thu, 18 Aug 1994 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');
header('X-Robots-Tag: noindex');

require_once(__DIR__.'/data/conf.php');
require_once(__DIR__.'/code/func.php');

if ($ab_config['input_button'] == 1) die('{"error": "Input Button Disabled"}');
if ($_SERVER['REQUEST_METHOD'] != 'POST') {die('{"error": "Error NoPost"}');}

if (!function_exists('imagecreatetruecolor') AND $ab_config['buttons'] == 1) {
$ab_config['buttons'] = 0;
}

// коннект к базе:
$antibot_db = new SQLite3(__DIR__.'/data/sqlite.db'); 
$antibot_db->busyTimeout(2000);
$antibot_db->exec("PRAGMA journal_mode = WAL;");

$ab_config['time'] = time();
$ab_config['useragent'] = isset($_SERVER['HTTP_USER_AGENT']) ? trim(strip_tags($_SERVER['HTTP_USER_AGENT'])) : '';
$_POST['ip'] = isset($_POST['ip']) ? trim(preg_replace("/[^0-9a-zA-Z\.\:]/","", $_POST['ip'])) : die('{"error": "IP not set"}');
$_POST['xxx'] = isset($_POST['xxx']) ? trim(strip_tags($_POST['xxx'])) : die('{"error": "XXX not set"}');
$_POST['date'] = isset($_POST['date']) ? (int)trim(strip_tags($_POST['date'])) : die('{"error": "DATE not set"}');
$_POST['cid'] = isset($_POST['cid']) ? trim(preg_replace("/[^0-9\.]/","", $_POST['cid'])) : die('{"error": "CID not set"}');
$_POST['country'] = isset($_POST['country']) ? trim(preg_replace("/[^A-Z]/","", $_POST['country'])) : 'XX';

$referer = isset($_SERVER['HTTP_REFERER']) ? strip_tags(trim($_SERVER['HTTP_REFERER'])) : '';
if ($referer == '') {die('{"error": "Referer not set"}');}
// домен (host) с которого вызвали скрипт:
$refhost = parse_url($referer, PHP_URL_HOST);


if ($ab_config['time'] - $_POST['date'] > 600) die('{"cookie":"000"}');

if ($ab_config['buttons'] == 1) {
$xxx2 = explode('|', $_POST['xxx']);
if (!isset($xxx2[1])) die('{"error": "Error NoPost 1"}');
$_POST['color'] = $xxx2[0];
$_POST['color_hash'] = $xxx2[1];

if ($_POST['color_hash'] != hash('sha256', $ab_config['salt'].$_POST['color'].$_POST['date'].$ab_config['pass'].$_POST['ip'])) {
// не прошли цветные кнопки, не даем пройти антибота:
// добавление ip в черный список:
if ($ab_config['time_ban'] > 0) {
// проверка валидности ip:
if (filter_var($_POST['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
$ab_config['ipv'] = 4;
} elseif (filter_var($_POST['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
$ab_config['ipv'] = 6;
} else {
die('{"error": "Bad IP"}');
}
$add = @$antibot_db->exec("INSERT INTO ipv".$ab_config['ipv']."rules (priority, search, ip1, ip2, rule, comment, expires) VALUES ('1', '".$_POST['ip']."', '".AbIp2num($_POST['ip'])."', '".AbIp2num($_POST['ip'])."', 'block', 'Wrong Click ".$_POST['country']."', '".($ab_config['time_ban']*3600+$ab_config['time'])."');");
}
die('{"error": "Wrong Click"}');
}
} elseif ($ab_config['buttons'] == 0) {
// единственная кнопка, потом сделать усиленную проверку передаваемых данных
}

$hash = md5($ab_config['pass'].$refhost.$ab_config['useragent'].$_POST['ip'].$_POST['date']); // код для куки


// обновление лога о проходе заглушки:
$ok = 1;
if ($ab_config['antibot_log_tests'] == 1) {
$update = $antibot_db->exec("UPDATE hits SET passed='2' WHERE passed='0' AND cid='".$_POST['cid']."';");
if ($antibot_db->changes() != 1) {
$ok = 0;
}
}
// счетчик прошедших заглушку по клику:
if ($ok == 1) {
file_put_contents(__DIR__.'/data/counters/post_'.date('Ymd', $ab_config['time']), '1', FILE_APPEND | LOCK_EX);
}

echo '{"cookie":"'.$hash.'"}';
