fix cookie parsing in tile server (and add instance name)
This commit is contained in:
parent
51c2c15686
commit
499bd349c7
1 changed files with 11 additions and 5 deletions
|
@ -20,10 +20,16 @@ logger = logging.getLogger('c3nav')
|
||||||
|
|
||||||
|
|
||||||
class TileServer:
|
class TileServer:
|
||||||
path_regex = re.compile(r'^/(\d+)/(\d+)/(-?\d+)/(-?\d+).png$')
|
|
||||||
cookie_regex = re.compile(r'[^ ]c3nav_tile_access=([^; ])')
|
|
||||||
|
|
||||||
def __init__(self):
|
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:
|
try:
|
||||||
self.upstream_base = os.environ['C3NAV_UPSTREAM_BASE'].strip('/')
|
self.upstream_base = os.environ['C3NAV_UPSTREAM_BASE'].strip('/')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -136,9 +142,9 @@ class TileServer:
|
||||||
# decode access permissions
|
# decode access permissions
|
||||||
cookie = env.get('HTTP_COOKIE', None)
|
cookie = env.get('HTTP_COOKIE', None)
|
||||||
if cookie:
|
if cookie:
|
||||||
cookie = self.cookie_regex.match(cookie)
|
cookie = self.cookie_regex.search(cookie)
|
||||||
if 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()
|
access_permissions = parse_tile_access_cookie(cookie, self.tile_secret) if cookie else set()
|
||||||
|
|
||||||
# only access permissions that are affecting this tile
|
# only access permissions that are affecting this tile
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue