set tile access cookie

This commit is contained in:
Laura Klünder 2017-10-24 23:26:09 +02:00
parent 1bf61f5f0f
commit e24dace846
3 changed files with 21 additions and 1 deletions

View file

@ -1,11 +1,17 @@
import base64
import hashlib
import hmac
import pickle
import time
from django.conf import settings
from django.core.cache import cache
from django.db import transaction
from shapely.ops import unary_union
from c3nav.mapdata.cache import MapHistory
from c3nav.mapdata.models import Level, MapUpdate
from c3nav.mapdata.models.access import AccessPermission
def get_render_level_ids(cache_key=None):
@ -19,6 +25,16 @@ def get_render_level_ids(cache_key=None):
return levels
def set_tile_access_cookie(request, response):
access_permissions = AccessPermission.get_for_request(request)
if access_permissions or True:
value = ','.join(str(i) for i in access_permissions)+':'+str(int(time.time())+60)
key = hashlib.sha1(settings.SECRET_TILE_KEY.encode()).digest()
signed = base64.b64encode(hmac.new(key, msg=value.encode(), digestmod=hashlib.sha256).digest()).decode()
response.set_cookie(settings.TILE_ACCESS_COOKIE_NAME, value+':'+signed, max_age=60)
class AltitudeAreaGeometries:
def __init__(self, altitudearea=None, colors=None):
if altitudearea is not None:

View file

@ -161,6 +161,7 @@ STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static.dist')
SESSION_COOKIE_NAME = 'c3nav_session'
LANGUAGE_COOKIE_NAME = 'c3nav_language'
CSRF_COOKIE_NAME = 'c3nav_csrftoken'
TILE_ACCESS_COOKIE_NAME = 'c3nav_tile_access'
SESSION_COOKIE_HTTPONLY = True
# Application definition

View file

@ -11,6 +11,7 @@ from django.utils import timezone
from c3nav.mapdata.models import Source
from c3nav.mapdata.models.level import Level
from c3nav.mapdata.render.base import set_tile_access_cookie
ctype_mapping = {
'yes': ('up', 'down'),
@ -64,7 +65,9 @@ def map_index(request):
ctx = {
'bounds': json.dumps(Source.max_bounds())
}
return render(request, 'site/map.html', ctx)
response = render(request, 'site/map.html', ctx)
set_tile_access_cookie(request, response)
return response
def main(request, location=None, origin=None, destination=None):