public function sfw_die()
 {
     $key = cleantalk_get_api_key();
     $sfw_die_page = file_get_contents(dirname(__FILE__) . "/sfw_die_page.html");
     $sfw_die_page = str_replace("{REMOTE_ADDRESS}", $this->blocked_ip, $sfw_die_page);
     $sfw_die_page = str_replace("{REQUEST_URI}", $_SERVER['REQUEST_URI'], $sfw_die_page);
     $sfw_die_page = str_replace("{SFW_COOKIE}", md5($this->blocked_ip . $key), $sfw_die_page);
     @header('HTTP/1.0 403 Forbidden');
     print $sfw_die_page;
     die;
 }
function cleantalk_buffer($buffer)
{
    global $modSettings, $user_info, $smcFunc, $txt;
    if ($user_info['is_admin'] && isset($_GET['action']) && $_GET['action'] == 'admin') {
        global $forum_version;
        if (strpos($forum_version, 'SMF 2.0') === false) {
            $html = '';
        } else {
            $html = '<span id="ct_anchor"></span><script>
			document.getElementById("ct_anchor").parentElement.style.height="0px";
			document.getElementById("ct_anchor").parentElement.style.padding="0px";
			document.getElementById("ct_anchor").parentElement.style.border="0px";
			</script>';
        }
        if (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());
            }
        }
        if (isset($_GET['ctcheckspam'])) {
            $result = $smcFunc['db_query']('', 'select * from {db_prefix}members limit 1', array());
            $row = $smcFunc['db_fetch_assoc']($result);
            if (!isset($row['ct_marked'])) {
                $sql = 'ALTER TABLE  {db_prefix}members ADD  `ct_marked` INT DEFAULT 0 ';
                $result = $smcFunc['db_query']('', $sql, array());
            } else {
                $sql = 'ALTER TABLE  {db_prefix}members DROP COLUMN  `ct_marked`';
                $result = $smcFunc['db_query']('', $sql, array());
                $sql = 'ALTER TABLE  {db_prefix}members ADD  `ct_marked` INT DEFAULT 0 ';
                $result = $smcFunc['db_query']('', $sql, array());
            }
            $sql = 'UPDATE {db_prefix}members set ct_marked=0';
            $result = $smcFunc['db_query']('', $sql, array());
            $sql = 'SELECT * FROM {db_prefix}members where passwd<>""';
            $result = $smcFunc['db_query']('', $sql, array());
            $users = array();
            $users[0] = array();
            $data = array();
            $data[0] = array();
            $cnt = 0;
            while ($row = $smcFunc['db_fetch_assoc']($result)) {
                //$html.=serialize($row);
                $users[$cnt][] = array('name' => $row['member_name'], 'id' => $row['id_member'], 'email' => $row['email_address'], 'ip' => $row['member_ip'], 'joined' => $row['date_registered'], 'visit' => $row['last_login']);
                $data[$cnt][] = $row['email_address'];
                $data[$cnt][] = $row['member_ip'];
                if (sizeof($users[$cnt]) > 450) {
                    $cnt++;
                    $users[$cnt] = array();
                    $data[$cnt] = array();
                }
            }
            $error = "";
            for ($i = 0; $i < sizeof($users); $i++) {
                $send = implode(',', $data[$i]);
                $req = "data={$send}";
                $opts = array('http' => array('method' => "POST", 'content' => $req));
                $context = stream_context_create($opts);
                $result = @file_get_contents("https://api.cleantalk.org/?method_name=spam_check&auth_key=" . cleantalk_get_api_key(), 0, $context);
                $result = json_decode($result);
                if (isset($result->error_message)) {
                    $error = $result->error_message;
                } else {
                    if (isset($result->data)) {
                        foreach ($result->data as $key => $value) {
                            if ($key === filter_var($key, FILTER_VALIDATE_IP)) {
                                if ($value->appears == 1) {
                                    $sql = 'UPDATE {db_prefix}members set ct_marked=1 where member_ip="' . $key . '"';
                                    $result = $smcFunc['db_query']('', $sql, array());
                                }
                            } else {
                                if ($value->appears == 1) {
                                    $sql = 'UPDATE {db_prefix}members set ct_marked=1 where email_address="' . $key . '"';
                                    $result = $smcFunc['db_query']('', $sql, array());
                                }
                            }
                        }
                    }
                }
            }
            if ($error != '') {
                $html .= '<center><div style="border:2px solid red;color:red;font-size:16px;width:300px;padding:5px;"><b>' . $error . '</b></div><br></center>';
            }
        }
        $result = $smcFunc['db_query']('', 'select * from {db_prefix}members limit 1', array());
        $row = $smcFunc['db_fetch_assoc']($result);
        if (!isset($row['ct_marked'])) {
            $sql = 'ALTER TABLE  {db_prefix}members ADD  `ct_marked` INT DEFAULT 0 ';
            $result = $smcFunc['db_query']('', $sql, array());
        }
        $sql = 'SELECT * FROM {db_prefix}members where ct_marked=1';
        $result = $smcFunc['db_query']('', $sql, array());
        if ($smcFunc['db_num_rows']($result) == 0 && isset($_GET['ctcheckspam'])) {
            $html .= '<center><div><b>' . $txt['cleantalk_check_users_nofound'] . '</b></div><br><br></center>';
        } else {
            if ($smcFunc['db_num_rows']($result) > 0) {
                if (isset($_GET['ctcheckspam'])) {
                    $html .= '<center><h3>' . $txt['cleantalk_check_users_done'] . '</h3><br /><br /></center>';
                }
                $html .= '<center><table style="border-color:#666666;" border=1 cellspacing=0 cellpadding=3>
	<thead>
	<tr>
		<th>' . $txt['cleantalk_check_users_tbl_select'] . '</th>
		<th>' . $txt['cleantalk_check_users_tbl_username'] . '</th>
		<th>' . $txt['cleantalk_check_users_tbl_joined'] . '</th>
		<th>E-mail</th>
		<th>IP</th>
		<th>' . $txt['cleantalk_check_users_tbl_lastvisit'] . '</th>
	</tr>
	</thead>
	<tbody>';
                $found = false;
                while ($row = $smcFunc['db_fetch_assoc']($result)) {
                    $found = true;
                    $html .= "<tr>\n\t\t\t\t<td><input type='checkbox' name=ct_del_user[" . $row['id_member'] . "] value='1' /></td>\n\t\t\t\t<td>" . $row['member_name'] . "</td>\n\t\t\t\t<td>" . date("Y-m-d H:i:s", $row['date_registered']) . "</td>\n\t\t\t\t<td><a target='_blank' href='https://cleantalk.org/blacklists/" . $row['email_address'] . "'><img src='https://cleantalk.org/images/icons/external_link.gif' border='0'/> " . $row['email_address'] . "</a></td>\n\t\t\t\t<td><a target='_blank' href='https://cleantalk.org/blacklists/" . $row['member_ip'] . "'><img src='https://cleantalk.org/images/icons/external_link.gif' border='0'/> " . $row['member_ip'] . "</a></td>\n\t\t\t\t<td>" . date("Y-m-d H:i:s", $row['last_login']) . "</td>\n\t\t\t\t</tr>";
                }
                $html .= "</tbody></table><br /><input type=submit name='ct_delete_checked' value='" . $txt['cleantalk_check_users_tbl_delselect'] . "' onclick='return confirm(\"" . $txt['cleantalk_check_users_confirm'] . "\")'> <input type=submit name='ct_delete_all' value='" . $txt['cleantalk_check_users_tbl_delall'] . "' onclick='return confirm(\"" . $txt['cleantalk_check_users_confirm'] . "\")'><br />" . $txt['cleantalk_check_users_tbl_delnotice'] . "<br /><br /></center>";
            }
        }
        $html .= "<center><button style=\"width:20%;\" id=\"check_spam\" onclick=\"location.href=location.href.replace('&finishcheck=1','').replace('&ctcheckspam=1','')+'&ctcheckspam=1';return false;\">" . $txt['cleantalk_check_users_button'] . "</button><br />" . $txt['cleantalk_check_users_button_after'] . "</center>";
        $buffer = str_replace("%CLEANTALK_CHECK_USERS%", $html, $buffer);
    }
    return $buffer;
}
示例#3
0
/**
 * 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);
    }
}