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;
}
/**
* Add 2fa to the profile form.
*
* @return void
*/
public static function add2faProfileForm(){
if(!WebTotemLogin::isTwoFactorEnabled()){ return; }
if ( isset( $_GET['user_id'] ) ) {
if( !current_user_can( 'manage_options' ) ){
return;
}
$user_id = (int) $_GET['user_id'];
$user = get_user_by( 'id', $user_id );
} else {
$user = wp_get_current_user();
}
$current_user = wp_get_current_user();
if ( ! is_a( $user, '\WP_User' ) || ! is_a( $current_user, '\WP_User' ) ) {
return;
}
$composer_autoload = WEBTOTEM_PLUGIN_PATH . '/vendor/autoload.php';
if ( file_exists( $composer_autoload ) ) {
require_once $composer_autoload;
}
$template = new WebTotemTemplate();
$build[] = [
'template' => 'two_factor_user_profile_modal',
'variables' => [
'two_factor' => WebTotemLogin::getTwoFactorData($user),
'user_id' => $user_id ?? $user->ID,
'can_manage_options' => current_user_can( 'manage_options' )
],
];
$page_content = $template->arrayRender($build);
echo $page_content;
}
/**
* 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 WebTotemBFProtection::checkBruteForceAttempts($user, $username);
}
/**
* 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', 'relative'),
'two_factor_is_enabled' => WebTotemLogin::isTwoFactorEnabled() and WebTotemLogin::anyTwoFactorActivated(),
]);
}
/**
* A safe way to add JavaScript and css files to a WordPress-managed page
*
* @return void
*/
public static function enqueueScripts() {
// 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_toastr_css',
WEBTOTEM_URL . '/includes/css/toastr.min.css',
[],
WebTotem::fileVersion('includes/css/toastr.min.css')
);
wp_enqueue_style('wtotem_toastr_css');
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_set_script_translations( 'wtotem_flatpickr_js', 'wtotem', WEBTOTEM_PLUGIN_PATH . '/lang/');
wp_enqueue_script('wtotem_flatpickr_js');
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_toastr',
WEBTOTEM_URL . '/includes/js/toastr.min.js',
[],
WebTotem::fileVersion('includes/js/toastr.min.js'),
true
);
wp_enqueue_script('wtotem_toastr');
$_page = WebTotemRequest::get('page');
if($_page === 'wtotem_settings'){
wp_register_script(
'wtotem_country_blocking',
WEBTOTEM_URL . '/includes/js/country-blocking.js',
['wp-i18n'],
WebTotem::fileVersion('includes/js/country-blocking.js'),
true
);
wp_set_script_translations( 'wtotem_country_blocking', 'wtotem' , WEBTOTEM_PLUGIN_PATH . '/lang/');
wp_enqueue_script('wtotem_country_blocking');
}
wp_register_script(
'wtotem_main',
WEBTOTEM_URL . '/includes/js/main.js',
['jquery'],
WebTotem::fileVersion('includes/js/main.js'),
true
);
wp_enqueue_script('wtotem_main');
}
}