Skip to content

Commit 2da562a

Browse files
committed
blocks urls that match saved rules
1 parent 2e65d80 commit 2da562a

11 files changed

+279
-9
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/

manifest.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"description": "Collective bargaining for netizens",
55
"manifest_version": 2,
66
"background": {
7-
"scripts": ["src/picket.js"],
7+
"scripts": ["src/picket/picket.js"],
88
"persistent": true
99
},
1010
"permissions": [
1111
"storage", "webRequest", "webRequestBlocking", "<all_urls>"
1212
],
1313
"browser_action": {
14-
"default_popup": "src/popup.html"
14+
"default_popup": "src/popup/popup.html"
1515
}
1616
}

package-lock.json

+193
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "picket",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "mocha src/**/*.spec.js"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/NetizensAssociation/picket.git"
12+
},
13+
"author": "",
14+
"license": "ISC",
15+
"bugs": {
16+
"url": "https://github.com/NetizensAssociation/picket/issues"
17+
},
18+
"homepage": "https://github.com/NetizensAssociation/picket#readme",
19+
"devDependencies": {
20+
"chai": "^4.2.0",
21+
"mocha": "^5.2.0"
22+
}
23+
}

src/picket.js

-7
This file was deleted.

src/picket/applyRules.js

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const blockRequest = () => {
2+
return { cancel: true }
3+
}
4+
5+
const matchesRulePattern = (url) => ({ sites }) => {
6+
return sites.some(pattern => new RegExp(pattern.replace('*', '.*')).test(url))
7+
}
8+
9+
const applyRules = (rules) => (url) => {
10+
return rules
11+
.filter(matchesRulePattern(url))
12+
.reduce((acc, rule) => {
13+
if (rule.actions.find(a => a.action === 'block')) return blockRequest()
14+
return {}
15+
}, {})
16+
}
17+
18+
module.exports = applyRules

src/picket/picket.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const applyRules = require('./applyRules.js')
2+
3+
const fetchRulesFromStorage = () => {
4+
return new Promise((resolve) => {
5+
chrome.storage.sync.get(['rules'], resolve)
6+
})
7+
}
8+
9+
const checkUrl = async ({ url }) => {
10+
const rules = await fetchRulesFromStorage()
11+
return applyRules(rules)(url)
12+
}
13+
14+
chrome.webRequest.onBeforeRequest.addListener(
15+
checkUrl,
16+
{ urls: ['<all_urls>'] },
17+
['blocking']
18+
)
19+
20+

src/picket/picket.spec.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const { expect } = require('chai')
2+
const applyRules = require('./applyRules.js')
3+
4+
describe('applyRules', () => {
5+
it('cancels blocked url', () => {
6+
const blockingResponse = applyRules([{
7+
"sites": ["*://www.notarealwebsite.com/*"],
8+
"actions": [ { "action": "block", "message": "not okay" } ]
9+
}])('http://www.notarealwebsite.com')
10+
11+
expect(blockingResponse).to.deep.equal({ cancel: true })
12+
})
13+
14+
it('does nothing if url not listed', () => {
15+
const blockingResponse = applyRules([{
16+
"sites": ["*://www.notarealwebsite.com/*"],
17+
"actions": [ { "action": "block", "message": "not okay" } ]
18+
}])('http://abc')
19+
20+
expect(blockingResponse).to.deep.equal({})
21+
})
22+
})
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)