Heray-Was-Here
Server : Apache
System : Linux dal-shared-66.hostwindsdns.com 4.18.0-513.24.1.lve.1.el8.x86_64 #1 SMP Thu May 9 15:10:09 UTC 2024 x86_64
User : krnuyqrm ( 1183)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /proc/self/root/var/softaculous/sitepad/editor/site-data/plugins/cookieadmin/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/var/softaculous/sitepad/editor/site-data/plugins/cookieadmin/includes/enduser.php
<?php

namespace CookieAdmin;

if(!defined('COOKIEADMIN_VERSION') || !defined('ABSPATH')){
	die('Hacking Attempt');
}

class Enduser{
	
	static $http_cookies = array();
	static $categorized_cookies = array();
	
	static function enqueue_scripts(){
		global $wpdb;

		$view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
		$policy = cookieadmin_load_policy();
		$table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
		//cookieadmin_r_print($view);
		//cookieadmin_r_print($policy);
		
		if(!empty($policy) && !empty($view) && !cookieadmin_is_editor_mode()){
		
			wp_enqueue_style('cookieadmin-style', COOKIEADMIN_PLUGIN_URL . 'assets/css/consent.css', [], COOKIEADMIN_VERSION);
			
			$js_deps = [];
			// Free consent.js is the base script from where the functionality gets triggered
			// So we need to make sure the dependencies of free script gets loaded first
			// Like the pro/consent.js is a dependency of the free one.
			if(defined('COOKIEADMIN_PREMIUM')){
				$js_deps[] = 'cookieadmin_pro_js';
			}
			
			wp_enqueue_script('cookieadmin_js', COOKIEADMIN_PLUGIN_URL . 'assets/js/consent.js', $js_deps, COOKIEADMIN_VERSION);
		
			$policy[$view]['ajax_url'] = admin_url('admin-ajax.php');
			$policy[$view]['nonce'] = wp_create_nonce('cookieadmin_js_nonce');
			$policy[$view]['http_cookies'] = self::$http_cookies;
			$policy[$view]['home_url'] = home_url();
			$policy[$view]['plugin_url'] = COOKIEADMIN_URL;
			$policy[$view]['is_pro'] = (defined('COOKIEADMIN_PREMIUM') ? COOKIEADMIN_PREMIUM : 0);
			$policy[$view]['ssl'] = is_ssl();
			
			$base_path = parse_url(home_url(), PHP_URL_PATH) ?: '/';
			$base_path = ($base_path !== '/') ? rtrim($base_path, '/') . '/' : '/';
			
			// Used for setting cookie
			$policy[$view]['base_path'] = $base_path;
			
			// NOTE: Check the polylang string registration if changing these
			$policy[$view]['lang']['show_less'] = __('Show less', 'cookieadmin');
			$policy[$view]['lang']['duration'] = __('Duration', 'cookieadmin');
			$policy[$view]['lang']['session'] = __('Session', 'cookieadmin');
			$policy[$view]['lang']['days'] = __('Days', 'cookieadmin');
			
			// cookieadmin_r_print($policy);die();
			
			$rows = $wpdb->get_results("SELECT cookie_name, category, expires, description, patterns FROM {$table_name}");
			$cookie_data = array();

			foreach ($rows as $row) {
				$cookie_data[$row->cookie_name] = $row;
			}
			
			$policy[$view]['categorized_cookies'] = self::$categorized_cookies = $cookie_data;
			
			$policy[$view] = apply_filters('cookieadmin_before_localize', $policy[$view]);
			
			wp_localize_script('cookieadmin_js', 'cookieadmin_policy', $policy[$view]);
			
		}
	}

	static function cookieadmin_block_cookie_init_php(){
		
		if(headers_sent() || is_admin() || defined('COOKIEADMIN_SCANNER') || cookieadmin_is_editor_mode()){
			return;
		}

		$view = get_option('cookieadmin_law', 'cookieadmin_gdpr');

		if(empty($view)){
			return;
		}

		$http_cookies = array();
		$set_cookie_headers = array();

		foreach(headers_list() as $header) {
			if(stripos(trim($header), 'Set-Cookie:') === 0){
				$header = trim(substr($header, strlen('Set-Cookie:')));
				$set_cookie_headers[] = $header;
			}
		}

		if(empty($set_cookie_headers)){
			return;
		}

		$policy = cookieadmin_load_policy();

		if(empty($policy) || empty($policy[$view])){
			return;
		}

		$categories = self::get_cookie_categories();
		$consent = self::get_consent();
		$preload = self::get_preload_categories($policy, $view);
		$allowed_headers = array();

		foreach($set_cookie_headers as $set_cookie){
			$name = self::get_cookie_name_from_header($set_cookie);

			if(empty($name)){
				continue;
			}

			if(self::is_response_cookie_allowed($set_cookie, $categories, $consent, $preload)){
				$allowed_headers[] = $set_cookie;
				continue;
			}

			$http_cookies[$name]['string'] = trim($set_cookie);
		}

		header_remove('Set-Cookie');

		foreach($allowed_headers as $set_cookie){
			header('Set-Cookie: ' . $set_cookie, false);
		}

		$http_cookies['cookieadmin_consent'] = ["string" => "cookieadmin_consent=CookieAdmin Cookie Initialization"];
		
		self::$http_cookies = $http_cookies;
	}

	static function get_cookie_categories(){
		global $wpdb;

		$table_name = $wpdb->prefix . 'cookieadmin_cookies';
		if(!self::cookieadmin_table_exists($table_name)){
			return array();
		}

		$categories = array(
			'exact' => array(),
			'prefix' => array(),
		);
		$rows = $wpdb->get_results("SELECT cookie_name, raw_name, category FROM {$table_name}");

		foreach($rows as $row){
			if(!empty($row->cookie_name) && !empty($row->category)){
				$category = strtolower($row->category);
				$categories['exact'][$row->cookie_name] = $category;

				if(!empty($row->raw_name)){
					$categories['exact'][$row->raw_name] = $category;

					if($row->raw_name !== $row->cookie_name && strpos($row->raw_name, $row->cookie_name) === 0){
						$categories['prefix'][$row->cookie_name] = $category;
					}
				}
			}
		}

		uksort($categories['prefix'], function($a, $b){
			return strlen($b) - strlen($a);
		});

		return $categories;
	}

	static function get_consent(){
		if(empty($_COOKIE['cookieadmin_consent'])){
			return array();
		}

		$consent = json_decode(wp_unslash($_COOKIE['cookieadmin_consent']), true);
		if(!is_array($consent)){
			return array();
		}

		$sanitized = array();
		foreach($consent as $key => $value){
			$sanitized[sanitize_key($key)] = sanitize_text_field($value);
		}

		return $sanitized;
	}

	static function get_preload_categories($policy, $view){
		if(empty($policy) || empty($policy[$view]['preload']) || !is_array($policy[$view]['preload'])){
			return array();
		}

		$preload = array();
		foreach($policy[$view]['preload'] as $category){
			$preload[] = strtolower(sanitize_key($category));
		}

		return $preload;
	}

	static function get_cookie_name_from_header($set_cookie){
		$parts = explode('=', $set_cookie, 2);
		$name = trim($parts[0]);

		if(empty($name)){
			return '';
		}

		return $name;
	}

	static function is_response_cookie_allowed($set_cookie, $categories, $consent, $preload = array()){
		$name = self::get_cookie_name_from_header($set_cookie);

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

		// A deletion never adds a cookie and must not be prevented.
		if(preg_match('/(?:^|;)\s*max-age\s*=\s*(-?\d+)/i', $set_cookie, $age) && (int) $age[1] <= 0){
			return true;
		}

		if(preg_match('/(?:^|;)\s*expires\s*=\s*([^;]+)/i', $set_cookie, $expires)){
			$expires_at = strtotime($expires[1]);
			if($expires_at !== false && $expires_at < time()){
				return true;
			}
		}

		if($name === 'cookieadmin_consent'){
			return true;
		}

		$category = self::get_cookie_category($name, $categories);

		if(empty($category)){
			return !empty($consent['accept']) && $consent['accept'] === 'true';
		}

		if($category === 'necessary' || in_array($category, $preload, true)){
			return true;
		}

		if(!empty($consent['reject']) && $consent['reject'] === 'true'){
			return false;
		}

		if(!empty($consent['accept']) && $consent['accept'] === 'true'){
			return true;
		}

		return !empty($consent[$category]) && $consent[$category] === 'true';
	}

	static function get_cookie_category($name, $categories){
		if(!empty($categories['exact'][$name])){
			return $categories['exact'][$name];
		}

		if(empty($categories['prefix'])){
			return '';
		}

		foreach($categories['prefix'] as $prefix => $category){
			if(strpos($name, $prefix) === 0){
				return $category;
			}
		}

		return '';
	}
	
	static function block_scripts(){

		if(wp_doing_ajax() || is_admin() || defined('REST_REQUEST') || defined('COOKIEADMIN_SCANNER') || cookieadmin_is_editor_mode()){
			return;
		}
		
		$settings = get_option('cookieadmin_settings');

		if(empty($settings) || empty($settings['block_scripts'])){
				return;
		}

		$view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
		$policy = cookieadmin_load_policy();
		if(empty($policy) || empty($view)){
			return;
		}

		ob_start([__CLASS__, 'update_tracking_scripts']);
	}

	static function update_tracking_scripts($html){

		if(stripos($html, '<script') === false){
			return $html;
		}

		if(empty(self::$categorized_cookies)){
			return $html;
		}

		$cookieadmin_consent = isset($_COOKIE['cookieadmin_consent'])
							? json_decode(wp_unslash($_COOKIE['cookieadmin_consent']), true)
							: [];

		// Sanitizing cookies
		array_walk( $cookieadmin_consent, function( $value, $key ) use ( &$cookieadmin_consent ) {
			$sanitized_key = sanitize_key( $key );
			$cookieadmin_consent[ $sanitized_key ] = sanitize_text_field($value);
		} );

		$html = preg_replace_callback(
			'/<script\b([^>]*)>([\s\S]*?)<\/script>/i',
			function($match) use ($cookieadmin_consent){
				$attrs = $match[1];
				$content = $match[2];
				$full_tag = $match[0];

				if(preg_match('/\btype\s*=\s*["\']text\/plain["\']/i', $attrs)){
					return $full_tag;
				}

				if(preg_match('/\b(id|src)\s*=\s*["\'][^"\']*cookieadmin[^"\']*["\']/i', $attrs)){
					return $full_tag;
				}

				if(preg_match('/\btype\s*=\s*["\']([^"\']+)["\']/i', $attrs, $type_match)){
					$type = strtolower(trim($type_match[1]));
					if($type !== 'text/javascript' && $type !== 'module'){
						return $full_tag;
					}
				}

				$src = '';
				if(preg_match('/\bsrc\s*=\s*["\']([^"\']*)["\']/i', $attrs, $src_match)){
					$src = $src_match[1];
				}

				$match_against = !empty($src) ? $src : trim($attrs . ' ' . $content);

				if(empty($match_against)){
					return $full_tag;
				}

				foreach (self::$categorized_cookies as $item) {
					$category = !empty($item->category) ? strtolower($item->category) : '';
					$patterns = !empty($item->patterns) ? json_decode($item->patterns, true) : '';

					if(empty($patterns) || empty($category)){
						continue;
					}

					foreach ($patterns as $pattern) {
						if(strpos($match_against, $pattern) !== false){
							if($category !== 'necessary' && 
								(empty($cookieadmin_consent) || 
									(!empty($cookieadmin_consent[$category]) && $cookieadmin_consent[$category] == 'false') || 
									(!empty($cookieadmin_consent['reject']) && $cookieadmin_consent['reject'] == 'true')
								)
							){
								if($attrs === ''){
									return '<script type="text/plain" data-cookieadmin-category="' . esc_attr($category) . '">' . $content . '</script>';
								}
								return '<script type="text/plain" data-cookieadmin-category="' . esc_attr($category) . '"' . $attrs . '>' . $content . '</script>';
							}
						}
					}
				}

				return $full_tag;
			},
			$html
		);

		return $html;
	}
	
	static function cookieadmin_show_banner(){

		$view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
		$policy = cookieadmin_load_policy();

		// Do not show banner if banner is off via Geo rule
		if(empty($view)){
			return;
		}
		
		$raw_template = cookieadmin_load_consent_template($policy[$view], $view);
		
		if(!is_array($raw_template) || empty($raw_template)){
			return false;
		}

		$templates = implode('', $raw_template);
		
		$allowed_tags = cookieadmin_kses_allowed_html();
		
		$templates = apply_filters('cookieadmin_after_banner', $templates);
		
		// var_dump($policy[$view]);
		echo wp_kses($templates, $allowed_tags);
	}
	
	static function cookieadmin_table_exists($table_name) {
		global $wpdb;
		
		$query = $wpdb->prepare("SHOW TABLES LIKE %s", $table_name);
		
		return $wpdb->get_var($query) === $table_name;
	}
}

Hry