-
Notifications
You must be signed in to change notification settings - Fork 40
/
registry.js
133 lines (111 loc) · 3.06 KB
/
registry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import browser from './browser-api'
import {
extractDomainFromUrl,
} from './utilities'
class Registry {
/**
* Returns array of banned domains from the registry.
*/
async getDomains () {
const {
domains,
useRegistry,
ignoredHosts,
customProxiedDomains,
} = await browser.storage.local.get({
domains: [],
useRegistry: true,
ignoredHosts: [],
customProxiedDomains: [],
})
if (!useRegistry) {
if (customProxiedDomains.length > 0) {
return customProxiedDomains
}
return []
}
const allDomains = [
...domains,
...customProxiedDomains,
].filter((element) => {
return !ignoredHosts.includes(element)
})
if (allDomains.length > 0) {
return allDomains
}
return []
}
async isEmpty () {
const domains = await this.getDomains()
return domains.length === 0
}
async add (url) {
const domain = extractDomainFromUrl(url)
const { customProxiedDomains } =
await browser.storage.local.get({ customProxiedDomains: [] })
if (!customProxiedDomains.includes(domain)) {
customProxiedDomains.push(domain)
await browser.storage.local.set({ customProxiedDomains })
console.warn(`${domain} added to the custom registry.`)
}
return true
}
async remove (url) {
const domain = extractDomainFromUrl(url)
const { customProxiedDomains } =
await browser.storage.local.get({ customProxiedDomains: [] })
if (customProxiedDomains.includes(domain)) {
const index = customProxiedDomains.indexOf(domain)
customProxiedDomains.splice(index, 1)
await browser.storage.local.set({ customProxiedDomains })
console.warn(`${domain} removed from custom registry`)
}
return true
}
/**
* Checks if the given URL is in the registry of banned websites.
*/
async contains (url) {
const domain = extractDomainFromUrl(url)
const {
domains,
ignoredHosts,
customProxiedDomains,
} = await browser.storage.local.get({
domains: [],
ignoredHosts: [],
customProxiedDomains: [],
})
if (ignoredHosts.includes(domain)) {
return false
}
return !!(domains.includes(domain) ||
customProxiedDomains.includes(domain))
}
/**
* Checks if the given URL is in registry of IDO (Information Dissemination Organizer).
* This method makes sense only for some countries (Russia).
*/
async retrieveDisseminator (url) {
const domain = extractDomainFromUrl(url)
const { disseminators } =
await browser.storage.local.get({ disseminators: [] })
const dataObject = disseminators.find(
({ url: innerUrl }) => domain === innerUrl,
)
if (dataObject) {
return dataObject
}
return {}
}
async enableRegistry () {
await browser.storage.local.set({ useRegistry: true })
}
async disableRegistry () {
await browser.storage.local.set({ useRegistry: false })
}
async clearRegistry () {
await browser.storage.local.set({ domains: [] })
}
}
export default new Registry()