Projet

Général

Profil

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

root / mandaye / filters / default.py @ 262fb6b5

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 addtoolbar(env, values, request, response):
53
        if env['beaker.session'].has_key('unique_id'):
54
            response.msg = response.msg.replace(
55
            '</head>',
56
            '<script src="%s/js/toolbar.js" type="text/javascript"></script>\
57
            <link rel="stylesheet" type="text/css" href="%s/css/toolbar.css">\
58
            </head>' % (config.static_url, config.static_url))
59
        return response
60

    
61
    @staticmethod
62
    def toolbar(env, values, request, response):
63
        values['urls'] =  env['urls']
64
        if env['beaker.session'].get('unique_id'):
65
            current_account = None
66
            site_name = env["mandaye.config"]["site_name"]
67
            if env['beaker.session'].get(site_name):
68
                logger.debug('toolbar there is one : %r' % \
69
                        ManagerSPUser.get_by_id(env['beaker.session'].get(site_name)))
70
                current_account = ManagerSPUser.get_by_id(env['beaker.session'].get(site_name))
71
            else:
72
                logger.debug('toolbar : no account')
73
        values['account'] = current_account
74
        return template_response("toolbar.html", values)
(2-2/3)