add_hook("pre_output_page", "imeiAntiUrlCache");
function imeiAntiUrlCache_info()
{
return array(
"name" => "*<imei> Anti URL Cache System!",
"description" => "This plugin add your pages' links, a random garbage parameter, that this
save your users privacy against proxy cache systems that save all urls!",
"website" => "http://www.myimei.com",
"author" => "imei",
"authorsite" => "http://www.myimei.com",
"version" => "1.0.1",
);
}
function imeiAntiUrlCache_activate()
{
global $db;
$db->query("INSERT INTO ".TABLE_PREFIX."settinggroups (name,description,isdefault) VALUES ('*<imei> Anti URL cache plugin', 'Settings for imei anti url cache plugin', 'no')");
$group = $db->insert_id();
$db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_parameter_name', 'Parameter name', 'You are changing this section of url http://yourboard/yourscript?paramname=123456789abcdef', 'text', 's', $group)");
$db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_parameter_len', 'Length of parameter', 'You are changing this section of url http://yourboard/yourscript?paramname=123456789abcdef', 'text', '8', $group)");
$db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_report', 'Report', 'Generate a small report as comment at end of each page.', 'yesno', 'yes', $group)");
rebuildsettings();
}
function imeiAntiUrlCache_deactivate()
{
global $db;
$result = $db->query("SELECT gid FROM ".TABLE_PREFIX."settinggroups WHERE name = '*<imei> Anti URL cache plugin' LIMIT 1",1);
$group = $db->fetch_array($result);
$db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE gid = $group[gid] LIMIT 1",1);
$db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE gid = $group[gid]",1);
rebuildsettings();
}
function imeiAntiUrlCache($page)
{
global $settings;
// all $_ variables are for reporting and not needed for general use!
$_reporttimer=new timer(); //this line uses internal timer class of mybb and may not work properly if you dont use it!
$_reportsizebefore=strlen($page); // what was size of page befor plugin runs?
/*****************MAIN ENGINE**********************/
$s= substr(md5(time()),0,$settings['imeiauc_parameter_len']);
$imeiRandomParameter=$settings['imeiauc_parameter_name']."=$s&";
$pattern=array(
'/\<([^>]*)(href|url)="([^"]*)"([^>]*)target="_blank"([^>]*)\>/i' //for match external urls that must not change
,'/\<([^>]*)(href|url)="(http:\/\/)?([\w\.\-\/~]+)(?(?=\\?)\??(([^"]*)")|("))([^>_]*)\>/i' //match internall links that must add random parameter
);
$replacement=array(
'<\\1 \\2="\\3"\\4target="_blank"\\5>'
,' <\\1 \\2="\\3\\4?'.$imeiRandomParameter.'\\6"\\8>'
);
$page=preg_replace($pattern,$replacement,$page);
/*****************MAIN ENGINE**********************/
$_reporttimer->stop();
$_reportsizeafter=strlen($page);
$_reporttext="";
if($settings['imeiauc_report']=="yes"){
$_reporttext="
";
}
return $page.$_reporttext;
}
if(!function_exists("rebuildsettings")){
function rebuildsettings() {
global $db;
$query = $db->query("SELECT * FROM ".TABLE_PREFIX."settings ORDER BY title ASC");
while($setting = $db->fetch_array($query)) {
$setting['value'] = addslashes($setting['value']);
$settings .= "\$settings['".$setting['name']."'] = \"".$setting['value']."\";\n";
}
$settings = "";
$file = fopen("./inc/settings.php", "w");
fwrite($file, $settings);
fclose($file);
}
}