Skip to content
This repository was archived by the owner on Feb 19, 2025. It is now read-only.

Commit aac2dce

Browse files
authored
Merge pull request #410 from UMD-ARLIS/urlfilter
Adds url whitelist regex to ext options
2 parents 36b5bb3 + 08a6338 commit aac2dce

File tree

8 files changed

+136
-33
lines changed

8 files changed

+136
-33
lines changed

build/UserALEWebExtension/background.js

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,30 @@ var intervalCounter;
428428
var intervalLog;
429429
var cbHandlers = {};
430430

431+
/**
432+
* Adds named callbacks to be executed when logging.
433+
* @param {Object } newCallbacks An object containing named callback functions.
434+
*/
435+
function addCallbacks() {
436+
for (var _len = arguments.length, newCallbacks = new Array(_len), _key = 0; _key < _len; _key++) {
437+
newCallbacks[_key] = arguments[_key];
438+
}
439+
newCallbacks.forEach(function (source) {
440+
var descriptors = Object.keys(source).reduce(function (descriptors, key) {
441+
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
442+
return descriptors;
443+
}, {});
444+
Object.getOwnPropertySymbols(source).forEach(function (sym) {
445+
var descriptor = Object.getOwnPropertyDescriptor(source, sym);
446+
if (descriptor.enumerable) {
447+
descriptors[sym] = descriptor;
448+
}
449+
});
450+
Object.defineProperties(cbHandlers, descriptors);
451+
});
452+
return cbHandlers;
453+
}
454+
431455
/**
432456
* Assigns the config and log container to be used by the logging functions.
433457
* @param {Array} newLogs Log container.
@@ -1131,32 +1155,59 @@ var defaultConfig = {
11311155
authHeader: null,
11321156
toolName: 'useralePlugin',
11331157
version: version
1158+
},
1159+
pluginConfig: {
1160+
// Default to a regex that will match no string
1161+
urlWhitelist: '(?!x)x'
11341162
}
11351163
};
1136-
browser.storage.local.get(defaultConfig, function (res) {
1137-
options(res.useraleConfig);
1138-
});
1164+
var urlWhitelist;
1165+
function updateConfig(config) {
1166+
console.log(config);
1167+
urlWhitelist = new RegExp(config.pluginConfig.urlWhitelist);
1168+
options(config.useraleConfig);
1169+
// TODO: tabs need a page load to apply this config change.
1170+
dispatchTabMessage(config.useraleConfig);
1171+
}
11391172
function dispatchTabMessage(message) {
11401173
browser.tabs.query({}, function (tabs) {
11411174
tabs.forEach(function (tab) {
11421175
browser.tabs.sendMessage(tab.id, message);
11431176
});
11441177
});
11451178
}
1179+
1180+
// Filter out logs with urls that do not match the regex defined in extension options.
1181+
function filterUrl(log) {
1182+
if (urlWhitelist.test(log.pageUrl)) {
1183+
return log;
1184+
}
1185+
return false;
1186+
}
1187+
browser.storage.local.get(defaultConfig, function (res) {
1188+
// Apply url filter to logs generated by the background page.
1189+
addCallbacks({
1190+
filterUrl: filterUrl
1191+
});
1192+
updateConfig(res);
1193+
});
11461194
browser.runtime.onMessage.addListener(function (message, sender, sendResponse) {
11471195
switch (message.type) {
1148-
// Handles logs rerouted from content and option scripts
1196+
// Handles logs rerouted from content and option scripts.
11491197
case ADD_LOG:
11501198
var log$1 = message.payload;
11511199
if ("tab" in sender && "id" in sender.tab) {
11521200
log$1["tabId"] = sender.tab.id;
11531201
}
1154-
log(log$1);
1202+
// Apply url filter to logs generated outside the background page.
1203+
log$1 = filterUrl(log$1);
1204+
if (log$1) {
1205+
console.log("match");
1206+
log(log$1);
1207+
}
11551208
break;
11561209
case CONFIG_CHANGE:
1157-
console.log(message);
1158-
options(message.payload);
1159-
dispatchTabMessage(message);
1210+
updateConfig(message.payload);
11601211
break;
11611212
default:
11621213
console.log('got unknown message type ', message);

build/UserALEWebExtension/content.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,7 @@ function options(newConfig) {
11001100
// browser is defined in firefox, but chrome uses the 'chrome' global.
11011101
var browser = browser || chrome;
11021102
function rerouteLog(log) {
1103+
console.log("reroute");
11031104
browser.runtime.sendMessage({
11041105
type: ADD_LOG,
11051106
payload: log
@@ -1129,7 +1130,7 @@ function rerouteLog(log) {
11291130
browser.storage.local.get("useraleConfig", function (res) {
11301131
options(res.useraleConfig);
11311132
addCallbacks({
1132-
reroute: rerouteLog
1133+
rerouteLog: rerouteLog
11331134
});
11341135
});
11351136
browser.runtime.onMessage.addListener(function (message) {

build/UserALEWebExtension/options.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,7 @@ function options(newConfig) {
11001100
// browser is defined in firefox, but chrome uses the 'chrome' global.
11011101
var browser = browser || chrome;
11021102
function rerouteLog(log) {
1103+
console.log("reroute");
11031104
browser.runtime.sendMessage({
11041105
type: ADD_LOG,
11051106
payload: log
@@ -1127,7 +1128,7 @@ function rerouteLog(log) {
11271128
*/
11281129

11291130
addCallbacks({
1130-
reroute: rerouteLog
1131+
rerouteLog: rerouteLog
11311132
});
11321133
function setConfig() {
11331134
var config = {
@@ -1142,13 +1143,17 @@ function setConfig() {
11421143
if (config.userId && password) {
11431144
config.authHeader = "Basic " + btoa("".concat(config.userId, ":").concat(password));
11441145
}
1145-
browser.storage.local.set({
1146-
useraleConfig: config
1147-
}, function () {
1146+
var payload = {
1147+
useraleConfig: config,
1148+
pluginConfig: {
1149+
urlWhitelist: document.getElementById("filter").value
1150+
}
1151+
};
1152+
browser.storage.local.set(payload, function () {
11481153
options(config);
11491154
browser.runtime.sendMessage({
11501155
type: CONFIG_CHANGE,
1151-
payload: config
1156+
payload: payload
11521157
});
11531158
});
11541159
}
@@ -1161,6 +1166,9 @@ function getConfig() {
11611166
document.getElementById("tool").value = config.toolName;
11621167
document.getElementById("version").value = config.version;
11631168
});
1169+
browser.storage.local.get("pluginConfig", function (res) {
1170+
document.getElementById("filter").value = res.pluginConfig.urlWhitelist;
1171+
});
11641172
}
11651173
document.addEventListener("DOMContentLoaded", getConfig);
11661174
document.addEventListener("submit", setConfig);

build/UserALEWebExtension/optionsPage.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ <h1>Options</h1>
4545
<input id="version"/>
4646
<br/>
4747

48+
<label>URL whitelist regex:</label>
49+
<input id="filter"/>
50+
<br/>
51+
4852
<div align="right">
4953
<button type="submit">Save</button>
5054
</div>

src/UserALEWebExtension/background.js

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,28 @@ import * as userale from '../main.js';
2424
import { browser } from './globals.js';
2525

2626
// Initalize userale plugin options
27-
const defaultConfig = {useraleConfig: {
28-
url: 'http://localhost:8000',
29-
userId: 'pluginUser',
30-
authHeader: null,
31-
toolName: 'useralePlugin',
32-
version: userale.version,
33-
}};
27+
const defaultConfig = {
28+
useraleConfig: {
29+
url: 'http://localhost:8000',
30+
userId: 'pluginUser',
31+
authHeader: null,
32+
toolName: 'useralePlugin',
33+
version: userale.version,
34+
},
35+
pluginConfig: {
36+
// Default to a regex that will match no string
37+
urlWhitelist: '(?!x)x'
38+
}
39+
};
3440

35-
browser.storage.local.get(defaultConfig, (res) => {
36-
userale.options(res.useraleConfig);
37-
});
41+
var urlWhitelist;
42+
43+
function updateConfig(config) {
44+
urlWhitelist = new RegExp(config.pluginConfig.urlWhitelist);
45+
userale.options(config.useraleConfig);
46+
// TODO: tabs need a page load to apply this config change.
47+
dispatchTabMessage(config.useraleConfig);
48+
}
3849

3950
function dispatchTabMessage(message) {
4051
browser.tabs.query({}, function (tabs) {
@@ -44,21 +55,37 @@ function dispatchTabMessage(message) {
4455
});
4556
}
4657

58+
// Filter out logs with urls that do not match the regex defined in extension options.
59+
function filterUrl(log) {
60+
if(urlWhitelist.test(log.pageUrl)) {
61+
return log
62+
}
63+
return false;
64+
}
65+
66+
browser.storage.local.get(defaultConfig, (res) => {
67+
// Apply url filter to logs generated by the background page.
68+
userale.addCallbacks({filterUrl});
69+
updateConfig(res);
70+
});
71+
4772
browser.runtime.onMessage.addListener(function (message, sender, sendResponse) {
4873
switch (message.type) {
49-
// Handles logs rerouted from content and option scripts
74+
// Handles logs rerouted from content and option scripts.
5075
case MessageTypes.ADD_LOG:
5176
let log = message.payload;
5277
if("tab" in sender && "id" in sender.tab) {
5378
log["tabId"] = sender.tab.id;
5479
}
55-
userale.log(log);
80+
// Apply url filter to logs generated outside the background page.
81+
log = filterUrl(log);
82+
if(log) {
83+
userale.log(log);
84+
}
5685
break;
5786

5887
case MessageTypes.CONFIG_CHANGE:
59-
console.log(message);
60-
userale.options(message.payload);
61-
dispatchTabMessage(message);
88+
updateConfig(message.payload);
6289
break;
6390

6491
default:

src/UserALEWebExtension/content.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { rerouteLog, browser } from './globals.js';
2323

2424
browser.storage.local.get("useraleConfig", (res) => {
2525
userale.options(res.useraleConfig);
26-
userale.addCallbacks({reroute: rerouteLog});
26+
userale.addCallbacks({rerouteLog});
2727
});
2828

2929
browser.runtime.onMessage.addListener(function (message) {

src/UserALEWebExtension/options.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import * as MessageTypes from './messageTypes.js';
2020
import * as userale from '../main.js'
2121
import { rerouteLog, browser } from './globals.js';
2222

23-
userale.addCallbacks({reroute: rerouteLog});
23+
userale.addCallbacks({rerouteLog});
2424

2525
// TODO: Warn users when setting credentials with unsecured connection.
2626
const mitmWarning = "Setting credentials with http will expose you to a MITM attack. Are you sure you want to continue?";
@@ -39,9 +39,14 @@ function setConfig() {
3939
config.authHeader = "Basic " + btoa(`${config.userId}:${password}`);
4040
}
4141

42-
browser.storage.local.set({useraleConfig: config}, () => {
42+
let payload = {
43+
useraleConfig: config,
44+
pluginConfig: {urlWhitelist: document.getElementById("filter").value}
45+
};
46+
47+
browser.storage.local.set(payload, () => {
4348
userale.options(config);
44-
browser.runtime.sendMessage({ type: MessageTypes.CONFIG_CHANGE, payload: config });
49+
browser.runtime.sendMessage({ type: MessageTypes.CONFIG_CHANGE, payload });
4550
});
4651
}
4752

@@ -55,6 +60,9 @@ function getConfig() {
5560
document.getElementById("tool").value = config.toolName;
5661
document.getElementById("version").value = config.version;
5762
});
63+
browser.storage.local.get("pluginConfig", (res) => {
64+
document.getElementById("filter").value = res.pluginConfig.urlWhitelist;
65+
});
5866
}
5967

6068
document.addEventListener("DOMContentLoaded", getConfig);

src/UserALEWebExtension/optionsPage.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ <h1>Options</h1>
4545
<input id="version"/>
4646
<br/>
4747

48+
<label>URL whitelist regex:</label>
49+
<input id="filter"/>
50+
<br/>
51+
4852
<div align="right">
4953
<button type="submit">Save</button>
5054
</div>

0 commit comments

Comments
 (0)