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'locationgroupcategories', LocationGroupCategoryViewSet)
|
||||||
router.register(r'locationgroups', LocationGroupViewSet)
|
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')
|
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)
|
searchable_locations_for_request, visible_locations_for_request)
|
||||||
from c3nav.mapdata.utils.models import get_submodels
|
from c3nav.mapdata.utils.models import get_submodels
|
||||||
from c3nav.mapdata.utils.user import get_user_data
|
from c3nav.mapdata.utils.user import get_user_data
|
||||||
|
from c3nav.mapdata.views import set_tile_access_cookie
|
||||||
|
|
||||||
|
|
||||||
def optimize_query(qs):
|
def optimize_query(qs):
|
||||||
|
@ -381,7 +382,13 @@ class AccessRestrictionViewSet(MapdataViewSet):
|
||||||
queryset = AccessRestriction.objects.all()
|
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'])
|
@list_route(methods=['get'])
|
||||||
def current(self, request, key=None):
|
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 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 = [
|
urlpatterns = [
|
||||||
url(r'^(?P<level>\d+)/(?P<zoom>-?\d+)/(?P<x>-?\d+)/(?P<y>-?\d+).png$', tile, name='mapdata.tile'),
|
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,
|
url(r'^history/(?P<level>\d+)/(?P<mode>base|composite)\.(?P<filetype>png|data)$', map_history,
|
||||||
name='mapdata.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'^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 base64
|
||||||
import os
|
import os
|
||||||
from functools import wraps
|
|
||||||
from wsgiref.util import FileWrapper
|
from wsgiref.util import FileWrapper
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -20,11 +19,7 @@ from c3nav.mapdata.utils.tiles import (build_access_cache_key, build_base_cache_
|
||||||
build_tile_etag, get_tile_bounds, parse_tile_access_cookie)
|
build_tile_etag, get_tile_bounds, parse_tile_access_cookie)
|
||||||
|
|
||||||
|
|
||||||
def set_tile_access_cookie(func):
|
def set_tile_access_cookie(request, response):
|
||||||
@wraps(func)
|
|
||||||
def wrapper(request, *args, **kwargs):
|
|
||||||
response = func(request, *args, **kwargs)
|
|
||||||
|
|
||||||
access_permissions = AccessPermission.get_for_request(request)
|
access_permissions = AccessPermission.get_for_request(request)
|
||||||
if access_permissions:
|
if access_permissions:
|
||||||
cookie = build_tile_access_cookie(access_permissions, settings.SECRET_TILE_KEY)
|
cookie = build_tile_access_cookie(access_permissions, settings.SECRET_TILE_KEY)
|
||||||
|
@ -32,9 +27,7 @@ def set_tile_access_cookie(func):
|
||||||
domain=settings.TILE_ACCESS_COOKIE_DOMAIN)
|
domain=settings.TILE_ACCESS_COOKIE_DOMAIN)
|
||||||
else:
|
else:
|
||||||
response.delete_cookie(settings.TILE_ACCESS_COOKIE_NAME)
|
response.delete_cookie(settings.TILE_ACCESS_COOKIE_NAME)
|
||||||
|
response['Cache-Control'] = 'no-cache'
|
||||||
return response
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
encoded_tile_secret = base64.b64encode(settings.SECRET_TILE_KEY.encode()).decode()
|
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
|
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())
|
@etag(lambda *args, **kwargs: MapUpdate.current_processed_cache_key())
|
||||||
@no_language()
|
@no_language()
|
||||||
def map_history(request, level, mode, filetype):
|
def map_history(request, level, mode, filetype):
|
||||||
|
|
|
@ -855,7 +855,7 @@ c3nav = {
|
||||||
window.setTimeout(c3nav.refresh_tile_access, 16000);
|
window.setTimeout(c3nav.refresh_tile_access, 16000);
|
||||||
},
|
},
|
||||||
refresh_tile_access: function () {
|
refresh_tile_access: function () {
|
||||||
$.ajax('/map/tile_access');
|
$.ajax('/api/users/current/');
|
||||||
c3nav.schedule_refresh_tile_access();
|
c3nav.schedule_refresh_tile_access();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,7 +35,6 @@ def check_location(location: Optional[str], request) -> Optional[SpecificLocatio
|
||||||
return location
|
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):
|
def map_index(request, mode=None, slug=None, slug2=None, details=None, level=None, x=None, y=None, zoom=None):
|
||||||
origin = None
|
origin = None
|
||||||
destination = 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,
|
'tile_cache_server': settings.TILE_CACHE_SERVER,
|
||||||
'user_data': get_user_data(request),
|
'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):
|
def qr_code_etag(request, path):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue