from django.http import HttpResponse, QueryDict from django.conf import settings from cursesite.functions.functions import render_template ALLOWED_BROWSERS = ( ('Firefox', 1.5), ('Opera', 9), ('MSIE', 7), ('Safari', 85), ) def check_browser(agent): for b in ALLOWED_BROWSERS: loc = agent.find(b[0]) if loc != -1: start = loc+len(b[0])+1 end = agent.find(' ', start) if end != -1: version = agent[start:end] else: version = agent[start:] if version == '': version = '2.0' elif version[-1] == ';': version = version[0:-1] version = version.split('.') version = "%s.%s" % (version[0].split(')')[0], ''.join(version[1:]).split(',')[0].split('+')[0].split('u')[0].split('a')[0]) if float(version) < float(b[1]): valid = False else: valid = True ec = {'browser_version': version, 'browser': b[0], 'valid': valid} return ec return {'browser': agent, 'browser_version': '', 'valid': True} class ValidateBrowser(object): def process_response(self, request, response): if '_verify_browser' in request.COOKIES or request.META['HTTP_USER_AGENT'] == 'Python-urllib/1.16' or request.GET.get('skipcheck', False) or request.META['HTTP_USER_AGENT'].find('Googlebot') != -1: return response agent = request.META['HTTP_USER_AGENT'] ec = check_browser(agent) if '_verified' in request.GET: ec.update({'no_cookies': True}) # Redirect URL if 'PATH_INFO' in request.META: url = request.META['PATH_INFO'] elif 'REQUEST_URI' in request.META: url = request.META['REQUEST_URI'] else: url = '/' q = QueryDict(request.META['QUERY_STRING']) if '_verified' not in q: q = q.copy() # to make it mutable q.update({'_verified': '1'}) url += "?%s" % q.urlencode() ec.update({'url': url}) response = render_template(request, 'browsercheck.html', ec) response.set_cookie('_verify_browser', '1', max_age=60*60*24*30, domain=settings.SESSION_COOKIE_DOMAIN) return response