|
| 1 | +package common |
| 2 | + |
| 3 | +import rego.v1 |
| 4 | + |
| 5 | +matches_string_constraints(str, constraints) if matches_regexes(str, constraints.regexes) |
| 6 | + |
| 7 | +matches_string_constraints(str, constraints) if matches_substrings(str, constraints.substrings) |
| 8 | + |
| 9 | +matches_string_constraints(str, constraints) if matches_literals(str, constraints.literals) |
| 10 | + |
| 11 | +matches_regexes(str, regexes) if { |
| 12 | + some pattern in regexes |
| 13 | + regex.match(pattern, str) |
| 14 | +} |
| 15 | + |
| 16 | +matches_substrings(str, substrings) if { |
| 17 | + some pattern in substrings |
| 18 | + contains(str, pattern) |
| 19 | +} |
| 20 | + |
| 21 | +matches_literals(str, literals) if { |
| 22 | + some literal in literals |
| 23 | + str == literal |
| 24 | +} |
| 25 | + |
| 26 | +# Normalize an IP address or CIDR to a CIDR |
| 27 | +normalize_cidr(ip) := ip if contains(ip, "/") |
| 28 | + |
| 29 | +# If it's an IPv4, append /32 |
| 30 | +normalize_cidr(ip) := sprintf("%s/32", [ip]) if { |
| 31 | + not contains(ip, "/") |
| 32 | + not contains(ip, ":") |
| 33 | +} |
| 34 | + |
| 35 | +# If it's an IPv6, append /128 |
| 36 | +normalize_cidr(ip) := sprintf("%s/128", [ip]) if { |
| 37 | + not contains(ip, "/") |
| 38 | + contains(ip, ":") |
| 39 | +} |
| 40 | + |
| 41 | +ip_in_list(ip, list) if { |
| 42 | + some cidr in list |
| 43 | + net.cidr_contains(normalize_cidr(cidr), ip) |
| 44 | +} |
| 45 | + |
| 46 | +mxid(username, server_name) := sprintf("@%s:%s", [username, server_name]) |
| 47 | + |
| 48 | +requester_banned(requester, policy) if ip_in_list(requester.ip_address, policy.banned_ips) |
| 49 | + |
| 50 | +requester_banned(requester, policy) if matches_string_constraints(requester.user_agent, policy.banned_user_agents) |
| 51 | + |
| 52 | +format_requester(requester) := "unknown" if { |
| 53 | + not requester.ip_address |
| 54 | + not requester.user_agent |
| 55 | +} |
| 56 | + |
| 57 | +format_requester(requester) := sprintf("%s / %s", [requester.ip_address, requester.user_agent]) if { |
| 58 | + requester.ip_address |
| 59 | + requester.user_agent |
| 60 | +} |
| 61 | + |
| 62 | +format_requester(requester) := sprintf("%s", [requester.ip_address]) if { |
| 63 | + requester.ip_address |
| 64 | + not requester.user_agent |
| 65 | +} |
| 66 | + |
| 67 | +format_requester(requester) := sprintf("%s", [requester.user_agent]) if { |
| 68 | + not requester.ip_address |
| 69 | + requester.user_agent |
| 70 | +} |
0 commit comments