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', __('ERROR : 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( __( 'CODE INVALID: 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'); } } }