Commit 52ef6a47 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #17101 -- Integrated django-secure and added check --deploy option

Thanks Carl Meyer for django-secure and for reviewing.

Thanks also to Zach Borboa, Erik Romijn, Collin Anderson, and
Jorge Carleitao for reviews.
parent 8f334e55
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -631,3 +631,14 @@ MIGRATION_MODULES = {}
# serious issues like errors and criticals does not result in hiding the
# message, but Django will not stop you from e.g. running server.
SILENCED_SYSTEM_CHECKS = []

#######################
# SECURITY MIDDLEWARE #
#######################
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_SECONDS = 0
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ MIDDLEWARE_CLASSES = (
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = '{{ project_name }}.urls'
+3 −0
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@ from .registry import register, run_checks, tag_exists, Tags
import django.core.checks.compatibility.django_1_6_0  # NOQA
import django.core.checks.compatibility.django_1_7_0  # NOQA
import django.core.checks.model_checks  # NOQA
import django.core.checks.security.base  # NOQA
import django.core.checks.security.csrf  # NOQA
import django.core.checks.security.sessions  # NOQA

__all__ = [
    'CheckMessage',
+22 −10
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ class Tags(object):
    admin = 'admin'
    compatibility = 'compatibility'
    models = 'models'
    security = 'security'
    signals = 'signals'


@@ -20,8 +21,9 @@ class CheckRegistry(object):

    def __init__(self):
        self.registered_checks = []
        self.deployment_checks = []

    def register(self, *tags):
    def register(self, *tags, **kwargs):
        """
        Decorator. Register given function `f` labeled with given `tags`. The
        function should receive **kwargs and return list of Errors and
@@ -36,24 +38,28 @@ class CheckRegistry(object):
                return errors

        """
        kwargs.setdefault('deploy', False)

        def inner(check):
            check.tags = tags
            if check not in self.registered_checks:
            if kwargs['deploy']:
                if check not in self.deployment_checks:
                    self.deployment_checks.append(check)
            elif check not in self.registered_checks:
                self.registered_checks.append(check)
            return check

        return inner

    def run_checks(self, app_configs=None, tags=None):
    def run_checks(self, app_configs=None, tags=None, include_deployment_checks=False):
        """ Run all registered checks and return list of Errors and Warnings.
        """
        errors = []
        checks = self.get_checks(include_deployment_checks)

        if tags is not None:
            checks = [check for check in self.registered_checks
            checks = [check for check in checks
                      if hasattr(check, 'tags') and set(check.tags) & set(tags)]
        else:
            checks = self.registered_checks

        for check in checks:
            new_errors = check(app_configs=app_configs)
@@ -63,11 +69,17 @@ class CheckRegistry(object):
            errors.extend(new_errors)
        return errors

    def tag_exists(self, tag):
        return tag in self.tags_available()
    def tag_exists(self, tag, include_deployment_checks=False):
        return tag in self.tags_available(include_deployment_checks)

    def tags_available(self, deployment_checks=False):
        return set(chain(*[check.tags for check in self.get_checks(deployment_checks) if hasattr(check, 'tags')]))

    def tags_available(self):
        return set(chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')]))
    def get_checks(self, include_deployment_checks=False):
        checks = list(self.registered_checks)
        if include_deployment_checks:
            checks.extend(self.deployment_checks)
        return checks


registry = CheckRegistry()
+0 −0

Empty file added.

Loading