126 lines
3.7 KiB
PHP
126 lines
3.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* ReCaptcha provider.
|
|
*
|
|
* @author Time.ly Network Inc.
|
|
* @since 2.2
|
|
*
|
|
* @package AI1EC
|
|
* @subpackage AI1EC.Captcha.Provider
|
|
*/
|
|
class Ai1ec_Captcha_Recaptcha_Provider extends Ai1ec_Captcha_Provider {
|
|
|
|
/**
|
|
* Returns settings array.
|
|
*
|
|
* @param bool $enable_rendering Whether setting HTML will be rendered or not.
|
|
*
|
|
* @return array Array of settings.
|
|
*/
|
|
public function get_settings( $enable_rendering = true ) {
|
|
|
|
return array(
|
|
'google_recaptcha_public_key' => 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';
|
|
}
|
|
}
|