11# STANDARD LIB
22import json
33
4+ # Third party
5+ from django .apps import apps
46from django .core .exceptions import ValidationError , ImproperlyConfigured
57from django .db import models
68from django .utils .html import escape
79from django .utils .safestring import mark_safe
8- from django .apps import apps
910
11+ # CSP Reports
1012from cspreports .conf import app_settings
1113
1214DISPOSITIONS = (
13- (' enforce' , ' enforce' ),
14- (' report' , ' report' ),
15+ (" enforce" , " enforce" ),
16+ (" report" , " report" ),
1517)
1618
1719# Map of required CSP report fields to model fields
1820REQUIRED_FIELDS = (
19- (' document-uri' , ' document_uri' ),
20- (' referrer' , ' referrer' ),
21- (' blocked-uri' , ' blocked_uri' ),
22- (' violated-directive' , ' violated_directive' ),
23- (' original-policy' , ' original_policy' ),
21+ (" document-uri" , " document_uri" ),
22+ (" referrer" , " referrer" ),
23+ (" blocked-uri" , " blocked_uri" ),
24+ (" violated-directive" , " violated_directive" ),
25+ (" original-policy" , " original_policy" ),
2426)
2527# Map of optional (CSP >= 2.0) CSP report fields to model fields
2628OPTIONAL_FIELDS = (
27- (' disposition' , ' disposition' ),
28- (' effective-directive' , ' effective_directive' ),
29- (' source-file' , ' source_file' ),
30- (' status-code' , ' status_code' ),
31- (' line-number' , ' line_number' ),
32- (' column-number' , ' column_number' ),
29+ (" disposition" , " disposition" ),
30+ (" effective-directive" , " effective_directive" ),
31+ (" source-file" , " source_file" ),
32+ (" status-code" , " status_code" ),
33+ (" line-number" , " line_number" ),
34+ (" column-number" , " column_number" ),
3335)
3436
3537
@@ -63,7 +65,7 @@ class CSPReportBase(models.Model):
6365 """
6466
6567 class Meta :
66- ordering = (' -created' ,)
68+ ordering = (" -created" ,)
6769 abstract = True
6870
6971 created = models .DateTimeField (auto_now_add = True )
@@ -88,14 +90,14 @@ class Meta:
8890 def nice_report (self ):
8991 """Return a nicely formatted original report."""
9092 if not self .json :
91- return ' [no CSP report data]'
93+ return " [no CSP report data]"
9294 try :
9395 data = json .loads (self .json )
9496 except ValueError :
9597 return "Invalid CSP report: '{}'" .format (self .json )
96- if ' csp-report' not in data :
97- return ' Invalid CSP report: ' + json .dumps (data , indent = 4 , sort_keys = True , separators = (',' , ': ' ))
98- return json .dumps (data [' csp-report' ], indent = 4 , sort_keys = True , separators = (',' , ': ' ))
98+ if " csp-report" not in data :
99+ return " Invalid CSP report: " + json .dumps (data , indent = 4 , sort_keys = True , separators = ("," , ": " ))
100+ return json .dumps (data [" csp-report" ], indent = 4 , sort_keys = True , separators = ("," , ": " ))
99101
100102 def __str__ (self ):
101103 return self .nice_report
@@ -116,7 +118,7 @@ def from_message(cls, message):
116118 # Message is not a valid JSON. Return as invalid.
117119 return self
118120 try :
119- report_data = decoded_data [' csp-report' ]
121+ report_data = decoded_data [" csp-report" ]
120122 except KeyError :
121123 # Message is not a valid CSP report. Return as invalid.
122124 return self
@@ -159,15 +161,15 @@ def from_message(cls, message):
159161
160162 @property
161163 def data (self ):
162- """ Returns self.json loaded as a python object. """
164+ """Returns self.json loaded as a python object."""
163165 try :
164166 data = self ._data
165167 except AttributeError :
166168 data = self ._data = json .loads (self .json )
167169 return data
168170
169171 def json_as_html (self ):
170- """ Print out self.json in a nice way. """
172+ """Print out self.json in a nice way."""
171173
172174 # To avoid circular import
173175 from cspreports import utils
@@ -185,11 +187,6 @@ def get_report_model():
185187 try :
186188 return apps .get_model (model_string , require_ready = False )
187189 except ValueError :
188- raise ImproperlyConfigured (
189- "CSP_REPORTS_MODEL must be of the form 'app_label.model_name'"
190- )
190+ raise ImproperlyConfigured ("CSP_REPORTS_MODEL must be of the form 'app_label.model_name'" )
191191 except LookupError :
192- raise ImproperlyConfigured (
193- "CSP_REPORTS_MODEL refers to model '%s' that has not been installed"
194- % model_string
195- )
192+ raise ImproperlyConfigured ("CSP_REPORTS_MODEL refers to model '%s' that has not been installed" % model_string )
0 commit comments