/** * Saves the status of the verification against WangGuard service upon user registration * * @global type $wpdb * @global type $wangguard_user_check_status * @param type $userid */ function wangguard_plugin_user_register($userid) { global $wpdb; global $wangguard_user_check_status; $user = new WP_User($userid); $user_email = $user->user_email; $wangguarstatus = wangguard_look_for_allowed_email($user_email); if (!$wangguarstatus) { if (empty($wangguard_user_check_status)) { $user = new WP_User($userid); $table_name = $wpdb->base_prefix . "wangguardsignupsstatus"; //if there a status on the signups table? $user_status = $wpdb->get_var($wpdb->prepare("select user_status from {$table_name} where signup_username = '******'", $user->user_login)); //delete the signup status $wpdb->query($wpdb->prepare("delete from {$table_name} where signup_username = '******'", $user->user_login)); //If not empty, overrides the status with the signup status if (!empty($user_status)) { $wangguard_user_check_status = $user_status; } } $table_name = $wpdb->base_prefix . "wangguarduserstatus"; $user_status = $wpdb->get_var($wpdb->prepare("select ID from {$table_name} where ID = %d", $userid)); if (is_null($user_status)) { //insert the new status $wpdb->query($wpdb->prepare("insert into {$table_name}(ID , user_status , user_ip , user_proxy_ip) values (%d , '%s' , '%s' , '%s')", $userid, $wangguard_user_check_status, wangguard_getRemoteIP(), wangguard_getRemoteProxyIP())); } else { //update the new status $wpdb->query($wpdb->prepare("update {$table_name} set user_status = '%s' where ID = %d", $wangguard_user_check_status, $userid)); } } else { $wangguard_user_check_status = 'whitelisted'; if (empty($wangguard_user_check_status)) { $user2 = new WP_User($userid); $table_name = $wpdb->base_prefix . "wangguardsignupsstatus"; //if there a status on the signups table? $user_status = $wpdb->get_var($wpdb->prepare("select user_status from {$table_name} where signup_username = '******'", $user2->user_login)); //delete the signup status $wpdb->query($wpdb->prepare("delete from {$table_name} where signup_username = '******'", $user2->user_login)); //If not empty, overrides the status with the signup status if (!empty($user_status)) { $wangguard_user_check_status = 'whitelisted'; } } $table_name = $wpdb->base_prefix . "wangguarduserstatus"; $user_status = $wpdb->get_var($wpdb->prepare("select ID from {$table_name} where ID = %d", $userid)); if (is_null($user_status)) { //insert the new status $wpdb->query($wpdb->prepare("insert into {$table_name}(ID , user_status , user_ip , user_proxy_ip) values (%d , '%s' , '%s' , '%s')", $userid, $wangguard_user_check_status, wangguard_getRemoteIP(), wangguard_getRemoteProxyIP())); } else { //update the new status $wpdb->query($wpdb->prepare("update {$table_name} set user_status = '%s' where ID = %d", $wangguard_user_check_status, $userid)); } } }
/** * Validate email based on user settings. * * First, verify email using `is_email()` WordPress function (required) * * Then, process email validation based on settings. * * @param KWSContact $Contact Contact object * * @return WP_Error|boolean|void If valid, return `true`, otherwise return a WP_Error object. */ function validateEmail(KWSContact &$Contact) { if (!class_exists('DataValidation')) { include_once CTCT_DIR_PATH . 'lib/class.datavalidation.php'; } if (!class_exists('SMTP_validateEmail')) { include_once CTCT_DIR_PATH . 'lib/mail/smtp_validateEmail.class.php'; } $email = $Contact->get('email'); $is_valid = array(); // 1: Check if it's an email at all if (empty($email)) { do_action('ctct_activity', 'Empty email address', $email); $this->errors[] = new WP_Error('empty_email', __('Please enter your email address.', 'ctct'), 'email_address'); return; } elseif (!is_email($email)) { do_action('ctct_activity', 'Invalid email address', $email); $this->errors[] = new WP_Error('not_email', __('Invalid email address.', 'ctct'), 'email_address'); return; } $methods = (array) CTCT_Settings::get('spam_methods'); // 2: Akismet validation if (in_array('akismet', $methods)) { $akismetCheck = $this->akismetCheck($Contact); if (is_wp_error($akismetCheck)) { $this->errors[] = $akismetCheck; return; } } // 3: WangGuard validation if (in_array('wangguard', $methods) && function_exists('wangguard_verify_email') && wangguard_server_connectivity_ok()) { global $wangguard_api_host; // If WangGuard isn't set up yet, set'er up! if (empty($wangguard_api_host)) { wangguard_init(); } $return = wangguard_verify_email($email, wangguard_getRemoteIP(), wangguard_getRemoteProxyIP()); if ($return == 'checked' || $return == 'not-checked') { do_action('ctct_activity', 'WangGuard validation passed.', $email, $return); } else { $this->errors[] = new WP_Error('wangguard', __('Email validation failed.', 'ctct'), $email, $return); return; } } // 4: DataValidation.com validation if (in_array('datavalidation', $methods) && class_exists('DataValidation')) { $Validate = new DataValidation(CTCT_Settings::get('datavalidation_api_key')); $validation = $Validate->validate($email); $process_inconclusive = apply_filters('ctct_process_inconclusive_emails', true); if (is_wp_error($validation)) { do_action('ctct_activity', 'DataValidation.com error', 'The email was not processed because of the error: ' . $validation->get_error_message()); return; } elseif ($validation === false || $validation === NULL && !$process_inconclusive) { do_action('ctct_activity', 'DataValidation validation failed.', $email, $Validate); $message = isset($Validate->message) ? $Validate->message : __('Not a valid email.', 'ctct'); $this->errors[] = new WP_Error('datavalidation', $message, $email, $Validate); return; } if ($validation === NULL) { do_action('ctct_activity', 'DataValidation validation inconclusive.', $email, $Validate); } elseif ($validation === true) { do_action('ctct_activity', 'DataValidation validation passed.', $email, $Validate); } } // 5: SMTP validation if (in_array('smtp', $methods) && class_exists('SMTP_validateEmail')) { try { $SMTP_Validator = new SMTP_validateEmail(); // Timeout after 1 second $SMTP_Validator->max_conn_time = 1; $SMTP_Validator->max_read_time = 1; $SMTP_Validator->debug = 0; // Prevent PHP notices about timeouts ob_start(); $results = $SMTP_Validator->validate(array($email), get_option('admin_email')); ob_clean(); if (isset($results[$email])) { // True = passed if ($results[$email]) { do_action('ctct_activity', 'SMTP validation passed.', $email, $results); return true; } else { do_action('ctct_activity', 'SMTP validation failed.', $email, $results); $this->errors[] = new WP_Error('smtp', __('Email validation failed.', 'ctct'), $email, $results); return false; } } else { do_action('ctct_activity', 'SMTP validation did not work', 'Returned empty results. Maybe it timed out?'); return true; } } catch (Exception $e) { do_action('ctct_error', 'SMTP validation broke.', $e); return; } } return true; }
/** * Validates security question * * @global type $bp * @global boolean $wangguard_bp_validated */ function wangguard_signup_validate_bp11() { global $bp; global $wangguard_bp_validated; $wangguard_bp_validated = true; $signup_email = $_POST['signup_email']; $wggstopcheck = false; do_action('pre_wangguard_validate_signup_form_wordpress_no_multisite', $signup_email); $wggstopcheck = apply_filters('pre_wangguard_validate_signup_form_wordpress_no_multisite', $wggstopcheck); if (!$wggstopcheck) { if (!wangguard_validate_hfields($signup_email)) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe(__('<strong>ERROR</strong>: Banned by WangGuard <a href="http://www.wangguard.com/faq" target="_new">Is it an error?</a> Perhaps you tried to register many times.', 'wangguard')); return; } $answerOK = wangguard_question_repliedOK(); //If at least a question exists on the questions table, then check the provided answer if (!$answerOK) { $bp->signup->errors['wangguardquestansw'] = wangguard_fix_bp_slashes_maybe(__('<strong>ERROR</strong>: The answer to the security question is invalid.', 'wangguard')); } else { //check domain against the list of selected blocked domains $blocked = wangguard_is_domain_blocked($signup_email); if ($blocked) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe(__("<strong>ERROR</strong>: Domain not allowed.", 'wangguard')); } else { $reported = wangguard_is_email_reported_as_sp($signup_email, wangguard_getRemoteIP(), wangguard_getRemoteProxyIP()); if ($reported) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe(__('<strong>ERROR</strong>: Banned by WangGuard <a href="http://www.wangguard.com/faq" target="_new">Is it an error?</a> Perhaps you tried to register many times.', 'wangguard')); } else { if (wangguard_email_aliases_exists($signup_email)) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe(__('<strong>ERROR</strong>: Duplicate alias email found by WangGuard.', 'wangguard')); } else { if (!wangguard_mx_record_is_ok($signup_email)) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe(__("<strong>ERROR</strong>: WangGuard couldn't find an MX record associated with your email domain.", 'wangguard')); } } } } } if (isset($bp->signup->errors['signup_email'])) { $bp->signup->errors['signup_email'] = wangguard_fix_bp_slashes_maybe($bp->signup->errors['signup_email']); } } }