Example #1
0
    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;
    }
function ct_send_sfw_log()
{
    include_once "inc/cleantalk-sfw.class.php";
    $sfw = new CleanTalkSFW();
    $sfw->send_logs();
}
/**
 * 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;
 }