1
|
|
2
|
import re
|
3
|
from mandaye import config
|
4
|
from mandaye.backends.default import Association
|
5
|
from mandaye.log import logger
|
6
|
from mandaye.response import template_response
|
7
|
|
8
|
class MandayeFilter(object):
|
9
|
""" Default Mandaye filter
|
10
|
This class allows to filter the request (cookies, headers and the message-body)
|
11
|
and the response (cookies, headers and message-body)
|
12
|
"""
|
13
|
|
14
|
@staticmethod
|
15
|
def on_request(env, values, request):
|
16
|
target = env['target']
|
17
|
referer = request.headers.getheader('referer')
|
18
|
if referer:
|
19
|
referer = referer.replace(env["HTTP_HOST"], target.hostname)
|
20
|
request.headers.addheader("Referer", referer)
|
21
|
origin = request.headers.getheader('origin')
|
22
|
if origin:
|
23
|
origin = origin.replace(env["HTTP_HOST"], target.hostname)
|
24
|
request.headers.addheader("Origin", origin)
|
25
|
# Add forwarded header like Apache
|
26
|
request.headers.addheader('X-Forwarded-For', env['REMOTE_ADDR'])
|
27
|
request.headers.addheader('X-Forwarded-Host', env['HTTP_HOST'])
|
28
|
return request
|
29
|
|
30
|
@staticmethod
|
31
|
def on_response(env, values, request, response):
|
32
|
target = env['target']
|
33
|
# Modify cookies
|
34
|
src_hostname = re.sub(":\d*$", "", env["HTTP_HOST"])
|
35
|
for cookie in response.cookies.values():
|
36
|
if cookie.has_key('domain'):
|
37
|
cookie['domain'] = re.sub('^\.*%s$' % (target.hostname),
|
38
|
src_hostname, cookie['domain'])
|
39
|
# Modify headers
|
40
|
blacklist = ['transfer-encoding', 'content-length']
|
41
|
for key, value in response.headers.iteritems():
|
42
|
if key == 'location':
|
43
|
location = value[0].replace(target.geturl(),
|
44
|
"%s://%s" % (env['mandaye.scheme'], env["HTTP_HOST"]))
|
45
|
response.headers['location'] = [location]
|
46
|
for name in blacklist:
|
47
|
if response.headers.has_key(name):
|
48
|
del response.headers[name]
|
49
|
return response
|
50
|
|
51
|
@staticmethod
|
52
|
def fix_response_abs_url(env, values, request, response):
|
53
|
if response.msg:
|
54
|
response.msg = re.sub(r'%s[:\d]*' % env["target"].geturl(),
|
55
|
r"%s://%s" % (env["mandaye.scheme"], env["HTTP_HOST"]),
|
56
|
response.msg, flags=re.IGNORECASE)
|
57
|
if env["mandaye.scheme"] == 'https':
|
58
|
response.msg = response.msg.replace('http://' + env["HTTP_HOST"],
|
59
|
'%s://%s' % (env["mandaye.scheme"], env["HTTP_HOST"]))
|
60
|
return response
|
61
|
|
62
|
@staticmethod
|
63
|
def addtoolbar(env, values, request, response):
|
64
|
if config.mandaye_offline_toolbar or \
|
65
|
env['beaker.session'].has_key('unique_id'):
|
66
|
response.msg = response.msg.replace(
|
67
|
'<head>',
|
68
|
"""<head>
|
69
|
<script src="%s/js/jquery-1.11.1.min.js" type="text/javascript"></script>
|
70
|
<script>
|
71
|
mjQuery = jQuery.noConflict( true );
|
72
|
</script>""" % (config.static_url))
|
73
|
response.msg = response.msg.replace(
|
74
|
'</head>',
|
75
|
"""<script src="%s/js/toolbar.js" type="text/javascript"></script>
|
76
|
<link rel="stylesheet" type="text/css" href="%s/css/toolbar.css">
|
77
|
</head>""" % (config.static_url, config.static_url))
|
78
|
return response
|
79
|
|
80
|
@staticmethod
|
81
|
def toolbar(env, values, request, response):
|
82
|
values['urls'] = env['urls']
|
83
|
values['site_name'] = env["mandaye.config"]["site_name"]
|
84
|
values['is_login'] = False
|
85
|
current_account = None
|
86
|
if env['beaker.session'].get('unique_id'):
|
87
|
values['is_login'] = True
|
88
|
site_name = env["mandaye.config"]["site_name"]
|
89
|
if env['beaker.session'].get(site_name):
|
90
|
logger.debug('toolbar there is one : %r' %\
|
91
|
env['beaker.session'].get(site_name))
|
92
|
current_account = Association.get_by_id(env['beaker.session'].get(site_name))
|
93
|
else:
|
94
|
logger.debug('toolbar: no account')
|
95
|
values['account'] = current_account
|
96
|
return template_response("toolbar.html", values)
|
97
|
|