[ Avaa Bypassed ]




Upload:

Command:

www-data@3.144.124.77: ~ $
<?php
/**
 * Handles the parameters and URLs
 *
 * @file The Tools file
 * @package HMWP/Tools
 * @since 4.0.0
 */

defined('ABSPATH') || die('Cheatin\' uh?');

class HMWP_Classes_Tools
{

    /**
     *
     *
     * @var array Saved options in database
     */
    public static $init = array(), $default = array(), $lite = array();
    public static $options = array();
    public static $debug = array();
    public static $active_plugins;

    /**
     *
     *
     * @var integer Count the errors in site
     */
    static $errors_count = 0;

    static $current_user_role = 'default';

    /**
     * HMWP_Classes_Tools constructor.
     */
    public function __construct()
    {

        /////////////////////////////////////////////////////////////
        //Check the memory and make sure it's enough
        //Check the max memory usage
        $maxmemory = self::getMaxMemory();
        if ($maxmemory && $maxmemory < 60 ) {
            if (defined('WP_MAX_MEMORY_LIMIT') && (int)WP_MAX_MEMORY_LIMIT > 60 ) {
                @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
            } else {
                define('HMWP_DISABLE', true);
                HMWP_Classes_Error::setNotification(sprintf(esc_html__('Your memory limit is %sM. You need at least %sM to prevent loading errors in frontend. See: %sIncreasing memory allocated to PHP%s', 'hide-my-wp'), $maxmemory, 64, '<a href="https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP" target="_blank">', '</a>'));
            }
        }
        ////////////////////////////////////////////////////

        //Get the plugin options from database
        self::$options = self::getOptions();

        //Load multilanguage
        add_action("init", array($this, 'loadMultilanguage'));

        //If it's admin panel
        if(is_admin() || is_network_admin()) {
            //Check the Plugin database update
            self::updateDatabase();

            //add setting link in plugin
            add_filter('plugin_action_links_' . HMWP_BASENAME, array($this, 'hookActionlink'));
            add_filter('network_admin_plugin_action_links_' . HMWP_BASENAME, array($this, 'hookActionlink'));

            //check plugin license
            add_action('request_metadata_http_result', array($this, 'checkLicenseOnUpdate'));


        }

    }

    /**
     * Check the memory and make sure it's enough
     *
     * @return bool|string
     */
    public static function getMaxMemory()
    {
        try {
            $memory_limit = @ini_get('memory_limit');
            if ((int)$memory_limit > 0 ) {
                if (preg_match('/^(\d+)(.)$/', $memory_limit, $matches) ) {
                    if ($matches[2] == 'G' ) {
                        $memory_limit = $matches[1] * 1024 * 1024 * 1024; // nnnM -> nnn MB
                    } elseif ($matches[2] == 'M' ) {
                        $memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
                    } else if ($matches[2] == 'K' ) {
                        $memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
                    }
                }
                if ((int)$memory_limit > 0 ) {
                    return number_format((int)$memory_limit / 1024 / 1024, 0, '', '');
                }
            }
        } catch ( Exception $e ) {
        }

        return false;

    }

    /**
     * Load the Options from user option table in DB
     *
     * @param bool|false $safe
     *
     * @return array
     */
    public static function getOptions( $safe = false )
    {
        $keymeta = HMWP_OPTION;

	    $homepath = '';
		if(parse_url(site_url(), PHP_URL_PATH)){
			$homepath = ltrim(parse_url(site_url(), PHP_URL_PATH), '/');
		}

	    $pluginurl = ltrim(parse_url(plugins_url(), PHP_URL_PATH), '/');
	    $contenturl = ltrim(parse_url(content_url(), PHP_URL_PATH), '/');

        $plugin_relative_url = trim(preg_replace('/' . str_replace('/', '\/', $homepath) . '/', '', $pluginurl, 1), '/');
        $content_relative_url = trim(preg_replace('/' . str_replace('/', '\/', $homepath) . '/', '', $contenturl, 1), '/');

        if ($safe ) {
            $keymeta = HMWP_OPTION_SAFE;
        }

        self::$init = array(
            'hmwp_ver' => 0,
            //--
            'api_token' => false,
            'hmwp_token' => false,
            //--
            'hmwp_valid' => 1,
            'hmwp_expires' => 0,
            'hmwp_disable' => HMWP_Classes_Tools::generateRandomString(16),
            'hmwp_disable_name' => HMWP_Classes_Tools::generateRandomString(16),
            //--
            'hmwp_plugin_name' => _HMWP_PLUGIN_FULL_NAME_,
            'hmwp_plugin_menu' => str_replace(' Ghost', '', _HMWP_PLUGIN_FULL_NAME_) ,
            'hmwp_plugin_logo' =>  false ,
            'hmwp_plugin_icon' => 'dashicons-shield-alt',
            'hmwp_plugin_website' => 'https://hidemywpghost.com',
            'hmwp_plugin_account_show' => 1,
            //--
            'logout' => 0,
            'error' => 0,
            'file_mappings' => array(),
            'test_frontend' => 0,
            'changes' => 0,
            'admin_notice' => array(),
			'prevent_slow_loading' => 1,
            'hmwp_rewrites_in_wp_rules' => 0,
            'hmwp_server_type' => 'auto',
	        //--
            'hmwp_loading_hook' => array('normal'), //load when the other plugins are initialized
            'hmwp_firstload' => 0, //load the plugin as Must Use Plugin
            'hmwp_priorityload' => 0, //load the plugin on plugin start
            'hmwp_laterload' => 0, //load the plugin on template redirect
            //--
            'hmwp_fix_relative' => 0,
            'hmwp_remove_third_hooks' => 0,
            'hmwp_send_email' => 0,
            'hmwp_activity_log' => 0,
            'hmwp_activity_log_roles' => array(),
            'hmwp_email_address' => '',

            //Temporary Login
            'hmwp_templogin' => 0,
            'hmwp_templogin_role' => 'administrator',
            'hmwp_templogin_redirect' => false,
            'hmwp_templogin_delete_uninstal' => false,

            //2FA Login
            'hmwp_2falogin' => 0,
            'hmwp_2falogin_status' => 1,
            'hmwp_2fa_totp' => 1,
            'hmwp_2fa_email' => 0,
            'hmwp_2falogin_max_attempts' => 5,
            'hmwp_2falogin_max_timeout' => 900,
            'hmwp_2falogin_message' => '',
            'hmwp_2falogin_fail_message' => '',

            //-- Brute Force
            'hmwp_bruteforce' => 0,
            'hmwp_bruteforce_register' => 0,
            'hmwp_bruteforce_lostpassword' => 0,
            'hmwp_brute_message' => esc_html__('Your IP has been flagged for potential security violations. Please try again in a little while...', 'hide-my-wp'),
            'whitelist_ip' => array(),
            'banlist_ip' => array(),
            'hmwp_hide_classes' => json_encode(array()),
            'trusted_ip_header' => '',
            'whitelist_paths' => 0,

            //Math reCaptcha
            'brute_use_math' => 1,
            'brute_max_attempts' => 5,
            'brute_max_timeout' => 3600,
            //reCaptcha V2
            'brute_use_captcha' => 0,
            'brute_captcha_site_key' => '',
            'brute_captcha_secret_key' => '',
            'brute_captcha_theme' => 'light',
            'brute_captcha_language' => '',
            //reCaptcha V2
            'brute_use_captcha_v3' => 0,
            'brute_captcha_site_key_v3' => '',
            'brute_captcha_secret_key_v3' => '',

            //tweaks
            'hmwp_hide_admin_toolbar' => 0,
            'hmwp_hide_admin_toolbar_roles' => array('customer','subscriber'),
            //--
            'hmwp_change_in_cache' => ((defined('WP_CACHE') && WP_CACHE) ? 1 : 0),
            'hmwp_change_in_cache_directory' => '',
            'hmwp_hide_loggedusers' => 1,
            'hmwp_hide_version' => 1,
            'hmwp_hide_version_random' => 0,
            'hmwp_hide_generator' => 1,
            'hmwp_hide_prefetch' => 1,
            'hmwp_hide_comments' => 1,
            'hmwp_hide_wp_text' => 0,

            'hmwp_hide_feed' => 0,
            'hmwp_hide_in_feed' => 0,
            'hmwp_hide_in_sitemap' => 0,
            'hmwp_hide_author_in_sitemap' => 1,
            'hmwp_robots' => 0,

            'hmwp_disable_emojicons' => 0,
            'hmwp_disable_manifest' => 1,
            'hmwp_disable_embeds' => 0,
            'hmwp_disable_debug' => 1,
            //--
            'hmwp_disable_click' => 0,
            'hmwp_disable_click_loggedusers' => 0,
            'hmwp_disable_click_roles' => array('subscriber'),
            'hmwp_disable_click_message' => "Right click is disabled!",

            'hmwp_disable_inspect' => 0,
            'hmwp_disable_inspect_blank' => 0,
            'hmwp_disable_inspect_loggedusers' => 0,
            'hmwp_disable_inspect_roles' => array('subscriber'),
            'hmwp_disable_inspect_message' => "Inspect Element is disabled!",

            'hmwp_disable_source' => 0,
            'hmwp_disable_source_loggedusers' => 0,
            'hmwp_disable_source_roles' => array('subscriber'),
            'hmwp_disable_source_message' => "View Source is disabled!",

            'hmwp_disable_copy_paste' => 0,
            'hmwp_disable_copy_paste_loggedusers' => 0,
            'hmwp_disable_copy_paste_roles' => array('subscriber'),
            'hmwp_disable_copy_paste_message' => "Copy/Paste is disabled!",

            'hmwp_disable_drag_drop' => 0,
            'hmwp_disable_drag_drop_loggedusers' => 0,
            'hmwp_disable_drag_drop_roles' => array('subscriber'),
            'hmwp_disable_drag_drop_message' => "Drag-n-Drop is disabled!",

            'hmwp_disable_recording' => 0,
            'hmwp_disable_recording_loggedusers' => 0,
            'hmwp_disable_recording_roles' => array('subscriber'),
            'hmwp_disable_recording_message' => "Screen Recording is disabled!",
            //--
            'hmwp_disable_screen_capture' => 0,
            'hmwp_file_cache' => 0,
            'hmwp_url_mapping' => json_encode(array()),
            'hmwp_mapping_classes' => 1,
            'hmwp_mapping_file' => 0,
            'hmwp_text_mapping' => json_encode(
                array(
                    'from' => array('wp-caption'),
                    'to' => array('caption'),
                )
            ),
            'hmwp_cdn_urls' => json_encode(array()),
            'hmwp_security_alert' => 1,
            //--
            'hmwp_hide_plugins_advanced' => 0,
            'hmwp_hide_themes_advanced' => 0,
            //--

            //redirects
            'hmwp_url_redirect' => '.',
            'hmwp_do_redirects' => 0,
            'hmwp_logged_users_redirect' => 0,
            'hmwp_url_redirects' => array('default' => array('login' => '', 'logout' => '')),
            'hmwp_signup_template' => 0,

            'hmwp_mapping_text_show' => 1,
            'hmwp_mapping_url_show' => 1,
            'hmwp_mapping_cdn_show' => 1,
	        //PRO
            'hmwp_bruteforce_woocommerce' => 0,

        );
        self::$default = array(
            'hmwp_mode' => 'default',
            'hmwp_admin_url' => 'wp-admin',
            'hmwp_login_url' => 'wp-login.php',
            'hmwp_activate_url' => 'wp-activate.php',
            'hmwp_lostpassword_url' => '',
            'hmwp_register_url' => '',
            'hmwp_logout_url' => '',

            'hmwp_plugin_url' => $plugin_relative_url,
            'hmwp_plugins' => array(),
            'hmwp_themes_url' => 'themes',
            'hmwp_themes' => array(),
            'hmwp_upload_url' => 'uploads',
            'hmwp_admin-ajax_url' => 'admin-ajax.php',
            'hmwp_wp-signup_url' => 'wp-signup.php',
            'hmwp_hideajax_paths' => 0,
            'hmwp_hideajax_admin' => 0,
            'hmwp_tags_url' => 'tag',
            'hmwp_wp-content_url' => $content_relative_url,
            'hmwp_wp-includes_url' => 'wp-includes',
            'hmwp_author_url' => 'author',
            'hmwp_hide_authors' => 0,
            'hmwp_wp-comments-post' => 'wp-comments-post.php',
            'hmwp_themes_style' => 'style.css',
            'hmwp_hide_img_classes' => 0,
            'hmwp_hide_styleids' => 0,
            'hmwp_noncekey' => '_wpnonce',
            'hmwp_wp-json' => 'wp-json',
            'hmwp_hide_rest_api' => 0,
            'hmwp_disable_rest_api' => 0,
            'hmwp_disable_xmlrpc' => 0,
            'hmwp_hide_rsd' => 0,
            'hmwp_hide_admin' => 0,
            'hmwp_hide_newadmin' => 0,
            'hmwp_hide_admin_loggedusers' => 0,
            'hmwp_hide_login' => 0,
            'hmwp_hide_wplogin' => 0,
            'hmwp_disable_language_switcher' => 0,
            'hmwp_hide_plugins' => 0,
            'hmwp_hide_all_plugins' => 0,
            'hmwp_hide_themes' => 0,
            'hmwp_emulate_cms' => '',

            //--secure headers
            'hmwp_sqlinjection' => 0,
            'hmwp_sqlinjection_level' => 1,
            'hmwp_security_header' => 0,
            'hmwp_hide_unsafe_headers' => 0,
            'hmwp_security_headers' => array(
                "Strict-Transport-Security" => "max-age=15768000;includeSubdomains",
                "Content-Security-Policy" => "object-src 'none'",
                "X-XSS-Protection" => "1; mode=block",
            ),
            //--
            'hmwp_detectors_block' => 0,
            'hmwp_hide_commonfiles' => 0,
            'hmwp_disable_browsing' => 0,
            'hmwp_hide_oldpaths' => 0,
            'hmwp_hide_oldpaths_plugins' => 0,
            'hmwp_hide_oldpaths_themes' => 0,
            'hmwp_hide_oldpaths_types' => array('css', 'js', 'php', 'txt', 'html'),
            'hmwp_hide_commonfiles_files' => array('wp-config-sample.php', 'readme.html', 'readme.txt', 'install.php', 'license.txt', 'php.ini', 'upgrade.php', 'bb-config.php', 'error_log'),
            //
            'hmwp_category_base' => '',
            'hmwp_tag_base' => '',
            //
        );
        self::$lite = array(
            'hmwp_mode' => 'lite',
            'hmwp_login_url' => 'newlogin',
            'hmwp_activate_url' => 'activate',
            'hmwp_lostpassword_url' => 'lostpass',
            'hmwp_register_url' => 'register',
            'hmwp_logout_url' => '',
            'hmwp_admin-ajax_url' => 'admin-ajax.php',
            'hmwp_hideajax_admin' => 0,
            'hmwp_hideajax_paths' => 0,
            'hmwp_plugin_url' => 'core/modules',
            'hmwp_themes_url' => 'core/views',
            'hmwp_upload_url' => 'storage',
            'hmwp_wp-content_url' => 'core',
            'hmwp_wp-includes_url' => 'lib',
            'hmwp_author_url' => 'writer',
            'hmwp_wp-comments-post' => 'comments',
            'hmwp_themes_style' => 'design.css',
            'hmwp_wp-json' => 'wp-json',
            'hmwp_hide_admin' => 1,
            'hmwp_hide_newadmin' => 0,
            'hmwp_hide_admin_loggedusers' => 0,
            'hmwp_hide_login' => 1,
            'hmwp_hide_wplogin' => 1,
            'hmwp_disable_language_switcher' => 0,
            'hmwp_hide_plugins' => 1,
            'hmwp_hide_all_plugins' => 0,
            'hmwp_hide_themes' => 1,
            'hmwp_emulate_cms' => 'drupal',
            //
            'hmwp_hide_img_classes' => 1,
            'hmwp_hide_rest_api' => 1,
            'hmwp_disable_rest_api' => 0,
            'hmwp_disable_xmlrpc' => 0,
            'hmwp_hide_rsd' => 1,
            //
            'hmwp_sqlinjection' => 0,
            'hmwp_security_header' => 1,
            'hmwp_hide_unsafe_headers' => 1,

            //PRO
            'hmwp_detectors_block' => 0,
            'hmwp_hide_styleids' => 0,
            'hmwp_hide_authors' => 0,
            'hmwp_disable_browsing' => 0,
            'hmwp_hide_commonfiles' => 0,
            'hmwp_hide_oldpaths' => 0,
            'hmwp_hide_oldpaths_plugins' => 0,
            'hmwp_hide_oldpaths_themes' => 0,
        );

        if (self::isMultisites() && defined('BLOG_ID_CURRENT_SITE') ) {
            $options = json_decode(get_blog_option(BLOG_ID_CURRENT_SITE, $keymeta), true);
        } else {
            $options = json_decode(get_option($keymeta), true);
        }

        //make sure it works with WP Client plugin by default
        if (self::isPluginActive('wp-client/wp-client.php') ) {
            self::$lite['hmwp_wp-content_url'] = 'include';
        }

        //merge the option
        if (is_array($options) ) {
            $options = @array_merge(self::$init, self::$default, $options);
        } else {
            $options = @array_merge(self::$init, self::$default);
        }

        //validate custom cache directory
        if(isset($options['hmwp_change_in_cache_directory']) && $options['hmwp_change_in_cache_directory'] <> '') {
            if(strpos($options['hmwp_change_in_cache_directory'], 'wp-content') !== false) {
                $options['hmwp_change_in_cache_directory'] = '';
            }
        }

        //Set the categories and tags paths
        $category_base = get_option('category_base');
        $tag_base = get_option('tag_base');

        if (self::isMultisites() && !is_subdomain_install() && is_main_site() && 0 === strpos(get_option('permalink_structure'), '/blog/') ) {
            $category_base = preg_replace('|^/?blog|', '', $category_base);
            $tag_base = preg_replace('|^/?blog|', '', $tag_base);
        }

        $options['hmwp_category_base'] = $category_base;
        $options['hmwp_tag_base'] = $tag_base;

	    if(HMW_PRIORITY) $options['hmwp_priorityload'] = 1;
	    if(HMW_RULES_IN_WP_RULES) $options['hmwp_rewrites_in_wp_rules'] = 1;

	    return $options;
    }

    /**
     * Update the plugin database with the last changed
     */
    private static function updateDatabase()
    {
        //On plugin update
        if(self::$options['hmwp_ver'] < HMWP_VERSION_ID ) {

            //Upgrade from Lite Version
            if (get_option('hmw_options') ) {
                $options = json_decode(get_option('hmw_options'), true);
                if (!empty($options) ) {
                    foreach ( $options as $key => $value ) {
                        self::$options[str_replace('hmw_', 'hmwp_', $key)] = $value;
                    }
                }
                delete_option('hmw_options');
            }

            //Set default hmwp_hide_wplogin
            if (!isset(self::$options['hmwp_hide_wplogin']) && isset(self::$options['hmwp_hide_login']) && self::$options['hmwp_hide_login'] ) {
                self::$options['hmwp_hide_wplogin'] = self::$options['hmwp_hide_login'];
            }

            //Initialize the account show option
            if (!isset(self::$options['hmwp_plugin_account_show']) ) {
                self::$options['hmwp_plugin_account_show'] = 1;
            }

            //upgrade the redirects to the new redirects
            if (isset(self::$options['hmwp_logout_redirect']) && self::$options['hmwp_logout_redirect']) {
                self::$options['hmwp_url_redirects']['default']['logout'] = self::$options['hmwp_logout_redirect'];
                unset(self::$options['hmwp_logout_redirect']);
            }

            if (isset(self::$options['hmwp_in_dashboard']) && self::$options['hmwp_in_dashboard']) {
                self::$options['hmwp_hide_admin_toolbar'] = self::$options['hmwp_in_dashboard'];
                unset(self::$options['hmwp_in_dashboard']);
            }

            if (isset(self::$options['hmwp_shutdownload']) && self::$options['hmwp_shutdownload']) {
                self::$options['hmwp_hide_in_sitemap'] = self::$options['hmwp_shutdownload'];
                unset(self::$options['hmwp_shutdownload']);
            }

            //update the login on Cloud when plugin update
            self::sendLoginPathsApi();

            self::$options['hmwp_ver'] = HMWP_VERSION_ID;
            self::saveOptions();
        }
    }

	/**
	 * Get the default value
	 *
	 * @since 5.0.19
	 *
	 * @param $key
	 * @return false|mixed
	 */
	public static function getDefault( $key )
	{
		if (isset(self::$default[$key]) ) {
			return self::$default[$key];
		}

		return false;

	}

    /**
     * Get the option from database
     *
     * @param $key
     *
     * @return mixed
     */
    public static function getOption( $key )
    {
        if (!isset(self::$options[$key]) ) {
            self::$options = self::getOptions();

            if (!isset(self::$options[$key]) ) {
                self::$options[$key] = 0;
            }
        }

        return apply_filters('hmwp_option_' . $key, self::$options[$key]);
    }

    /**
     * Save the Options in user option table in DB
     *
     * @param string     $key
     * @param string     $value
     * @param bool|false $safe
     */
    public static function saveOptions( $key = null, $value = '', $safe = false )
    {
        $keymeta = HMWP_OPTION;

        if ($safe ) {
            $keymeta = HMWP_OPTION_SAFE;
        }

        if (isset($key) ) {
            self::$options[$key] = $value;
        }

        if (self::isMultisites() && defined('BLOG_ID_CURRENT_SITE') ) {
            update_blog_option(BLOG_ID_CURRENT_SITE, $keymeta, json_encode(self::$options));
        } else {
            update_option($keymeta, json_encode(self::$options));
        }
    }

    /**
     * Save the options into backup
     */
    public static function saveOptionsBackup()
    {
        //Save the working options into backup
        foreach ( self::$options as $key => $value ) {
            HMWP_Classes_Tools::saveOptions($key, $value, true);
        }
    }

    /**
     * Add a link to settings in the plugin list
     *
     * @param array  $links
     *
     * @return array
     */
    public function hookActionlink( $links )
    {
        $links[] = '<a href="' . self::getSettingsUrl() . '">' . esc_html__('Settings', 'hide-my-wp') . '</a>';
        $links[] = '<a href="https://hidemywpghost.com/hide-my-wp-pricing/" target="_blank" style="font-weight: bold;color: #007cba">' . esc_html__('Go PRO', 'hide-my-wp') . '</a>';
        return array_reverse($links);
    }


    /**
     * Load the multilanguage support from .mo
     */
    public static function loadMultilanguage()
    {
        if (!defined('WP_PLUGIN_DIR') ) {
            load_plugin_textdomain(dirname(HMWP_BASENAME), dirname(HMWP_BASENAME) . '/languages/');
        } else {
            load_plugin_textdomain(dirname(HMWP_BASENAME), null, dirname(HMWP_BASENAME) . '/languages/');
        }
    }

    /**
     * Check if it's Ajax call
     *
     * @return bool
     */
    public static function isAjax()
    {
        if (defined('DOING_AJAX') && DOING_AJAX ) {
            return true;
        }

        return false;
    }

    /**
     * Check if it's valid for changing the paths
     * Change the paths in admin, logged users or visitors
     *
     * @return bool
     */
    public static function doChangePaths()
    {

        //If allways change paths admin & frontend
        if (HMW_ALWAYS_CHANGE_PATHS ) {
            return true;
        }

        //If not admin
        if ((!is_admin() && !is_network_admin()) || HMWP_Classes_Tools::isAjax() ) {

            //if process the change paths
            if (HMWP_Classes_Tools::getOption('hmwp_hide_loggedusers')
                || (function_exists('is_user_logged_in') && !is_user_logged_in() )
            ) {
                return true;
            }

        }

        return false;
    }

    /**
     * Check if it's valid for hiding and disable things in site
     *
     * @return bool
     */
    public static function doHideDisable()
    {

        //Check if is valid for moving on
        if(!apply_filters('hmwp_process_hide_disable', true)) {
            return false;
        }

        if (defined('DOING_CRON') && DOING_CRON ) {
            return false;
        }

        //If not admin
        if (!is_admin() && !is_network_admin() ) {
            //if process the change paths
            if (HMWP_Classes_Tools::getOption('hmwp_hide_loggedusers')
                || (function_exists('is_user_logged_in') && !is_user_logged_in() )
            ) {
                return true;
            }

        }

        return false;
    }

	/**
	 * Check if it's valid for click disabl, source code and inspect element
	 *
	 * @return bool
	 */
	public static function doDisableClick()
	{

		//Check if is valid for moving on
		if(!apply_filters('hmwp_process_hide_disable', true)) {
			return false;
		}

		if (defined('DOING_CRON') && DOING_CRON ) {
			return false;
		}

		//If not admin
		if (!is_admin() && !is_network_admin() ) {

			if(function_exists('is_user_logged_in')
			   && (HMWP_Classes_Tools::getOption('hmwp_disable_click')
			       || HMWP_Classes_Tools::getOption('hmwp_disable_inspect')
			       || HMWP_Classes_Tools::getOption('hmwp_disable_source')
			       || HMWP_Classes_Tools::getOption('hmwp_disable_copy_paste')
			       || HMWP_Classes_Tools::getOption('hmwp_disable_drag_drop'))){

				return true;
			}

		}

		return false;
	}

    /**
     * Check if the option to hide the URLs is active
     *
     * @return bool
     */
    public static function doHideURLs()
    {

        //Check if is valid for moving on
        if(!apply_filters('hmwp_process_hide_urls', true)) {
            return false;
        }

        //Only if the user login can be verified
        if (!function_exists('is_user_logged_in')) {
            return false;
        }

        if(!isset($_SERVER['REQUEST_URI'])) {
            return false;
        }

        if (defined('DOING_CRON') && DOING_CRON ) {
            return false;
        }

        return true;
    }


    /**
     * Get the plugin settings URL
     *
     * @param string $page
     * @param string $relative
     *
     * @return string
     */
    public static function getSettingsUrl( $page = 'hmwp_settings', $relative = false )
    {
        if ($relative ) {
            return 'admin.php?page=' . $page;
        } else {
            if (!self::isMultisites() ) {
                return admin_url('admin.php?page=' . $page);
            } else {
                return network_admin_url('admin.php?page=' . $page);
            }
        }
    }

    public static function getCloudUrl($page = 'login')
    {
        return _HMWP_ACCOUNT_SITE_ . '/user/auth/' . $page;
    }

    /**
     * Get the config file for WordPress
     *
     * @return string
     */
    public static function getConfigFile()
    {

        //Initialize WordPress Filesystem
        $wp_filesystem = HMWP_Classes_ObjController::initFilesystem();

        if ($wp_filesystem->exists(self::getRootPath() . 'wp-config.php') ) {
            return self::getRootPath() . 'wp-config.php';
        }

        if ($wp_filesystem->exists(dirname(ABSPATH) . '/wp-config.php') ) {
            return dirname(ABSPATH) . '/wp-config.php';
        }

        return false;
    }

    /**
     * Set the header type
     *
     * @param string $type
     */
    public static function setHeader( $type )
    {
        switch ( $type ) {
        case 'json':
            header('Content-Type: application/json');
            break;
        case 'html':
            header("Content-type: text/html");
            break;
        case 'text':
            header("Content-type: text/plain");
            break;
        }
    }

    /**
     * Get a value from $_POST / $_GET
     * if unavailable, take a default value
     *
     * @param string  $key           Value key
     * @param boolean $keep_newlines Keep the new lines in variable in case of texareas
     * @param mixed   $defaultValue  (optional)
     *
     * @return array|false|string Value
     */
    public static function getValue( $key = null, $defaultValue = false, $keep_newlines = false )
    {
        if (!isset($key) || $key == '' ) {
            return false;
        }

        //Get the parameters based on the form method
        //Sanitize each parameter based on the parameter type
        $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $defaultValue));

        if (is_string($ret) === true ) {
            if ($keep_newlines === false ) {
                //Validate the param based on its type
                if (in_array($key, array('hmwp_email_address', 'hmwp_email', 'whitelist_ip', 'banlist_ip')) ) { //validate email address
                    $ret = preg_replace('/[^A-Za-z0-9-_.#*@\/]/', '', $ret);
                } elseif (in_array($key, array('hmwp_disable_name')) ) { //validate url parameter
                    $ret = preg_replace('/[^A-Za-z0-9-_]/', '', $ret);
                } elseif (in_array($key, array('hmwp_admin_url','hmwp_login_url')) ) { //validate url parameter
                    $ret = preg_replace('/[^A-Za-z0-9-_.]/', '', $ret);
                } else {
                    $ret = preg_replace('/[^A-Za-z0-9-_.\/]/', '', $ret); //validate fields
                }
                //Sanitize the text field
                $ret = sanitize_text_field($ret);

            } else {

                //Validate the textareas
                $ret = preg_replace('/[^A-Za-z0-9-_.*#\n\r\s\/]@/', '', $ret);

                //Sanitize the textarea
                if (function_exists('sanitize_textarea_field') ) {
                    $ret = sanitize_textarea_field($ret);
                }
            }
        }

        //Return the unsplas validated and sanitized value
        return wp_unslash($ret);
    }

    /**
     * Check if the parameter is set
     *
     * @param string $key
     *
     * @return boolean
     */
    public static function getIsset( $key = null )
    {
        if (!isset($key) || $key == '' ) {
            return false;
        }

        return isset($_POST[$key]) || isset($_GET[$key]);
    }

    /**
     * Show the notices to WP
     *
     * @param string $message
     * @param string $type
     *
     * @return string
     */
    public static function showNotices( $message, $type = '' )
    {

        //Initialize WordPress Filesystem
        $wp_filesystem = HMWP_Classes_ObjController::initFilesystem();

        if ($wp_filesystem->exists(_HMWP_THEME_DIR_ . 'Notices.php') ) {
            ob_start();
                include _HMWP_THEME_DIR_ . 'Notices.php';
                $message = ob_get_contents();
            ob_end_clean();
        }

        return $message;
    }

    /**
     * Connect remote with wp_remote_get
     *
     * @param $url
     * @param array $params
     * @param array $options
     *
     * @return bool|string
     */
    public static function hmwp_remote_get( $url, $params = array(), $options = array() )
    {

        $parameters = '';
        if (!empty($params) ) {
            foreach ( $params as $key => $value ) {
                if ($key <> '' ) {
                    $parameters .= ($parameters == "" ? "" : "&") . $key . "=" . $value;
                }
            }

            if ($parameters <> '' ) {
                $url .= ((strpos($url, "?") === false) ? "?" : "&") . $parameters;
            }
        }

        $response = self::hmwp_wpcall($url, $params, $options);

        if (is_wp_error($response) ) { return false;
        }

        return self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body

    }


    /**
     * Connect remote with wp_remote_get
     *
     * @param $url
     * @param array $params
     * @param array $options
     *
     * @return bool|string
     */
    public static function hmwp_remote_post( $url, $params = array(), $options = array() )
    {
        $options['method'] = 'POST';

        $response = self::hmwp_wpcall($url, $params, $options);

        if (is_wp_error($response) ) { return false;
        }

        return self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body

    }

    /**
     * Use the WP remote call
     *
     * @param string $url
     * @param array  $params
     * @param array  $options
     *
     * @return array|WP_Error The response or WP_Error on failure.
     */
    public static function hmwp_wpcall( $url, $params, $options )
    {
        //predefined options
        $options = array_replace_recursive(
            array(
                'sslverify' => _HMWP_CHECK_SSL_,
                'method' => 'GET',
                'timeout' => 30,
                'headers' => array(
                    'TOKEN' => HMWP_Classes_Tools::getOption('hmwp_token'),
                    'API-TOKEN' => HMWP_Classes_Tools::getOption('api_token'),
                    'USER-URL' =>  home_url(),
                    'LANG' => get_bloginfo('language'),
                    'VER' => HMWP_VERSION
                )
            ),
            $options
        );

        if ($options['method'] == 'POST' ) {

            $options['body'] = $params;
            unset($options['method']);
            $response = wp_remote_post($url, $options);
        } else {

            unset($options['method']);
            $response = wp_remote_get($url, $options);

        }

        if (is_wp_error($response) ) {
            //For debugging
            do_action('hmwp_debug_request', $url, $options, $response);
        }

        return $response;
    }

    /**
     * Call the local URLs for Security Check
     *
     * @param $url
     * @param $options
     * @return array|WP_Error
     */
    public static function hmwp_localcall( $url, $options = array() )
    {
        //predefined options
        $options = array_merge(
            array(
                'sslverify' => false,
                'timeout' => 10,
            ),
            $options
        );

        $response = wp_remote_get($url, $options);

        if (is_wp_error($response) ) {
            //For debugging
            do_action('hmwp_debug_local_request', $url, $options, $response);
        }

        return $response;
    }

    /**
     * Get the Json from responce if any
     *
     * @param string $response
     *
     * @return string
     */
    private static function cleanResponce( $response )
    {
        return trim($response, '()');
    }

    /**
     * Check if HTML Headers to prevent chenging the code for other file extension
     *
     * @param array $types
     *
     * @return bool
     * @throws Exception
     */
    public static function isContentHeader( $types = array('text/html', 'text/xml') )
    {
        $headers = headers_list();

        //check the Content Type
        if(!empty($headers) && !empty($types)) {
            foreach ($headers as $value) {
                if (strpos($value, ':') !== false) {
                    if (stripos($value, 'Content-Type') !== false) {

                        foreach ($types as $type) {
                            if (stripos($value, $type) !== false) {
                                return true;
                            }
                        }

                        return false;

                    }
                }
            }
        }

        return false;
    }


    /**
     * Returns true if server is Apache
     *
     * @return boolean
     */
    public static function isApache()
    {
        global $is_apache;

		//If custom defined
        if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
	       if(in_array(HMWP_Classes_Tools::getOption('hmwp_server_type'), array(
			   'nginx', 'iis', 'cloudpanel', 'flywheel'
	       ))){
			   return false;
	       }
        }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'apache' ) {
            return true;
        }

        if (self::isFlywheel() ) { //force Nginx on Flywheel server
            return false;
        }

        return $is_apache;
    }

    /**
     * Check if mode rewrite is on
     *
     * @return bool
     */
    public static function isModeRewrite()
    {
        if (function_exists('apache_get_modules') ) {
            $modules = apache_get_modules();
            if (!empty($modules) ) {
                return in_array('mod_rewrite', $modules);
            }
        }

        return true;
    }

    /**
     * Check whether server is LiteSpeed
     *
     * @return bool
     */
    public static function isLitespeed()
    {
        $litespeed = false;

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'litespeed');
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'litespeed' ) {
            return true;
        }

        if (isset($_SERVER['SERVER_SOFTWARE']) && stripos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false ) {
            $litespeed = true;
        } elseif (isset($_SERVER['SERVER_NAME']) && stripos($_SERVER['SERVER_NAME'], 'LiteSpeed') !== false ) {
            $litespeed = true;
        } elseif (isset($_SERVER['X-Litespeed-Cache-Control']) ) {
            $litespeed = true;
        }

        if (self::isFlywheel() ) {
            return false;
        }

        return $litespeed;
    }

    /**
     * Check whether server is Lighthttp
     *
     * @return bool
     */
    public static function isLighthttp()
    {
        return (isset($_SERVER['SERVER_SOFTWARE']) && stripos($_SERVER['SERVER_SOFTWARE'], 'lighttpd') !== false);
    }

    /**
     * Check whether server is AWS StoreFront Bitnami
     *
     * @return bool
     */
    public static function isAWS()
    {
	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'bitnami');
	    }

	    if(isset($_SERVER["DOCUMENT_ROOT"]) && strpos($_SERVER["DOCUMENT_ROOT"], "/bitnami/")){
		    return true;
	    }

        $headers = headers_list();

        foreach ($headers as $header){
            if(strpos($header, 'x-amz-cf-id') !== false) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if multisites
     *
     * @return bool
     */
    public static function isMultisites()
    {
        return is_multisite();
    }

    /**
     * Check if multisites with path
     *
     * @return bool
     */
    public static function isMultisiteWithPath()
    {
        return (is_multisite() && ((defined('SUBDOMAIN_INSTALL') && !SUBDOMAIN_INSTALL) || (defined('VHOST') && VHOST == 'no')));
    }

    /**
     * Returns true if server is nginx
     *
     * @return boolean
     */
    public static function isNginx()
    {
        global $is_nginx;

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    if(in_array(HMWP_Classes_Tools::getOption('hmwp_server_type'), array(
			    'apache','iis'
		    ))){
			    return false;
		    }
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'nginx' ) {
            return true;
        }

        return ($is_nginx ||
                (isset($_SERVER['SERVER_SOFTWARE']) &&
                 (stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false || stripos($_SERVER['SERVER_SOFTWARE'], 'TasteWP') !== false) ));
    }

    /**
     * Returns true if server is Wpengine
     *
     * @return boolean
     */
    public static function isWpengine()
    {
	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'wpengine');
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'wpengine' ) {
            return true;
        }

        return (isset($_SERVER['WPENGINE_PHPSESSIONS']));
    }


    /**
     * Returns true if server is Wpengine
     *
     * @return boolean
     */
    public static function isFlywheel()
    {

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'flywheel');
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'flywheel' ) {
            return true;
        }

	    if (isset($_SERVER['SERVER']) && stripos($_SERVER['SERVER'], 'Flywheel') !== false) {
		    return true;
	    }

        return (isset($_SERVER['SERVER_SOFTWARE']) && stripos($_SERVER['SERVER_SOFTWARE'], 'Flywheel') !== false);
    }

    /**
     * Returns true if server is Inmotion
     *
     * @return boolean
     */
    public static function isInmotion()
    {

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'inmotion');
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'inmotion' ) {
            return true;
        }

        return (isset($_SERVER['SERVER_ADDR']) && stripos(@gethostbyaddr($_SERVER['SERVER_ADDR']), 'inmotionhosting.com') !== false);
    }

    /**
     * Returns true if server is Godaddy
     *
     * @return boolean
     */
    public static function isGodaddy()
    {

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'godaddy');
	    }

        //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'godaddy' ) {
            return true;
        }

        return (file_exists(ABSPATH . 'gd-config.php'));
    }

    /**
     * Returns true if server is IIS
     *
     * @return boolean
     */
    public static function isIIS()
    {
        global $is_IIS, $is_iis7;

	    //If custom defined
	    if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
		    return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'iis');
	    }

	    //If custom defined
        if (defined('HMWP_SERVER_TYPE') && strtolower(HMWP_SERVER_TYPE) == 'iis' ) {
            return true;
        }

        return ($is_iis7 || $is_IIS || (isset($_SERVER['SERVER_SOFTWARE']) && stripos($_SERVER['SERVER_SOFTWARE'], 'microsoft-iis') !== false));
    }

    /**
     * Returns true if windows
     *
     * @return bool
     */
    public static function isWindows()
    {
        return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
    }

    /**
     * Check if IIS has rewritten 2 structure enabled
     *
     * @return bool
     */
    public static function isPHPPermalink()
    {
        if (get_option('permalink_structure') ) {
            if (strpos(get_option('permalink_structure'), 'index.php') !== false || stripos(get_option('permalink_structure'), 'index.html') !== false || strpos(get_option('permalink_structure'), 'index.htm') !== false ) {
                return true;
            }
        }

        return false;
    }

	/**
	 * Returns true if server is Godaddy
	 *
	 * @return boolean
	 */
	public static function isCloudPanel()
	{

		//If custom defined
		if (HMWP_Classes_Tools::getOption('hmwp_server_type') <> 'auto' ) {
			return (HMWP_Classes_Tools::getOption('hmwp_server_type') == 'cloudpanel');
		}

		return false;
	}

    /**
     * Is a cache plugin installed in WordPress?
     *
     * @return bool
     */
    public static function isCachePlugin()
    {
        return (HMWP_Classes_Tools::isPluginActive('autoptimize/autoptimize.php') ||
            HMWP_Classes_Tools::isPluginActive('beaver-builder-lite-version/fl-builder.php') ||
            HMWP_Classes_Tools::isPluginActive('beaver-builder/fl-builder.php') ||
            HMWP_Classes_Tools::isPluginActive('breeze/breeze.php') ||
            HMWP_Classes_Tools::isPluginActive('cache-enabler/cache-enabler.php') ||
            HMWP_Classes_Tools::isPluginActive('comet-cache/comet-cache.php') ||
            HMWP_Classes_Tools::isPluginActive('hummingbird-performance/wp-hummingbird.php') ||
            HMWP_Classes_Tools::isPluginActive('hyper-cache/plugin.php') ||
            HMWP_Classes_Tools::isPluginActive('jch-optimize/jch-optimize.php') ||
            HMWP_Classes_Tools::isPluginActive('litespeed-cache/litespeed-cache.php') ||
            HMWP_Classes_Tools::isPluginActive('powered-cache/powered-cache.php') ||
            HMWP_Classes_Tools::isPluginActive('sg-cachepress/sg-cachepress.php') ||
            HMWP_Classes_Tools::isPluginActive('w3-total-cache/w3-total-cache.php') ||
            HMWP_Classes_Tools::isPluginActive('wp-asset-clean-up/wpacu.php') ||
            HMWP_Classes_Tools::isPluginActive('wp-fastest-cache/wpFastestCache.php') ||
            HMWP_Classes_Tools::isPluginActive('wp-rocket/wp-rocket.php') ||
            HMWP_Classes_Tools::isPluginActive('wp-super-cache/wp-cache.php') ||
            HMWP_Classes_Tools::isPluginActive('swift-performance/performance.php') ||
            HMWP_Classes_Tools::isPluginActive('swift-performance-lite/performance.php') ||
            WP_CACHE);
    }

    /**
     * Check whether the plugin is active by checking the active_plugins list.
     *
     * @source wp-admin/includes/plugin.php
     *
     * @param string $plugin Plugin folder/main file.
     *
     * @return boolean
     */
    public static function isPluginActive( $plugin )
    {

        if (empty(self::$active_plugins) ) {
            self::$active_plugins = (array)get_option('active_plugins', array());

            if (self::isMultisites() ) {

                if (! function_exists('get_plugins') ) {
                    include_once ABSPATH . 'wp-admin/includes/plugin.php';
                }

                self::$active_plugins = array_keys(get_plugins());
            }

        }

        return in_array($plugin, self::$active_plugins, true);
    }

	/**
	 * Check whether the theme is active.
	 *
	 * @param string $name Theme folder/main file.
	 *
	 * @return boolean
	 */
	public static function isThemeActive( $name )
	{
		$theme = get_option( 'template' );

		if ($theme) {
			if (strtolower($theme) == strtolower($name) ||
			    strtolower($theme) == strtolower($name) . ' child' ||
			    strtolower($theme) == strtolower($name) . ' child theme') {
				return true;
			}
		}

		return false;
	}

    /**
     * Get all the plugin names
     *
     * @return array
     */
    public static function getAllPlugins()
    {
        if (HMWP_Classes_Tools::getOption('hmwp_hide_all_plugins') ) {
            if (! function_exists('get_plugins') ) {
                include_once ABSPATH . 'wp-admin/includes/plugin.php';
            }

            $all_plugins = array_keys(get_plugins());
        } else {
            $all_plugins = (array)get_option('active_plugins', array());
        }

        if (self::isMultisites() ) {
            $all_plugins = array_merge(array_values($all_plugins), array_keys(get_site_option('active_sitewide_plugins')));
        }

        return $all_plugins;
    }

    /**
     * Get all the themes names
     *
     * @return array
     */
    public static function getAllThemes()
    {
        return search_theme_directories();
    }

	/**
	 * Get the absolute filesystem path to the root of the WordPress installation
	 *
	 * @return string Full filesystem path to the root of the WordPress installation
	 */
	public static function getRootPath()
	{
		$root_path = ABSPATH;

		if (defined('_HMWP_CONFIGPATH') ) {
			$root_path =  _HMWP_CONFIGPATH;
		} elseif (self::isFlywheel() && defined('WP_CONTENT_DIR') && dirname(WP_CONTENT_DIR) ) {
			$root_path =  str_replace('\\', '/', dirname(WP_CONTENT_DIR)) . '/';
		}

		return apply_filters('hmwp_root_path', $root_path);

	}

	/**
	 * Get the absolute filesystem path to the root of the WordPress installation
	 *
	 * @return string Full filesystem path to the root of the WordPress installation
	 */
	public static function getHomeRootPath()
	{
		$home_root = '/';
		if(HMWP_Classes_Tools::isMultisites() && defined('PATH_CURRENT_SITE')){
			$path = PATH_CURRENT_SITE;
		}else {
			$path = parse_url(site_url(), PHP_URL_PATH);
		}

		if ($path) {
			$home_root = trailingslashit($path);
		}

		return apply_filters('hmwp_home_root', $home_root);
	}

    /**
     * Get Relative path for the current blog in case of WP Multisite
     *
     * @param $url
     *
     * @return string
     */
    public static function getRelativePath( $url )
    {
        $url = wp_make_link_relative($url);

        if ($url <> '' ) {
            $url = str_replace(wp_make_link_relative(get_bloginfo('url')), '', $url);

            if (self::isMultisiteWithPath() && defined('PATH_CURRENT_SITE') && PATH_CURRENT_SITE <> '/' ) {
                $url = str_replace(rtrim(PATH_CURRENT_SITE, '/'), '', $url);
            }
        }

        return trailingslashit($url);
    }

	/**
	 * Check if wp-content is changed and set in a different location
	 *
	 * @ver 7.0.12
	 *
	 * @return bool
	 */
	public static function isDifferentWPContentPath(){
		$homepath = '';
		if(parse_url(site_url(), PHP_URL_PATH)){
			$homepath = ltrim(parse_url(site_url(), PHP_URL_PATH), '/');
		}

		if($homepath <> '/') {
			$contenturl = ltrim(parse_url(content_url(), PHP_URL_PATH), '/');

			return (strpos($contenturl, $homepath . '/') === false);
		}

		return false;
	}

    /**
     * Empty the cache from other cache plugins when save the settings
     */
    public static function emptyCache()
    {

        try {
            //Empty WordPress rewrites count for 404 error.
            //This happens when the rules are not saved through config file
            HMWP_Classes_Tools::saveOptions('file_mappings', array());

            //For debugging
            do_action('hmwp_debug_cache', '');

	        if (class_exists('\FlyingPress\Purge') && method_exists('\FlyingPress\Purge', 'purge_everything')){
		        \FlyingPress\Purge::purge_everything();
	        }

            if (class_exists('\JchOptimize\Platform\Cache') && method_exists('\JchOptimize\Platform\Cache', 'deleteCache') ) {
                \JchOptimize\Platform\Cache::deleteCache();
            }

            if (class_exists('LiteSpeed_Cache_API') && method_exists('LiteSpeed_Cache_API', 'purge_all') ) {
                \LiteSpeed_Cache_API::purge_all();
            }
            //////////////////////////////////////////////////////////////////////////////
            if (function_exists('w3tc_pgcache_flush') ) {
                w3tc_pgcache_flush();
            }

            if (function_exists('w3tc_minify_flush') ) {
                w3tc_minify_flush();
            }
            if (function_exists('w3tc_dbcache_flush') ) {
                w3tc_dbcache_flush();
            }
            if (function_exists('w3tc_objectcache_flush') ) {
                w3tc_objectcache_flush();
            }
            //////////////////////////////////////////////////////////////////////////////

            if (function_exists('wp_cache_clear_cache') ) {
                wp_cache_clear_cache();
            }

            if (function_exists('rocket_clean_domain') && function_exists('rocket_clean_minify') && function_exists('rocket_clean_cache_busting') ) {
                // Remove all cache files
                rocket_clean_domain();
                rocket_clean_minify();
                rocket_clean_cache_busting();
            }
            //////////////////////////////////////////////////////////////////////////////

            if (function_exists('apc_clear_cache') ) {
                // Remove all apc if enabled
                apc_clear_cache();
            }
            //////////////////////////////////////////////////////////////////////////////

            if (class_exists('Cache_Enabler_Disk') && method_exists('Cache_Enabler_Disk', 'clear_cache') ) {
                // clear disk cache
                Cache_Enabler_Disk::clear_cache();
            }
            //////////////////////////////////////////////////////////////////////////////

            if (class_exists('LiteSpeed_Cache') ) {
                LiteSpeed_Cache::get_instance()->purge_all();
            }
            //////////////////////////////////////////////////////////////////////////////

            if (self::isPluginActive('hummingbird-performance/wp-hummingbird.php') ) {
                do_action('wphb_clear_page_cache');
            }
            //////////////////////////////////////////////////////////////////////////////

            if (class_exists('WpeCommon') ) {
                if (method_exists('WpeCommon', 'purge_memcached') ) {
                    WpeCommon::purge_memcached();
                }
                if (method_exists('WpeCommon', 'clear_maxcdn_cache') ) {
                    WpeCommon::clear_maxcdn_cache();
                }
                if (method_exists('WpeCommon', 'purge_varnish_cache') ) {
                    WpeCommon::purge_varnish_cache();
                }
            }
            //////////////////////////////////////////////////////////////////////////////

            if (self::isPluginActive('sg-cachepress/sg-cachepress.php') && class_exists('Supercacher') ) {
                if (method_exists('Supercacher', 'purge_cache') && method_exists('Supercacher', 'delete_assets') ) {
                    Supercacher::purge_cache();
                    Supercacher::delete_assets();
                }
            }

            //Clear the fastest cache
            global $wp_fastest_cache;
            if (isset($wp_fastest_cache) && method_exists($wp_fastest_cache, 'deleteCache') ) {
                $wp_fastest_cache->deleteCache();
            }
            //////////////////////////////////////////////////////////////////////////////
        } catch ( Exception $e ) {

        }

    }

    /**
     * Flush the WordPress rewrites
     */
    public static function flushWPRewrites()
    {
        if (HMWP_Classes_Tools::isPluginActive('woocommerce/woocommerce.php') ) {
            update_option('woocommerce_queue_flush_rewrite_rules', 'yes');
        }

    }

    /**
     * Called on plugin activation
     *
     * @throws Exception
     */
    public function hmwp_activate()
    {
        set_transient('hmwp_activate', true);

        //set restore settings option on plugin activate
        $lastsafeoptions = self::getOptions(true);
        if (isset($lastsafeoptions['hmwp_mode']) && ($lastsafeoptions['hmwp_mode'] == 'ninja' || $lastsafeoptions['hmwp_mode'] == 'lite') ) {
            set_transient('hmwp_restore', true);
        }

        //Initialize the compatibility with other plugins
        HMWP_Classes_ObjController::getClass('HMWP_Models_Compatibility')->install();
    }

    /**
     * Called on plugin deactivation
     * Remove all the rewrite rules on deactivation
     *
     * @throws Exception
     */
    public function hmwp_deactivate()
    {
        $options = self::$default;
        //Prevent duplicates
        foreach ( $options as $key => $value ) {
            //set the default params from tools
            self::saveOptions($key, $value);
        }

        //remove user capability
        HMWP_Classes_ObjController::getClass('HMWP_Models_RoleManager')->removeHMWPCaps();

        //remove the custom rules
        HMWP_Classes_ObjController::getClass('HMWP_Models_Rules')->writeToFile('', 'HMWP_VULNERABILITY');
        HMWP_Classes_ObjController::getClass('HMWP_Models_Rules')->writeToFile('', 'HMWP_RULES');

        //clear the locked ips
        HMWP_Classes_ObjController::getClass('HMWP_Controllers_Brute')->clearBlockedIPs();

	    //Build the redirect table
	    HMWP_Classes_ObjController::getClass('HMWP_Models_Rewrite')->flushChanges();

        //Delete the compatibility with other plugins
        HMWP_Classes_ObjController::getClass('HMWP_Models_Compatibility')->uninstall();
    }

    /**
     * Call this function on rewrite update from other plugins
     *
     * @param array $wp_rules
     *
     * @return array
     * @throws Exception
     */
    public function checkRewriteUpdate( $wp_rules = array() )
    {
        try {
            if (!HMWP_Classes_Tools::getOption('error') && !HMWP_Classes_Tools::getOption('logout') ) {

                //Build the redirect table
                HMWP_Classes_ObjController::getClass('HMWP_Models_Rewrite')->clearRedirect()->setRewriteRules()->flushRewrites();

                //INSERT SEURITY RULES
                if (!HMWP_Classes_Tools::isIIS() ) {
                    //For Nginx and Apache the rules can be inserted separately
                    $rules = HMWP_Classes_ObjController::getClass('HMWP_Models_Rules')->getInjectionRewrite();

                    HMWP_Classes_ObjController::getClass('HMWP_Models_Rules')->writeToFile($rules, 'HMWP_VULNERABILITY');

                }
            }

        } catch ( Exception $e ) {

        }

        return $wp_rules;
    }

    /**
     * Check if new themes or plugins are added in WordPress
     */
    public function checkPluginsThemesUpdates()
    {

        try {
            //Check if tere are plugins added to website
            if (HMWP_Classes_Tools::getOption('hmwp_hide_plugins')) {
                $all_plugins = HMWP_Classes_Tools::getAllPlugins();
                $dbplugins = HMWP_Classes_Tools::getOption('hmwp_plugins');
                foreach ($all_plugins as $plugin) {
                    if (function_exists('is_plugin_active') && is_plugin_active($plugin) && isset($dbplugins['from']) && !empty($dbplugins['from'])) {
                        if (!in_array(plugin_dir_path($plugin), $dbplugins['from'])) {
                            HMWP_Classes_Tools::saveOptions('changes', true);
                        }
                    }
                }
            }

            //Check if there are themes added to website
            if (HMWP_Classes_Tools::getOption('hmwp_hide_themes')) {

                //Initialize WordPress Filesystem
                $wp_filesystem = HMWP_Classes_ObjController::initFilesystem();

                $all_themes = HMWP_Classes_Tools::getAllThemes();
                $dbthemes = HMWP_Classes_Tools::getOption('hmwp_themes');
                foreach ($all_themes as $theme => $value) {
                    if ($wp_filesystem->is_dir($value['theme_root']) && isset($dbthemes['from']) && !empty($dbthemes['from'])) {
                        if (!in_array($theme . '/', $dbthemes['from'])) {
                            HMWP_Classes_Tools::saveOptions('changes', true);
                        }
                    }
                }
            }

            //If there are changed (new plugins, new themes)
            if (self::getOption('changes')) {
                //Initialize the compatibility with other plugins
                HMWP_Classes_ObjController::getClass('HMWP_Models_Compatibility')->install();
            }
        }catch (Exception $e){

        }
    }

    /**
     * Send the login URL to Cloud for this URL
     * @return void
     */
    public static function sendLoginPathsApi(){

        if(HMWP_Classes_Tools::getOption('api_token')){

            $domain = (self::isMultisites() && defined('BLOG_ID_CURRENT_SITE')) ? get_home_url(BLOG_ID_CURRENT_SITE) : home_url();
            $options = array( 'timeout' => 10, 'headers' => array( 'USER-URL' => $domain ) );

            $login = array(
                'path' => HMWP_Classes_Tools::getOption('hmwp_login_url'),
                'parameter' => HMWP_Classes_Tools::getOption('hmwp_disable_name'),
                'value' => HMWP_Classes_Tools::getOption('hmwp_disable'),
            );

            self::hmwp_remote_post(_HMWP_API_SITE_ . '/api/settings',
                array('login' => wp_json_encode($login), 'url' => $domain), $options);
        }
    }

	/**
	 * Call Account API Server
	 *
	 * @param string $email
	 * @param string $redirect_to
	 *
	 * @return array|mixed|void
	 */
    public static function checkAccountApi( $email = null, $redirect_to = '' )
    {

	    $check        = array();
	    $monitor      = HMWP_Classes_Tools::getValue( 'hmwp_monitor', 0 );
	    $domain = (self::isMultisites() && defined('BLOG_ID_CURRENT_SITE')) ? get_home_url(BLOG_ID_CURRENT_SITE) : home_url();

	    if ( isset( $email ) && $email <> '' ) {
		    $args     = array(
			    'email'        => $email,
			    'url'          => $domain,
			    'howtolessons' => 1,
			    'monitor'      => (int) $monitor,
			    'source'       => 'hide-my-wp'
		    );
		    $response = HMWP_Classes_Tools::hmwp_remote_get( _HMWP_API_SITE_ . '/api/free/token', $args, array( 'timeout' => 10 ) );
	    } elseif ( HMWP_Classes_Tools::getOption( 'hmwp_token' ) ) {
		    $args     = array(
			    'token'        => self::getOption( 'hmwp_token' ),
			    'url'          => $domain,
			    'howtolessons' => 1,
			    'monitor'      => (int) $monitor,
			    'source'       => 'hide-my-wp'
		    );
		    $response = HMWP_Classes_Tools::hmwp_remote_get( _HMWP_API_SITE_ . '/api/free/token', $args, array( 'timeout' => 10 ) );
	    } else {
		    return $check;
	    }

        if ($response && $response = json_decode($response, true)) {

		    HMWP_Classes_Tools::saveOptions( 'hmwp_token', ( isset( $response['token'] ) ? $response['token'] : 0 ) );
		    HMWP_Classes_Tools::saveOptions( 'api_token', ( isset( $response['api_token'] ) ? $response['api_token'] : false ) );
		    HMWP_Classes_Tools::saveOptions( 'error', isset( $response['error'] ) );

		    if ( ! isset( $response['error'] ) ) {
			    if ( $redirect_to <> '' ) {
				    wp_redirect( $redirect_to );
				    exit();
			    }
		    } elseif ( isset( $response['message'] ) ) {
                HMWP_Classes_Error::setNotification($response['message'], 'notice', false);
		    }
	    } else {
		    HMWP_Classes_Error::setNotification( sprintf( __( 'CONNECTION ERROR! Make sure your website can access: %s', 'hide-my-wp' ), '<a href="' . _HMWP_ACCOUNT_SITE_ . '" target="_blank">' . _HMWP_ACCOUNT_SITE_ . '</a>' ) , 'notice', false );
	    }

	    return $response;

    }

    /**
     * Verify the API response on update
     *
     * @param  $result
     */
    public function checkLicenseOnUpdate($result)
    {

        // check the token
        if (!self::getOption('hmwp_token') ) {
            return;
        }

        if($body = json_decode(wp_remote_retrieve_body($result))) {

            //if data received is valid
            HMWP_Classes_Tools::saveOptions('hmwp_valid', 1);

            if (isset($body->expires) && (int)$body->expires > 0 && (int)$body->expires < time()) {
                HMWP_Classes_Tools::saveOptions('hmwp_valid', 0);
                HMWP_Classes_Tools::saveOptions('hmwp_expires', $body->expires);
            }elseif(isset($body->download_url) && !$body->download_url) {
                HMWP_Classes_Tools::saveOptions('hmwp_valid', 0);
                HMWP_Classes_Tools::saveOptions('hmwp_expires', 0);
            }

        }else{
            HMWP_Classes_Tools::saveOptions('hmwp_valid', 0);
            HMWP_Classes_Tools::saveOptions('hmwp_expires', 0);
        }

    }

    /**
     * Send the email is case there are major changes
     *
     * @return bool
     */
    public static function sendEmail()
    {
        $email = self::getOption('hmwp_email_address');
        if ($email == '' ) {
            global $current_user;
            $email = $current_user->user_email;
        }

        $line = "\n" . "________________________________________" . "\n";
        $to = $email;
        $subject = self::getOption('hmwp_plugin_name') . ' - ' . esc_html__('New Login Data', 'hide-my-wp');
        $message = sprintf(esc_html__("Thank you for using %s!", 'hide-my-wp'), self::getOption('hmwp_plugin_name')) . "\n";
        $message .= $line;
        $message .= esc_html__("Your new site URLs are", 'hide-my-wp') . ':' . "\n";
        $message .= esc_html__("Admin URL", 'hide-my-wp') . ': ' . admin_url() . "\n";
        $message .= esc_html__("Login URL", 'hide-my-wp') . ': '  . site_url(self::$options['hmwp_login_url']) . "\n";
        $message .= $line;
        $message .= esc_html__("Note: If you can't login to your site, just access this URL", 'hide-my-wp') . ':' . "\n";
        $message .= site_url() . "/wp-login.php?" . self::getOption('hmwp_disable_name') . "=" . self::$options['hmwp_disable'] . "\n\n";
        $message .= $line;
        $message .= esc_html__("Best regards", 'hide-my-wp') . ',' . "\n";
        $message .= self::getOption('hmwp_plugin_name') . "\n";

        $headers = array();
        $headers[] = sprintf(esc_html__("From: %s <%s>", 'hide-my-wp'), self::getOption('hmwp_plugin_name'), $email);
        $headers[] = 'Content-type: text/plain';

        add_filter('wp_mail_content_type', array('HMWP_Classes_Tools', 'setContentType'));

        if (@wp_mail($to, $subject, $message, $headers) ) {
            return true;
        }

        return false;
    }

    /**
     * Set the content type to text/plain
     *
     * @return string
     */
    public static function setContentType()
    {
        return "text/plain";
    }

        /**
         * Set the current user role for later use
         *
         * @param WP_User $user
         *
         * @return string
         */
    public static function setCurrentUserRole( $user = null )
    {
        $roles = array();

        if (isset($user) && isset($user->roles) && is_array($user->roles) ) {
            $roles = $user->roles;
        }elseif (function_exists('wp_get_current_user') ) {
            $user = wp_get_current_user();

            if(isset($user->roles) && is_array($user->roles)) {
                $roles = $user->roles;
            }
        }

        if (!empty($roles) ) {
            self::$current_user_role = current($roles);
        }

        return self::$current_user_role;
    }

    /**
     * Get the user main Role or default
     *
     * @return string
     */
    public static function getUserRole()
    {
        return self::$current_user_role;
    }

    /**
     * Check the user capability for the roles attached
     *
     * @param  $cap
     * @return bool
     */
    public static function userCan( $cap )
    {

        if (function_exists('current_user_can') ) {

            if (current_user_can($cap) ) {
                return true;
            }

            //Get the current user roles
            $user = wp_get_current_user();

            //If the user has multiple roles
            if (isset($user->roles) && is_array($user->roles) && count($user->roles) > 1 ) {
                foreach ( $user->roles as $role ) {

                    //Get the role
                    $role_object = get_role($role);

                    //Check if it has capability
                    if ($role_object->has_cap($cap) ) {
                        return true;
                    }
                }
            }

        }

        return false;
    }

    /**
     * Search part of string in array
     *
     * @param string $needle
     * @param array $haystack
     *
     * @return bool
     */
    public static function searchInString( $string, $haystack )
    {
        foreach ( $haystack as $value ) {
            if($string && $value && $string <> '' && $value <> '') {
                if (function_exists('mb_stripos')) {
                    if (mb_stripos($string, $value) !== false) {
                        return true;
                    }
                } elseif (stripos($string, $value) !== false) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Customize the redirect for the logout process
     *
     * @param  $redirect
     * @return mixed
     */
    public static function getCustomLogoutURL( $redirect )
    {
        //Get Logout based on user Role
        $role = HMWP_Classes_Tools::getUserRole();
        $urlRedirects = HMWP_Classes_Tools::getOption('hmwp_url_redirects');
        if (isset($urlRedirects[$role]['logout']) && $urlRedirects[$role]['logout'] <> '' ) {
            $redirect = $urlRedirects[$role]['logout'];
        } elseif (isset($urlRedirects['default']['logout']) && $urlRedirects['default']['logout'] <> '' ) {
            $redirect = $urlRedirects['default']['logout'];
        }

        return $redirect;
    }

    /**
     * Customize the redirect for the login process
     *
     * @param string $redirect
     * @return string
     */
    public static function getCustomLoginURL( $redirect )
    {

        //Get Logout based on user Role
        $role = HMWP_Classes_Tools::getUserRole();
        $urlRedirects = HMWP_Classes_Tools::getOption('hmwp_url_redirects');
        if (isset($urlRedirects[$role]['login']) && $urlRedirects[$role]['login'] <> '' ) {
            $redirect = $urlRedirects[$role]['login'];
        } elseif (isset($urlRedirects['default']['login']) && $urlRedirects['default']['login'] <> '' ) {
            $redirect = $urlRedirects['default']['login'];
        }

        return $redirect;
    }

    /**
     * Generate a string
     *
     * @param  int $length
     * @return bool|string
     */
    public static function generateRandomString( $length = 10 )
    {
        return substr(str_shuffle(str_repeat($x = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);
    }

    /**
     * make hidemywp the first plugin that loads
     */
    public static function movePluginFirst()
    {
        //Make sure the plugin is loaded first
        $plugin = dirname(HMWP_BASENAME) . '/index.php';
        $active_plugins = get_option('active_plugins');

        if (!empty($active_plugins) ) {

            $this_plugin_key = array_search($plugin, $active_plugins);

            if ($this_plugin_key > 0 ) {
                array_splice($active_plugins, $this_plugin_key, 1);
                array_unshift($active_plugins, $plugin);
                update_option('active_plugins', $active_plugins);


            }

        }
    }

    /**
     * Instantiates the WordPress filesystem
     *
     * @static
     * @access public
     * @return WP_Filesystem_Base|WP_Filesystem_Direct
     */
    public static function initFilesystem()
    {
        return HMWP_Classes_ObjController::initFilesystem();
    }

    public static function isWhitelistedIP($ip){
        $wl_items = array();

        if(!filter_var($ip, FILTER_VALIDATE_IP)){
            return true;
        }

        //jetpack whitelist
        $wl_jetpack = array(
            '122.248.245.244/32',
            '54.217.201.243/32',
            '54.232.116.4/32',
            '185.64.140.0/22',
            '76.74.255.0/22',
            '192.0.64.0/18',
            '192.0.65.0/22',
            '192.0.80.0/22',
            '192.0.96.0/22',
            '192.0.112.0/20',
            '192.0.123.0/22',
            '195.234.108.0/22',
        );

        if (filter_var(home_url(), FILTER_VALIDATE_URL) !== FALSE && strpos(home_url(), '.') !== false) {
            $wl_jetpack[] = '127.0.0.1';
        }

        if (HMWP_Classes_Tools::getOption('whitelist_ip')) {
            $wl_items = (array)json_decode(HMWP_Classes_Tools::getOption('whitelist_ip'), true);
        }

        //merge all the whitelisted ips and also add the hook for users
        $wl_items = apply_filters('hmwp_whitelisted_ips', array_merge($wl_jetpack, $wl_items));

        try {
            foreach ($wl_items as $item) {
                $item = trim($item);

                if (filter_var($item, FILTER_VALIDATE_IP) &&
                    $ip == $item) {
                    return true;
                }

                if (strpos($item, '*') === false && strpos($item, '/') === false) { //no match, no wildcard
                    continue;
                }

                if(strpos($item,'/') !== false) {

                    list($address, $netmask) = explode( '/', $item, 2 );

                    if (0 == (int)$netmask) {
                        continue;
                    }

                    if ((int)$netmask < 0 || (int)$netmask > 32) {
                        continue;
                    }

                    if ((ip2long($ip) & ~((1 << (32 - (int)$netmask)) - 1) ) == ip2long($address)){
                        return true;
                    }

                }

                $iplong = ip2long($ip);
                $ip_low = ip2long(str_replace('*', '0', $item));
                $ip_high = ip2long(str_replace('*', '255', $item));

                if ($iplong >= $ip_low && $iplong <= $ip_high) {//IP is within wildcard range
                    return true;
                }

            }
        } catch(Exception $e) {
        }

        return false;
    }

}

Filemanager

Name Type Size Permission Actions
Action.php File 6.38 KB 0644
Debug.php File 2.66 KB 0644
DisplayController.php File 2.98 KB 0644
Error.php File 3.85 KB 0644
FrontController.php File 3.69 KB 0644
HookController.php File 2.71 KB 0644
ObjController.php File 5.61 KB 0644
Tools.php File 71.25 KB 0644