Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion secure_redis/serializer.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
from __future__ import unicode_literals

from cryptography.fernet import Fernet
import logging

import django.conf
import django_redis.serializers.pickle

import settings


logger = logging.getLogger(__name__)


class SecureSerializer(django_redis.serializers.pickle.PickleSerializer):
def __init__(self, options):
super(SecureSerializer, self).__init__(options)
Expand All @@ -22,4 +27,10 @@ def loads(self, value):
val = self.crypter.decrypt(value)
return super(SecureSerializer, self).loads(val)

default_secure_serializer = SecureSerializer(settings.get_secure_cache_opts())

opts = settings.secure_cache_options_settings
if not opts and django.conf.settings.DEBUG:
default_secure_serializer = django_redis.serializers.pickle.PickleSerializer({})
logger.warn("Secure redis OPTIONS not defined, using pickle serializer for local")
else:
default_secure_serializer = SecureSerializer(opts)
13 changes: 11 additions & 2 deletions secure_redis/settings.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
from __future__ import unicode_literals

import logging

from django.conf import settings
from django.core.exceptions import ImproperlyConfigured


logger = logging.getLogger(__name__)


def get_secure_cache_opts():
if hasattr(settings, 'DJANGO_REDIS_SECURE_CACHE_NAME'):
cache_name = settings.DJANGO_REDIS_SECURE_CACHE_NAME
else:
cache_name = 'default'

secure_cache_options_settings = settings.CACHES[cache_name].get('OPTIONS')
secure_cache_options_settings = settings.CACHES[cache_name].get('OPTIONS', {})
if not secure_cache_options_settings:
if not settings.DEBUG:
raise ImproperlyConfigured(
'OPTIONS must be defined in settings in secure cache settings!')
if secure_cache_options_settings['SERIALIZER'] == 'secure_redis.serializer.SecureSerializer':
else:
logger.warn('OPTIONS must be defined in settings in secure cache settings!')

if secure_cache_options_settings.get('SERIALIZER') == 'secure_redis.serializer.SecureSerializer':
return secure_cache_options_settings


Expand Down