Skip to content

Commit a2ec73f

Browse files
committed
The user rules are now working
Weren't working before.
1 parent b4e098c commit a2ec73f

5 files changed

Lines changed: 100 additions & 31 deletions

File tree

lib/proxy.js

Lines changed: 75 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ let { Unknown } = require('sdk/platform/xpcom');
33
let { Cc, Ci } = require('chrome');
44
let pS = Cc['@mozilla.org/network/protocol-proxy-service;1'].getService(Ci.nsIProtocolProxyService);
55
let sp = require("sdk/simple-prefs");
6-
6+
let ProxyRule = require('./proxy_rule').ProxyRule;
7+
let { Matcher, PrefixMatcher, DomainNameMatcher, TextRegexpMatcher } = require('./matchers');
8+
let { stringStartsWith, addValueToKey } = require('./utils');
79
let { domainOf, allDomainsOf } = require('./domain_utils');
810
let getParsedRules = require('./proxy_rules_subscription').getParsedRules;
911

@@ -13,11 +15,19 @@ const ProxyModeToConst = { auto: PROXY_AUTO, global: PROXY_GLOBAL, off: PROXY_OF
1315

1416
let ProxyMode = ProxyModeToConst[sp.prefs.proxyMode];
1517

16-
let parsedRules = {
18+
let subscriptionRules = {
19+
whiteList: {},
20+
proxyList: {}
21+
};
22+
23+
let userProxyRules = {
1724
whiteList: {},
1825
proxyList: {}
1926
};
2027

28+
let whiteLists = [];
29+
let proxyLists = [];
30+
2131

2232
sp.on('proxyMode', function() {
2333
ProxyMode = ProxyModeToConst[sp.prefs.proxyMode];
@@ -49,20 +59,31 @@ function createProxyFromPrefs() {
4959
}
5060

5161
function matchesAnyIn(matchersHash, uri, domains) {
52-
for (var i = 0; i < domains.length; i++) {
53-
let matchers = matchersHash[domains[i]];
54-
55-
if (matchers) {
56-
for (var j = 0; j < matchers.length; j++) {
57-
let matched = matchers[j].match(uri);
58-
if (matched) {
59-
return true;
62+
if (Array.isArray(matchersHash)) {
63+
for (var i = 0; i < matchersHash.length; i++) {
64+
if (matchesAnyIn(matchersHash[i], uri, domains)) {
65+
return true;
66+
}
67+
};
68+
69+
return false;
70+
} else {
71+
for (var i = 0; i < domains.length; i++) {
72+
let matchers = matchersHash[domains[i]];
73+
74+
if (matchers) {
75+
for (var j = 0; j < matchers.length; j++) {
76+
let matched = matchers[j].match(uri);
77+
if (matched) {
78+
return true;
79+
}
6080
}
6181
}
6282
}
83+
84+
return false;
6385
}
6486

65-
return false;
6687
}
6788

6889
function applyFilter(proxyService, uri, proxyInfo) {
@@ -75,7 +96,7 @@ function applyFilter(proxyService, uri, proxyInfo) {
7596
if (ProxyMode === PROXY_GLOBAL) {
7697
return defaultProxy;
7798
} else if (ProxyMode === PROXY_AUTO) {
78-
if (!parsedRules) {
99+
if (!subscriptionRules && !userProxyRules) {
79100
return proxyInfo;
80101
}
81102

@@ -84,10 +105,10 @@ function applyFilter(proxyService, uri, proxyInfo) {
84105
allDomains.push('__default__');
85106
}
86107

87-
if (matchesAnyIn(parsedRules.whiteList, uri, allDomains)) {
108+
if (matchesAnyIn(whiteLists, uri, allDomains)) {
88109
console.log(uri.spec + ' matched whiteList');
89110
return proxyInfo;
90-
} else if (matchesAnyIn(parsedRules.proxyList, uri, allDomains)) {
111+
} else if (matchesAnyIn(proxyLists, uri, allDomains)) {
91112
console.log(uri.spec + ' matched proxyList');
92113
return defaultProxy;
93114
} else {
@@ -122,22 +143,57 @@ function reloadSubscription(ignoreCache, callback) {
122143
console.error("invalid subscription content format");
123144
}
124145

125-
parsedRules = result;
146+
subscriptionRules = result;
147+
reloadRuleLists();
126148

127149
if (typeof callback === 'function') {
128150
callback();
129151
}
130152

131153
// var File = require('sdk/io/file');
132154
// var f = File.open('C:\\Users\\Xenofex\\Sandbox\\javascript\\autoproxy\\autoproxyplus\\parsed_rules.json', 'w');
133-
// f.write(JSON.stringify(parsedRules));
155+
// f.write(JSON.stringify(subscriptionRules));
134156
// f.close();
135157
});
136158

137159
}
138160

161+
function reloadUserProxyRules() {
162+
let allRules = ProxyRule.findAll();
163+
console.log('in reloadUserProxyRules, allRules: ', allRules);
164+
165+
let whiteList = {}, proxyList = {};
166+
let DEFAULT = '__default__';
167+
168+
allRules.forEach(function(rule) {
169+
var matcher = ProxyRule.toMatcher(rule);
170+
var toList = rule.isWhitelist ? whiteList : proxyList;
171+
if (matcher instanceof TextRegexpMatcher) {
172+
if (matcher.isRegex()) {
173+
addValueToKey(toList, DEFAULT, matcher);
174+
} else {
175+
addValueToKey(toList, domainOf(matcher.expression), matcher);
176+
}
177+
} else {
178+
addValueToKey(toList, domainOf(matcher.expression), matcher);
179+
}
180+
181+
});
182+
console.log('whiteList and proxyList generated');
183+
184+
userProxyRules = { whiteList: whiteList, proxyList: proxyList };
185+
reloadRuleLists();
186+
console.log('reloadUserProxyRules: ', userProxyRules);
187+
}
188+
189+
function reloadRuleLists() {
190+
whiteLists = [userProxyRules.whiteList, subscriptionRules.whiteList];
191+
proxyLists = [userProxyRules.proxyList, subscriptionRules.proxyList];
192+
}
193+
139194
function init() {
140195
reloadSubscription(false);
196+
reloadUserProxyRules();
141197

142198
sp.on('reloadSubscription', function() {
143199
reloadSubscription(true);
@@ -151,5 +207,6 @@ function init() {
151207
exports.init = init;
152208
exports.applyFilter = applyFilter;
153209
exports.defaultProxy = defaultProxy;
154-
exports.parsedRules = parsedRules;
155-
exports.reloadSubscription = reloadSubscription;
210+
exports.subscriptionRules = subscriptionRules;
211+
exports.reloadSubscription = reloadSubscription;
212+
exports.reloadUserProxyRules = reloadUserProxyRules;

lib/proxy_rule.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ ProxyRule.prototype.toMatcher = function() {
6969
}
7070
};
7171

72+
ProxyRule.toMatcher = function(rule) {
73+
return ProxyRule.prototype.toMatcher.call(rule);
74+
}
75+
7276
ProxyRule.find = function(rule) {
7377
if (typeof rule === 'string') {
7478
return new ProxyRule(ss.storage.userProxyRules[rule]);

lib/proxy_rules_subscription.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
let { domainOf, allDomainsOf } = require('./domain_utils');
2-
let { stringStartsWith } = require('./utils');
2+
let { stringStartsWith, addValueToKey } = require('./utils');
33
let { Matcher, PrefixMatcher, DomainNameMatcher, TextRegexpMatcher } = require('./matchers');
44
let XMLHttpRequest = require('sdk/net/xhr').XMLHttpRequest;
55
let base64 = require("sdk/base64");
66
let sp = require("sdk/simple-prefs");
7-
var ss = require("sdk/simple-storage");
7+
let ss = require("sdk/simple-storage");
8+
89
const SubscriptionExpiration = 60 * 60 * 24 * 1000; // 1 day in milliseconds.
910

1011
function eachLine(func, lineEnd) {
@@ -40,16 +41,6 @@ function isEmptyOrComment(line) {
4041
return line.length === 0 || line.charAt(0) == '!';
4142
}
4243

43-
function addValueToKey(obj, key, value) {
44-
let array = obj[key];
45-
if (!array) {
46-
array = [];
47-
obj[key] = array;
48-
}
49-
50-
array.push(value);
51-
}
52-
5344
function parseGfwList(gfwlist) {
5445
let whiteList = {};
5546
let proxyList = {};

lib/ui.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var ProxyRule = require('./proxy_rule').ProxyRule;
88

99

1010
function initDropdown(button, panelPosition) {
11+
var reloadUserProxyRules = require('./proxy').reloadUserProxyRules;
1112

1213
var dropdown = Panel({
1314
contentURL: data.url('dropdown.html'),
@@ -23,13 +24,15 @@ function initDropdown(button, panelPosition) {
2324
dropdown.port.on('addRule', function(newRule) {
2425
console.log('newRule: ', newRule);
2526
new ProxyRule(newRule).save();
27+
reloadUserProxyRules();
2628
});
2729

2830
dropdown.port.on('removeRule', function(rule) {
2931
console.log('removing rule: ', rule);
3032
var ruleInStorage = ProxyRule.find(rule);
3133
if (ruleInStorage) {
3234
ruleInStorage.destroy();
35+
reloadUserProxyRules();
3336
}
3437
});
3538

@@ -54,13 +57,15 @@ function initDropdown(button, panelPosition) {
5457

5558
settings.port.on('updateRule', function(newRule) {
5659
new ProxyRule(newRule).save();
60+
reloadUserProxyRules();
5761
});
5862

5963
settings.port.on('removeRule', function(rule) {
6064
console.log('removing rule: ', rule);
6165
var ruleInStorage = ProxyRule.find(rule);
6266
if (ruleInStorage) {
6367
ruleInStorage.destroy();
68+
reloadUserProxyRules();
6469
}
6570
});
6671

lib/utils.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,17 @@ function openResourceHTML(url, contentScripts) {
4444
tabs.on('load', attachContentScript);
4545
}
4646

47+
function addValueToKey(obj, key, value) {
48+
let array = obj[key];
49+
if (!array) {
50+
array = [];
51+
obj[key] = array;
52+
}
53+
54+
array.push(value);
55+
}
56+
57+
4758
exports.stringStartsWith = stringStartsWith;
48-
exports.openResourceHTML = openResourceHTML;
59+
exports.openResourceHTML = openResourceHTML;
60+
exports.addValueToKey = addValueToKey;

0 commit comments

Comments
 (0)