| | |
| | | """
|
| | | /**********************************************************************
|
| | | FILE : $RCSfile: squidRewriteRules.py,v $
|
| | | PURPOSE : Rule set for icoya redirector
|
| | | NOTES :
|
| | | AUTHOR : Simon Eisenmann
|
| | | COPYRIGHT: (c) 2003,2004 by struktur AG
|
| | | DATE : 28JAN2003
|
| | | REVISION : $Revision: 1.12 $
|
| | | VERSION : $Id: squidRewriteRules.py,v 1.12 2004/08/06 08:16:19 longsleep Exp $ (Author: $Author: longsleep $)
|
| | |
|
| | | struktur AG Phone: +49 711 8966560
|
| | | Junghansstr. 5 Fax: +49 711 89665610
|
| | | 70469 Stuttgart email: info@struktur.de
|
| | | GERMANY
|
| | |
|
| | | http://www.struktur.de
|
| | | http://www.strukturag.com
|
| | |
|
| | | **********************************************************************/
|
| | |
|
| | | Reloadable module allows arbitrary url transformations.
|
| | |
|
| | |
|
| | | Automatic reload of the rules
|
| | | +++++++++++++++++++++++++++++++++++
|
| | |
|
| | | NOTE: use the reload after parameter to auto reload this module
|
| | | after x requests. Use -1 to disable auto reload
|
| | |
|
| | |
|
| | | Logging
|
| | | +++++++++++++++++++++++++++++++++++
|
| | |
|
| | | NOTE: set debug to 1 to enable logging
|
| | | define the logfile in the logfile variable (enter full path)
|
| | |
|
| | |
|
| | | """
|
| | | import re, sys
|
| | |
|
| | | try:
|
| | | import py
|
| | | except ImportError:
|
| | | pass
|
| | |
|
| | | """
|
| | | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| | | begin of configuration
|
| | | """
|
| | |
|
| | | # log mode (set to 1 to enable logging)
|
| | | debug = 0
|
| | |
|
| | | # logfile for debugging (only required when debug == 1)
|
| | | logfile = "/etc/squid/redirector_class.log"
|
| | |
|
| | | # set this to -1 to get best performance (no reload)
|
| | | reload_after = -1
|
| | |
|
| | | # define sitemap matching regex mapping
|
| | |
|
| | | # MODIFY THIS REWRITE RULE AS NEEDED FOR YOUR SITE
|
| | |
|
| | | rewrites = (
|
| | | |
| | | ### HTTP SSL/encrypted webmail rewrite ### You can use this as an example for your ssl virtualhosted website
|
| | |
|
| | | <tmpl_loop name="squid_rewrite_rules">
|
| | | (r'{tmpl_var name="rewrite_url_src"}', r'{tmpl_var name="rewrite_url_dest"}\1', 'P,L'),
|
| | | </tmpl_loop>
|
| | |
|
| | | |
| | |
|
| | |
|
| | |
|
| | | )
|
| | |
|
| | |
|
| | |
|
| | | """
|
| | | end of configuration
|
| | | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| | | """
|
| | |
|
| | | compiled_rewrites = None
|
| | |
|
| | | def log(s):
|
| | | """ Logging facility.
|
| | | """
|
| | | try:
|
| | | f = open(logfile, "a")
|
| | | except IOError:
|
| | | print >> sys.stderr, s
|
| | | return
|
| | | f.write('%s\n' % s)
|
| | | f.flush()
|
| | | f.close()
|
| | |
|
| | | def init():
|
| | | global compiled_rewrites
|
| | |
|
| | | compiled_rewrites = []
|
| | | for rewrite in rewrites:
|
| | | regexp = re.compile(rewrite[0])
|
| | | template = rewrite[1]
|
| | | flags = {}
|
| | | for flag in rewrite[2].split(','):
|
| | | parts = flag.split('=')
|
| | | flag = parts[0]
|
| | | option = None
|
| | | if flag == 'R':
|
| | | if len(parts) > 1:
|
| | | option = "%s:" % parts[1]
|
| | | else:
|
| | | option = '302:'
|
| | | flags[flag] = option
|
| | | compiled = (regexp, template, flags)
|
| | | if debug:
|
| | | log('compiled: %s' % str((regexp.pattern, template, flags)))
|
| | | compiled_rewrites.append(compiled)
|
| | | compiled_rewrites = tuple(compiled_rewrites)
|
| | |
|
| | | def rewrite(url, src_address=''):
|
| | | """ just rewrites urls.
|
| | | """
|
| | |
|
| | | if debug:
|
| | | log("args: %s" % str((url, src_address)))
|
| | |
|
| | | newurl = None
|
| | | for regexp, template, flags in compiled_rewrites:
|
| | | m = regexp.match(url)
|
| | | if m is not None and template != '-':
|
| | | if debug:
|
| | | log("match.groups ('%s'): %s" % (regexp.pattern, str(m.groups())))
|
| | | url = newurl = "%s%s" % (flags.get('R', ''), m.expand(template))
|
| | | if debug:
|
| | | log('newurl: %s' % newurl)
|
| | | if 'L' in flags:
|
| | | break
|
| | |
|
| | | if newurl is not None:
|
| | | if debug:
|
| | | log('finalurl: %s' % newurl)
|
| | | return newurl
|
| | |
|
| | | # redirect to something we can match by a squid acl
|
| | | # this special non existing domain should be denied
|
| | | # by squid with a http_reply_access line
|
| | | return "http://denypool/denyme"
|
| | |
|
| | | def test_foobar_redirection():
|
| | | assert rewrite('http://foobar.com/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://foobar.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://www.foobar.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://foobar-portal.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-portal.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://foobar-portal-europe.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-portal-europe.de/foo/bar') == '302:http://www.foobar.com/foo/bar'
|
| | | # shouldn't redirect, just rewrite
|
| | | assert not rewrite('http://www.foobar.com/foo/bar').startswith('302:')
|
| | |
|
| | | def test_foobarbacon_redirection():
|
| | | assert rewrite('http://foobar-bacon.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://foobar-bacon.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://foobar-bacon-europe.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon-europe.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://foobar-bacon-europe.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon-europe.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://foobar-bacon.net/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon.net/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar'
|
| | | # shouldn't redirect, just rewrite
|
| | | assert not rewrite('http://www.foobar-bacon.com/foo/bar').startswith('302:')
|
| | |
|
| | | def test_virtual_hosting():
|
| | | assert rewrite('http://www.foobar.com/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com/foobarportal/VirtualHostRoot/foo/bar'
|
| | | assert rewrite('http://www.foobar.com:8088/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com:8088/foobarportal/VirtualHostRoot/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon.com/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar-bacon.com/foobarbacon/VirtualHostRoot/foo/bar'
|
| | | assert rewrite('http://www.foobar-bacon.com:8088/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar-bacon.com:8088/foobarbacon/VirtualHostRoot/foo/bar'
|
| | |
|
| | | def test_zmi():
|
| | | assert rewrite('http://www.foobar.com/--zmi--/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com/VirtualHostRoot/_vh_--zmi--/foo/bar'
|
| | | assert rewrite('http://www.foobar.com:8088/--zmi--/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com:8088/VirtualHostRoot/_vh_--zmi--/foo/bar'
|
| | |
|
| | | def test_repos():
|
| | | assert rewrite('http://www.foobar.com/--repos--/foo/bar') == 'http://localhost/--repos--/foo/bar'
|
| | | assert rewrite('http://www.foobar.com:8088/--repos--/foo/bar') == 'http://localhost/--repos--/foo/bar'
|
| | |
|
| | | if debug:
|
| | | log("reloading user redirector module")
|
| | | init()
|
| | | if debug:
|
| | | log("reloaded user redirector module")
|
| | |
|
| | | """ |
| | | /********************************************************************** |
| | | FILE : $RCSfile: squidRewriteRules.py,v $ |
| | | PURPOSE : Rule set for icoya redirector |
| | | NOTES : |
| | | AUTHOR : Simon Eisenmann |
| | | COPYRIGHT: (c) 2003,2004 by struktur AG |
| | | DATE : 28JAN2003 |
| | | REVISION : $Revision: 1.12 $ |
| | | VERSION : $Id: squidRewriteRules.py,v 1.12 2004/08/06 08:16:19 longsleep Exp $ (Author: $Author: longsleep $) |
| | | |
| | | struktur AG Phone: +49 711 8966560 |
| | | Junghansstr. 5 Fax: +49 711 89665610 |
| | | 70469 Stuttgart email: info@struktur.de |
| | | GERMANY |
| | | |
| | | http://www.struktur.de |
| | | http://www.strukturag.com |
| | | |
| | | **********************************************************************/ |
| | | |
| | | Reloadable module allows arbitrary url transformations. |
| | | |
| | | |
| | | Automatic reload of the rules |
| | | +++++++++++++++++++++++++++++++++++ |
| | | |
| | | NOTE: use the reload after parameter to auto reload this module |
| | | after x requests. Use -1 to disable auto reload |
| | | |
| | | |
| | | Logging |
| | | +++++++++++++++++++++++++++++++++++ |
| | | |
| | | NOTE: set debug to 1 to enable logging |
| | | define the logfile in the logfile variable (enter full path) |
| | | |
| | | |
| | | """ |
| | | import re, sys |
| | | |
| | | try: |
| | | import py |
| | | except ImportError: |
| | | pass |
| | | |
| | | """ |
| | | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | | begin of configuration |
| | | """ |
| | | |
| | | # log mode (set to 1 to enable logging) |
| | | debug = 0 |
| | | |
| | | # logfile for debugging (only required when debug == 1) |
| | | logfile = "/etc/squid/redirector_class.log" |
| | | |
| | | # set this to -1 to get best performance (no reload) |
| | | reload_after = -1 |
| | | |
| | | # define sitemap matching regex mapping |
| | | |
| | | # MODIFY THIS REWRITE RULE AS NEEDED FOR YOUR SITE |
| | | |
| | | rewrites = ( |
| | | |
| | | ### HTTP SSL/encrypted webmail rewrite ### You can use this as an example for your ssl virtualhosted website |
| | | |
| | | <tmpl_loop name="squid_rewrite_rules"> |
| | | (r'{tmpl_var name="rewrite_url_src"}', r'{tmpl_var name="rewrite_url_dest"}\1', 'P,L'), |
| | | </tmpl_loop> |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | ) |
| | | |
| | | |
| | | |
| | | """ |
| | | end of configuration |
| | | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | | """ |
| | | |
| | | compiled_rewrites = None |
| | | |
| | | def log(s): |
| | | """ Logging facility. |
| | | """ |
| | | try: |
| | | f = open(logfile, "a") |
| | | except IOError: |
| | | print >> sys.stderr, s |
| | | return |
| | | f.write('%s\n' % s) |
| | | f.flush() |
| | | f.close() |
| | | |
| | | def init(): |
| | | global compiled_rewrites |
| | | |
| | | compiled_rewrites = [] |
| | | for rewrite in rewrites: |
| | | regexp = re.compile(rewrite[0]) |
| | | template = rewrite[1] |
| | | flags = {} |
| | | for flag in rewrite[2].split(','): |
| | | parts = flag.split('=') |
| | | flag = parts[0] |
| | | option = None |
| | | if flag == 'R': |
| | | if len(parts) > 1: |
| | | option = "%s:" % parts[1] |
| | | else: |
| | | option = '302:' |
| | | flags[flag] = option |
| | | compiled = (regexp, template, flags) |
| | | if debug: |
| | | log('compiled: %s' % str((regexp.pattern, template, flags))) |
| | | compiled_rewrites.append(compiled) |
| | | compiled_rewrites = tuple(compiled_rewrites) |
| | | |
| | | def rewrite(url, src_address=''): |
| | | """ just rewrites urls. |
| | | """ |
| | | |
| | | if debug: |
| | | log("args: %s" % str((url, src_address))) |
| | | |
| | | newurl = None |
| | | for regexp, template, flags in compiled_rewrites: |
| | | m = regexp.match(url) |
| | | if m is not None and template != '-': |
| | | if debug: |
| | | log("match.groups ('%s'): %s" % (regexp.pattern, str(m.groups()))) |
| | | url = newurl = "%s%s" % (flags.get('R', ''), m.expand(template)) |
| | | if debug: |
| | | log('newurl: %s' % newurl) |
| | | if 'L' in flags: |
| | | break |
| | | |
| | | if newurl is not None: |
| | | if debug: |
| | | log('finalurl: %s' % newurl) |
| | | return newurl |
| | | |
| | | # redirect to something we can match by a squid acl |
| | | # this special non existing domain should be denied |
| | | # by squid with a http_reply_access line |
| | | return "http://denypool/denyme" |
| | | |
| | | def test_foobar_redirection(): |
| | | assert rewrite('http://foobar.com/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://foobar.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://www.foobar.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://foobar-portal.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://www.foobar-portal.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://foobar-portal-europe.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | assert rewrite('http://www.foobar-portal-europe.de/foo/bar') == '302:http://www.foobar.com/foo/bar' |
| | | # shouldn't redirect, just rewrite |
| | | assert not rewrite('http://www.foobar.com/foo/bar').startswith('302:') |
| | | |
| | | def test_foobarbacon_redirection(): |
| | | assert rewrite('http://foobar-bacon.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://foobar-bacon.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://foobar-bacon-europe.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon-europe.de/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://foobar-bacon-europe.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon-europe.com/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://foobar-bacon.net/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon.net/foo/bar') == '302:http://www.foobar-bacon.com/foo/bar' |
| | | # shouldn't redirect, just rewrite |
| | | assert not rewrite('http://www.foobar-bacon.com/foo/bar').startswith('302:') |
| | | |
| | | def test_virtual_hosting(): |
| | | assert rewrite('http://www.foobar.com/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com/foobarportal/VirtualHostRoot/foo/bar' |
| | | assert rewrite('http://www.foobar.com:8088/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com:8088/foobarportal/VirtualHostRoot/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon.com/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar-bacon.com/foobarbacon/VirtualHostRoot/foo/bar' |
| | | assert rewrite('http://www.foobar-bacon.com:8088/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar-bacon.com:8088/foobarbacon/VirtualHostRoot/foo/bar' |
| | | |
| | | def test_zmi(): |
| | | assert rewrite('http://www.foobar.com/--zmi--/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com/VirtualHostRoot/_vh_--zmi--/foo/bar' |
| | | assert rewrite('http://www.foobar.com:8088/--zmi--/foo/bar') == 'http://backendpool/VirtualHostBase/http/www.foobar.com:8088/VirtualHostRoot/_vh_--zmi--/foo/bar' |
| | | |
| | | def test_repos(): |
| | | assert rewrite('http://www.foobar.com/--repos--/foo/bar') == 'http://localhost/--repos--/foo/bar' |
| | | assert rewrite('http://www.foobar.com:8088/--repos--/foo/bar') == 'http://localhost/--repos--/foo/bar' |
| | | |
| | | if debug: |
| | | log("reloading user redirector module") |
| | | init() |
| | | if debug: |
| | | log("reloaded user redirector module") |
| | | |