array( 'type' => 'string', 'version' => AI1ECFS_PLUGIN_NAME, 'renderer' => array( 'class' => 'input', 'tab' => 'extensions', 'item' => 'interactive', 'type' => 'normal', 'label' => __( 'reCAPTCHA public key:', AI1ECFS_PLUGIN_NAME ), 'condition' => $enable_rendering, ), 'value' => '', ), 'google_recaptcha_private_key' => array( 'type' => 'string', 'version' => AI1ECFS_PLUGIN_NAME, 'renderer' => array( 'class' => 'input', 'tab' => 'extensions', 'item' => 'interactive', 'type' => 'normal', 'label' => __( 'reCAPTCHA private key:', AI1ECFS_PLUGIN_NAME ), 'condition' => $enable_rendering, ), 'value' => '', ), ); } /** * Returns captcha challenge. * * @return mixed */ public function get_challenge() { $args = array( 'verification_words' => Ai1ec_I18n::__( 'Human verification' ), 'loading_recaptcha' => Ai1ec_I18n::__( 'Loading reCAPTCHA...' ), 'recaptcha_key' => $this->_settings->get( 'google_recaptcha_public_key' ), ); return $this->_theme_loader->get_file( 'captcha/recaptcha/challenge.twig', $args, false )->get_content(); } /** * Validates challenge. * * @param array Challenge response data. * * @return mixed */ public function validate_challenge( array $data ) { $response = array( 'success' => true ); if ( empty( $data['recaptcha_challenge_field'] ) || empty( $data['recaptcha_response_field'] ) ) { $response['message'] = Ai1ec_I18n::_( 'There was an error reading the human verification data. Please try again.' ); $response['success'] = false; } $remoteAddress = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : null; require_once( AI1EC_VENDOR_PATH . 'recaptcha/recaptchalib.php' ); $resp = recaptcha_check_answer( $this->_settings->get( 'google_recaptcha_private_key' ), $remoteAddress, $data['recaptcha_challenge_field'], $data['recaptcha_response_field'] ); if ( ! $resp->is_valid ) { $response['message'] = Ai1ec_I18n::__( 'Please try verifying you are human again.' ); $response['success'] = false; } return $response; } /** * Returns provider name. * * @return string */ public function get_name() { return 'Google reCAPTCHA'; } }