44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""Custom middleware."""
|
|
from django.utils import translation, timezone
|
|
from account.models import User
|
|
|
|
from configuration.models import TranslationSettings
|
|
from translation.models import Language
|
|
|
|
|
|
def get_locale(cookie_dict):
|
|
return cookie_dict.get('locale')
|
|
|
|
|
|
def get_country_code(cookie_dict):
|
|
return cookie_dict.get('country_code')
|
|
|
|
def user_last_visit(get_response):
|
|
"""Updates user last visit w/ current"""
|
|
def middleware(request):
|
|
response = get_response(request)
|
|
if request.user.is_authenticated:
|
|
User.objects.filter(pk=request.user.pk).update(last_login=timezone.now())
|
|
return response
|
|
return middleware
|
|
|
|
def parse_cookies(get_response):
|
|
"""Parse cookies."""
|
|
def middleware(request):
|
|
cookie_dict = request.COOKIES
|
|
# processing locale cookie
|
|
locale = get_locale(cookie_dict)
|
|
# todo: don't use DB!!! Use cache
|
|
if not Language.objects.filter(locale=locale).exists():
|
|
locale = TranslationSettings.get_solo().default_language
|
|
translation.activate(locale)
|
|
request.locale = locale
|
|
|
|
# processing country country cookie
|
|
country_code = get_country_code(cookie_dict)
|
|
request.country_code = country_code
|
|
|
|
response = get_response(request)
|
|
return response
|
|
return middleware
|