update tile access cookie setting infrastructure
This commit is contained in:
parent
d4a0a9b7dd
commit
1169597800
6 changed files with 24 additions and 32 deletions
|
@ -37,7 +37,7 @@ router.register(r'locations/by_slug', LocationBySlugViewSet, base_name='location
|
|||
router.register(r'locationgroupcategories', LocationGroupCategoryViewSet)
|
||||
router.register(r'locationgroups', LocationGroupViewSet)
|
||||
|
||||
router.register(r'user', UserViewSet, base_name='user')
|
||||
router.register(r'users', UserViewSet, base_name='users')
|
||||
|
||||
router.register(r'routing', RoutingViewSet, base_name='routing')
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ from c3nav.mapdata.utils.locations import (get_location_by_id_for_request, get_l
|
|||
searchable_locations_for_request, visible_locations_for_request)
|
||||
from c3nav.mapdata.utils.models import get_submodels
|
||||
from c3nav.mapdata.utils.user import get_user_data
|
||||
from c3nav.mapdata.views import set_tile_access_cookie
|
||||
|
||||
|
||||
def optimize_query(qs):
|
||||
|
@ -381,7 +382,13 @@ class AccessRestrictionViewSet(MapdataViewSet):
|
|||
queryset = AccessRestriction.objects.all()
|
||||
|
||||
|
||||
class UserViewSet(MapdataViewSet):
|
||||
class UserViewSet(GenericViewSet):
|
||||
"""
|
||||
Get display information about the current user. This endpoint also sets the tile access cookie.
|
||||
The tile access cookie is only valid for 1 minute, so if you are displaying a map, call this endpoint repeatedly.
|
||||
"""
|
||||
@list_route(methods=['get'])
|
||||
def current(self, request, key=None):
|
||||
return Response(get_user_data(request))
|
||||
response = Response(get_user_data(request))
|
||||
set_tile_access_cookie(request, response)
|
||||
return response
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from c3nav.mapdata.views import get_cache_package, map_history, tile, tile_access
|
||||
from c3nav.mapdata.views import get_cache_package, map_history, tile
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<level>\d+)/(?P<zoom>-?\d+)/(?P<x>-?\d+)/(?P<y>-?\d+).png$', tile, name='mapdata.tile'),
|
||||
|
@ -9,5 +9,4 @@ urlpatterns = [
|
|||
url(r'^history/(?P<level>\d+)/(?P<mode>base|composite)\.(?P<filetype>png|data)$', map_history,
|
||||
name='mapdata.map_history'),
|
||||
url(r'^cache/package\.(?P<filetype>tar|tar\.gz|tar\.xz)$', get_cache_package, name='mapdata.cache_package'),
|
||||
url(r'^tile_access$', tile_access, name='mapdata.tile_access'),
|
||||
]
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import base64
|
||||
import os
|
||||
from functools import wraps
|
||||
from wsgiref.util import FileWrapper
|
||||
|
||||
from django.conf import settings
|
||||
|
@ -20,21 +19,15 @@ from c3nav.mapdata.utils.tiles import (build_access_cache_key, build_base_cache_
|
|||
build_tile_etag, get_tile_bounds, parse_tile_access_cookie)
|
||||
|
||||
|
||||
def set_tile_access_cookie(func):
|
||||
@wraps(func)
|
||||
def wrapper(request, *args, **kwargs):
|
||||
response = func(request, *args, **kwargs)
|
||||
|
||||
access_permissions = AccessPermission.get_for_request(request)
|
||||
if access_permissions:
|
||||
cookie = build_tile_access_cookie(access_permissions, settings.SECRET_TILE_KEY)
|
||||
response.set_cookie(settings.TILE_ACCESS_COOKIE_NAME, cookie, max_age=60,
|
||||
domain=settings.TILE_ACCESS_COOKIE_DOMAIN)
|
||||
else:
|
||||
response.delete_cookie(settings.TILE_ACCESS_COOKIE_NAME)
|
||||
|
||||
return response
|
||||
return wrapper
|
||||
def set_tile_access_cookie(request, response):
|
||||
access_permissions = AccessPermission.get_for_request(request)
|
||||
if access_permissions:
|
||||
cookie = build_tile_access_cookie(access_permissions, settings.SECRET_TILE_KEY)
|
||||
response.set_cookie(settings.TILE_ACCESS_COOKIE_NAME, cookie, max_age=60,
|
||||
domain=settings.TILE_ACCESS_COOKIE_DOMAIN)
|
||||
else:
|
||||
response.delete_cookie(settings.TILE_ACCESS_COOKIE_NAME)
|
||||
response['Cache-Control'] = 'no-cache'
|
||||
|
||||
|
||||
encoded_tile_secret = base64.b64encode(settings.SECRET_TILE_KEY.encode()).decode()
|
||||
|
@ -145,14 +138,6 @@ def tile(request, level, zoom, x, y, access_permissions=None):
|
|||
return response
|
||||
|
||||
|
||||
@no_language()
|
||||
@set_tile_access_cookie
|
||||
def tile_access(request):
|
||||
response = HttpResponse(content_type='text/plain')
|
||||
response['Cache-Control'] = 'no-cache'
|
||||
return response
|
||||
|
||||
|
||||
@etag(lambda *args, **kwargs: MapUpdate.current_processed_cache_key())
|
||||
@no_language()
|
||||
def map_history(request, level, mode, filetype):
|
||||
|
|
|
@ -855,7 +855,7 @@ c3nav = {
|
|||
window.setTimeout(c3nav.refresh_tile_access, 16000);
|
||||
},
|
||||
refresh_tile_access: function () {
|
||||
$.ajax('/map/tile_access');
|
||||
$.ajax('/api/users/current/');
|
||||
c3nav.schedule_refresh_tile_access();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -35,7 +35,6 @@ def check_location(location: Optional[str], request) -> Optional[SpecificLocatio
|
|||
return location
|
||||
|
||||
|
||||
@set_tile_access_cookie
|
||||
def map_index(request, mode=None, slug=None, slug2=None, details=None, level=None, x=None, y=None, zoom=None):
|
||||
origin = None
|
||||
destination = None
|
||||
|
@ -78,7 +77,9 @@ def map_index(request, mode=None, slug=None, slug2=None, details=None, level=Non
|
|||
'tile_cache_server': settings.TILE_CACHE_SERVER,
|
||||
'user_data': get_user_data(request),
|
||||
}
|
||||
return render(request, 'site/map.html', ctx)
|
||||
response = render(request, 'site/map.html', ctx)
|
||||
set_tile_access_cookie(request, response)
|
||||
return response
|
||||
|
||||
|
||||
def qr_code_etag(request, path):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue