|
8 | 8 |
|
9 | 9 | import re |
10 | 10 | import json |
11 | | - |
12 | 11 | from django.http import RawPostDataException |
| 12 | +from http.cookies import SimpleCookie |
13 | 13 |
|
14 | 14 | from error_tracker.libs.mixins import ContextBuilderMixin, NotificationMixin, ViewPermissionMixin |
15 | 15 | from error_tracker.libs.utils import get_context_dict |
@@ -56,8 +56,8 @@ def _get_form_data(request): |
56 | 56 | def _get_headers(request): |
57 | 57 | if request is not None: |
58 | 58 | try: |
59 | | - headers = request.headers.dict() |
60 | | - except AttributeError: |
| 59 | + headers = parse_headers(request.headers) |
| 60 | + except AttributeError as e: |
61 | 61 | regex = re.compile('^HTTP_') |
62 | 62 | headers = dict((regex.sub('', header), value) for (header, value) |
63 | 63 | in request.META.items() if header.startswith('HTTP_')) |
@@ -88,7 +88,8 @@ def notify(self, request, exception, |
88 | 88 | recipient_list=None): |
89 | 89 | if recipient_list is not None and from_email is not None: |
90 | 90 | send_mail(email_subject, email_body, from_email, recipient_list, fail_silently=True) |
91 | | - |
| 91 | + exception.notification_sent = True |
| 92 | + exception.save() |
92 | 93 |
|
93 | 94 | class DefaultDjangoViewPermission(ViewPermissionMixin): |
94 | 95 |
|
@@ -182,3 +183,34 @@ def capture_exception(request=None, exception=None, additional_context=None): |
182 | 183 | from error_tracker.django.middleware import error_tracker |
183 | 184 | error_tracker.capture_exception(request=request, exception=exception, |
184 | 185 | additional_context=additional_context) |
| 186 | + |
| 187 | + |
| 188 | +def clean_value(x): |
| 189 | + x = x.value.replace('[["', "").replace('"]]', "").replace('"', "") |
| 190 | + return x |
| 191 | + |
| 192 | + |
| 193 | +def parse_headers(headers): |
| 194 | + """ |
| 195 | + Parse request headers to extract cookie. |
| 196 | + :param headers (request headers]) |
| 197 | + :return: [dict]: return parse header with cookie as dict |
| 198 | + """ |
| 199 | + new_headers = {} |
| 200 | + for key, value in headers.items(): |
| 201 | + try: |
| 202 | + # Pare each key, value from headers items and Test if could be "json loaded". If not, we set the correspondant value to empty except for cookie key. |
| 203 | + json.loads('{"%s":"%s"}' % (key, value)) |
| 204 | + except Exception as e: |
| 205 | + if key in ["Cookie", "cookie"]: |
| 206 | + try: |
| 207 | + cookie = SimpleCookie() |
| 208 | + cookie.load(value) |
| 209 | + value = {k: clean_value(v) for k, v in cookie.items()} |
| 210 | + except Exception as e: |
| 211 | + value = "" |
| 212 | + else: |
| 213 | + value = "" |
| 214 | + |
| 215 | + new_headers[key] = value |
| 216 | + return new_headers |
0 commit comments