public function getTitle($title) { if (\IPS\Settings::i()->cleantalk_sfw == 1) { $is_sfw_check = true; $ip = $this->CleantalkGetIP(); $ip = array_unique($ip); $key = \IPS\Settings::i()->access_key; for ($i = 0; $i < sizeof($ip); $i++) { if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) { $is_sfw_check = false; if (isset($_COOKIE['ct_sfw_passed'])) { @setcookie('ct_sfw_passed', '0', 1, "/"); } } } if ($is_sfw_check) { include_once dirname(__FILE__) . "/uploads/cleantalk-sfw.class.php"; $sfw = new \CleanTalkSFW(); $sfw->cleantalk_get_real_ip(); $sfw->check_ip(); if ($sfw->result) { $sfw->sfw_die(); } } } if (session_id() == '') { session_start(); } $show_link = \IPS\Settings::i()->show_link; $html = ' <script type="text/javascript"> function ctSetCookie(c_name, value, def_value) { document.cookie = c_name + "=" + escape(value.replace(/^def_value$/, value)) + "; path=/"; } ctSetCookie("%s", "%s", "%s"); </script> '; $ct_checkjs_key = md5(\IPS\Settings::i()->access_key . '+' . \IPS\Settings::i()->email_in . date("Ymd", time())); $html = sprintf($html, "ct_checkjs", $ct_checkjs_key, 0); if ($show_link == 1) { $html .= "<div id='cleantalk_footer_link' style='width:100%;text-align:center;'><a href='https://cleantalk.org/ips-cs-4-anti-spam-plugin'>IPS spam</a> blocked by CleanTalk.</div>"; } $this->endBodyCode .= $html; return $title; }
} $sfw_log[$ip[$i]]['allow']++; $ct_data['sfw_log'] = $sfw_log; update_option('cleantalk_data', $ct_data); @setcookie('ct_sfw_passed', '0', 1, "/"); } //@$ct_data['sfw_log'][cleantalk_get_ip()]['all']++; //update_option('cleantalk_data', $ct_data); } } if ($is_sfw_check) { //include_once("cleantalk-sfw.php"); include_once "inc/cleantalk-sfw.class.php"; $sfw = new CleanTalkSFW(); $sfw->cleantalk_get_real_ip(); $sfw->check_ip(); if ($sfw->result) { $sfw->sfw_die(); } } //cron start if (isset($ct_data['last_sfw_send'])) { $last_sfw_send = $ct_data['last_sfw_send']; } else { $last_sfw_send = 0; } if (time() - $last_sfw_send > 3600) { ct_send_sfw_log(); $ct_data['last_sfw_send'] = time(); update_option('cleantalk_data', $ct_data); }
/** * Calling by hook integrate_load_theme */ function cleantalk_load() { global $context, $user_info, $modSettings, $smcFunc; if (isset($context['template_layers']) && is_array($context['template_layers']) && in_array('body', $context['template_layers']) && ($user_info['is_guest'] || $user_info['posts'] == 0) && !cleantalk_is_valid_js()) { $context['html_headers'] .= cleantalk_print_js_input(); } if ($user_info['is_admin'] && isset($_POST['ct_del_user'])) { foreach ($_POST['ct_del_user'] as $key => $value) { $result = $smcFunc['db_query']('', 'delete from {db_prefix}members where id_member=' . intval($key), array()); $result = $smcFunc['db_query']('', 'delete from {db_prefix}topics where id_member_started=' . intval($key), array()); $result = $smcFunc['db_query']('', 'delete from {db_prefix}messages where id_member=' . intval($key), array()); } } if ($user_info['is_admin'] && isset($_POST['ct_delete_all'])) { $result = $smcFunc['db_query']('', 'select * from {db_prefix}members where ct_marked=1', array()); while ($row = $smcFunc['db_fetch_assoc']($result)) { $tmp = $smcFunc['db_query']('', 'delete from {db_prefix}topics where id_member_started=' . $row['id_member'], array()); $tmp = $smcFunc['db_query']('', 'delete from {db_prefix}messages where id_member=' . $row['id_member'], array()); } $result = $smcFunc['db_query']('', 'delete from {db_prefix}members where ct_marked=1', array()); } if (isset($context['template_layers']) && $context['template_layers'] === array('html', 'body') && array_key_exists('cleantalk_tell_others', $modSettings) && $modSettings['cleantalk_tell_others']) { // add "tell others" templates $context['template_layers'][] = 'cleantalk'; } if (isset($_POST['cleantalk_api_key'])) { $ct = new Cleantalk(); $ct->server_url = CT_SERVER_URL; $ct_request = new CleantalkRequest(); $ct_request->auth_key = cleantalk_get_api_key(); $ct_request->response_lang = 'en'; // SMF use any charset and language $ct_request->agent = CT_AGENT_VERSION; $ct_request->sender_email = '*****@*****.**'; $ip = isset($user_info['ip']) ? $user_info['ip'] : $_SERVER['REMOTE_ADDR']; $ct_request->sender_ip = $ct->ct_session_ip($ip); $ct_request->sender_nickname = 'CleanTalk'; $ct_request->message = 'This message is a test to check the connection to the CleanTalk servers.'; $ct_request->submit_time = 10; $ct_request->js_on = 1; $ct_result = $ct->isAllowMessage($ct_request); } if (isset($_POST['cleantalk_sfw']) && $_POST['cleantalk_sfw'] == 1) { global $smcFunc; $sql = "DROP TABLE IF EXISTS `cleantalk_sfw`"; $result = $smcFunc['db_query']('', $sql, array()); $sql = "CREATE TABLE IF NOT EXISTS `cleantalk_sfw` (\n`network` int(11) unsigned NOT NULL,\n`mask` int(11) unsigned NOT NULL,\nINDEX ( `network` , `mask` )\n) ENGINE = MYISAM "; $result = $smcFunc['db_query']('', $sql, array()); $data = array('auth_key' => cleantalk_get_api_key(), 'method_name' => '2s_blacklists_db'); $result = sendRawRequest('https://api.cleantalk.org/2.1', $data, false); $result = json_decode($result, true); if (isset($result['data'])) { $result = $result['data']; $query = "INSERT INTO `cleantalk_sfw` VALUES "; for ($i = 0; $i < sizeof($result); $i++) { if ($i == sizeof($result) - 1) { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ")"; } else { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), "; } } $result = $smcFunc['db_query']('', $query, array()); } } if (isset($modSettings['cleantalk_sfw']) && $modSettings['cleantalk_sfw'] == 1) { $is_sfw_check = true; $ip = CleantalkGetIP(); $ip = array_unique($ip); $key = cleantalk_get_api_key(); for ($i = 0; $i < sizeof($ip); $i++) { if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) { $is_sfw_check = false; if (isset($_COOKIE['ct_sfw_passed'])) { @setcookie('ct_sfw_passed', '0', 1, "/"); } } } if ($is_sfw_check) { include_once "cleantalk-sfw.class.php"; $sfw = new CleanTalkSFW(); $sfw->cleantalk_get_real_ip(); $sfw->check_ip(); if ($sfw->result) { $sfw->sfw_die(); } } } }
/** * Checking all forms for spam * @return null|boolean NULL when success or FALSE when spam detected */ public function OnPageStartHandler() { global $APPLICATION, $USER; if (!is_object($USER)) { $USER = new CUser(); } $ct_status = COption::GetOptionString('cleantalk.antispam', 'status', '0'); $ct_global = COption::GetOptionString('cleantalk.antispam', 'form_global_check', '0'); $key = COption::GetOptionString('cleantalk.antispam', 'key', ''); $last_checked = COption::GetOptionString('cleantalk.antispam', 'last_checked', 0); $last_status = COption::GetOptionString('cleantalk.antispam', 'is_paid', 0); $new_checked = time(); $is_sfw = COption::GetOptionString('cleantalk.antispam', 'form_sfw', 0); $sfw_last_updated = COption::GetOptionString('cleantalk.antispam', 'sfw_last_updated', 0); if ($is_sfw == 1 && time() - $sfw_last_updated > 10) { global $DB; $data = array('auth_key' => $key, 'method_name' => '2s_blacklists_db'); $result = CleantalkAntispam::CleantalkSendRequest('https://api.cleantalk.org/2.1', $data, false); $result = json_decode($result, true); if (isset($result['data'])) { $result = $result['data']; $query = "INSERT INTO `" . $wpdb->base_prefix . "cleantalk_sfw` VALUES "; //$wpdb->query("TRUNCATE TABLE `".$wpdb->base_prefix."cleantalk_sfw`;"); for ($i = 0; $i < sizeof($result); $i++) { if ($i == sizeof($result) - 1) { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ");"; } else { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), "; } } $DB->Query($query); } include_once "cleantalk-sfw.class.php"; $sfw = new CleanTalkSFW(); $sfw->send_logs(); COption::SetOptionString('cleantalk.antispam', 'sfw_last_updated', time()); } if ($is_sfw == 1 && !$USER->IsAdmin()) { include_once "cleantalk-sfw.class.php"; $is_sfw_check = true; $ip = CleantalkAntispam::CleantalkGetIP(); $ip = array_unique($ip); $sfw_log = COption::GetOptionString('cleantalk.antispam', 'sfw_log', ''); for ($i = 0; $i < sizeof($ip); $i++) { if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) { $is_sfw_check = false; if (isset($_COOKIE['ct_sfw_passed'])) { if ($sfw_log == '') { $sfw_log = array(); $sfw_log[$ip[$i]] = array(); } else { $sfw_log = json_decode($sfw_log, true); } $sfw_log[$ip[$i]]['allow']++; COption::SetOptionString('cleantalk.antispam', 'sfw_log', json_encode($sfw_log)); @setcookie('ct_sfw_passed', '0', 1, "/"); } } } if ($is_sfw_check) { include_once "cleantalk-sfw.class.php"; $sfw = new CleanTalkSFW(); $sfw->cleantalk_get_real_ip(); $sfw->check_ip(); if ($sfw->result) { $sfw->sfw_die(); } } } if ($key != '' && $key != 'enter key' && $USER->IsAdmin()) { $new_status = $last_status; if ($new_checked - $last_checked > 86400) { $url = 'https://api.cleantalk.org'; $dt = array('auth_key' => $key, 'method_name' => 'get_account_status'); $result = CleantalkAntispam::CleantalkSendRequest($url, $dt, false); if ($result !== null) { $result = json_decode($result); if (isset($result->data) && isset($result->data->paid)) { $new_status = intval($result->data->paid); if ($last_status != 1 && $new_status == 1) { COption::SetOptionString('cleantalk.antispam', 'is_paid', 1); $show_notice = 1; if (LANGUAGE_ID == 'ru') { $review_message = "Нравится антиспам от CleanTalk? Расскажите другим об этом! <a target='_blank' href='http://marketplace.1c-bitrix.ru/solutions/cleantalk.antispam/#rating'>Оставьте отзыв в Bitrix.Marketplace</a>"; } else { $review_mess = "Like Anti-spam by CleanTalk? Help others learn about CleanTalk! <a target='_blank' href='http://marketplace.1c-bitrix.ru/solutions/cleantalk.antispam/#rating'>Leave a review at the Bitrix.Marketplace</a>"; } CAdminNotify::Add(array('MESSAGE' => $review_mess, 'TAG' => 'review_notify', 'MODULE_ID' => 'main', 'ENABLE_CLOSE' => 'Y')); } } } $url = 'https://api.cleantalk.org'; $dt = array('auth_key' => $key, 'method_name' => 'notice_paid_till'); $result = CleantalkAntispam::CleantalkSendRequest($url, $dt, false); if ($result !== null) { $result = json_decode($result); if (isset($result->moderate_ip) && $result->moderate_ip == 1) { COption::SetOptionString('cleantalk.antispam', 'moderate_ip', 1); COption::SetOptionString('cleantalk.antispam', 'ip_license', $result['ip_license']); } else { COption::SetOptionString('cleantalk.antispam', 'moderate_ip', 0); COption::SetOptionString('cleantalk.antispam', 'ip_license', 0); } } COption::SetOptionString('cleantalk.antispam', 'last_checked', $new_checked); } } if (!$USER->IsAdmin() && $ct_status == 1 && $ct_global == 1) { $sender_email = null; $message = ''; CleantalkAntispam::CleantalkGetFields($sender_email, $message, $_POST); if ($sender_email !== null) { $arUser = array(); $arUser["type"] = "comment"; $arUser["sender_email"] = $sender_email; $arUser["sender_nickname"] = ''; $arUser["sender_ip"] = $_SERVER['REMOTE_ADDR']; $arUser["message_title"] = ""; $arUser["message_body"] = $message; $arUser["example_title"] = ""; $arUser["example_body"] = ""; $arUser["example_comments"] = ""; $aResult = CleantalkAntispam::CheckAllBefore($arUser, FALSE); if (isset($aResult) && is_array($aResult)) { if ($aResult['errno'] == 0) { if ($aResult['allow'] == 1) { //Not spammer - just return; return; } else { CleantalkAntispam::CleantalkDie($aResult['ct_result_comment']); return false; } } } } } }
public static function onSkinAfterBottomScripts($skin, &$text) { global $wgCTShowLink, $wgCTSFW, $wgCTDataStoreFile, $wgCTAccessKey; /* SFW starts */ if ($wgCTSFW && file_exists($wgCTDataStoreFile)) { $settings = file_get_contents($wgCTDataStoreFile); include_once "cleantalk-sfw.class.php"; if ($settings) { $settings = json_decode($settings, true); if (!isset($settings['lastSFWUpdate'])) { $settings['lastSFWUpdate'] = 0; } if (time() - $settings['lastSFWUpdate'] > 30) { $dbr = wfGetDB(DB_MASTER); $dbr->query("DROP TABLE IF EXISTS `cleantalk_sfw`;"); $dbr->commit(); $dbr->query("CREATE TABLE IF NOT EXISTS `cleantalk_sfw` (\n\t\t`network` int(11) unsigned NOT NULL,\n\t\t`mask` int(11) unsigned NOT NULL,\n\t\tINDEX ( `network` , `mask` )\n\t\t) ENGINE = MYISAM ;"); $dbr->commit(); $data = array('auth_key' => $wgCTAccessKey, 'method_name' => '2s_blacklists_db'); $result = sendRawRequest('https://api.cleantalk.org/2.1', $data, false); $result = json_decode($result, true); if (isset($result['data'])) { $result = $result['data']; $query = "INSERT INTO `cleantalk_sfw` VALUES "; for ($i = 0; $i < sizeof($result); $i++) { if ($i == sizeof($result) - 1) { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ");"; } else { $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), "; } } $result = $dbr->query($query); $dbr->commit(); $settings['lastSFWUpdate'] = time(); $fp = fopen($wgCTDataStoreFile, 'w') or error_log('Could not open file:' . $wgCTDataStoreFile); fwrite($fp, json_encode($settings)); fclose($fp); } } /* Check IP here */ $is_sfw_check = true; $ip = CleantalkGetIP(); $ip = array_unique($ip); $key = $wgCTAccessKey; for ($i = 0; $i < sizeof($ip); $i++) { if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) { $is_sfw_check = false; if (isset($_COOKIE['ct_sfw_passed'])) { @setcookie('ct_sfw_passed', '0', 1, "/"); } } } if ($is_sfw_check) { $sfw = new CleanTalkSFW(); $sfw->cleantalk_get_real_ip(); $sfw->check_ip(); if ($sfw->result) { $sfw->sfw_die(); } } /* Finish checking IP */ } } /* SFW ends */ if ($wgCTShowLink) { $text .= "<div style='width:100%;text-align:center;'><a href='https://cleantalk.org'>MediaWiki spam</a> blocked by CleanTalk.</div>"; } return true; }