Files
roi-theme/wp-content/plugins/thrive-visual-editor/thrive-dashboard/rest-api/class-td-rest-controller.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

233 lines
5.0 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
/**
* Class TD_REST_Controller
*
* - Base REST controller for TD
*/
class TD_REST_Controller extends WP_REST_Controller {
/**
* The base of this controller's route.
*
* @since 4.7.0
* @var string
*/
protected $rest_base;
protected $namespace = 'td/v1';
protected $webhook_base = '/webhook/trigger';
public function __construct() {
}
public function get_namespace() {
return $this->namespace;
}
public function get_webhook_base() {
return $this->webhook_base;
}
/**
* Registers routes for basic controller
*/
public function register_routes() {
register_rest_route(
$this->namespace,
$this->rest_base . '/authenticate',
array(
'methods' => WP_REST_Server::EDITABLE,
'callback' => array( $this, 'authenticate' ),
'permission_callback' => array( $this, 'permission_callback' ),
'args' => $this->route_args(),
)
);
register_rest_route( $this->namespace, $this->webhook_base . '/(?P<api>\S+)/(?P<id>\d+)/(?P<code>\S+)', array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array( $this, 'webhook_trigger' ),
'permission_callback' => '__return_true',
),
) );
register_rest_route( $this->namespace, $this->rest_base . '/license_warning', array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array( $this, 'license_warning' ),
'permission_callback' => array( $this, 'permission_callback_license_warning' ),
),
) );
}
/**
* Args required by routes that need permission
* @return array[]
*/
public function route_args() {
return array(
'api_key' => array(
'type' => 'string',
'required' => true,
'validate_callback' => static function ( $param ) {
return ! empty( $param );
},
),
);
}
public static function license_warning( $request ) {
$product = $request->get_param( 'product' );
$transient = 'tve_license_warning_lightbox_' . $product;
set_transient( $transient, true, DAY_IN_SECONDS );
return $product;
}
/**
* callback function
*
* @param WP_REST_Response
*/
public static function webhook_trigger( $request ) {
$id = $request->get_param( 'id' );
$api = $request->get_param( 'api' );
$code = $request->get_param( 'code' );
$data = array();
if ( $api === 'general' ) {
$data = tve_dash_get_general_webhook_data( $request );
} else {
$api_instance = Thrive_Dash_List_Manager::connection_instance( $api );
if ( $api_instance ) {
$data = $api_instance->get_webhook_data( $request );
}
}
if ( empty( $data['email'] ) ) {
global $wpdb;
$log_data = array(
'date' => gmdate( 'Y-m-d H:i:s' ),
'error_message' => 'No email inside webhook payload',
'api_data' => serialize( tve_sanitize_data_recursive( $request ) ),
'connection' => $api,
'list_id' => 'asset',
);
$wpdb->insert( $wpdb->prefix . 'tcb_api_error_log', $log_data );
}
return apply_filters( 'tve_dash_webhook_trigger', $id, $code, $data );
}
/**
* @return mixed|WP_REST_Response
*/
public function authenticate() {
return rest_ensure_response(
array(
'connected' => true,
)
);
}
/**
* Verifies each call to TD REST API
*
* @param $request
*
* @return bool|WP_Error
*/
public function permission_callback( $request ) {
return $this->validate_api_key( $request->get_param( 'api_key' ) );
}
/**
* Verifies each call to TD REST API
*
* @param $request
*
* @return bool|WP_Error
*/
public function permission_callback_license_warning( $request ) {
return $this->validate_license_warning( $request->get_param( 'product' ) );
}
/**
* Checks if the api_key sent as parameter is the same with the one generated in DB
*
* @param $api_key
*
* @return bool|WP_Error
*/
protected function validate_api_key( $api_key = '' ) {
$generated_api_key = get_option( 'td_api_key', null );
/* make sure we don't send an empty api_key */
if ( ! empty( $api_key ) && $generated_api_key === $api_key ) {
$result = true;
} else {
$result = new WP_Error(
'wrong_api_key_provided',
__( 'Provided API Key is wrong', 'thrive-dash' ),
array(
'api_key' => $api_key,
)
);
}
return $result;
}
/**
* Checks if the product is sent as parameter
*
* @param $api_key
*
* @return bool|WP_Error
*/
protected function validate_license_warning( $product = '' ) {
$result = true;
$products = [
'tcb',
'tl',
'tu',
'tvo',
'tqb',
'tcm',
'tva',
'tab',
'ttb'
];
if ( empty( $product ) || ! in_array( $product, $products, true ) ) {
$result = new WP_Error(
'no_product_provided',
__( 'No product identifier provided', 'thrive-dash' ),
array(
'product' => $product,
)
);
}
return $result;
}
}