Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/cookiead.../includes
File: enduser.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace CookieAdminPro;
[2] Fix | Delete
[3] Fix | Delete
if(!defined('COOKIEADMIN_PRO_VERSION') || !defined('ABSPATH')){
[4] Fix | Delete
die('Hacking Attempt');
[5] Fix | Delete
}
[6] Fix | Delete
[7] Fix | Delete
class Enduser{
[8] Fix | Delete
[9] Fix | Delete
static $http_cookies;
[10] Fix | Delete
[11] Fix | Delete
static function enqueue_scripts(){
[12] Fix | Delete
[13] Fix | Delete
global $cookieadmin_settings;
[14] Fix | Delete
[15] Fix | Delete
wp_enqueue_script('cookieadmin_pro_js', COOKIEADMIN_PRO_PLUGIN_URL . 'assets/js/consent.js', [], COOKIEADMIN_PRO_VERSION, 'async');
[16] Fix | Delete
[17] Fix | Delete
$vars['ajax_url'] = admin_url('admin-ajax.php');
[18] Fix | Delete
$vars['nonce'] = wp_create_nonce('cookieadmin_pro_js_nonce');
[19] Fix | Delete
$vars['home_url'] = home_url();
[20] Fix | Delete
$vars['reconsent'] = (!empty($cookieadmin_settings['hide_reconsent']) ? 0 : 1);
[21] Fix | Delete
// cookieadmin_r_print($policy);die();
[22] Fix | Delete
[23] Fix | Delete
wp_localize_script('cookieadmin_pro_js', 'cookieadmin_pro_vars', $vars);
[24] Fix | Delete
[25] Fix | Delete
$view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
[26] Fix | Delete
$policy = cookieadmin_load_policy();
[27] Fix | Delete
[28] Fix | Delete
if(!empty($policy) && !empty($view)){
[29] Fix | Delete
[30] Fix | Delete
$cookieadmin_on_color = $policy[$view]['cookieadmin_slider_on_bg_color'];
[31] Fix | Delete
$cookieadmin_off_color = $policy[$view]['cookieadmin_slider_off_bg_color'];
[32] Fix | Delete
$cookieadmin_links_color = $policy[$view]['cookieadmin_links_color'];
[33] Fix | Delete
[34] Fix | Delete
$custom_css = '';
[35] Fix | Delete
[36] Fix | Delete
if(!empty($cookieadmin_links_color)){
[37] Fix | Delete
$custom_css .= '.cookieadmin_remark, .cookieadmin_showmore { color: ' . esc_attr($cookieadmin_links_color) . ' !important; }';
[38] Fix | Delete
}
[39] Fix | Delete
[40] Fix | Delete
if(!empty($cookieadmin_on_color)){
[41] Fix | Delete
$custom_css .= 'input:checked+.cookieadmin_slider, input:disabled+.cookieadmin_slider { background-color: '.esc_attr($cookieadmin_on_color).' !important; }';
[42] Fix | Delete
}
[43] Fix | Delete
[44] Fix | Delete
if(!empty($cookieadmin_off_color)){
[45] Fix | Delete
$custom_css .= '.cookieadmin_slider{ background-color: '.esc_attr($cookieadmin_off_color).' !important; }';
[46] Fix | Delete
}
[47] Fix | Delete
[48] Fix | Delete
if(!empty($custom_css)){
[49] Fix | Delete
wp_add_inline_style( 'cookieadmin-style', $custom_css );
[50] Fix | Delete
}
[51] Fix | Delete
}
[52] Fix | Delete
}
[53] Fix | Delete
[54] Fix | Delete
// TODO
[55] Fix | Delete
static function cookieadmin_check_rate_limit($ip) {
[56] Fix | Delete
global $wpdb;
[57] Fix | Delete
[58] Fix | Delete
//First Fetch stored rate limit for this IP
[59] Fix | Delete
$table_name = esc_sql($wpdb->prefix . 'cookie_consent_logs');
[60] Fix | Delete
[61] Fix | Delete
$rate_limit_count = $wpdb->get_var($wpdb->prepare(
[62] Fix | Delete
"SELECT rate_limit_count FROM $table_name WHERE user_ip = %s",
[63] Fix | Delete
$ip
[64] Fix | Delete
));
[65] Fix | Delete
[66] Fix | Delete
if (!$rate_limit_count) {
[67] Fix | Delete
return true; // No rate limit set, allow request
[68] Fix | Delete
}
[69] Fix | Delete
[70] Fix | Delete
$time_window = 10; // Time window in seconds as of now we are checking for 10 seconds, we can pass this value as function's paramater as well.
[71] Fix | Delete
[72] Fix | Delete
$transient_key = 'rate_limit_' . md5($ip);
[73] Fix | Delete
$requests = get_transient($transient_key);
[74] Fix | Delete
[75] Fix | Delete
if (!$requests) {
[76] Fix | Delete
$requests = [];
[77] Fix | Delete
}
[78] Fix | Delete
[79] Fix | Delete
$current_time = time();
[80] Fix | Delete
[81] Fix | Delete
$requests = array_filter($requests, function($timestamp) use ($current_time, $time_window) {
[82] Fix | Delete
return ($current_time - $timestamp) < $time_window;
[83] Fix | Delete
});
[84] Fix | Delete
[85] Fix | Delete
if (count($requests) >= $rate_limit_count) {
[86] Fix | Delete
return false; //Too many requests
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
$requests[] = $current_time;
[90] Fix | Delete
set_transient($transient_key, $requests, $time_window);
[91] Fix | Delete
[92] Fix | Delete
return true; //Request allowed
[93] Fix | Delete
}
[94] Fix | Delete
[95] Fix | Delete
// TODO
[96] Fix | Delete
static function get_location_details($ip){
[97] Fix | Delete
[98] Fix | Delete
global $cookieadmin;
[99] Fix | Delete
[100] Fix | Delete
$return = array();
[101] Fix | Delete
[102] Fix | Delete
$api_url = cookieadmin_pro_api_url(-1, 'softwp');
[103] Fix | Delete
$url = $api_url.'ipinfo.php?ip='.rawurlencode($ip).'&license='.$cookieadmin['license']['license'].'&url='.rawurlencode(site_url());
[104] Fix | Delete
[105] Fix | Delete
$response = wp_remote_get($url);
[106] Fix | Delete
[107] Fix | Delete
if(is_wp_error($response)){
[108] Fix | Delete
return $return;
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
$body = wp_remote_retrieve_body($response);
[112] Fix | Delete
$data = json_decode($body, true);
[113] Fix | Delete
[114] Fix | Delete
if(empty($data)){
[115] Fix | Delete
return $return;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
return $data;
[119] Fix | Delete
}
[120] Fix | Delete
[121] Fix | Delete
static function consent_exists($consent_id){
[122] Fix | Delete
global $wpdb;
[123] Fix | Delete
[124] Fix | Delete
$table_name = esc_sql($wpdb->prefix . 'cookieadmin_consents');
[125] Fix | Delete
$result = $wpdb->get_var(
[126] Fix | Delete
$wpdb->prepare("SELECT id FROM $table_name WHERE consent_id = %s", $consent_id)
[127] Fix | Delete
);
[128] Fix | Delete
return !empty($result);
[129] Fix | Delete
}
[130] Fix | Delete
[131] Fix | Delete
static function anonymize_ip($ip) {
[132] Fix | Delete
[133] Fix | Delete
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
[134] Fix | Delete
// Replace last octet with 0
[135] Fix | Delete
return preg_replace('/\.\d+$/', '.0', $ip);
[136] Fix | Delete
} elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
[137] Fix | Delete
// Replace last segment with ::
[138] Fix | Delete
return preg_replace('/:[0-9a-fA-F]+$/', '::', $ip);
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
return $ip; // fallback if invalid IP
[142] Fix | Delete
}
[143] Fix | Delete
[144] Fix | Delete
static function generate_consent_id() {
[145] Fix | Delete
[146] Fix | Delete
return sprintf(
[147] Fix | Delete
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
[148] Fix | Delete
wp_rand(0, 0xffff), wp_rand(0, 0xffff),
[149] Fix | Delete
wp_rand(0, 0xffff),
[150] Fix | Delete
wp_rand(0, 0x0fff) | 0x4000, // version 4
[151] Fix | Delete
wp_rand(0, 0x3fff) | 0x8000, // variant
[152] Fix | Delete
wp_rand(0, 0xffff), wp_rand(0, 0xffff), wp_rand(0, 0xffff)
[153] Fix | Delete
);
[154] Fix | Delete
}
[155] Fix | Delete
[156] Fix | Delete
static function save_consent(){
[157] Fix | Delete
global $wpdb;
[158] Fix | Delete
[159] Fix | Delete
if(empty($_POST['cookieadmin_preference'])){
[160] Fix | Delete
exit(1);
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
$default_prefrencs = array('accept', 'reject', 'functional', 'analytics', 'marketing');
[164] Fix | Delete
$prefrnc = json_decode(sanitize_text_field(wp_unslash($_POST['cookieadmin_preference'])));
[165] Fix | Delete
foreach($prefrnc as $k => $preff){
[166] Fix | Delete
if(!in_array($preff, $default_prefrencs)){
[167] Fix | Delete
array_splice($prefrnc, $k, 1);
[168] Fix | Delete
}
[169] Fix | Delete
}
[170] Fix | Delete
$prefrnc = json_encode($prefrnc, true);
[171] Fix | Delete
[172] Fix | Delete
$user_ip = isset( $_SERVER['REMOTE_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : '';
[173] Fix | Delete
$location = \CookieAdminPro\Enduser::get_location_details($user_ip);
[174] Fix | Delete
[175] Fix | Delete
$masked_user_ip = \CookieAdminPro\Enduser::anonymize_ip($user_ip);
[176] Fix | Delete
[177] Fix | Delete
$country = !empty($location['country']) ? sanitize_text_field($location['country']) : '';
[178] Fix | Delete
$browser = isset($_SERVER['HTTP_USER_AGENT']) ? sanitize_text_field(wp_unslash($_SERVER['HTTP_USER_AGENT'])) : '';
[179] Fix | Delete
$domain = wp_parse_url(home_url())['host'];
[180] Fix | Delete
$table_name = esc_sql($wpdb->prefix . 'cookieadmin_consents');
[181] Fix | Delete
[182] Fix | Delete
$consent_id = !empty($_POST['cookieadmin_consent_id']) ? sanitize_text_field(wp_unslash($_POST['cookieadmin_consent_id'])) : '';
[183] Fix | Delete
[184] Fix | Delete
$data = array(
[185] Fix | Delete
'user_ip' => inet_pton($masked_user_ip),
[186] Fix | Delete
'consent_time' => time(),
[187] Fix | Delete
'country' => $country,
[188] Fix | Delete
'browser' => $browser,
[189] Fix | Delete
'domain' => $domain,
[190] Fix | Delete
'consent_status' => $prefrnc
[191] Fix | Delete
);
[192] Fix | Delete
[193] Fix | Delete
//Save consent in DB
[194] Fix | Delete
if(!empty($consent_id) && \CookieAdminPro\Enduser::consent_exists($consent_id)){
[195] Fix | Delete
[196] Fix | Delete
$format = array('%s', '%d', '%s', '%s', '%s', '%s');
[197] Fix | Delete
[198] Fix | Delete
$where = array('consent_id' => $consent_id);
[199] Fix | Delete
$where_format = array('%s');
[200] Fix | Delete
[201] Fix | Delete
$inserted = $wpdb->update($table_name, $data, $where, $format, $where_format);
[202] Fix | Delete
[203] Fix | Delete
}else{
[204] Fix | Delete
[205] Fix | Delete
$consent_id = \CookieAdminPro\Enduser::generate_consent_id();
[206] Fix | Delete
$data['consent_id'] = $consent_id;
[207] Fix | Delete
[208] Fix | Delete
$format = array('%s', '%d', '%s', '%s', '%s', '%s', '%s');
[209] Fix | Delete
[210] Fix | Delete
$inserted = $wpdb->insert($table_name, $data, $format);
[211] Fix | Delete
}
[212] Fix | Delete
[213] Fix | Delete
if (false === $inserted) {
[214] Fix | Delete
wp_send_json_error(array('response' => 'Error saving consent data.'));
[215] Fix | Delete
} else {
[216] Fix | Delete
wp_send_json_success(array('response' => $consent_id));
[217] Fix | Delete
}
[218] Fix | Delete
}
[219] Fix | Delete
[220] Fix | Delete
static function wp_head() {
[221] Fix | Delete
[222] Fix | Delete
$policy = cookieadmin_load_policy();
[223] Fix | Delete
[224] Fix | Delete
$law = get_option('cookieadmin_law', 'cookieadmin_gdpr');
[225] Fix | Delete
[226] Fix | Delete
$cookieadmin_default_allowed = (!empty($policy[$law]['preload']) ? $policy[$law]['preload'] : []);
[227] Fix | Delete
$cookieadmin_default_categories = ['functional', 'analytics', 'marketing', 'accept', 'reject'];
[228] Fix | Delete
[229] Fix | Delete
$cookieadmin_js_preferences = [];
[230] Fix | Delete
foreach ($cookieadmin_default_categories as $category) {
[231] Fix | Delete
$cookieadmin_js_preferences[$category] = (!empty($cookieadmin_default_allowed) && in_array($category, $cookieadmin_default_allowed) ? true : false);
[232] Fix | Delete
}
[233] Fix | Delete
[234] Fix | Delete
$cookieadmin_js_preferences_json = json_encode($cookieadmin_js_preferences);
[235] Fix | Delete
$inline_js = "
[236] Fix | Delete
[237] Fix | Delete
window.dataLayer = window.dataLayer || [];
[238] Fix | Delete
function gtag(){dataLayer.push(arguments);}
[239] Fix | Delete
[240] Fix | Delete
function cookieadmin_update_gcm(update) {
[241] Fix | Delete
[242] Fix | Delete
let cookieadmin_preferences = $cookieadmin_js_preferences_json;
[243] Fix | Delete
[244] Fix | Delete
const cookieAdminMatch = document.cookie.match(/(?:^|; )cookieadmin_consent=([^;]*)/);
[245] Fix | Delete
[246] Fix | Delete
if (cookieAdminMatch) {
[247] Fix | Delete
try {
[248] Fix | Delete
const cookieadmin_parsed = JSON.parse(decodeURIComponent(cookieAdminMatch[1]));
[249] Fix | Delete
cookieadmin_preferences.functional = cookieadmin_parsed.functional === 'true';
[250] Fix | Delete
cookieadmin_preferences.analytics = cookieadmin_parsed.analytics === 'true';
[251] Fix | Delete
cookieadmin_preferences.marketing = cookieadmin_parsed.marketing === 'true';
[252] Fix | Delete
cookieadmin_preferences.accept = cookieadmin_parsed.accept === 'true';
[253] Fix | Delete
cookieadmin_preferences.reject = cookieadmin_parsed.reject === 'true';
[254] Fix | Delete
} catch (err) {
[255] Fix | Delete
[256] Fix | Delete
}
[257] Fix | Delete
}
[258] Fix | Delete
[259] Fix | Delete
if (typeof gtag === 'function') {
[260] Fix | Delete
[261] Fix | Delete
let cookieadmin_gtag_mode = update === 1 ? 'update' : 'default';
[262] Fix | Delete
[263] Fix | Delete
try {
[264] Fix | Delete
[265] Fix | Delete
gtag('consent', cookieadmin_gtag_mode, {
[266] Fix | Delete
'ad_storage': cookieadmin_preferences.marketing || cookieadmin_preferences.accept ? 'granted' : 'denied',
[267] Fix | Delete
'analytics_storage': cookieadmin_preferences.analytics || cookieadmin_preferences.accept ? 'granted' : 'denied',
[268] Fix | Delete
'ad_user_data': cookieadmin_preferences.marketing || cookieadmin_preferences.accept ? 'granted' : 'denied',
[269] Fix | Delete
'ad_personalization': cookieadmin_preferences.marketing || cookieadmin_preferences.accept ? 'granted' : 'denied',
[270] Fix | Delete
'personalization_storage': cookieadmin_preferences.marketing || cookieadmin_preferences.accept ? 'granted' : 'denied',
[271] Fix | Delete
'security_storage': 'granted',
[272] Fix | Delete
'functionality_storage': cookieadmin_preferences.functional || cookieadmin_preferences.accept ? 'granted' : 'denied'
[273] Fix | Delete
});
[274] Fix | Delete
[275] Fix | Delete
} catch (e) {
[276] Fix | Delete
[277] Fix | Delete
}
[278] Fix | Delete
}
[279] Fix | Delete
}
[280] Fix | Delete
[281] Fix | Delete
cookieadmin_update_gcm(0);
[282] Fix | Delete
";
[283] Fix | Delete
[284] Fix | Delete
wp_register_script('cookieadmin-gcm', '', [], null, false);
[285] Fix | Delete
[286] Fix | Delete
wp_add_inline_script('cookieadmin-gcm', $inline_js);
[287] Fix | Delete
[288] Fix | Delete
wp_enqueue_script('cookieadmin-gcm');
[289] Fix | Delete
[290] Fix | Delete
}
[291] Fix | Delete
[292] Fix | Delete
static function powered_by($html){
[293] Fix | Delete
[294] Fix | Delete
global $cookieadmin_settings;
[295] Fix | Delete
[296] Fix | Delete
if(!empty($cookieadmin_settings['hide_powered_by'])){
[297] Fix | Delete
return '';
[298] Fix | Delete
}
[299] Fix | Delete
[300] Fix | Delete
return $html;
[301] Fix | Delete
}
[302] Fix | Delete
[303] Fix | Delete
}
[304] Fix | Delete
[305] Fix | Delete
[306] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function