SILENT KILLERPanel

Current Path: > home > codekrsu > > escapematrixonline.com > wp-content > plugins > optinmonster > > OMAPI


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/codekrsu//escapematrixonline.com/wp-content/plugins/optinmonster//OMAPI

NameTypeSizeLast ModifiedActions
EasyDigitalDownloads Directory - -
Elementor Directory - -
Integrations Directory - -
MemberPress Directory - -
Plugins Directory - -
Promos Directory - -
Rules Directory - -
Shortcodes Directory - -
WPForms Directory - -
WooCommerce Directory - -
Actions.php File 7126 bytes February 25 2025 01:06:30.
Ajax.php File 1494 bytes November 17 2021 04:02:26.
Api.php File 14508 bytes February 25 2025 01:06:30.
ApiAuth.php File 2463 bytes October 07 2021 23:34:50.
ApiKey.php File 5205 bytes July 01 2024 22:14:00.
AssetLoader.php File 5721 bytes April 01 2021 19:57:40.
BaseRestApi.php File 6807 bytes October 15 2024 19:52:30.
Blocks.php File 13118 bytes March 26 2025 18:07:30.
ClassicEditor.php File 7085 bytes July 19 2022 01:42:26.
ConstantContact.php File 7602 bytes July 01 2024 22:14:00.
Debug.php File 4453 bytes July 01 2024 22:14:00.
EasyDigitalDownloads.php File 9553 bytes July 01 2024 22:14:00.
Elementor.php File 5493 bytes January 18 2023 22:34:56.
Inserter.php File 11562 bytes September 14 2022 06:35:44.
InstallSkin.php File 1386 bytes January 20 2021 22:11:00.
InstallSkinCompat.php File 1395 bytes January 20 2021 22:11:00.
MailPoet.php File 13680 bytes July 01 2024 22:14:00.
MemberPress.php File 4216 bytes June 23 2023 01:24:22.
Menu.php File 15787 bytes November 27 2024 23:45:46.
Notifications.php File 18910 bytes October 15 2024 19:52:30.
OmuApi.php File 4122 bytes October 27 2021 22:35:34.
Output.php File 24860 bytes September 16 2024 23:28:26.
Pages.php File 17172 bytes March 31 2025 18:30:04.
Partners.php File 4805 bytes July 01 2024 22:14:00.
Plugins.php File 24923 bytes April 23 2024 17:54:30.
Promos.php File 1132 bytes September 14 2022 06:35:44.
Refresh.php File 5891 bytes March 31 2025 18:30:04.
RestApi.php File 39506 bytes October 15 2024 19:52:30.
RevenueAttribution.php File 3037 bytes May 17 2022 18:55:22.
Review.php File 1482 bytes September 08 2021 19:22:54.
Rules.php File 24003 bytes July 01 2024 22:14:00.
Save.php File 11057 bytes October 13 2023 01:19:08.
Shortcode.php File 3668 bytes November 30 2021 23:04:18.
Sites.php File 8554 bytes July 01 2024 22:14:00.
Support.php File 8446 bytes February 25 2025 01:06:30.
Type.php File 2496 bytes February 11 2023 00:30:54.
Urls.php File 8996 bytes November 13 2024 02:13:58.
Utils.php File 7590 bytes March 31 2025 18:30:04.
Validate.php File 9280 bytes February 22 2024 23:03:38.
WPForms.php File 2666 bytes July 27 2023 00:06:52.
Welcome.php File 4930 bytes November 17 2021 04:02:26.
Widget.php File 6652 bytes November 17 2021 04:02:26.
WooCommerce.php File 20046 bytes July 01 2024 22:14:00.
Wordfence.php File 5606 bytes October 09 2024 11:38:44.
WpErrorException.php File 714 bytes November 17 2020 01:51:02.

Reading File: /home/codekrsu//escapematrixonline.com/wp-content/plugins/optinmonster//OMAPI/Wordfence.php

<?php
/**
 * Wordfence class.
 *
 * @since 2.10.0
 *
 * @package OMAPI
 * @author  Justin Sternberg
 */

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

/**
 * Wordfence class.
 *
 * @since 2.10.0
 */
class OMAPI_Wordfence {

	/**
	 * Holds the class object.
	 *
	 * @since 2.10.0
	 *
	 * @var object
	 */
	public static $instance;

	/**
	 * Holds the base class object.
	 *
	 * @since 2.10.0
	 *
	 * @var object
	 */
	public $base;

	/**
	 * Array of Wordfence rules that are expired in these newer versions of the WordPress plugin.
	 *
	 * @since 2.10.0
	 *
	 * @var array
	 */
	protected static $expired_om_rules = array(
		401 => 1, // "OptinMonster <= 2.6.0 Reflected Cross-Site Scripting"
		408 => 1, // "Optinmonster <= 2.6.1 Stored Cross-Site Scripting"
	);

	/**
	 * Primary class constructor.
	 *
	 * @since 2.10.0
	 */
	public function __construct() {
		if ( ! self::is_active() ) {
			return;
		}

		// Set our object.
		$this->set();

		add_action( 'all_admin_notices', array( $this, 'handle_messages' ) );
		add_action( 'admin_post_om_update_wf_rules', array( $this, 'auto_update_rules' ) );
	}

	/**
	 * Sets our object instance and base class instance.
	 *
	 * @since 2.10.0
	 */
	public function set() {
		self::$instance = $this;
		$this->base     = OMAPI::get_instance();
	}

	/**
	 * Handles outputting the warning and success messages.
	 *
	 * @since 2.10.0
	 */
	public function handle_messages() {
		if (
			self::has_expired_rules()
			&& ( $this->base->is_om_page() || self::is_wf_page() )
		) {
			$this->output_wordfence_rules_warning();
		} else {
			$this->maybe_output_success_message();
		}
	}

	/**
	 * Outputs error message about WF rules not working with OptinMonster.
	 *
	 * @since 2.10.0
	 */
	protected function output_wordfence_rules_warning() {
		$url = add_query_arg(
			array(
				'action' => 'om_update_wf_rules',
				'nonce'  => wp_create_nonce( 'om_fix_waf_rules', 'om_fix_waf_rules' ),
				'return' => urlencode( remove_query_arg( 'om_fix_waf_rules' ) ),
			),
			admin_url( 'admin-post.php' )
		);

		echo '
		<div id="message" class="notice notice-error is-dismissible">
			<p style="margin:0.5em 0;">
			<span>' .
					esc_html__( 'Your site is using Wordfence Firewall rules which will prevent OptinMonster from working correctly. ', 'optin-monster-api' ) .
				'</span>
				<a style="margin-left: 10px;" class="button" href="' . esc_url( $url ) . '">' .
					esc_html__( 'Fix this for me', 'optin-monster-api' ),
				'</a>
			</p>
		</div>';
	}

	/**
	 * Outputs success message after WF rules updated.
	 *
	 * @since 2.10.0
	 */
	protected function maybe_output_success_message() {
		if (
			empty( $_GET['om_fix_waf_rules'] )
			|| 'success' !== $_GET['om_fix_waf_rules']
		) {
			return;
		}

		echo '
		<div id="message" class="notice notice-success is-dismissible">
			<p style="margin:0.5em 0;">' .
			esc_html__( 'Success! Your Wordfence Firewall rules have been optimized to work with OptinMonster.', 'optin-monster-api' ) .
			'</p>
		</div>
		<script>
			if ( window.history.replaceState ) {
				window.history.replaceState( null, null, ' . json_encode( remove_query_arg( 'om_fix_waf_rules' ) ) . ' );
			}
		</script>
		';
	}

	/**
	 * Handles auto-fixing the WF rules after user clicks the "Fix this for me" button.
	 *
	 * @since 2.10.0
	 */
	public function auto_update_rules() {
		if ( ! self::has_expired_rules() ) {
			return;
		}

		// Make sure nonce check passes.
		check_admin_referer( 'om_fix_waf_rules', 'nonce' );

		self::remove_expired_rules();

		$url = add_query_arg(
			'om_fix_waf_rules',
			'success',
			! empty( $_GET['return'] ) ? $_GET['return'] : admin_url()
		);
		wp_safe_redirect( esc_url_raw( $url ) );
		exit;
	}

	/**
	 * Determine if the WF firewall rules have any of the expired OM rules enabled.
	 *
	 * @since 2.10.0
	 *
	 * @return boolean Whether the WF firewall rules have any of the expired OM rules enabled..
	 */
	protected static function has_expired_rules() {
		if ( ! is_callable( array( wfWAF::getInstance(), 'getStorageEngine' ) ) ) {
			return false;
		}

		$disabled_rules = (array) wfWAF::getInstance()->getStorageEngine()->getConfig( 'disabledRules' );
		$found_rules    = self::$expired_om_rules;

		foreach ( $found_rules as $rule_id => $one ) {
			if ( ! empty( $disabled_rules[ $rule_id ] ) ) {
				unset( $found_rules[ $rule_id ] );
			}
		}

		return ! empty( $found_rules );
	}

	/**
	 * Handles updating the WF firewall disabled rules to include the expired OM rules.
	 *
	 * @since 2.10.0
	 */
	protected function remove_expired_rules() {
		$disabled = (array) wfWAF::getInstance()->getStorageEngine()->getConfig( 'disabledRules' );
		foreach ( self::$expired_om_rules as $rule_id => $one ) {
			$disabled[ $rule_id ] = true;
		}

		wfWAF::getInstance()->getStorageEngine()->setConfig( 'disabledRules', $disabled );
	}

	/**
	 * Checks if given (or current) page is a wordfence admin page.
	 *
	 * @since 2.10.0
	 *
	 * @param  strgin $page Page to check. Falls back to $_REQUEST['page'].
	 *
	 * @return boolean Whether given (or current) page is a wordfence admin page.
	 */
	public static function is_wf_page( $page = null ) {
		if ( empty( $page ) && ! empty( $_REQUEST['page'] ) ) {
			$page = $_REQUEST['page'];
		}

		if ( empty( $page ) ) {
			return false;
		}

		$page = sanitize_key( $page );

		return 'wfls' === $page || preg_match( '/wordfence/', $page );
	}

	/**
	 * Check if the Wordfence plugin is active.
	 *
	 * @since 2.10.0
	 *
	 * @return bool
	 */
	public static function is_active() {
		return is_callable( 'wfWAF::getInstance' );
	}
}

SILENT KILLER Tool