Files
roi-theme/wp-content/plugins/thrive-product-manager/thrive-dashboard/classes/Product/LicenseManager.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

276 lines
7.4 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
class TVE_Dash_Product_LicenseManager {
const LICENSE_OPTION_NAME = 'thrive_license';
const TCB_TAG = 'tcb';
const TL_TAG = 'tl';
const TCW_TAG = 'tcw';
const ALL_TAG = 'all';
const TU_TAG = 'tu';
const THO_TAG = 'tho';
const TVO_TAG = 'tvo';
const TQB_TAG = 'tqb';
const TCM_TAG = 'tcm';
const TVA_TAG = 'tva';
const TAB_TAG = 'tab';
const TPM_TAG = 'tpm';
const TAG_FOCUS = 'focusblog';
const TAG_LUXE = 'luxe';
const TAG_IGNITION = 'ignition';
const TAG_MINUS = 'minus';
const TAG_SQUARED = 'squared';
const TAG_VOICE = 'voice';
const TAG_PERFORMAG = 'performag';
const TAG_PRESSIVE = 'pressive';
const TAG_STORIED = 'storied';
const TAG_RISE = 'rise';
protected $secret_key = '@#$()%*%$^&*(#@$%@#$%93827456MASDFJIK3245';
protected static $instance;
protected $license_data;
protected $accepted_tags = array();
protected function __construct() {
$this->license_data = get_option( static::LICENSE_OPTION_NAME, array() );
$reflection = new ReflectionClass( $this );
$constants = $reflection->getConstants();
$this->accepted_tags = array();
foreach ( $constants as $name => $value ) {
if ( strpos( $name, 'TAG' ) !== false ) {
$this->accepted_tags [] = $value;
}
}
}
public static function getInstance() {
if ( empty( static::$instance ) ) {
static::$instance = new TVE_Dash_Product_LicenseManager();
}
return static::$instance;
}
/**
* whether or not $tag is a theme tag
* used in backwards-compatible license check
*
* @param string $tag
*
* @return array
*/
public static function isThemeTag( $tag ) {
return in_array( $tag, array(
static::TAG_FOCUS,
static::TAG_IGNITION,
static::TAG_LUXE,
static::TAG_MINUS,
static::TAG_PERFORMAG,
static::TAG_PRESSIVE,
static::TAG_RISE,
static::TAG_SQUARED,
static::TAG_STORIED,
static::TAG_VOICE,
) );
}
/**
* Checks license options
*
* @param string|TVE_Dash_Product_Abstract $item
*
* @return bool
*/
public function itemActivated( $item ) {
if ( $item instanceof TVE_Dash_Product_Abstract ) {
$item = $item->get_tag();
}
if ( function_exists( 'thrive_product_manager' ) ) {
return thrive_product_manager()->itemActivated( $item, $this );
}
if ( $this->isThemeTag( $item ) ) {
$licensed = get_option( 'thrive_license_status', false ) === 'ACTIVE';
} else {
switch ( $item ) {
case static::TCB_TAG:
$licensed = get_option( 'tve_license_status', false ) === 'ACTIVE';
break;
case static::TL_TAG:
$licensed = get_option( 'tve_leads_license_status', false ) === 'ACTIVE';
break;
case static::TCW_TAG:
$licensed = get_option( 'tcw_license_status', false ) === 'ACTIVE';
break;
default:
$licensed = false;
break;
}
}
if ( $licensed === false ) {
$licensed = $this->checkData( $item );
}
return $licensed;
}
/**
* @param $item TVE_Dash_Product_Abstract|string
*
* @return bool
*/
protected function checkData( $item = null ) {
if ( empty( $this->license_data ) || null === $item ) {
return false;
}
if ( in_array( static::ALL_TAG, $this->license_data ) ) {
return true;
}
if ( $item instanceof TVE_Dash_Product_Abstract ) {
$tag = $item->get_tag();
} elseif ( is_string( $item ) ) {
$tag = $item;
}
return isset( $tag ) ? in_array( $tag, $this->license_data ) : false;
}
public function checkLicense( $email, $key, $tag = false ) {
$service_api_url = defined( 'TD_SERVICE_API_URL' ) ? TD_SERVICE_API_URL : 'https://service-api.thrivethemes.com';
$api_url = rtrim($service_api_url, '/') . '/license';
$body = array(
'email' => $email,
'license' => $key,
'site_url' => get_site_url(),
);
if ( $tag !== false ) {
$body['tag'] = $tag;
}
$api_url = add_query_arg( array(
'p' => $this->calc_hash( $body ),
), $api_url );
$_args = array(
'sslverify' => false,
'timeout' => 120,
'headers' => array(
'User-Agent' => 'WordPress',
),
'body' => $body,
);
$licenseValid = wp_remote_post( $api_url, $_args );
$response = array();
if ( is_wp_error( $licenseValid ) ) {
/** @var WP_Error $licenseValid */
/** Couldn't connect to the API URL - possible because wp_remote_get failed for whatever reason. Maybe CURL not activated on server, for instance */
$response['success'] = 0;
$response['reason'] = sprintf( __( "An error occurred while connecting to the license server. Error: %s. Please login to thrivethemes.com, report this error message on the forums and we'll get this sorted for you", 'thrive-dash' ), $licenseValid->get_error_message() );
return $response;
}
$response = @json_decode( $licenseValid['body'], true );
if ( empty( $response ) ) {
$response = new stdClass();
$response['success'] = 0;
$response['reason'] = sprintf( __( "An error occurred while receiving the license status. The response was: %s. Please login to thrivethemes.com, report this error message on the forums and we'll get this sorted for you.", 'thrive-dash' ), $licenseValid['body'] );
return $response;
}
return $response;
}
protected function calc_hash( $data ) {
return md5( $this->secret_key . serialize( $data ) . $this->secret_key );
}
public function activateProducts( &$response ) {
//check success flag
if ( empty( $response['success'] ) ) {
$response['success'] = 0;
$response['reason'] = __( 'Invalid response!', 'thrive-dash' );
return null;
}
//check if products is not empty and is array
if ( empty( $response['products'] ) || ! is_array( $response['products'] ) ) {
$response['success'] = 0;
$response['reason'] = __( 'Invalid products returned from server!', 'thrive-dash' );
return null;
}
foreach ( $response['products'] as $product_tag ) {
if ( ! in_array( $product_tag, $this->accepted_tags ) ) {
$response['success'] = 0;
$response['reason'] = __( 'Products returned from server are not accepted for licensing!', 'thrive-dash' );
return null;
}
}
//do the logic and update the option in DB
if ( in_array( static::ALL_TAG, $response['products'] ) ) {
update_option( static::LICENSE_OPTION_NAME, array( static::ALL_TAG ) );
} else {
$existing = get_option( static::LICENSE_OPTION_NAME, array() );
update_option( static::LICENSE_OPTION_NAME, array_unique( array_merge( $existing, $response['products'] ) ) );
}
return $response;
}
/**
* Based on $text_domain returns a tag associated
*
* @param string $text_domain
*
* @return string
*/
public static function get_product_tag( $text_domain ) {
$mapping = array(
'thrive-cb' => static::TCB_TAG,
'thrive-leads' => static::TL_TAG,
'thrive-clever-widgets' => static::TCW_TAG,
'thrive-ult' => static::TU_TAG,
'thrive-headline' => static::THO_TAG,
'thrive-ovation' => static::TVO_TAG,
'thrive-quiz-builder' => static::TQB_TAG,
'thrive-comments' => static::TCM_TAG,
'thrive-apprentice' => static::TVA_TAG,
'thrive-optimize' => static::TAB_TAG,
'thrive-product-manager' => static::TPM_TAG,
);
return $mapping[ $text_domain ] ?? '';
}
}