nsupdate.info/nsupdate/context_processors.py
Thomas Waldmann 2529263a48 remove stale IPs from session, so we don't show outdated information
could happen if there once was a IPv6 connection, but now is not any more.
it now kills infos older than 3 minutes from the session.

it also shows the age of the infos now on the hosts overview view (but not on home view due to cosmetic reasons).

optimization: only request the fake images for ipv4/v6 detection if we don't have a fresh IP already.

added example settings for using detectip on (ip6-)localhost
2013-11-01 04:03:34 +01:00

47 lines
1.4 KiB
Python

# -*- coding: utf-8 -*-
from datetime import timedelta
from django.conf import settings
from django.utils.timezone import now
MAX_IP_AGE = 180 # seconds
def add_settings(request):
context = {}
context['WWW_HOST'] = settings.WWW_HOST
context['WWW_IPV4_HOST'] = settings.WWW_IPV4_HOST
context['WWW_IPV6_HOST'] = settings.WWW_IPV6_HOST
return context
def remove_stale_ips(request):
"""
Check the session if there are stale IPs and if so, remove them.
"""
# XXX is a context processor is the right place for this?
s = request.session
t_now = now()
for key in ['ipv4', 'ipv6', ]:
timestamp_key = "%s_timestamp" % key
try:
timestamp = s[timestamp_key]
except KeyError:
pass
else:
try:
stale = timestamp + timedelta(seconds=MAX_IP_AGE) < t_now
except (ValueError, TypeError):
# invalid timestamp in session
del s[timestamp_key]
else:
if stale:
print "ts: %s now: %s - killing %s (was: %s)" % (timestamp, t_now, key, s[key])
# kill the IP, it is not up-to-date any more
# note: it is used to fill form fields, so set it to empty string
s[key] = ''
# update the timestamp, so we can retry after a while
s[timestamp_key] = t_now
return {}