# wt-security/2.4.14/lib/Interface.php

WebTotem Security, version 2.4.14. 339 lines.

- Page: https://pluginprobe.com/plugins/wt-security/2.4.14/code/lib/Interface.php
- Raw: https://pluginprobe.com/plugins/wt-security/2.4.14/raw/lib/Interface.php
- Modified: 2022-09-07T11:53:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/wt-security/2.4.14/code/lib/Interface.php#L10-L20`.

```php
<?php

if (!defined('WEBTOTEM_INIT') || WEBTOTEM_INIT !== true) {
	if (!headers_sent()) {
		header('HTTP/1.1 403 Forbidden');
	}
	die("Protected By WebTotem!");
}

/**
 * Plugin initializer.
 *
 */
class WebTotemInterface extends WebTotem {

	/**
	 * Execute pre-checks before every page.
	 *
	 * @return void
	 */
	public static function startupChecks() {

		if (WebTotemOption::getPluginSettings('hide_wp_version')) {
			WebTotemOption::hideWPVersion();

            add_filter('style_loader_src', 'WebTotemOption::replaceVersion');
            add_filter('script_loader_src', 'WebTotemOption::replaceVersion');

		}
		$_page = WebTotemRequest::get('page');
		if(strpos($_page, 'wtotem') === 0) {
			$composer_autoload = WEBTOTEM_PLUGIN_PATH . '/vendor/autoload.php';
			if ( file_exists( $composer_autoload ) ) {
				require_once $composer_autoload;
			}
		}

		$_page = WebTotemRequest::get('page');
		if(strpos($_page, 'wtotem') === 0){

			if(!WebTotemOption::isActivated()){
				// Checking the old version of options.
				WebTotemOption::checkOldOptions();
			}

			WebTotemOption::multisiteCheck();

			if(!WebTotemOption::isActivated() and $_page !== 'wtotem_activation') {
				// If the plugin is not activated by the API key, then redirect to the activation page.
				wp_safe_redirect( WebTotem::adminURL('admin.php?page=wtotem_activation') );
				exit;
			}
			elseif (WebTotemOption::isActivated() and ($_page === 'wtotem_activation' or $_page === 'wtotem')){
				// If the plugin is activated by the API key, then redirect to the main page.
				if(self::isMultiSite() and is_super_admin()){
					// Main page is all sites page.
					wp_safe_redirect( WebTotem::adminURL('admin.php?page=wtotem_all_sites') );
				} else {
					// Main page is dashboard page.
					wp_safe_redirect( WebTotem::adminURL('admin.php?page=wtotem_dashboard') );
				}
				exit;
			}
			elseif(WebTotemOption::isActivated()) {
				// Checking whether agents are installed, if they are not installed, then install.
				self::checkAgents();
			}
		}

		$sapi = @php_sapi_name();
		if( ! current_user_can( 'publish_posts' ) and $sapi != "cli" ) {
			if ($waf = WebTotemOption::getOption(("waf_installed_file"))) {
				$include_waf_file = ABSPATH . '/_include_' . $waf;

				if (is_file($include_waf_file) && is_readable($include_waf_file)) {
					include_once $include_waf_file;
				}
			}
		}
	}

	/**
	 * Checking whether agents are installed, if they are not installed, then install.
	 */
	private static function checkAgents(){

		$api_key = WebTotemOption::getOption('api_key');

		// Check if the plugin version has changed.
		WebTotemAgentManager::checkVersion();

		$host = WebTotemAPI::siteInfo();

		if ($api_key && array_key_exists('id', $host)) {

			// Install Agent Manager if it was not previously installed.
			$am_installed = WebTotemAgentManager::checkInstalledService('am');
			if (!$am_installed['file_status']) {

				$am_was_installed = WebTotemAgentManager::amInstall();

				if (!$am_was_installed) {
					WebTotemOption::setOptions(['am_installed' => FALSE]);
				}
			}

		}
	}

	/**
	 * When adding a new site, add it to the WebTotem platform.
	 */
	public static function addNewSite($new_site){
        $domain = untrailingslashit($new_site->domain . $new_site->path);

        WebTotemAPI::addMultiSiteNewSites([$domain]);
	}

	/**
	 * Verify the nonce of the previous page after a form submission.
	 *
	 * @return bool True if the nonce is valid, false otherwise.
	 */
	public static function checkNonce() {
		if (!empty($_POST)) {
			$name = 'wtotem_page_nonce';
			$value = WebTotemRequest::post($name);

			if (!$value || !wp_verify_nonce($value, $name)) {
				WebTotemOption::setNotification('error', __('The WordPress CSRF check failed. The submitted form is missing an important unique code. Go back and try again.', 'wtotem'));
				return false;
			}
		}

		return true;
	}


	/**
	 * Authentication.
	 *
	 * @return mixed
	 */
	public static function wt_authenticate($user, $username = null, $password = null) {

		if(WebTotemCaptcha::isEnabled()) {
			if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
				return $user;
			}
			$token = WebTotemCaptcha::get_token();
			$score = WebTotemCaptcha::score($token, WebTotemOption::getPluginSettings('recaptcha_v3_secret'));

            if($score < 0.5) {
               return new WP_Error('authentication_failed', __('<strong>ERROR</strong>&nbsp;: Please check the ReCaptcha box or try to reload page.','wtotem'));
			}
		}

		if(isset($_POST['wtotem-token']) && is_string($_POST['wtotem-token']) && !empty($_POST['wtotem-token'])){
			if ( is_object( $user ) && ( $user instanceof \WP_User ) ) {
				if ( WebTotemLogin::hasUser2faActivated( $user ) ) {
                    $check2faCode = WebTotemLogin::check2faCode( $user, $_POST['wtotem-token']);

					if ( ! $check2faCode )  {
                        return new \WP_Error( 'wtotem_two_factor_failed', wp_kses( __( '<strong>CODE INVALID</strong>: The 2FA code provided is either expired or invalid. Please try again.', 'wtotem' ), array( 'strong' => array() ) ) );
                    }
				}
			}
		}

        return $user;
	}

    /**
     * Authentication.
     *
     * @return mixed
     */
    public static function wt_lost_password($errors = null, $user_data = null) {
        return WebTotemBFProtection::lostPassword($errors);
    }

	/**
	 * Restore and then hide the readme file when updating the WordPress.
	 *
	 * @param string $string
	 * @return string
	 */
	public static function restoreReadmeWhenUpdating($string) {
		static $didRun;
		if (!isset($didRun)) {
			$didRun = true;
			WebTotemOption::restoreReadme();
			register_shutdown_function('WebTotemOption::hideReadme');
		}

		return $string;
	}

	/**
	 * Login Page
	 */
	public static function loginEnqueueScripts() {

		$recaptcha_enabled = WebTotemCaptcha::isEnabled();
		if ($recaptcha_enabled) {
			$recaptcha_site_key = WebTotemOption::getPluginSettings('recaptcha_v3_site_key');
			wp_enqueue_script('wtotem_recaptcha', 'https://www.google.com/recaptcha/api.js?render=' . $recaptcha_site_key);
		}

		wp_register_script(
			'wtotem_login',
			WEBTOTEM_URL . '/includes/js/login.js',
			['jquery'],
			WebTotem::fileVersion('includes/js/login.js'),
			false
		);
		wp_enqueue_script('wtotem_login');

		wp_register_style(
			'wtotem_login',
			WEBTOTEM_URL . '/includes/css/login.css',
			[],
			WebTotem::fileVersion('includes/css/login.css')
		);
		wp_enqueue_style('wtotem_login');

		wp_localize_script('wtotem_login', 'wtotem_login_vars', [
			'recaptcha_site_key' => WebTotemCaptcha::_siteKey(),
			'recaptcha_is_enabled' => $recaptcha_enabled,
			'ajaxurl' => admin_url('admin-ajax.php'),
		]);

	}
	

	/**
	 * A safe way to add JavaScript and css files to a WordPress-managed page
	 *
	 * @return void
	 */
	public static function enqueueScripts() {

		$_page = WebTotemRequest::get('page');
		if(strpos($_page, 'wtotem') === 0){
			// Adding CSS files.
			wp_register_style(
				'wtotem_flatpickr',
				WEBTOTEM_URL . '/includes/css/flatpickr.min.css',
				[],
				WebTotem::fileVersion('includes/css/flatpickr.min.css')
			);
			wp_enqueue_style('wtotem_flatpickr');

			wp_register_style(
				'wtotem_main_css',
				WEBTOTEM_URL . '/includes/css/main.css',
				[],
				WebTotem::fileVersion('includes/css/main.css')
			);
			wp_enqueue_style('wtotem_main_css');

			// Adding JS files.
			wp_register_script(
				'wtotem_amplitude',
				WEBTOTEM_URL . '/includes/js/amplitude.js',
				[ 'jquery' ],
				WebTotem::fileVersion('includes/js/amplitude.js'),
				false
			);
			wp_enqueue_script('wtotem_amplitude');

			wp_register_script(
				'wtotem_d3',
				WEBTOTEM_URL . '/includes/js/d3.v4.js',
				['jquery'],
				WebTotem::fileVersion('includes/js/d3.v4.js'),
				true
			);
			wp_enqueue_script('wtotem_d3');

			wp_register_script(
				'wtotem_chart',
				WEBTOTEM_URL . '/includes/js/chart.js',
				['jquery', 'wtotem_d3', 'wtotem_jsdelivr'],
				WebTotem::fileVersion('includes/js/chart.js'),
				true
			);
			wp_enqueue_script('wtotem_chart');

			wp_register_script(
				'wtotem_flatpickr_js',
				WEBTOTEM_URL . '/includes/js/flatpickr.js',
				[ 'jquery', 'wp-i18n' ],
				WebTotem::fileVersion('includes/js/flatpickr.js'),
				true
			);
			wp_enqueue_script('wtotem_flatpickr_js');
			wp_set_script_translations( 'wtotem_flatpickr_js', 'wtotem' );

			wp_register_script(
				'wtotem_jsdelivr',
				WEBTOTEM_URL . '/includes/js/jsdelivr_chart.js',
				[ 'jquery' ],
				WebTotem::fileVersion('includes/js/jsdelivr_chart.js'),
				true
			);
			wp_enqueue_script('wtotem_jsdelivr');

			wp_register_script(
				'wtotem_jquery_qrcode',
				WEBTOTEM_URL . '/includes/js/jquery.qrcode.min.js',
				[ 'jquery' ],
				WebTotem::fileVersion('includes/js/jquery.qrcode.min.js'),
				true
			);
			wp_enqueue_script('wtotem_jquery_qrcode');

			wp_register_script(
				'wtotem_progress_bar',
				WEBTOTEM_URL . '/includes/js/progress_bar.js',
				[],
				WebTotem::fileVersion('includes/js/progress_bar.js'),
				true
			);
			wp_enqueue_script('wtotem_progress_bar');

			wp_register_script(
				'wtotem_main',
				WEBTOTEM_URL . '/includes/js/main.js',
				['jquery'],
				WebTotem::fileVersion('includes/js/main.js'),
				true
			);
			wp_enqueue_script('wtotem_main');
		}
	}

}

```
