.0 * @access public * * @todo Move & refactor the reCAPTCHA validation to a separate handler similar to Mailchimp_Handler. * * @param object $ajax_handler Ajax handler instance. * @param object $field The field data. */ public static function validate( $ajax_handler, $field ) { $secret_key = get_option( 'elementor_raven_recaptcha_secret_key' ); if ( ! empty( $_POST['g-recaptcha-response'] ) ) { // phpcs:ignore $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', [ 'body' => [ 'secret' => $secret_key, 'response' => wp_unslash( $_POST['g-recaptcha-response'] ), // phpcs:ignore ], ] ); if ( is_wp_error( $response ) ) { return $ajax_handler ->add_response( 'errors', $response->get_error_message(), $field['_id'] ) ->set_success( false ); } $response_code = wp_remote_retrieve_response_code( $response ); if ( 200 !== $response_code ) { $error = wp_remote_retrieve_response_message( $response ); return $ajax_handler ->add_response( 'errors', $error, $field['_id'] ) ->set_success( false ); } $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); $error_codes = [ 'missing-input-secret' => __( 'The secret parameter is missing.', 'jupiterx-core' ), 'invalid-input-secret' => __( 'The secret parameter is invalid or malformed.', 'jupiterx-core' ), 'missing-input-response' => __( 'The response parameter is missing.', 'jupiterx-core' ), 'invalid-input-response' => __( 'The response parameter is invalid or malformed.', 'jupiterx-core' ), 'bad-request' => __( 'The request is invalid or malformed.', 'jupiterx-core' ), ]; if ( true === $response_body['success'] ) { return; } $error = $error_codes[ $response_body['error-codes'][0] ]; } else { $error = __( 'The reCAPTCHA field is required.', 'jupiterx-core' ); } if ( empty( $error ) ) { return; } $ajax_handler ->add_response( 'errors', $error, $field['_id'] ) ->set_success( false ); } /** * Register admin fields. * * Register required admin settings for the field. * * @since 1.0.0 * @access public * * @param object $settings Settings. */ public function register_admin_fields( $settings ) { $settings->add_section( 'raven', 'raven_recaptcha', [ 'label' => __( 'reCAPTCHA', 'jupiterx-core' ), 'callback' => function() { echo '
' . sprintf( /* translators: %s: reCAPTCHA URL */ __( 'reCAPTCHA is a free Google service that protects your website from spam and abuse.', 'jupiterx-core' ), 'https://www.google.com/recaptcha/' ) . '
'; }, 'fields' => [ 'raven_recaptcha_site_key' => [ 'label' => __( 'Site Key', 'jupiterx-core' ), 'field_args' => [ 'type' => 'text', ], ], 'raven_recaptcha_secret_key' => [ 'label' => __( 'Secret Key', 'jupiterx-core' ), 'field_args' => [ 'type' => 'text', ], ], ], ] ); } }