HEX
Server: nginx/1.24.0
System: Linux webserver 6.8.0-59-generic #61-Ubuntu SMP PREEMPT_DYNAMIC Fri Apr 11 23:16:11 UTC 2025 x86_64
User: wpuser (1002)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /opt/wpsites/datainsightnow.com/wp-content/plugins/essential-blocks/includes/Integrations/NFT.php
<?php
namespace EssentialBlocks\Integrations;

use EssentialBlocks\Utils\Helper;
use EssentialBlocks\Utils\HttpRequest;

class NFT extends ThirdPartyIntegration {
    /**
     * Base URL for Openverse API
     *
     * @var string
     */
    const URL = 'https://api.opensea.io/api/';

    public function __construct() {
        $this->add_ajax(
            [
                'opensea_nft_collections' => [
                    'callback' => 'collections',
                    'public'   => true
                ],
                'opensea_api_key'         => [
                    'callback' => 'get_api',
                    'public'   => true
                ],
                'opensea_api_key_save'    => [
                    'callback' => 'save_api',
                    'public'   => false
                ]
            ]
        );
    }

    /**
     * API Call to Get NFT Data
     */
    public function collections() {
        if ( ! wp_verify_nonce( sanitize_key( $_POST['nft_nonce'] ), 'eb-nft-nonce' ) ) {
            die( esc_html__( 'Nonce did not match', 'essential-blocks' ) );
        }

        $limit = 6;

        if ( isset( $_POST['nft_source'] ) && sanitize_text_field( $_POST['nft_source'] ) === 'opensea' ) {
            $opensea_api = 'b61c8a54123d4dcb9acc1b9c26a01cd1';
            $settings    = get_option( 'eb_settings' );

            if ( isset( $_POST['openseaApiKey'] ) ) {
                $opensea_api = sanitize_text_field( $_POST['openseaApiKey'] );
            } elseif ( is_array( $settings ) && isset( $settings['openseaApi'] ) ) {
                $opensea_api = sanitize_text_field( $settings['openseaApi'] );
            }

            $param = [];

            if ( isset( $_POST['openseaType'] ) ) {
                // To retrieve Collections
                if ( $_POST['openseaType'] === 'collections' ) {
                    $url    = $this->url( 'collections' );
                    $values = [
                        'asset_owner' => Helper::is_isset( 'openseaCollectionmWalletId' ),
                        'offset'      => Helper::is_isset( 'offset', 0 ),
                        'limit'       => Helper::is_isset( 'openseaCollectionLimit', $limit )
                    ];
                    $param = array_merge( $param, $values );
                }
                // To retrieve Assets
                elseif ( $_POST['openseaType'] === 'items' ) {
                    $url    = $this->url( 'assets' );
                    $values = [
                        'include_orders'  => Helper::is_isset( 'openseaItemIncludeOrder', true ),
                        'limit'           => Helper::is_isset( 'openseaItemLimit', $limit ),
                        'order_direction' => Helper::is_isset( 'openseaItemOrderBy', 'desc' )
                    ];
                    if ( isset( $_POST['openseaItemFilterBy'] ) ) {
                        if ( $_POST['openseaItemFilterBy'] === 'slug' ) {
                            $values['collection_slug'] = Helper::is_isset( 'openseaCollectionSlug' );
                        } elseif ( $_POST['openseaItemFilterBy'] === 'wallet' ) {
                            $values['owner'] = Helper::is_isset( 'openseaItemWalletId' );
                        }
                    }
                    $param = array_merge( $param, $values );
                }
            }
            $response = HttpRequest::get_instance()->get(
                $url,
                [
                    'body'    => $param,
                    'headers' => [
                        'Content-Type' => 'application/json',
                        'X-API-KEY'    => $opensea_api
                    ],
                    'timeout' => 300,
                    'is_ajax' => true
                ]
            );

            wp_send_json_success( $response );
        }

        wp_send_json_error( __( 'Something went wrong.', 'essential-blocks' ) );
    }

    public function get_api() {
        if ( ! wp_verify_nonce( $_POST['admin_nonce'], 'admin-nonce' ) ) {
            die( esc_html__( 'Nonce did not match', 'essential-blocks' ) );
        }
        if ( ! current_user_can( 'edit_posts' ) ) {
            wp_send_json_error( __( 'You are not authorized!', 'essential-blocks' ) );
        }

        $settings = get_option( 'eb_settings' );

        if ( is_array( $settings ) && isset( $settings['openseaApi'] ) ) {
            wp_send_json_success( $settings['openseaApi'] );
        }

        wp_send_json_error( "Couldn't found data" );
    }

    public function save_api() {
        if ( ! wp_verify_nonce( $_POST['admin_nonce'], 'admin-nonce' ) ) {
            die( esc_html__( 'Nonce did not match', 'essential-blocks' ) );
        }
        if ( ! current_user_can( 'activate_plugins' ) ) {
            wp_send_json_error( __( 'You are not authorized!', 'essential-blocks' ) );
        }

        $api = '';
        if ( isset( $_POST['openseaApi'] ) ) {
            $api = trim( sanitize_text_field( $_POST['openseaApi'] ) );
        }

        $settings = is_array( get_option( 'eb_settings' ) ) ? get_option( 'eb_settings' ) : [];
        if ( strlen( $api ) === 0 ) {
            unset( $settings['openseaApi'] );
        } else {
            $settings['openseaApi'] = $api;
        }

        if ( is_array( $settings ) > 0 ) {
            $output = update_option( 'eb_settings', $settings );
            wp_send_json_success( $output );
        } else {
            wp_send_json_error( "Couldn't save data" );
        }

        exit;
    }
}