377 lines
9.6 KiB
PHP
377 lines
9.6 KiB
PHP
<?php
|
|
|
|
// If this file is called directly, abort.
|
|
if ( ! defined( 'WPINC' ) ) {
|
|
die;
|
|
}
|
|
|
|
if ( ! class_exists( 'Jet_Theme_Core_API' ) ) {
|
|
|
|
/**
|
|
* Define Jet_Theme_Core_API class
|
|
*/
|
|
class Jet_Theme_Core_API {
|
|
|
|
private $config = array();
|
|
private $enabled = null;
|
|
private $error_message = '';
|
|
|
|
/**
|
|
* Constructor for the class
|
|
*/
|
|
function __construct() {
|
|
$this->config = jet_theme_core()->config->get( 'api' );
|
|
}
|
|
|
|
/**
|
|
* Check if remote API is enabled
|
|
*
|
|
* @return boolean [description]
|
|
*/
|
|
public function is_enabled() {
|
|
|
|
if ( null !== $this->enabled ) {
|
|
return $this->enabled;
|
|
}
|
|
|
|
if ( empty( $this->config['enabled'] ) || true !== $this->config['enabled'] ) {
|
|
$this->enabled = false;
|
|
return $this->enabled;
|
|
}
|
|
|
|
if ( empty( $this->config['base'] ) || empty( $this->config['path'] ) || empty( $this->config['endpoints'] ) ) {
|
|
$this->enabled = false;
|
|
return $this->enabled;
|
|
}
|
|
|
|
$this->enabled = true;
|
|
|
|
return $this->enabled;
|
|
}
|
|
|
|
/**
|
|
* Retrieve URL to spescific endpoint.
|
|
*
|
|
* @param [type] $for [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function api_url( $for ) {
|
|
|
|
if ( ! $this->is_enabled() ) {
|
|
return false;
|
|
}
|
|
|
|
if ( empty( $this->config['endpoints'][ $for ] ) ) {
|
|
return false;
|
|
}
|
|
|
|
return $this->config['base'] . $this->config['path'] . $this->config['endpoints'][ $for ];
|
|
}
|
|
|
|
/**
|
|
* Returns API base URL
|
|
*
|
|
* @return string
|
|
*/
|
|
public function api_base() {
|
|
|
|
if ( ! $this->is_enabled() ) {
|
|
return apply_filters( 'jet-theme-core/api/base-url', false );
|
|
}
|
|
|
|
$base_url = $this->config['base'];
|
|
|
|
return apply_filters( 'jet-theme-core/api/base-url', $base_url );
|
|
}
|
|
|
|
/**
|
|
* Retrieve request arguments for API request
|
|
*
|
|
* @return array
|
|
*/
|
|
public function request_args() {
|
|
return array(
|
|
'timeout' => 60,
|
|
'sslverify' => false
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get remote system info by key.
|
|
*
|
|
* @param string|array $key [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function get_info( $key = '' ) {
|
|
|
|
$api_url = $this->api_url( 'info' );
|
|
|
|
if ( ! $api_url ) {
|
|
return false;
|
|
}
|
|
|
|
$response = wp_remote_get( $api_url, $this->request_args() );
|
|
|
|
$body = wp_remote_retrieve_body( $response );
|
|
$body = json_decode( $body, true );
|
|
|
|
if ( ! $body || ! isset( $body['success'] ) || true !== $body['success'] ) {
|
|
return false;
|
|
}
|
|
|
|
if ( ! $key ) {
|
|
unset( $body['success'] );
|
|
return $body;
|
|
}
|
|
|
|
if ( is_string( $key ) ) {
|
|
return isset( $body[ $key ] ) ? $body[ $key ] : false;
|
|
}
|
|
|
|
if ( is_array( $key ) ) {
|
|
|
|
$result = array();
|
|
|
|
foreach ( $key as $_key ) {
|
|
$result[ $_key ] = isset( $body[ $_key ] ) ? $body[ $_key ] : false;
|
|
}
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Try to activate passed license key for current server
|
|
*
|
|
* @param string $license [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function acitvate_license( $license = '' ) {
|
|
|
|
if ( ! $this->is_enabled() ) {
|
|
return $this->set_error( esc_html__( 'Remote API is disabled.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
if ( empty( $license ) ) {
|
|
return $this->set_error( esc_html__( 'Empty license key.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
$response = $this->license_request( 'activate_license', $license );
|
|
$result = wp_remote_retrieve_body( $response );
|
|
$result = json_decode( $result, true );
|
|
|
|
if ( ! isset( $result['success'] ) ) {
|
|
return $this->set_error( esc_html__( 'Internal error, please try again later.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
if ( true === $result['success'] ) {
|
|
|
|
if ( 'valid' === $result['license'] ) {
|
|
return true;
|
|
} else {
|
|
return $this->set_error( null, 'default' );
|
|
}
|
|
|
|
} else {
|
|
|
|
if ( ! empty( $result['error'] ) ) {
|
|
return $this->set_error( null, $result['error'] );
|
|
} else {
|
|
return $this->set_error( null, 'default' );
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Try to deactivate passed license key for current server
|
|
*
|
|
* @param string $license [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function deacitvate_license( $license = '' ) {
|
|
|
|
if ( ! $this->is_enabled() ) {
|
|
return $this->set_error( esc_html__( 'Remote API is disabled.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
if ( empty( $license ) ) {
|
|
return $this->set_error( esc_html__( 'Empty license key.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
$response = $this->license_request( 'deactivate_license', $license );
|
|
$result = wp_remote_retrieve_body( $response );
|
|
$result = json_decode( $result, true );
|
|
|
|
if ( ! isset( $result['success'] ) ) {
|
|
return $this->set_error( esc_html__( 'Internal error, please try again later.', 'jet-theme-core' ) );
|
|
}
|
|
|
|
if ( true === $result['success'] ) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
if ( ! empty( $result['error'] ) ) {
|
|
return $this->set_error( null, $result['error'] );
|
|
} else {
|
|
return $this->set_error( null, 'default' );
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Retrirve error message by error code
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_error_by_code( $code ) {
|
|
|
|
$messages = array(
|
|
'missing' => __( 'Your license is missing. Please check your key again.', 'jet-theme-core' ),
|
|
'no_activations_left' => sprintf( __( '<strong>You have no more activations left.</strong> <a href="%s" target="_blank">Please upgrade to a more advanced license</a> (you\'ll only need to cover the difference).', 'jet-theme-core' ), $this->upgrade_url() ),
|
|
'expired' => sprintf( __( '<strong>Your License Has Expired.</strong> <a href="%s" target="_blank">Renew your license today</a> to keep getting feature updates, premium support and unlimited access to the template library.', 'jet-theme-core' ), $this->renew_url() ),
|
|
'revoked' => __( '<strong>Your license key has been cancelled</strong> (most likely due to a refund request). Please consider acquiring a new license.', 'jet-theme-core' ),
|
|
'disabled' => __( '<strong>Your license key has been cancelled</strong> (most likely due to a refund request). Please consider acquiring a new license.', 'jet-theme-core' ),
|
|
'invalid' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL of your site (including HTTPS/SSL migration). Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
|
|
'site_inactive' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL. Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
|
|
'inactive' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL of your site (including HTTPS/SSL migration). Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
|
|
);
|
|
|
|
$default = __( 'An error occurred. Please check your internet connection and try again. If the problem persists, contact our support.', 'jet-theme-core' );
|
|
|
|
return isset( $messages[ $code ] ) ? $messages[ $code ] : $default;
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns upgrade URL
|
|
*
|
|
* @return string
|
|
*/
|
|
public function upgrade_url() {
|
|
return $this->config['base'];
|
|
}
|
|
|
|
/**
|
|
* Returns upgrade URL
|
|
*
|
|
* @return string
|
|
*/
|
|
public function renew_url() {
|
|
return $this->config['base'];
|
|
}
|
|
|
|
/**
|
|
* Set error message and return false.
|
|
*
|
|
* @param [type] $message [description]
|
|
*/
|
|
public function set_error( $message, $code = null ) {
|
|
|
|
if ( ! $code ) {
|
|
$this->error_message = $message;
|
|
} else {
|
|
$this->error_message = $this->get_error_by_code( $code );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns error message
|
|
*
|
|
* @return [type] [description]
|
|
*/
|
|
public function get_activation_error() {
|
|
return $this->error_message;
|
|
}
|
|
|
|
/**
|
|
* Perform a remote request with passed action for passed license key
|
|
*
|
|
* @param string $action EDD action to perform (activate_license, check_license etc)
|
|
* @param string $license License key
|
|
* @return WP_Error|array
|
|
*/
|
|
public function license_request( $action, $license ) {
|
|
|
|
$url = add_query_arg(
|
|
array(
|
|
'edd_action' => $action,
|
|
'item_id' => ( ! empty( $this->config['id'] ) ? $this->config['id'] : false ),
|
|
'license' => $license,
|
|
'url' => urlencode( home_url( '/' ) ),
|
|
),
|
|
$this->config['base']
|
|
);
|
|
|
|
$args = apply_filters( 'jet-theme-core/license-request/args', $this->request_args() );
|
|
|
|
return wp_remote_get( $url, $args );
|
|
}
|
|
|
|
/**
|
|
* Check status for passed license key
|
|
*
|
|
* @param string $license License key to check.
|
|
* @return string
|
|
*/
|
|
public function license_status( $license ) {
|
|
|
|
if ( ! $this->is_enabled() ) {
|
|
return array(
|
|
'success' => false,
|
|
'message' => esc_html__( 'Remote API is disabled', 'jet-theme-core' ),
|
|
);
|
|
}
|
|
|
|
if ( empty( $license ) ) {
|
|
|
|
return array(
|
|
'success' => false,
|
|
'message' => esc_html__( 'Empty license key', 'jet-theme-core' ),
|
|
);
|
|
|
|
}
|
|
|
|
$response = $this->license_request( 'check_license', $license );
|
|
|
|
$result = wp_remote_retrieve_body( $response );
|
|
$result = json_decode( $result, true );
|
|
|
|
if ( ! isset( $result['success'] ) ) {
|
|
return array(
|
|
'success' => false,
|
|
'message' => $this->get_error_by_code( 'default' ),
|
|
);
|
|
}
|
|
|
|
if ( true === $result['success'] && 'valid' === $result['license'] ) {
|
|
return array(
|
|
'success' => true,
|
|
'message' => esc_html__( 'Active', 'jet-theme-core' ),
|
|
);
|
|
} else {
|
|
|
|
$code = isset( $result['error'] ) ? $result['error'] : $result['license'];
|
|
|
|
return array(
|
|
'success' => false,
|
|
'message' => $this->get_error_by_code( $code ),
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|