diff --git a/files/squid/helpers/squid-url-rewrite.py b/files/squid/helpers/squid-url-rewrite.py index 88f9788a907e73a0b89817b7ed0450c86ccf1d47..d14f0dfbe4fcb430edb354e16a701df1316ac255 100755 --- a/files/squid/helpers/squid-url-rewrite.py +++ b/files/squid/helpers/squid-url-rewrite.py @@ -4,11 +4,26 @@ import sys import re import datetime import socket +import urllib.parse -errorpage = "http://www.ida.liu.se/~examadm/empty" +emptypage = "https://www.ida.liu.se/edu/ugrad/datortenta/empty" +errorpage = "https://www.ida.liu.se/edu/ugrad/datortenta/blocked.php" +filterlog = "/var/log/squid/filter.log" basedir = "/usr/libexec/squid/helpers" hostname = socket.gethostname() +def block_response(url): + if re.match('.*\.s?html([#?].*)?', url): + url = urllib.parse.quote(url) + return 'OK rewrite-url="{}?url={}"'.format(errorpage, url) + else: + return 'OK rewrite-url="{}"'.format(emptypage, url) + + # return "OK status=302 url=\"" + errorpage + "\"" + # "status" can only be used in the "Using an HTTP redirector" case, + # not in the "Using a re-writer to mangle the URL as it passes" case + # RTFM: https://wiki.squid-cache.org/Features/Redirectors + def modify_url(line, ruleset): ### [channel-ID <SP>] URL <SP> client_ip "/" fqdn <SP> user <SP> method [<SP> kv-pairs]<NL> list = line.split(' ') @@ -29,22 +44,18 @@ def modify_url(line, ruleset): if r != None: return 'OK rewrite-url="http://{}:12000/{}"'.format(hostname, r.group(1)) - for i in ruleset: - - if i[0].match(url) != None: -# if re.match(i[0], url) != None: + for rule in ruleset: + pattern = 0 + allowed = 1 + if rule[pattern].match(url) != None: - if i[1]: + if rule[allowed]: return "OK" else: - return "OK rewrite-url=\"" + errorpage + "\"" + return block_response(url) - return "OK rewrite-url=\"" + errorpage + "\"" + return block_response(url) - # return "OK status=302 url=\"" + errorpage + "\"" - # "status" can only be used in the "Using an HTTP redirector" case, - # not in the "Using a re-writer to mangle the URL as it passes" case - # RTFM: https://wiki.squid-cache.org/Features/Redirectors def load_rules(ruleset, filename): @@ -70,7 +81,7 @@ def main(): load_rules(ruleset, basedir + "/rules.d/sas.rules") # load_rules(ruleset, basedir + "/rules.d/dn.rules") - with open('/tmp/access.log', 'a') as log: + with open(filterlog, 'a') as log: try: while True: