Projet

Général

Profil

Télécharger (4,13 ko) Statistiques
| Branche: | Tag: | Révision:

root / mandaye / filters / default.py @ bb71f278

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" charset="UTF-8" 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

    
(2-2/3)