Exemple #1
0
function updateRules(dir, cb) {
	// TODO ensure cache directory exists
	if (typeof dir === 'function') {
		cb = dir;
		dir = path.join(cacheDir('HTTPSize'), 'repo');
	}

	cloneOrPull('https://github.com/EFForg/HTTPS-Everywhere.git', dir, cb);
}
Exemple #2
0
function loadRules(dir, cb) {
	if (typeof dir === 'function') {
		cb = dir;
		dir = path.join(cacheDir('HTTPSize'), 'repo/src/chrome/content/rules');
	}

	var rulesets = [];

	dirUtil.readFiles(dir, {
		match: /.xml$/
	}, function(err, content, next) {
		if (err) {
			cb(err, null);
			return;
		}

		// TODO handle parser errors and warnings
		var doc = new DOMParser().parseFromString(content, 'application/xml');
		var rulesetElements = doc.getElementsByTagName('ruleset');
		for (let i = 0; i < rulesetElements.length; i++) {
			var ruleset = new Map();
			var el = rulesetElements[i];

			// Name
			ruleset.name = el.getAttribute('name');

			// Default off
			ruleset.defaultOff = el.getAttribute('default_off') || null;

			// Mixed Content
			ruleset.mixedContent = el.getAttribute('platform') === 'mixedcontent';

			// Targets
			var targets = el.getElementsByTagName('target');
			ruleset.targets = [];
			for (let j = 0; j < targets.length; j++) {
				ruleset.targets.push(targets[j].getAttribute('host'));
			}

			// Exclusions
			var exclusions = el.getElementsByTagName('exclusion');
			ruleset.exclusions = [];
			for (var j = 0; j < exclusions.length; j++) {
				ruleset.exclusions.push(new RegExp(exclusions[j].getAttribute('pattern')));
			}

			// Rules
			var rules = el.getElementsByTagName('rule');
			ruleset.rules = [];
			for (let j = 0; j < rules.length; j++) {
				var rule = {
					from: new RegExp(rules[j].getAttribute('from')),
					to: new RegExp(rules[j].getAttribute('to'))
				};
				ruleset.rules.push(rule);
			}

			// TODO <securecookie>s

			// TODO <test>s

			// TODO downgrades

			rulesets.push(ruleset);
		}

		next();
	}, function(err, files) {
		if (err) {
			cb(err, null);
			return;
		}

		cb(null, rulesets);
	});
}