403Webshell
Server IP : 172.67.158.161  /  Your IP : 18.217.104.118
Web Server : LiteSpeed
System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : giankuin ( 1871)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/giankuin/public_html/wp-content/themes/flatsome/inc/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/giankuin/public_html/wp-content/themes/flatsome/inc/classes/class-flatsome-envato-api.php
<?php
/**
 * Flatsome_Envato_API class.
 *
 * @package Flatsome
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Creates the Envato API connection.
 */
class Flatsome_Envato_API {

	/**
	 * The single class instance.
	 *
	 * @var object
	 */
	private static $instance = null;

	/**
	 * Purchased themes.
	 *
	 * @var array|null
	 */
	private static $themes = null;

	/**
	 * The Envato API personal token.
	 *
	 * @var string
	 */
	public $token;

	/**
	 * The Flatsome version.
	 *
	 * @var string
	 */
	public $version;

	/**
	 * Main Flatsome_Envato_API instance
	 *
	 * @return object The Flatsome_Envato_API instance.
	 */
	public static function instance() {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 * Setup instance properties.
	 */
	private function __construct() {
		$theme = wp_get_theme( get_template() );

		$this->token   = flatsome_envato()->get_option( 'token' );
		$this->version = $theme->get( 'Version' );
	}

	/**
	 * Get the required API permissions.
	 *
	 * @return array
	 */
	public function get_required_permissions() {
		return array(
			'default'           => 'View and search Envato sites',
			'user:username'     => 'View the your Envato Account username',
			'purchase:download' => 'Download your purchased items',
			'purchase:list'     => 'List purchases you\'ve made',
			'purchase:verify'   => 'Verify purchases you\'ve made',
		);
	}

	/**
	 * Query the Envato API.
	 *
	 * @uses wp_remote_get() To perform an HTTP request.
	 *
	 * @since 1.0.0
	 *
	 * @param  string $url  API request URL, including the request method, parameters, & file type.
	 * @param  array  $args The arguments passed to `wp_remote_get`.
	 * @return array|WP_Error  The HTTP response.
	 */
	public function request( $url, $args = array() ) {
		$defaults = array(
			'headers' => array(
				'Authorization' => 'Bearer ' . $this->token,
				'User-Agent'    => 'WordPress - Flatsome ' . $this->version,
			),
			'timeout' => 14,
		);

		$args  = wp_parse_args( $args, $defaults );
		$token = trim( str_replace( 'Bearer', '', $args['headers']['Authorization'] ) );

		if ( empty( $token ) ) {
			return new WP_Error( 'api_token_error', __( 'An API token is required.', 'flatsome' ) );
		}

		$debugging_information = [
			'request_url' => $url,
		];

		// Make an API request.
		$response = wp_remote_get( esc_url_raw( $url ), $args );

		// Check the response code.
		$response_code    = wp_remote_retrieve_response_code( $response );
		$response_message = wp_remote_retrieve_response_message( $response );

		$debugging_information['response_code']   = $response_code;
		$debugging_information['response_cf_ray'] = wp_remote_retrieve_header( $response, 'cf-ray' );
		$debugging_information['response_server'] = wp_remote_retrieve_header( $response, 'server' );

		if ( ! empty( $response->errors ) && isset( $response->errors['http_request_failed'] ) ) {
			return new WP_Error( 'http_error', esc_html( current( $response->errors['http_request_failed'] ) ), $debugging_information );
		}

		if ( 200 !== $response_code && ! empty( $response_message ) ) {
			return new WP_Error( $response_code, $response_message, $debugging_information );
		} elseif ( 200 !== $response_code ) {
			return new WP_Error( $response_code, __( 'An unknown API error occurred.', 'flatsome' ), $debugging_information );
		} else {
			$return = json_decode( wp_remote_retrieve_body( $response ), true );
			if ( null === $return ) {
				return new WP_Error( 'api_error', __( 'An unknown API error occurred.', 'flatsome' ), $debugging_information );
			}
			return $return;
		}
	}

	/**
	 * Validate the current token.
	 *
	 * @return bool|WP_Error
	 */
	public function whoami() {
		$response = $this->request( 'https://api.envato.com/whoami' );

		if ( is_wp_error( $response ) ) {
			if ( (int) $response->get_error_code() === 401 ) {
				return new WP_Error( 'unauthorized', __( 'The token was invalid.', 'flatsome' ) );
			}
			return $response;
		} else {
			$required_permissions = $this->get_required_permissions();
			$missing_permissions  = array();

			foreach ( $required_permissions as $required_scope => $required_scope_name ) {
				if ( ! in_array( $required_scope, $response['scopes'], true ) ) {
					$missing_permissions[] = $required_scope_name;
				}
			}

			if ( count( $missing_permissions ) ) {
				$list_items = array_reduce( $missing_permissions, function ( $res, $name ) {
					return $res . "<li>{$name}</li>";
				}, '');
				$list_html  = "<ul class=\"ul-disc\">{$list_items}</ul>";
				/* translators: 1: Permissions list. */
				$error_message = __( 'The token is missing the following permissions: %s', 'flatsome' );
				return new WP_Error( 'missing_permissions', sprintf( $error_message, $list_html ) );
			}
		}

		return true;
	}

	/**
	 * Get item download URL.
	 *
	 * @param  int   $id The item ID.
	 * @param  array $args The arguments passed to `wp_remote_get`.
	 * @return bool|array The theme info.
	 */
	public function get_package_url( $id, $args = array() ) {
		$url      = 'https://api.envato.com/v2/market/buyer/download?item_id=' . $id . '&shorten_url=true';
		$response = $this->request( $url, $args );

		if (
			is_wp_error( $response ) ||
			empty( $response ) ||
			! empty( $response['error'] ) ||
			empty( $response['wordpress_theme'] )
		) {
			return false;
		}

		return $response['wordpress_theme'];
	}

	/**
	 * Get Flatsome theme data info from Envato.
	 *
	 * @return array|WP_Error The theme info.
	 */
	public function get_flatsome() {
		if ( is_null( self::$themes ) ) {
			self::$themes = $this->get_themes();
		}

		$return = new WP_Error( 'not_found', __( "The provided token doesn't seem to have Flatsome as a purchased item.", 'flatsome' ) );

		if ( empty( self::$themes ) ) {
			return $return;
		}

		foreach ( self::$themes as $theme ) {
			if ( isset( $theme['name'] ) && strtolower( $theme['name'] ) === 'flatsome' ) {
				$return = $theme;
				break;
			}
		}

		return $return;
	}

	/**
	 * Get the list of available themes.
	 *
	 * @param  array $args The arguments passed to `wp_remote_get`.
	 * @param  int   $page The page to fetch.
	 * @return array Normalized theme items.
	 */
	private function get_themes( $args = array(), $page = null ) {
		$url      = 'https://api.envato.com/v2/market/buyer/list-purchases?filter_by=wordpress-themes';
		$url     .= $page ? '&page=' . $page : '';
		$response = $this->request( $url, $args );
		$themes   = array();

		if ( is_wp_error( $response ) || empty( $response ) || empty( $response['results'] ) ) {
			return $themes;
		}

		foreach ( $response['results'] as $theme ) {
			$themes[] = $this->normalize_theme( $theme['item'] );
		}

		if ( count( $themes ) === 100 ) {
			$next_page = $page ? $page + 1 : 2;
			if ( $next_page <= 5 ) {
				$more_themes = $this->get_themes( $args, $next_page );
				array_merge( $themes, $more_themes );
			}
		}

		return $themes;
	}

	/**
	 * Normalize result from the Envato API.
	 *
	 * @param  array $theme An array of API request values.
	 * @return array Normalized theme data.
	 */
	private function normalize_theme( $theme ) {
		return array(
			'id'      => $theme['id'],
			'name'    => ! empty( $theme['wordpress_theme_metadata']['theme_name'] ) ? $theme['wordpress_theme_metadata']['theme_name'] : '',
			'version' => ! empty( $theme['wordpress_theme_metadata']['version'] ) ? $theme['wordpress_theme_metadata']['version'] : '',
			'url'     => ! empty( $theme['url'] ) ? $theme['url'] : '',
		);
	}

	/**
	 * Remove all non unicode characters in a string.
	 *
	 * @param string $retval The string to fix.
	 * @return string
	 */
	private static function remove_non_unicode( $retval ) {
		return preg_replace( '/[\x00-\x1F\x80-\xFF]/', '', $retval );
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit