File: baseurlfilter.py

package info (click to toggle)
python-cherrypy 2.2.1-3
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 796 kB
  • ctags: 1,079
  • sloc: python: 7,869; makefile: 15
file content (31 lines) | stat: -rw-r--r-- 1,040 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import cherrypy
from basefilter import BaseFilter


class BaseUrlFilter(BaseFilter):
    """Filter that changes the base URL.
    
    Useful when running a CP server behind Apache.
    """
    
    def before_request_body(self):
        if not cherrypy.config.get('base_url_filter.on', False):
            return
        
        request = cherrypy.request
        
        port = str(cherrypy.config.get('server.socket_port', '80'))
        if port == "80":
            defaultUrl = 'http://localhost'
        else:
            defaultUrl = 'http://localhost:%s' % port
        newBaseUrl = cherrypy.config.get('base_url_filter.base_url', defaultUrl)
        
        if cherrypy.config.get('base_url_filter.use_x_forwarded_host', True):
            newBaseUrl = request.headers.get("X-Forwarded-Host", newBaseUrl)
        
        if newBaseUrl.find("://") == -1:
            # add http:// or https:// if needed
            newBaseUrl = request.base[:request.base.find("://") + 3] + newBaseUrl
        
        request.base = newBaseUrl