private static function get_jetpack_user()
 {
     if (!class_exists('Jetpack')) {
         return false;
     }
     Jetpack::load_xml_rpc_client();
     $xml = new Jetpack_IXR_ClientMulticall(array('user_id' => get_current_user_id()));
     $xml->addCall('wpcom.getUserID');
     $xml->addCall('akismet.getAPIKey');
     $xml->query();
     Akismet::log(compact('xml'));
     if (!$xml->isError()) {
         $responses = $xml->getResponse();
         if (count($responses) > 1) {
             $api_key = array_shift($responses[0]);
             $user_id = (int) array_shift($responses[1]);
             return compact('api_key', 'user_id');
         }
     }
     return false;
 }
Esempio n. 2
0
 /**
  * Make a POST request to the Akismet API.
  *
  * @param string $request The body of the request.
  * @param string $path The path for the request.
  * @param string $ip The specific IP address to hit.
  * @return array A two-member array consisting of the headers and the response body, both empty in the case of a failure.
  */
 public static function http_post($request, $path, $ip = null)
 {
     $akismet_ua = sprintf('WordPress/%s | Akismet/%s', $GLOBALS['wp_version'], constant('AKISMET_VERSION'));
     $akismet_ua = apply_filters('akismet_ua', $akismet_ua);
     $content_length = strlen($request);
     $api_key = self::get_api_key();
     $host = self::API_HOST;
     if (!empty($api_key)) {
         $host = $api_key . '.' . $host;
     }
     $http_host = $host;
     // use a specific IP if provided
     // needed by Akismet_Admin::check_server_connectivity()
     if ($ip && long2ip(ip2long($ip))) {
         $http_host = $ip;
     }
     $http_args = array('body' => $request, 'headers' => array('Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), 'Host' => $host, 'User-Agent' => $akismet_ua), 'httpversion' => '1.0', 'timeout' => 15);
     $akismet_url = "http://{$http_host}/1.1/{$path}";
     $response = wp_remote_post($akismet_url, $http_args);
     Akismet::log(compact('akismet_url', 'http_args', 'response'));
     if (is_wp_error($response)) {
         return array('', '');
     }
     return array($response['headers'], $response['body']);
 }
 /**
  * Make a POST request to the Akismet API.
  *
  * @param string $request The body of the request.
  * @param string $path The path for the request.
  * @param string $ip The specific IP address to hit.
  * @return array A two-member array consisting of the headers and the response body, both empty in the case of a failure.
  */
 public static function http_post($request, $path, $ip = null)
 {
     $akismet_ua = sprintf('WordPress/%s | Akismet/%s', $GLOBALS['wp_version'], constant('AKISMET_VERSION'));
     $akismet_ua = apply_filters('akismet_ua', $akismet_ua);
     $content_length = strlen($request);
     $api_key = self::get_api_key();
     $host = self::API_HOST;
     if (!empty($api_key)) {
         $host = $api_key . '.' . $host;
     }
     $http_host = $host;
     // use a specific IP if provided
     // needed by Akismet_Admin::check_server_connectivity()
     if ($ip && long2ip(ip2long($ip))) {
         $http_host = $ip;
     }
     $http_args = array('body' => $request, 'headers' => array('Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), 'Host' => $host, 'User-Agent' => $akismet_ua), 'httpversion' => '1.0', 'timeout' => 15);
     $akismet_url = $http_akismet_url = "http://{$http_host}/1.1/{$path}";
     /**
      * Try SSL first; if that fails, try without it and don't try it again for a while.
      */
     $ssl = $ssl_failed = false;
     // Check if SSL requests were disabled fewer than X hours ago.
     $ssl_disabled = get_option('akismet_ssl_disabled');
     if ($ssl_disabled && $ssl_disabled < time() - 60 * 60 * 24) {
         // 24 hours
         $ssl_disabled = false;
         delete_option('akismet_ssl_disabled');
     } else {
         if ($ssl_disabled) {
             do_action('akismet_ssl_disabled');
         }
     }
     if (!$ssl_disabled && function_exists('wp_http_supports') && ($ssl = wp_http_supports(array('ssl')))) {
         $akismet_url = set_url_scheme($akismet_url, 'https');
         do_action('akismet_https_request_pre');
     }
     $response = wp_remote_post($akismet_url, $http_args);
     Akismet::log(compact('akismet_url', 'http_args', 'response'));
     if ($ssl && is_wp_error($response)) {
         do_action('akismet_https_request_failure', $response);
         // Intermittent connection problems may cause the first HTTPS
         // request to fail and subsequent HTTP requests to succeed randomly.
         // Retry the HTTPS request once before disabling SSL for a time.
         $response = wp_remote_post($akismet_url, $http_args);
         Akismet::log(compact('akismet_url', 'http_args', 'response'));
         if (is_wp_error($response)) {
             $ssl_failed = true;
             do_action('akismet_https_request_failure', $response);
             do_action('akismet_http_request_pre');
             // Try the request again without SSL.
             $response = wp_remote_post($http_akismet_url, $http_args);
             Akismet::log(compact('http_akismet_url', 'http_args', 'response'));
         }
     }
     if (is_wp_error($response)) {
         do_action('akismet_request_failure', $response);
         return array('', '');
     }
     if ($ssl_failed) {
         // The request failed when using SSL but succeeded without it. Disable SSL for future requests.
         update_option('akismet_ssl_disabled', time());
         do_action('akismet_https_disabled');
     }
     $simplified_response = array($response['headers'], $response['body']);
     self::update_alert($simplified_response);
     return $simplified_response;
 }
Esempio n. 4
0
/**
 * Check post for spam, if spam then hold it for moderation.
 * @param  integer $post_id Post id.
 */
function ap_check_spam($post_id)
{
    // Return if akisment is not enabled.
    if (!class_exists('Akismet') || is_super_admin()) {
        return;
    }
    $post = get_post($post_id);
    // Set default arguments to pass.
    $defaults = array('blog' => home_url('/'), 'user_ip' => get_post_meta($post->ID, 'create_ip', true), 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'referrer' => $_SERVER['HTTP_REFERER'], 'permalink' => get_permalink($post->ID), 'comment_type' => 'forum-post', 'comment_author' => get_the_author_meta('nicename', $post->post_author), 'comment_author_email' => get_the_author_meta('user_email', $post->post_author), 'comment_author_url' => get_the_author_meta('url', $post->post_author), 'comment_content' => $post->post_content);
    $akismet_ua = sprintf('WordPress/%s | Akismet/%s', $GLOBALS['wp_version'], constant('AKISMET_VERSION'));
    $akismet_ua = apply_filters('akismet_ua', $akismet_ua);
    $content_length = strlen($request);
    $api_key = Akismet::get_api_key();
    $host = Akismet::API_HOST;
    if (!empty($api_key)) {
        $host = $api_key . '.' . $host;
    }
    $http_host = $host;
    // Use a specific IP if provided.
    // Needed by Akismet_Admin::check_server_connectivity().
    if ($ip && long2ip(ip2long($ip))) {
        $http_host = $ip;
    }
    $http_args = array('body' => $defaults, 'headers' => array('Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), 'Host' => $host, 'User-Agent' => $akismet_ua), 'httpversion' => '1.0', 'timeout' => 15);
    $akismet_url = $http_akismet_url = "http://{$http_host}/1.1/comment-check";
    /**
     * Try SSL first; if that fails, try without it and don't try it again for a while.
     */
    $ssl = $ssl_failed = false;
    // Check if SSL requests were disabled fewer than X hours ago.
    $ssl_disabled = get_option('akismet_ssl_disabled');
    if ($ssl_disabled && $ssl_disabled < time() - 60 * 60 * 24) {
        // 24 hours
        $ssl_disabled = false;
        delete_option('akismet_ssl_disabled');
    } else {
        if ($ssl_disabled) {
            do_action('akismet_ssl_disabled');
        }
    }
    if (!$ssl_disabled && function_exists('wp_http_supports') && ($ssl = wp_http_supports(array('ssl')))) {
        $akismet_url = set_url_scheme($akismet_url, 'https');
    }
    $response = wp_remote_post($akismet_url, $http_args);
    Akismet::log(compact('akismet_url', 'http_args', 'response'));
    if ($ssl && is_wp_error($response)) {
        // Intermittent connection problems may cause the first HTTPS
        // request to fail and subsequent HTTP requests to succeed randomly.
        // Retry the HTTPS request once before disabling SSL for a time.
        $response = wp_remote_post($akismet_url, $http_args);
        Akismet::log(compact('akismet_url', 'http_args', 'response'));
        if (is_wp_error($response)) {
            $ssl_failed = true;
            // Try the request again without SSL.
            $response = wp_remote_post($http_akismet_url, $http_args);
            Akismet::log(compact('http_akismet_url', 'http_args', 'response'));
        }
    }
    if (is_wp_error($response)) {
        return array('', '');
    }
    if ($ssl_failed) {
        // The request failed when using SSL but succeeded without it. Disable SSL for future requests.
        update_option('akismet_ssl_disabled', time());
        do_action('akismet_https_disabled');
    }
    if ($response['body']) {
        wp_update_post(array('ID' => $post_id, 'post_status' => 'moderate'));
    }
}