Projet

Général

Profil

Télécharger (3,63 ko) Statistiques
| Branche: | Tag: | Révision:

root / mandaye / filters / default.py @ 5d46c2d1

1

    
2
import re
3
from mandaye import config
4
from mandaye.backends.default import ManagerSPUser
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 env['beaker.session'].has_key('unique_id'):
65
            response.msg = response.msg.replace(
66
            '</head>',
67
            '<script src="%s/js/toolbar.js" type="text/javascript"></script>\
68
            <link rel="stylesheet" type="text/css" href="%s/css/toolbar.css">\
69
            </head>' % (config.static_url, config.static_url))
70
        return response
71

    
72
    @staticmethod
73
    def toolbar(env, values, request, response):
74
        values['urls'] =  env['urls']
75
        if env['beaker.session'].get('unique_id'):
76
            current_account = None
77
            site_name = env["mandaye.config"]["site_name"]
78
            if env['beaker.session'].get(site_name):
79
                logger.debug('toolbar there is one : %r' % \
80
                        ManagerSPUser.get_by_id(env['beaker.session'].get(site_name)))
81
                current_account = ManagerSPUser.get_by_id(env['beaker.session'].get(site_name))
82
            else:
83
                logger.debug('toolbar : no account')
84
        values['account'] = current_account
85
        return template_response("toolbar.html", values)
(2-2/3)