|
|
|
from datetime import datetime, date
|
|
|
|
|
|
|
|
from django.conf import settings
|
|
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LoggedInHintCookieMiddleware(object):
|
|
|
|
"""Middleware to securely help with 'logged-in' detection for dual HTTP/HTTPS sites.
|
|
|
|
|
|
|
|
On insecure requests: Checks for a (non-secure) cookie settings.LOGGED_IN_HINT_COOKIE_NAME
|
|
|
|
and if present, redirects to HTTPS (same adress).
|
|
|
|
Note this usually breaks non-GET (POST) requests.
|
|
|
|
|
|
|
|
On secure requests: Updates cookie settings.LOGGED_IN_HINT_COOKIE_NAME to reflect
|
|
|
|
whether an user is logged in in the current session (cookie set to 'True' or cleared).
|
|
|
|
The cookie is set to expire at the same time as the sessionid cookie.
|
|
|
|
|
|
|
|
By default, LOGGED_IN_HINT_COOKIE_NAME = 'logged_in_hint'.
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
if hasattr(settings, 'LOGGED_IN_HINT_COOKIE_NAME'):
|
|
|
|
self.cookie_name = settings.LOGGED_IN_HINT_COOKIE_NAME
|
|
|
|
else: self.cookie_name = 'logged_in_hint'
|
|
|
|
self.cookie_value = 'True'
|
|
|
|
|
|
|
|
def cookie_correct(self, request):
|
|
|
|
return self.cookie_name in request.COOKIES and request.COOKIES[self.cookie_name] == self.cookie_value
|
|
|
|
|
|
|
|
def process_request(self, request):
|
|
|
|
if not request.is_secure():
|
|
|
|
if self.cookie_correct(request):
|
|
|
|
# redirect insecure (assuming http) requests with hint cookie to https
|
|
|
|
url = request.build_absolute_uri()
|
|
|
|
assert url[:5] == 'http:'
|
|
|
|
return HttpResponseRedirect('https:' + url[5:])
|
|
|
|
return None
|
|
|
|
|
|
|
|
def process_response(self, request, response):
|
|
|
|
if request.is_secure():
|
|
|
|
# assuming full session info (as the conn. is secure)
|
|
|
|
try:
|
|
|
|
user = request.user
|
|
|
|
except AttributeError: # no user - ajax or other special request
|
|
|
|
return response
|
|
|
|
if user.is_authenticated():
|
|
|
|
if not self.cookie_correct(request):
|
|
|
|
expiry = None if request.session.get_expire_at_browser_close() else request.session.get_expiry_date()
|
|
|
|
response.set_cookie(self.cookie_name, value=self.cookie_value, expires=expiry, secure=False)
|
|
|
|
else:
|
|
|
|
if self.cookie_name in request.COOKIES:
|
|
|
|
response.delete_cookie(self.cookie_name)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
class vzhled:
|
|
|
|
|
|
|
|
def process_request(self, request):
|
|
|
|
return None
|
|
|
|
|
|
|
|
def process_view(self, request, view_func, view_args, view_kwargs):
|
|
|
|
#print "====== process_request ======"
|
|
|
|
#print view_func
|
|
|
|
#print view_args
|
|
|
|
#print view_kwargs
|
|
|
|
#print "============================="
|
|
|
|
return None
|
|
|
|
|
|
|
|
def process_template_response(self, request, response):
|
|
|
|
hodin = datetime.now().hour
|
|
|
|
if (hodin <= 6) or (hodin >= 14): # TODO 20
|
|
|
|
response.context_data['noc'] = True
|
|
|
|
else:
|
|
|
|
response.context_data['noc'] = False
|
|
|
|
return response
|
|
|
|
|
|
|
|
def process_response(self, request, response):
|
|
|
|
#hodin = datetime.now().hour
|
|
|
|
#if (hodin <= 6) or (hodin >= 14): # TODO 20
|
|
|
|
#response.context_data['noc'] = True
|
|
|
|
#else:
|
|
|
|
#response.context_data['noc'] = False
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
##def process_exception(request, exception):
|
|
|
|
#pass
|