From 499bd349c783a3b5339e23b82b398aaf4e25d36e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 21 Nov 2017 05:16:24 +0100 Subject: [PATCH] fix cookie parsing in tile server (and add instance name) --- src/c3nav/tileserver/wsgi.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/c3nav/tileserver/wsgi.py b/src/c3nav/tileserver/wsgi.py index dec71f31..0da65931 100644 --- a/src/c3nav/tileserver/wsgi.py +++ b/src/c3nav/tileserver/wsgi.py @@ -20,10 +20,16 @@ logger = logging.getLogger('c3nav') class TileServer: - path_regex = re.compile(r'^/(\d+)/(\d+)/(-?\d+)/(-?\d+).png$') - cookie_regex = re.compile(r'[^ ]c3nav_tile_access=([^; ])') - def __init__(self): + self.path_regex = re.compile(r'^/(\d+)/(\d+)/(-?\d+)/(-?\d+).png$') + + try: + self.instance_name = os.environ['C3NAV_INSTANCE_NAME'] + except KeyError: + raise Exception('C3NAV_INSTANCE_NAME needs to be set.') + + self.cookie_regex = re.compile(r'(^| )c3nav_'+re.escape(self.instance_name)+r'_tile_access="?([^;" ]+)"?') + try: self.upstream_base = os.environ['C3NAV_UPSTREAM_BASE'].strip('/') except KeyError: @@ -136,9 +142,9 @@ class TileServer: # decode access permissions cookie = env.get('HTTP_COOKIE', None) if cookie: - cookie = self.cookie_regex.match(cookie) + cookie = self.cookie_regex.search(cookie) if cookie: - cookie = cookie.group(1) + cookie = cookie.group(2) access_permissions = parse_tile_access_cookie(cookie, self.tile_secret) if cookie else set() # only access permissions that are affecting this tile