public static function hookAdminSettings(XenForo_Visitor &$visitor) { $options = XenForo_Application::getOptions(); if ($options->get('cleantalk', 'enabled') && sizeof($_POST) > 0 && isset($_POST['options']) && isset($_POST['options']['cleantalk'])) { require_once 'CleanTalk/Base/cleantalk.class.php'; $ct_ws = array('work_url' => 'http://moderate.cleantalk.org', 'server_url' => 'http://moderate.cleantalk.org', 'server_ttl' => 0, 'server_changed' => 0); $ct = new Cleantalk(); $ct->work_url = $ct_ws['work_url']; $ct->server_url = $ct_ws['server_url']; $ct->server_ttl = $ct_ws['server_ttl']; $ct->server_changed = $ct_ws['server_changed']; $options = XenForo_Application::getOptions(); $ct_request = new CleantalkRequest(); $ct_request->auth_key = $_POST['options']['cleantalk']['apikey']; $ct_request->agent = 'xenforo-15'; $ct_request->response_lang = 'en'; $ct_request->js_on = 1; $ct_request->sender_email = "*****@*****.**"; $ct_request->sender_nickname = "CleanTalk"; $ct_request->sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request->submit_time = 0; $ct_request->message = "This message is a test to check the connection to the CleanTalk servers."; $ct_result = $ct->isAllowMessage($ct_request); } }
/** * Test S2member registration * @return array with errors */ function ct_s2member_registration_test() { global $ct_agent_version, $ct_post_data_label, $ct_post_data_authnet_label, $ct_formtime_label, $ct_options, $ct_data; $ct_options = ct_get_options(); $ct_data = ct_get_data(); if ($ct_options['registrations_test'] == 0) { return null; } $submit_time = submit_time_test(); $checkjs = js_test('ct_checkjs', $_COOKIE, true); require_once 'cleantalk.class.php'; $sender_info = get_sender_info(); $sender_info = json_encode($sender_info); if ($sender_info === false) { $sender_info = ''; } $sender_email = null; if (isset($_POST[$ct_post_data_label]['email'])) { $sender_email = $_POST[$ct_post_data_label]['email']; } if (isset($_POST[$ct_post_data_authnet_label]['email'])) { $sender_email = $_POST[$ct_post_data_authnet_label]['email']; } $sender_nickname = null; if (isset($_POST[$ct_post_data_label]['username'])) { $sender_nickname = $_POST[$ct_post_data_label]['username']; } if (isset($_POST[$ct_post_data_authnet_label]['username'])) { $sender_nickname = $_POST[$ct_post_data_authnet_label]['username']; } $config = get_option('cleantalk_server'); $ct = new Cleantalk(); $ct->work_url = $config['ct_work_url']; $ct->server_url = $ct_options['server']; $ct->server_ttl = $config['ct_server_ttl']; $ct->server_changed = $config['ct_server_changed']; $ct->ssl_on = $ct_options['ssl_on']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_options['apikey']; $ct_request->sender_email = $sender_email; $ct_request->sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request->sender_nickname = $sender_nickname; $ct_request->agent = $ct_agent_version; $ct_request->sender_info = $sender_info; $ct_request->js_on = $checkjs; $ct_request->submit_time = $submit_time; $ct_result = $ct->isAllowUser($ct_request); if ($ct->server_change) { update_option('cleantalk_server', array('ct_work_url' => $ct->work_url, 'ct_server_ttl' => $ct->server_ttl, 'ct_server_changed' => time())); } if ($ct_result->errno != 0) { return false; } // Restart submit form counter for failed requests if ($ct_result->allow == 0) { $_SESSION[$ct_formtime_label] = time(); } if ($ct_result->allow == 0) { ct_die_extended($ct_result->comment); } return true; }
protected function _checkSpam($spam_check, $options) { require_once 'CleanTalk/Base/cleantalk.class.php'; $ct_authkey = $options->get('cleantalk', 'apikey'); $dataRegistryModel = $this->getModelFromCache('XenForo_Model_DataRegistry'); $ct_ws = $dataRegistryModel->get('cleantalk_ws'); if (!$ct_ws) { $ct_ws = array('work_url' => 'http://moderate.cleantalk.ru', 'server_url' => 'http://moderate.cleantalk.ru', 'server_ttl' => 0, 'server_changed' => 0); } $field_name = CleanTalk_Base_CleanTalk::getCheckjsName(); if (!isset($_COOKIE[$field_name])) { $checkjs = NULL; } elseif (in_array($_COOKIE[$field_name], CleanTalk_Base_CleanTalk::getCheckJSArray())) { $checkjs = 1; } else { $checkjs = 0; } $user_agent = $_SERVER['HTTP_USER_AGENT']; $refferrer = $_SERVER['HTTP_REFERER']; $ct = new Cleantalk(); $ct->work_url = $ct_ws['work_url']; $ct->server_url = $ct_ws['server_url']; $ct->server_ttl = $ct_ws['server_ttl']; $ct->server_changed = $ct_ws['server_changed']; $options = XenForo_Application::getOptions(); $ct_options = array('enabled' => $options->get('cleantalk', 'enabled'), 'apikey' => $options->get('cleantalk', 'apikey')); $sender_info = json_encode(array('cms_lang' => 'en', 'REFFERRER' => $refferrer, 'post_url' => $refferrer, 'USER_AGENT' => $user_agent, 'ct_options' => json_encode($ct_options))); $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_authkey; $ct_request->agent = 'xenforo-15'; $ct_request->response_lang = 'en'; $ct_request->js_on = $checkjs; $ct_request->sender_info = $sender_info; $ct_request->sender_email = $spam_check['sender_email']; $ct_request->sender_nickname = $spam_check['sender_nickname']; $ct_request->sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_submit_time = NULL; // session_start(); switch ($spam_check['type']) { case 'comment': $stored_time = XenForo_Application::getSession()->get('ct_submit_comment_time'); if (isset($stored_time)) { $ct_submit_time = time() - $stored_time; } $timelabels_key = 'e_comm'; $ct_request->submit_time = $ct_submit_time; $ct_request->message = $spam_check['message_title'] . " \n\n" . $spam_check['message_body']; $example = ''; $a_example = array(); $a_example['title'] = $spam_check['example_title']; $a_example['body'] = $spam_check['example_body']; $a_example['comments'] = $spam_check['example_comments']; // Additional info. $post_info = ''; $a_post_info['comment_type'] = 'comment'; // JSON format. $example = json_encode($a_example); $post_info = json_encode($a_post_info); // Plain text format. if ($example === FALSE) { $example = ''; $example .= $a_example['title'] . " \n\n"; $example .= $a_example['body'] . " \n\n"; $example .= $a_example['comments']; } if ($post_info === FALSE) { $post_info = ''; } // Example text + last N comments in json or plain text format. $ct_request->example = $example; $ct_request->post_info = $post_info; $ct_result = $ct->isAllowMessage($ct_request); break; case 'register': $stored_time = XenForo_Application::getSession()->get('ct_submit_register_time'); if (isset($stored_time)) { $ct_submit_time = time() - $stored_time; } $timelabels_key = 'e_reg'; $ct_request->submit_time = $ct_submit_time; $ct_request->tz = $spam_check['timezone']; $ct_result = $ct->isAllowUser($ct_request); break; } $ret_val = array(); $ret_val['ct_request_id'] = $ct_result->id; if ($ct->server_change) { $dataRegistryModel->set('cleantalk_ws', array('work_url' => $ct->work_url, 'server_url' => $ct->server_url, 'server_ttl' => $ct->server_ttl, 'server_changed' => time())); } // First check errstr flag. if (!empty($ct_result->errstr) || !empty($ct_result->inactive) && $ct_result->inactive == 1) { // Cleantalk error so we go default way (no action at all). $ret_val['errno'] = 1; // Just inform admin. //$err_title = $_SERVER['SERVER_NAME'] . ' - CleanTalk hook error'; if (!empty($ct_result->errstr)) { $ret_val['errstr'] = $this->_filterResponse($ct_result->errstr); } else { $ret_val['errstr'] = $this->_filterResponse($ct_result->comment); } $send_flag = FALSE; $ct_time = $dataRegistryModel->get('cleantalk_' . $timelabels_key); if (!$ct_time) { $send_flag = TRUE; } elseif (time() - 900 > $ct_time[0]) { // 15 minutes. $send_flag = TRUE; } if ($send_flag) { $dataRegistryModel->set('cleantalk_' . $timelabels_key, array(time())); $mail = XenForo_Mail::create('cleantalk_error', array('plainText' => $ret_val['errstr'], 'htmlText' => nl2br($ret_val['errstr']))); $mail->send($options->get('contactEmailAddress')); } return $ret_val; } $ret_val['errno'] = 0; if ($ct_result->allow == 1) { // Not spammer. $ret_val['allow'] = 1; /* // Store request_id in globals to store it in DB later. _cleantalk_ct_result('set', $ct_result->id); // Don't store 'ct_result_comment', means good comment. */ } else { // Spammer. $ret_val['allow'] = 0; $ret_val['ct_result_comment'] = $this->_filterResponse($ct_result->comment); // Check stop_queue flag. if ($spam_check['type'] == 'comment' && $ct_result->stop_queue == 0) { // Spammer and stop_queue == 0 - to manual approvement. $ret_val['stop_queue'] = 0; /* // Store request_id and comment in static to store them in DB later. // Store 'ct_result_comment' - means bad comment. _cleantalk_ct_result('set', $ct_result->id, $ret_val['ct_result_comment']); */ } else { // New user or Spammer and stop_queue == 1 - display form error message. $ret_val['stop_queue'] = 1; } } return $ret_val; }
return $result; } $form->add(new \IPS\Helpers\Form\YesNo('plugin_enabled', \IPS\Settings::i()->plugin_enabled, FALSE, array('app' => 'core', 'key' => 'Admin', 'autoSaveKey' => 'plugin_enabled'))); $form->add(new \IPS\Helpers\Form\YesNo('moderate_new', \IPS\Settings::i()->moderate_new, FALSE, array('app' => 'core', 'key' => 'Admin', 'autoSaveKey' => 'moderate_new'))); $form->add(new \IPS\Helpers\Form\YesNo('show_link', \IPS\Settings::i()->show_link, FALSE, array('app' => 'core', 'key' => 'Admin', 'autoSaveKey' => 'show_link'))); if (file_exists(dirname($_SERVER['SCRIPT_FILENAME']) . "/../uploads/cleantalk-sfw.class.php")) { $form->add(new \IPS\Helpers\Form\YesNo('cleantalk_sfw', \IPS\Settings::i()->cleantalk_sfw, FALSE, array('app' => 'core', 'key' => 'Admin', 'autoSaveKey' => 'cleantalk_sfw'))); } else { $form->addHeader('Please, delete plugin completely and install again to enable Spam FireWall feature'); } $form->add(new \IPS\Helpers\Form\Text('access_key', \IPS\Settings::i()->access_key, FALSE, array('app' => 'core', 'key' => 'Admin', 'autoSaveKey' => 'access_key'))); if ($values = $form->values()) { require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/../uploads/cleantalk.class.php"; require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/../uploads/JSON.php"; $values = $form->values(); $ct = new \Cleantalk(); $ct->work_url = 'http://moderate.cleantalk.ru'; $ct->server_url = 'http://moderate.cleantalk.ru'; $ct->server_ttl = 43200; $ct_request = new \CleantalkRequest(); $ct_request->auth_key = $values['access_key']; $ct_request->sender_nickname = 'CleanTalk'; $ct_request->sender_ip = $_SERVER['REMOTE_ADDR']; $ct_request->sender_email = '*****@*****.**'; $ct_request->agent = 'ipboard4-18'; $ct_request->js_on = 1; $ct_request->message = 'This message is a test to check the connection to the CleanTalk servers.'; $ct_result = $ct->isAllowMessage($ct_request); $form->saveAsSettings(); if (\IPS\Settings::i()->cleantalk_sfw == 1) { $sql = "DROP TABLE IF EXISTS `cleantalk_sfw`";
/** * Inner function - Sends the results of moderation * @param string $feedback_request * @return bool */ function ct_send_feedback($feedback_request = null) { global $ct_options, $ct_data; if (empty($feedback_request) && isset($_SESSION['feedback_request']) && preg_match("/^[a-z0-9\\;\\:]+\$/", $_SESSION['feedback_request'])) { $feedback_request = $_SESSION['feedback_request']; unset($_SESSION['feedback_request']); } if ($feedback_request !== null) { require_once 'cleantalk.class.php'; $config = get_option('cleantalk_server'); $ct = new Cleantalk(); $ct->work_url = $config['ct_work_url']; $ct->server_url = $ct_options['server']; $ct->server_ttl = $config['ct_server_ttl']; $ct->server_changed = $config['ct_server_changed']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_options['apikey']; $ct_request->feedback = $feedback_request; $ct->sendFeedback($ct_request); if ($ct->server_change) { update_option('cleantalk_server', array('ct_work_url' => $ct->work_url, 'ct_server_ttl' => $ct->server_ttl, 'ct_server_changed' => time())); } return true; } return false; }
/** * Universal method for checking comment or new user for spam * It makes checking itself * @param &array Entity to check (comment or new user) * @param boolean Notify admin about errors by email or not (default FALSE) * @return array|null Checking result or NULL when bad params */ static function CheckSpam(&$arEntity, $bSendEmail = FALSE) { if (!is_array($arEntity) || !array_key_exists('type', $arEntity)) { return; } $type = $arEntity['type']; if ($type != 'comment' && $type != 'register') { return; } $ct_key = Mage::getStoreConfig('general/cleantalk/api_key'); $ct_ws = self::GetWorkServer(); if (!(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')) { if (!session_id()) { session_start(); } } //This one is causing errors with ajax if (!isset($_COOKIE['ct_checkjs'])) { $checkjs = NULL; } elseif ($_COOKIE['ct_checkjs'] == self::GetCheckJSValue()) { $checkjs = 1; } else { $checkjs = 0; } if (isset($_SERVER['HTTP_USER_AGENT'])) { $user_agent = htmlspecialchars((string) $_SERVER['HTTP_USER_AGENT']); } else { $user_agent = NULL; } if (isset($_SERVER['HTTP_REFERER'])) { $refferrer = htmlspecialchars((string) $_SERVER['HTTP_REFERER']); } else { $refferrer = NULL; } $ct_language = 'en'; $sender_info = array('cms_lang' => $ct_language, 'REFFERRER' => $refferrer, 'post_url' => $refferrer, 'USER_AGENT' => $user_agent); $sender_info = json_encode($sender_info); require_once 'lib/cleantalk.class.php'; $ct = new Cleantalk(); $ct->work_url = $ct_ws['work_url']; $ct->server_url = $ct_ws['server_url']; $ct->server_ttl = $ct_ws['server_ttl']; $ct->server_changed = $ct_ws['server_changed']; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $forwarded_for = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? htmlentities($_SERVER['HTTP_X_FORWARDED_FOR']) : ''; } $sender_ip = !empty($forwarded_for) ? $forwarded_for : $_SERVER['REMOTE_ADDR']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_key; $ct_request->sender_email = isset($arEntity['sender_email']) ? $arEntity['sender_email'] : ''; $ct_request->sender_nickname = isset($arEntity['sender_nickname']) ? $arEntity['sender_nickname'] : ''; $ct_request->sender_ip = isset($arEntity['sender_ip']) ? $arEntity['sender_ip'] : $sender_ip; $ct_request->agent = 'magento-121'; $ct_request->js_on = $checkjs; $ct_request->sender_info = $sender_info; $ct_submit_time = NULL; if (isset($_SESSION['ct_submit_time'])) { $ct_submit_time = time() - $_SESSION['ct_submit_time']; } switch ($type) { case 'comment': $timelabels_key = 'mail_error_comment'; $ct_request->submit_time = $ct_submit_time; $message_title = isset($arEntity['message_title']) ? $arEntity['message_title'] : ''; $message_body = isset($arEntity['message_body']) ? $arEntity['message_body'] : ''; $ct_request->message = $message_title . " \n\n" . $message_body; $example = ''; $a_example['title'] = isset($arEntity['example_title']) ? $arEntity['example_title'] : ''; $a_example['body'] = isset($arEntity['example_body']) ? $arEntity['example_body'] : ''; $a_example['comments'] = isset($arEntity['example_comments']) ? $arEntity['example_comments'] : ''; // Additional info. $post_info = ''; $a_post_info['comment_type'] = 'comment'; // JSON format. $example = json_encode($a_example); $post_info = json_encode($a_post_info); // Plain text format. if ($example === FALSE) { $example = ''; $example .= $a_example['title'] . " \n\n"; $example .= $a_example['body'] . " \n\n"; $example .= $a_example['comments']; } if ($post_info === FALSE) { $post_info = ''; } // Example text + last N comments in json or plain text format. $ct_request->example = $example; $ct_request->post_info = $post_info; $ct_result = $ct->isAllowMessage($ct_request); break; case 'register': $timelabels_key = 'mail_error_reg'; $ct_request->submit_time = $ct_submit_time; $ct_request->tz = isset($arEntity['user_timezone']) ? $arEntity['user_timezone'] : NULL; $ct_result = $ct->isAllowUser($ct_request); } $ret_val = array(); $ret_val['ct_request_id'] = $ct_result->id; if ($ct->server_change) { self::SetWorkServer($ct->work_url, $ct->server_url, $ct->server_ttl, time()); } // First check errstr flag. if (!empty($ct_result->errstr) || !empty($ct_result->inactive) && $ct_result->inactive == 1) { // Cleantalk error so we go default way (no action at all). $ret_val['errno'] = 1; $err_title = $_SERVER['SERVER_NAME'] . ' - CleanTalk module error'; if (!empty($ct_result->errstr)) { if (preg_match('//u', $ct_result->errstr)) { $err_str = preg_replace('/^[^\\*]*?\\*\\*\\*|\\*\\*\\*[^\\*]*?$/iu', '', $ct_result->errstr); } else { $err_str = preg_replace('/^[^\\*]*?\\*\\*\\*|\\*\\*\\*[^\\*]*?$/i', '', $ct_result->errstr); } } else { if (preg_match('//u', $ct_result->comment)) { $err_str = preg_replace('/^[^\\*]*?\\*\\*\\*|\\*\\*\\*[^\\*]*?$/iu', '', $ct_result->comment); } else { $err_str = preg_replace('/^[^\\*]*?\\*\\*\\*|\\*\\*\\*[^\\*]*?$/i', '', $ct_result->comment); } } $ret_val['errstr'] = $err_str; $timedata = FALSE; $send_flag = FALSE; $insert_flag = FALSE; try { $timelabels = Mage::getModel('antispam/timelabels'); $timelabels->load('mail_error'); $time = $timelabels->getData(); if (!$time || empty($time)) { $send_flag = TRUE; $insert_flag = TRUE; } elseif (time() - 900 > $time['ct_value']) { // 15 minutes $send_flag = TRUE; $insert_flag = FALSE; } } catch (Exception $e) { $send_flag = FALSE; Mage::log('Cannot operate with "cleantalk_timelabels" table.'); } if ($send_flag) { Mage::log($err_str); if (!$insert_flag) { $timelabels->setData('ct_key', 'mail_error'); } $timelabels->setData('ct_value', time()); $timelabels->save(); $general_email = Mage::getStoreConfig('trans_email/ident_general/email'); $mail = Mage::getModel('core/email'); $mail->setToEmail($general_email); $mail->setFromEmail($general_email); $mail->setSubject($err_title); $mail->setBody($_SERVER['SERVER_NAME'] . "\n\n" . $err_str); $mail->setType('text'); try { $mail->send(); } catch (Exception $e) { Mage::log('Cannot send CleanTalk module error message to ' . $general_email); } } return $ret_val; } $ret_val['errno'] = 0; if ($ct_result->allow == 1) { // Not spammer. $ret_val['allow'] = 1; } else { $ret_val['allow'] = 0; $ret_val['ct_result_comment'] = $ct_result->comment; // Spammer. // Check stop_queue flag. if ($type == 'comment' && $ct_result->stop_queue == 0) { // Spammer and stop_queue == 0 - to manual approvement. $ret_val['stop_queue'] = 0; } else { // New user or Spammer and stop_queue == 1 - display message and exit. $ret_val['stop_queue'] = 1; } } return $ret_val; }
/** * 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(); } } } }
/** * Sending of manual moderation result to CleanTalk server * It makes CleanTalk service better * Use it in your modules * @param string Name of event generated module ('blog', 'forum', etc.) * @param int ID of added entity (comment, message, etc) * @param string Feedback type - 'Y' or 'N' only */ static function SendFeedback($module, $id, $feedback) { global $APPLICATION, $DB; if (empty($module)) { return; } if (empty($id) || intval($id) < 0) { return; } if (empty($feedback) || $feedback != 'Y' && $feedback != 'N') { return; } $request_id = $DB->Query('SELECT ct_request_id FROM cleantalk_cids WHERE module=\'' . $module . '\' AND cid=' . $id)->Fetch(); if ($request_id !== FALSE) { $DB->Query('DELETE FROM cleantalk_cids WHERE module=\'' . $module . '\' AND cid=' . $id); require_once dirname(__FILE__) . '/classes/general/cleantalk.class.php'; $ct_key = COption::GetOptionString('cleantalk.antispam', 'key', '0'); $ct_ws = self::GetWorkServer(); $ct = new Cleantalk(); $ct->work_url = $ct_ws['work_url']; $ct->server_url = $ct_ws['server_url']; $ct->server_ttl = $ct_ws['server_ttl']; $ct->server_changed = $ct_ws['server_changed']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_key; $ct_request->agent = 'bitrix-370'; $ct_request->sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request->feedback = $request_id . ':' . ($feedback == 'Y' ? '1' : '0'); $ct->sendFeedback($ct_request); } }
function ct_user_register_ajaxlogin($user_id) { require_once CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php'; global $ct_agent_version, $ct_checkjs_register_form, $ct_session_request_id_label, $ct_session_register_ok_label, $bp, $ct_signup_done, $ct_formtime_label, $ct_negative_comment, $ct_options, $ct_data; $ct_options = ct_get_options(); $ct_data = ct_get_data(); if (class_exists('AjaxLogin') && isset($_POST['action']) && $_POST['action'] == 'register_submit') { $checkjs = js_test('ct_checkjs', $_COOKIE, true); $submit_time = submit_time_test(); $sender_info = get_sender_info(); $sender_info['post_checkjs_passed'] = $checkjs; if ($checkjs === null) { $checkjs = js_test('ct_checkjs', $_COOKIE, true); $sender_info['cookie_checkjs_passed'] = $checkjs; } $sender_info = json_encode($sender_info); if ($sender_info === false) { $sender_info = ''; } require_once 'cleantalk.class.php'; $config = get_option('cleantalk_server'); $ct = new Cleantalk(); $ct->work_url = $config['ct_work_url']; $ct->server_url = $ct_options['server']; $ct->server_ttl = $config['ct_server_ttl']; $ct->server_changed = $config['ct_server_changed']; $ct->ssl_on = $ct_options['ssl_on']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_options['apikey']; $ct_request->sender_email = sanitize_email($_POST['email']); $ct_request->sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request->sender_nickname = sanitize_email($_POST['login']); $ct_request->agent = $ct_agent_version; $ct_request->sender_info = $sender_info; $ct_request->js_on = $checkjs; $ct_request->submit_time = $submit_time; $ct_result = $ct->isAllowUser($ct_request); if ($ct->server_change) { update_option('cleantalk_server', array('ct_work_url' => $ct->work_url, 'ct_server_ttl' => $ct->server_ttl, 'ct_server_changed' => time())); } if ($ct_result->allow === 0) { wp_delete_user($user_id); } } return $user_id; }
/** * Calling by hook integrate_load_theme */ function cleantalk_load() { global $context, $user_info, $modSettings; 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 (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); } }
function ct_cs_registration_validation() { require_once CLEANTALK_PLUGIN_DIR . 'cleantalk-public.php'; global $ct_agent_version, $ct_checkjs_register_form, $ct_session_request_id_label, $ct_session_register_ok_label, $bp, $ct_signup_done, $ct_formtime_label, $ct_negative_comment, $ct_options, $ct_data; $ct_data = ct_get_data(); $ct_options = ct_get_options(); $sender_email = null; $message = ''; ct_get_fields($sender_email, $message, $_POST); if ($sender_email != null) { $checkjs = js_test('ct_checkjs', $_COOKIE, true); $submit_time = submit_time_test(); $sender_info = get_sender_info(); $sender_info['post_checkjs_passed'] = $checkjs; $sender_info = json_encode($sender_info); if ($sender_info === false) { $sender_info = ''; } if (isset($_POST['user_login'])) { $nickname = $_POST['user_login']; } else { $nickname = ''; } require_once 'cleantalk.class.php'; $config = get_option('cleantalk_server'); $ct = new Cleantalk(); $ct->work_url = $config['ct_work_url']; $ct->server_url = $ct_options['server']; $ct->server_ttl = $config['ct_server_ttl']; $ct->server_changed = $config['ct_server_changed']; $ct->ssl_on = $ct_options['ssl_on']; $ct_request = new CleantalkRequest(); $ct_request->auth_key = $ct_options['apikey']; $ct_request->sender_email = $sender_email; $ct_request->sender_ip = $_SERVER['REMOTE_ADDR']; $ct_request->sender_nickname = $nickname; $ct_request->agent = $ct_agent_version; $ct_request->sender_info = $sender_info; $ct_request->js_on = $checkjs; $ct_request->submit_time = $submit_time; $ct_result = $ct->isAllowUser($ct_request); if ($ct_result->allow == 0) { $result = array("type" => "error", "message" => $ct_result->comment); print json_encode($result); die; } } }
/** * Account spam test * @return bool */ public static function onAbortNewAccount($user, &$message) { global $wgCTAccessKey, $wgCTServerURL, $wgRequest, $wgCTAgent, $wgCTExtName; $allowAccount = true; // The facility in which to store the query parameters $ctRequest = new CleantalkRequest(); $ctRequest->auth_key = $wgCTAccessKey; $ctRequest->sender_email = $user->mEmail; $ctRequest->sender_nickname = $user->mName; $ctRequest->agent = $wgCTAgent; $ctRequest->sender_ip = $wgRequest->getIP(); $ctRequest->js_on = CTBody::JSTest(); $ctRequest->submit_time = CTBody::SubmitTimeTest(); $ctRequest->sender_info = json_encode(array('page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'] . @$_SERVER['REQUEST_URI']))); $ct = new Cleantalk(); $ct->server_url = $wgCTServerURL; // Check $ctResult = $ct->isAllowUser($ctRequest); // Allow account if we have any API errors if ($ctResult->errno != 0) { if (CTBody::JSTest() != 1) { $ctResult->allow = 0; $ctResult->comment = "Forbidden. Please, enable Javascript."; } else { $ctResult->allow = 1; } } // Disallow account with CleanTalk comment if ($ctResult->allow == 0) { $allowAccount = false; $message = $ctResult->comment; } if ($ctResult->inactive === 1) { CTBody::SendAdminEmail($wgCTExtName, $ctResult->comment); } return $allowAccount; }
public static function create($item, $comment, $first = FALSE, $guestName = NULL, $incrementPostCount = NULL, $member = NULL, \IPS\DateTime $time = NULL) { $topic = $item; if ($member === NULL) { $member = \IPS\Member::loggedIn(); } if (isset($_POST['topic_title'])) { $comment = $_POST['topic_title'] . "\n" . $comment; } $access_key = \IPS\Settings::i()->access_key; if (isset($member) && !$member->isAdmin() && $member->member_posts <= 10 && \IPS\Settings::i()->moderate_new == 1) { require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/uploads/cleantalk.class.php"; require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/uploads/JSON.php"; session_name('cleantalksession'); if (!isset($_SESSION)) { session_start(); } if (array_key_exists('formtime', $_SESSION)) { $submit_time = time() - (int) $_SESSION['formtime']; } else { $submit_time = NULL; } $_SESSION['formtime'] = time(); $post_info = ''; $lang = \IPS\Lang::getEnabledLanguages(); $locale = $lang[\IPS\Lang::defaultLanguage()]->short; if (function_exists('json_encode')) { $arr = array('cms_lang' => $locale, 'REFFERRER' => $_SERVER['HTTP_REFERER'], 'USER_AGENT' => $_SERVER['HTTP_USER_AGENT']); $post_info = json_encode($arr); } if ($post_info === FALSE) { $post_info = ''; } $ct_url = 'http://moderate.cleantalk.ru'; $config_work_url = $ct_url; $config_ttl = 43200; $config_changed = 1349162987; $config_key = $access_key; $ct = new \Cleantalk(); $ct->work_url = $config_work_url; $ct->server_url = $ct_url; $ct->server_ttl = $config_ttl; $ct->server_changed = $config_changed; $sender_email = filter_var($member->email, FILTER_SANITIZE_EMAIL); $sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request = new \CleantalkRequest(); $ct_request->auth_key = $config_key; if (isset($_POST['guest_name'])) { $ct_request->sender_nickname = $_POST['guest_name']; } else { $ct_request->sender_nickname = $member->name; } $ct_request->sender_ip = $sender_ip; $ct_request->sender_email = $sender_email; $ct_request->sender_info = $post_info; $ct_request->agent = 'ipboard4-18'; $js_keys = array(); for ($i = -5; $i <= 1; $i++) { $js_keys[] = md5(\IPS\Settings::i()->access_key . '+' . \IPS\Settings::i()->email_in . date("Ymd", time() + 86400 * $i)); } $ct_request->js_on = in_array($_COOKIE['ct_checkjs'], $js_keys) ? 1 : 0; $ct_request->submit_time = $submit_time; $ct_request->message = $comment; $ct_result = $ct->isAllowMessage($ct_request); if (isset($ct_result->errno) && $ct_result->errno > 0) { //sendErrorMessage("CleanTalk has some problems, errno is ".$ct_result->errno.", errstr is '".$ct_result->errstr."'") } if ($ct_result->allow == 1) { // Not spammer. //call_user_func_array( 'parent::save', func_get_args() ); return call_user_func_array('parent::create', func_get_args()); } else { if (isset($_POST['topic_title'])) { $topic->delete(); } if (\IPS\Request::i()->isAjax()) { $result = array("type" => "error", "message" => $ct_result->comment); $result = json_encode($result); \IPS\Output::i()->sendOutput($result, 200, "application/json"); } else { \IPS\Output::i()->sidebar['enabled'] = FALSE; \IPS\Output::i()->sendOutput(\IPS\Theme::i()->getTemplate('global', 'core')->globalTemplate("Forbidden", \IPS\Theme::i()->getTemplate('global', 'core')->error("Forbidden", $ct_result->comment, 1, ""), array('app' => \IPS\Dispatcher::i()->application ? \IPS\Dispatcher::i()->application->directory : NULL, 'module' => \IPS\Dispatcher::i()->module ? \IPS\Dispatcher::i()->module->key : NULL, 'controller' => \IPS\Dispatcher::i()->controller)), 200, 'text/html', array(), FALSE, FALSE); } die; return call_user_func_array('parent::create', func_get_args()); } } return call_user_func_array('parent::create', func_get_args()); }
/** * [ActiveRecord] Save Changed Columns * * @return void * @note We have to be careful when upgrading in case we are coming from an older version */ public function save() { $new = $this->_new; $enabled = \IPS\Settings::i()->plugin_enabled; $access_key = \IPS\Settings::i()->access_key; if ($enabled == 1 && $new) { require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/uploads/cleantalk.class.php"; require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/uploads/JSON.php"; session_name('cleantalksession'); if (!isset($_SESSION)) { session_start(); } if (array_key_exists('formtime', $_SESSION)) { $submit_time = time() - (int) $_SESSION['formtime']; } else { $submit_time = NULL; } $_SESSION['formtime'] = time(); $post_info = ''; $lang = \IPS\Lang::getEnabledLanguages(); $locale = $lang[\IPS\Lang::defaultLanguage()]->short; if (function_exists('json_encode')) { $arr = array('cms_lang' => $locale, 'REFFERRER' => $_SERVER['HTTP_REFERER'], 'USER_AGENT' => $_SERVER['HTTP_USER_AGENT']); $post_info = json_encode($arr); } if ($post_info === FALSE) { $post_info = ''; } $ct_url = 'http://moderate.cleantalk.ru'; $config_work_url = $ct_url; $config_ttl = 43200; $config_changed = 1349162987; $config_key = $access_key; $ct = new \Cleantalk(); $ct->work_url = $config_work_url; $ct->server_url = $ct_url; $ct->server_ttl = $config_ttl; $ct->server_changed = $config_changed; $sender_email = filter_var($_POST['email_address'], FILTER_SANITIZE_EMAIL); $sender_ip = $ct->ct_session_ip($_SERVER['REMOTE_ADDR']); $ct_request = new \CleantalkRequest(); $ct_request->auth_key = $config_key; $ct_request->sender_nickname = $_POST['username']; $ct_request->sender_ip = $sender_ip; $ct_request->sender_email = $sender_email; $ct_request->sender_info = $post_info; $ct_request->agent = 'ipboard4-18'; //$ct_request->js_on = $_COOKIE['ct_checkjs'] == md5(\IPS\Settings::i()->access_key . '+' . \IPS\Settings::i()->email_in) ? 1 : 0; $ct_request->js_on = in_array($_COOKIE['ct_checkjs'], self::getCheckJSArray()) ? 1 : 0; $ct_request->submit_time = $submit_time; $ct_result = $ct->isAllowUser($ct_request); if (isset($ct_result->errno) && $ct_result->errno > 0) { //sendErrorMessage("CleanTalk has some problems, errno is ".$ct_result->errno.", errstr is '".$ct_result->errstr."'") } if ($ct_result->allow == 1) { // Not spammer. call_user_func_array('parent::save', func_get_args()); } else { // Spammer - display message and exit. if (\IPS\Request::i()->isAjax()) { $err_str = '<span style="color:#ab1f39;">' . $ct_result->comment . '</span><script>setTimeout("history.back()", 5000);</script>'; print $err_str; } else { \IPS\Output::i()->sidebar['enabled'] = FALSE; \IPS\Output::i()->sendOutput(\IPS\Theme::i()->getTemplate('global', 'core')->globalTemplate("Forbidden", \IPS\Theme::i()->getTemplate('global', 'core')->error("Forbidden", $ct_result->comment, 1, ""), array('app' => \IPS\Dispatcher::i()->application ? \IPS\Dispatcher::i()->application->directory : NULL, 'module' => \IPS\Dispatcher::i()->module ? \IPS\Dispatcher::i()->module->key : NULL, 'controller' => \IPS\Dispatcher::i()->controller)), 200, 'text/html', array(), FALSE, FALSE); } die; } } return call_user_func_array('parent::save', func_get_args()); }