Ultima attività 1 month ago

nuno ha revisionato questo gist 1 month ago. Vai alla revisione

1 file changed, 54 insertions

gistfile1.txt(file creato)

@@ -0,0 +1,54 @@
1 + def count_resolved(rules_dir, rule_name, key):
2 + """Count entries in resolved rule field"""
3 + try:
4 + resolved = _rule_resolve_internal(rules_dir, rule_name)
5 + print(len(resolved.get(key, [])))
6 + except:
7 + print(0)
8 +
9 + def _rule_resolve_internal(rules_dir, rule_name, visited=None):
10 + """Internal recursive resolver — returns dict, does not print"""
11 + if visited is None:
12 + visited = set()
13 + if rule_name in visited:
14 + raise ValueError(f"Circular dependency detected: {rule_name}")
15 + visited.add(rule_name)
16 +
17 + rule_file = find_rule_file(rules_dir, rule_name)
18 + with open(rule_file) as f:
19 + rule = json.load(f)
20 +
21 + merged = {
22 + 'allow_ips': [],
23 + 'allow_ports': [],
24 + 'block_ips': [],
25 + 'block_ports': [],
26 + 'dns_redirect': False
27 + }
28 +
29 + for base_name in rule.get('extends', []):
30 + base = _rule_resolve_internal(rules_dir, base_name, visited.copy())
31 + merged['allow_ips'] += base.get('allow_ips', [])
32 + merged['allow_ports'] += base.get('allow_ports', [])
33 + merged['block_ips'] += base.get('block_ips', [])
34 + merged['block_ports'] += base.get('block_ports', [])
35 + if base.get('dns_redirect'):
36 + merged['dns_redirect'] = True
37 +
38 + # Merge own fields — use .get() with defaults for all fields
39 + merged['allow_ips'] = list(dict.fromkeys(
40 + merged['allow_ips'] + rule.get('allow_ips', [])))
41 + merged['allow_ports'] = list(dict.fromkeys(
42 + merged['allow_ports'] + rule.get('allow_ports', [])))
43 + merged['block_ips'] = list(dict.fromkeys(
44 + merged['block_ips'] + rule.get('block_ips', [])))
45 + merged['block_ports'] = list(dict.fromkeys(
46 + merged['block_ports'] + rule.get('block_ports', [])))
47 + if rule.get('dns_redirect', False):
48 + merged['dns_redirect'] = True
49 +
50 + merged['name'] = rule.get('name', rule_name)
51 + merged['desc'] = rule.get('desc', '')
52 + merged['group'] = rule.get('group', '')
53 + merged['extends'] = rule.get('extends', [])
54 + return merged
Più nuovi Più vecchi