New Feature - Report URLs

Lately, I have received relatively few requests with potentially bad URLs. On the one hand, that could be because ClearURLs are working very well by now. But I also think that not everyone wants to sign up to GitLab to report a URL. That's why I've added a new button that reports the current URL in the active tab to me, so I can take a closer look at the URL.

So that you can see exactly what data will be sent to me, I have uploaded the source code for the PHP script, of course, without a password etc.

Please be careful not to send URLs with personal information or tokens.
This commit is contained in:
Kevin Röbert 2018-08-31 20:55:15 +02:00
parent dd3bbac0ba
commit 64ed933361
9 changed files with 143 additions and 5 deletions

View File

@ -154,6 +154,16 @@
"description": "" "description": ""
}, },
"popup_html_report_button": {
"message": "Aktuelle URL melden",
"description": ""
},
"popup_html_report_button_title": {
"message": "Meldet die aktuelle URL aus diesem Tab.",
"description": ""
},
"core_save_on_disk": { "core_save_on_disk": {
"message": "[ClearURLs]: Auf Festplatte gespeichert.", "message": "[ClearURLs]: Auf Festplatte gespeichert.",
"description": "" "description": ""
@ -217,5 +227,20 @@
"setting_types_label": { "setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (Expertenniveau)", "message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (Expertenniveau)",
"description": "" "description": ""
},
"setting_report_server_label": {
"message": "Meldungsserver für URLs",
"description": ""
},
"success_report_url": {
"message": "Die URL wurde erfolgreich gemeldet. Wir werden sie in Kürze prüfen.",
"description": ""
},
"error_report_url": {
"message": "Es schaut so aus, als ob diese URL schon gemeldet wurde.",
"description": ""
} }
} }

View File

@ -154,6 +154,16 @@
"description": "" "description": ""
}, },
"popup_html_report_button": {
"message": "Report current URL",
"description": ""
},
"popup_html_report_button_title": {
"message": "Report the current URL from this tab.",
"description": ""
},
"core_save_on_disk": { "core_save_on_disk": {
"message": "[ClearURLs]: Save on disk.", "message": "[ClearURLs]: Save on disk.",
"description": "" "description": ""
@ -217,5 +227,20 @@
"setting_types_label": { "setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)", "message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
"description": "" "description": ""
},
"setting_report_server_label": {
"message": "Report server for URLs",
"description": ""
},
"success_report_url": {
"message": "The URL was successfully reported. We will check this URL soon.",
"description": ""
},
"error_report_url": {
"message": "It seems like this URL has already been reported.",
"description": ""
} }
} }

View File

@ -11,6 +11,7 @@ var siteBlockedAlert = 'javascript:void(0)';
var dataHash; var dataHash;
var localDataHash; var localDataHash;
var os; var os;
var currentURL;
var storage = []; var storage = [];
@ -580,6 +581,7 @@ function start(items)
{ {
delete badges[tabId]; delete badges[tabId];
} }
currentURL = tabInfo.url;
} }
/** /**
@ -592,6 +594,9 @@ function start(items)
*/ */
function handleActivated(activeInfo) { function handleActivated(activeInfo) {
tabid = activeInfo.tabId; tabid = activeInfo.tabId;
browser.tabs.get(tabid).then(function (tab) {
currentURL = tab.url;
});
} }
/** /**
@ -840,6 +845,7 @@ function initSettings()
storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash"; storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash";
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json"; storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
storage.types = ["main_frame", "sub_frame", "xmlhttprequest"]; storage.types = ["main_frame", "sub_frame", "xmlhttprequest"];
storage.reportServer = "https://clearurls.xn--rb-fka.it";
} }
/** /**
@ -875,3 +881,12 @@ function isEmpty(obj)
{ {
return (Object.getOwnPropertyNames(obj).length === 0); return (Object.getOwnPropertyNames(obj).length === 0);
} }
/**
* Returns the current URL.
* @return {String} [description]
*/
function getCurrentURL()
{
return currentURL;
}

View File

@ -11,6 +11,8 @@ var badgedStatus;
var hashStatus; var hashStatus;
var loggingStatus; var loggingStatus;
var statisticsStatus; var statisticsStatus;
var currentURL;
var reportServer;
var core = function (func) { var core = function (func) {
return browser.runtime.getBackgroundPage().then(func); return browser.runtime.getBackgroundPage().then(func);
@ -26,6 +28,8 @@ function getData()
hashStatus = ref.getData('hashStatus'); hashStatus = ref.getData('hashStatus');
loggingStatus = ref.getData('loggingStatus'); loggingStatus = ref.getData('loggingStatus');
statisticsStatus = ref.getData('statisticsStatus'); statisticsStatus = ref.getData('statisticsStatus');
currentURL = ref.getCurrentURL();
reportServer = ref.getData('reportServer');
}); });
} }
@ -174,6 +178,7 @@ $(document).ready(function(){
changeSwitchButton("statistics", "statisticsStatus"); changeSwitchButton("statistics", "statisticsStatus");
$('#loggingPage').attr('href', browser.extension.getURL('./html/log.html')); $('#loggingPage').attr('href', browser.extension.getURL('./html/log.html'));
$('#settings').attr('href', browser.extension.getURL('./html/settings.html')); $('#settings').attr('href', browser.extension.getURL('./html/settings.html'));
$('#reportButton').on("click", reportURL);
setText(); setText();
} else { } else {
$('#config_section').remove(); $('#config_section').remove();
@ -202,6 +207,7 @@ function setText()
injectText('configs_switch_filter','popup_html_configs_switch_filter'); injectText('configs_switch_filter','popup_html_configs_switch_filter');
injectText('configs_head','popup_html_configs_head'); injectText('configs_head','popup_html_configs_head');
injectText('configs_switch_statistics','configs_switch_statistics'); injectText('configs_switch_statistics','configs_switch_statistics');
injectText('reportButton', 'popup_html_report_button', true);
} }
/** /**
@ -237,3 +243,19 @@ function translate(string)
{ {
return browser.i18n.getMessage(string); return browser.i18n.getMessage(string);
} }
/**
* Send the url to the DB on clearurls.röb.it to checked for tracking fields.
*/
function reportURL()
{
$.ajax({
url: reportServer+'/report_url.php?url='+encodeURI(currentURL),
success: function(result) {
window.alert(translate('success_report_url'));
},
error: function(result) {
window.alert(translate('error_report_url'));
}
});
}

View File

@ -49,6 +49,7 @@ function save()
ref.setData('ruleURL', $('input[name=rule_url]').val()); ref.setData('ruleURL', $('input[name=rule_url]').val());
ref.setData('hashURL', $('input[name=hash_url]').val()); ref.setData('hashURL', $('input[name=hash_url]').val());
ref.setData('types', $('input[name=types]').val()); ref.setData('types', $('input[name=types]').val());
ref.setData('reportServer', $('input[name=report_server]').val());
ref.saveOnExit(); ref.saveOnExit();
ref.reload(); ref.reload();
}); });
@ -76,6 +77,7 @@ function getData()
settings.rule_url = ref.getData('ruleURL'); settings.rule_url = ref.getData('ruleURL');
settings.hash_url = ref.getData('hashURL'); settings.hash_url = ref.getData('hashURL');
settings.types = ref.getData('types'); settings.types = ref.getData('types');
settings.reportServer = ref.getData('reportServer');
}); });
} }
@ -98,4 +100,6 @@ function setText()
$('input[name=types]').val(settings.types); $('input[name=types]').val(settings.types);
$('#save_settings_btn').text(translate('settings_html_save_button')); $('#save_settings_btn').text(translate('settings_html_save_button'));
$('#save_settings_btn').prop('title', translate('settings_html_save_button_title')); $('#save_settings_btn').prop('title', translate('settings_html_save_button_title'));
$('#report_server_label').html(translate('setting_report_server_label'));
$('input[name=report_server]').val(settings.reportServer);
} }

View File

@ -133,12 +133,19 @@
<div class="col-sm-1"> <div class="col-sm-1">
<div class="text-center"> <div class="text-center">
<a type="button" id="loggingPage" target="_blank" <a type="button" id="loggingPage" target="_blank"
class="btn btn-default btn-sm btn-block"> class="btn btn-default btn-sm btn-block"></a>
</a> </div>
</div> </div>
</div> </div>
</div> <br />
<br /> <div class="row" id="report_section">
<div class="col-sm-1">
<div class="text-center">
<a type="button" id="reportButton" target="_blank"
class="btn btn-warning btn-sm btn-block"></a>
</div>
</div>
<br />
</div> </div>

View File

@ -62,6 +62,11 @@
<input type="text" id="types" value="" name="types" class="form-control" /> <input type="text" id="types" value="" name="types" class="form-control" />
</p> </p>
<br /> <br />
<p>
<label id="report_server_label"></label><br />
<input type="text" id="report_server" value="" name="report_server" class="form-control" />
</p>
<br />
<p class="text-center"> <p class="text-center">
<button type="button" id="save_settings_btn" <button type="button" id="save_settings_btn"
class="btn btn-success" title="Save the settings"></button> class="btn btn-success" title="Save the settings"></button>

View File

@ -1,7 +1,7 @@
{ {
"manifest_version": 2, "manifest_version": 2,
"name": "ClearURLs", "name": "ClearURLs",
"version": "1.3.3.11", "version": "1.3.3.12",
"author": "Kevin R.", "author": "Kevin R.",
"description": "Remove tracking elements form URLs.", "description": "Remove tracking elements form URLs.",
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls", "homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",

35
server/report_url.php Normal file
View File

@ -0,0 +1,35 @@
<?php
$servername = "...";
$username = "...";
$password = "...";
$dbname = "...";
if(isset($_GET['url'])) $url = urldecode($_GET['url']);
else http_response_code(404);
if(!empty($url) && filter_var($url, FILTER_VALIDATE_URL))
{
$hash = md5($url);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
http_response_code(505);
}
$sql = "INSERT INTO reports (hash, url) VALUES ('$hash', '$url')";
if ($conn->query($sql) === TRUE) {
http_response_code(200);
} else {
http_response_code(500);
}
$conn->close();
}
else {
http_response_code(505);
}
?>