Commit 7aabb9d3 authored by William Grzybowski's avatar William Grzybowski
Browse files

fix(gui): common method to transform request object

Ticket:	#24012
parent 8ba99738
base 13.1-smb-testing 13.1-test_425 NAS-117105-1 NAS-119224 NAS-119538-removed NAS-119664 NAS-121347 NAS-122102-22.12.3 NAS-123000 NAS-123267 NAS-123503-22.12.4 NAS-123516-23.10 NAS-124167 NAS-124317-13.1 NAS-124388-23.10 NAS-124980-23.10.1 NAS-125227 NAS-125258 NAS-125285 NAS-125301 NAS-125446 NAS-125491-23.10.1 NAS-125499 NAS-125546-23.10.2 NAS-125719 NAS-125816 NAS-125816-backup NAS-125822 NAS-125830 NAS-125932-24.04 NAS-126857-23.10.2 NAS-126958 NAS-127024-24.04-RC.1 NAS-127087 NAS-127267-24.04-RC.1 NAS-127318 NAS-127422-24.04-RC.1 NAS-127543 NAS-127559-24.04-RC.1 NAS-127702 NAS-127840-24.04.0 NAS-127922-24.04.0 NAS-128040-24.04.0 ad_testing add-audit-results-cache add-fstype-check add-internal-methods add-more-filesystem-roles add-nfs4acl-test add-public-audit add-realm-validation add-shadow-fields add-written-counter adjust-dcerpcd-kill allow-eula-readonly audit-cache-pagination awalker_tesitng awalker_testing awalker_testing_ad awalker_testing_core awalker_testing_mock beadm-error bmeagher_testing bmeagher_testing3 check_create_ancestors cluster-test configurable-testing df_fail_test_012 enhance-sharing-manger-role expand-api-key-testing expand-failure-scenarios expand-valdiation-smb expand-verbosity-readonly-role fail_test_012 failover-test fix-aclmode-validation fix-and-improve-audit-query fix-broken-api-tests fix-ci-path fix-collectd-daemon fix-haad-test fix-in-rin-filter_list fix-share-acl-toggling-bluefin fix-smbconf-test fix-snmp freeipa-testing freenas/11.1-stable freenas/11.2-stable freenas/11.3-stable freenas/11.3-u3-stable fs-test gluster-test improve-alert improve-audit-query-validation improve-filterable improve-initial-install integration-test-k8s ldap-improvements ldap-test libpam-test make-ipaddresses-to-register-configurable master module-param-change-check more_nfs_failover_fixes mrehan/disable-kubernetes-test mrehan/fix-ups-tests mrehan/ixdiagnose-integration new-api new-jenkins new-jenkins2 passdb-test persistent-client-tests prevent-readonly-web-shell pristine-cluster privilege.roles randomize-privilege-test reduce-log-spam-quota refactor-smb rel-v0.0.1 release/12.0-U6.1 release/12.0-u4.1 release/13.0-u5.1-stable release/21.06-BETA.1 release/21.08-BETA.1 release/21.08-BETA.2 release/22.02 release/22.02-RC.1 release/22.02-RC.1-1 release/22.02-RC.1-2 release/22.02-RC.2 release/22.02-test release/22.02.1 release/22.02.2 release/22.02.3 release/22.02.4 release/22.12 release/22.12-BETA.1 release/22.12-BETA.2 release/22.12-RC.1 release/22.12.1 release/22.12.2 release/22.12.3 release/22.12.3.1 release/22.12.3.2 release/22.12.4 release/22.12.4.1 release/22.2-RC.1 release/23.10-BETA.1 release/23.10-RC.1 release/23.10.0 release/23.10.0.1 release/23.10.1 release/23.10.1.1 release/23.10.1.2 release/23.10.1.3 release/23.10.2 release/24.04-BETA.1 release/24.04-RC.1 release/24.04.0 remove-json-auth-audit-samba remove-pool-dataset-permission roles-test set-hashes-private set-iosqe_async-smb-read setup-ad smb-proto-tests-refactor smbaux-testing soln/rm_enc_swap sort-enclosures spaces-tests stable/angelfish stable/bluefin stable/cobia stable/dragonfish sysdataset-setup-pool-create test-2fa test-access test-acl test-ad test-ad-cobia test-audit test-audit-changes test-audit-redaction test-auth test-cluster test-dataset-acl test-disable-mock test-freeipa test-group test-ldap test-new-freeipa test-noauthz test-rbac test-refactor-smb test-refactor-smb2 test-roles test-runtest-fix test-shadow test-share-name test-sharesec test-simple-share test-smb-comments test-snmp test-statx test-syslog test190-test test_2fa test_priv test_syslog testing-refine-branchout-process testing-refine-branchout-process2 truenas/11.2-u5-stable truenas/11.2-u8-stable truenas/12.0-stable truenas/12.0-u2-stable truenas/12.0-u3-stable truenas/12.0-u5-stable truenas/13.0-stable truenas/13.0-u1.1-stable truenas/13.0-u5.2-stable truenas/13.3-stable truenas/21.08-stable use-acl-inheritance-new-dataset zectl-callerror-stderr 11.1-U5 11.1-U4 11.1-U3 11.1-U2 11.1-U1 11.1-RELEASE 11.1-RC2 11.1-RC1 11.1-BETA1 TS-24.04-RC.1 TS-24.04-BETA.1 TS-23.10.2 TS-23.10.1.3 TS-23.10.1.2 TS-23.10.1.1 TS-23.10.1 TS-23.10.0.1 TS-23.10.0 TS-23.10-RC.1 TS-23.10-BETA.1 TS-22.12.4.2 TS-22.12.4.1 TS-22.12.4 TS-22.12.3.3 TS-22.12.3.2 TS-22.12.3.1 TS-22.12.3 TS-22.12.2 TS-22.12.1 TS-22.12.0 TS-22.12-RC.1 TS-22.12-BETA.2 TS-22.12-BETA.1 TS-22.12-ALPHA.1 TS-22.02.4 TS-22.02.3 TS-22.02.2.1 TS-22.02.2 TS-22.02.1 TS-22.02.0.1 TS-22.02.0 TS-22.2.0 TS-22.02.RELEASE.1 TS-22.02-RC.2 TS-22.02-RC.1 TS-22.02-RC.1-2 TS-22.02-RC.1-1 TS-21.08-BETA.2 TS-21.08-BETA.1 TS-21.06-BETA.1 TS-21.04-ALPHA.1 TS-21.02-ALPHA.1 TS-20.12-ALPHA TS-20.10-ALPHA TS-12.12.3 TN-13.0-U6.1 TN-13.0-U6 TN-13.0-U5.3 TN-13.0-U5.2 TN-13.0-U5.1 TN-13.0-U5 TN-13.0-U4 TN-13.0-U3.1 TN-13.0-U3 TN-13.0-U2 TN-13.0-U1.1 TN-13.0-U1 TN-13.0-RELEASE TN-13.0-RC1 TN-13.0-BETA1 TN-12.0-U8.1 TN-12.0-U8 TN-12.0-U7 TN-12.0-U6.1 TN-12.0-U6 TN-12.0-U5.1 TN-12.0-U5 TN-12.0-U4.1 TN-12.0-U4 TN-12.0-U3.1 TN-12.0-U3 TN-12.0-U2.1 TN-12.0-U2 TN-12.0-U1.1 TN-12.0-U1 TN-12.0-RELEASE TN-12.0-RC1 TN-12.0-BETA2.1 TN-12.0-BETA2 TN-12.0-BETA1 TN-11.3-U5 TN-11.3-U4.1 TN-11.3-U3.2 TN-11.3-U2.2 TN-11.3-U2.1 TN-11.3-U2 TN-11.3-RC2 TN-11.3-RC1 TN-11.3-PREVIEW1 TN-11.3-BETA1 TN-11.3-ALPHA2 TN-11.3-ALPHA1 TN-11.3-ALPHA1-INTERNAL02 TN-11.3-ALPHA1-INTERNAL01 TN-11.2-U8.2 TN-11.2-U8.1 TN-11.2-U8 TN-11.2-U7 TN-11.2-U6.1 TN-11.2-U6 TN-11.2-U5.1 TN-11.2-U5 TN-11.1-U7.1 TN-11.1-U7 TN-11.1-U6.4 TN-11.1-U6.3 TN-11.1-U6.2 TN-11.1-U6.1 TN-11.1-U6 TN-11.1-U5.1 FN-11.3.U4 FN-11.3-U5 FN-11.3-U4.1 FN-11.3-U3.2 FN-11.3-U3.1 FN-11.3-U3 FN-11.3-U2.1 FN-11.3-U2 FN-11.3-U1 FN-11.3-RELEASE FN-11.3-RC2 FN-11.3-RC1 FN-11.3-BETA1 FN-11.3-BETA1-INTERNAL02 FN-11.3-BETA1-INTERNAL01 FN-11.2-U8.2 FN-11.2-U8.1 FN-11.2-U8 FN-11.2-U7 FN-11.2-U6 FN-11.2-U5 FN-11.2-U4.1 FN-11.2-U4 FN-11.2-U3 FN-11.2-U2.1 FN-11.2-U2 FN-11.2-RELEASE FN-11.2-RELEASE-U1 FN-11.2-RC2 FN-11.2-RC1 FN-11.2-BETA3 FN-11.2-BETA2 FN-11.2-BETA1 FN-11.1-U7 FN-11.1-U6.3 FN-11.1-U6 DN110M-CS-v2.0
No related merge requests found
Showing with 60 additions and 50 deletions
+60 -50
......@@ -18,6 +18,7 @@ from django.views.decorators.csrf import csrf_protect
from freenasUI.common.system import get_sw_name, get_sw_version
from freenasUI.freeadmin.apppool import appPool
from freenasUI.freeadmin.options import BaseFreeAdmin
from freenasUI.freeadmin.utils import request2crashreporting
RE_ALERT = re.compile(r'^(?P<status>\w+)\[(?P<msgid>.+?)\]: (?P<message>.+)')
log = logging.getLogger('freeadmin.site')
......@@ -233,7 +234,7 @@ class FreeAdminSite(object):
except Exception:
middleware_token = None
extra_log_files = (('/var/log/middlewared.log', 'middlewared_log'),)
self.trace.report(sys.exc_info(), request, sw_version, extra_log_files)
self.trace.report(sys.exc_info(), request2crashreporting(request), extra_log_files)
return render(request, 'freeadmin/index.html', {
'consolemsg': console,
......
......@@ -29,12 +29,16 @@ import re
import subprocess
from collections import OrderedDict
from django.core.exceptions import SuspiciousOperation
from django.db.models import CASCADE
from django.db.models.fields.related import OneToOneRel
from django.utils import translation
from django.utils.datastructures import MultiValueDict
from freenasUI.common.pipesubr import pipeopen
from freenasUI.system.models import Settings
from raven.contrib.django.utils import get_host
from raven.utils.wsgi import get_headers, get_environ
log = logging.getLogger('freeadmin.utils')
......@@ -88,6 +92,7 @@ def get_related_objects(obj):
def set_language():
from freenasUI.system.models import Settings
language = Settings.objects.order_by('-id')[0].stg_language
translation.activate(language)
......@@ -132,3 +137,53 @@ def log_db_locked():
log.debug(f'PID {pid}: {" ".join(proc.cmdline())}')
except Exception as e:
pass
def request2crashreporting(request):
"""
Transform django/wsgi request object to a dict the crash reporting
can understand.
"""
data = {}
# Pieces grabbed from raven.contrib.django.client
try:
uri = request.build_absolute_uri()
except SuspiciousOperation:
# attempt to build a URL for reporting as Django won't allow us to
# use get_host()
if request.is_secure():
scheme = 'https'
else:
scheme = 'http'
host = get_host(request)
uri = '%s://%s%s' % (scheme, host, request.path)
rdata = None
if request.method not in ('GET', 'HEAD'):
try:
rdata = request.body
except Exception:
try:
rdata = request.raw_post_data
except Exception:
# assume we had a partial read.
try:
rdata = request.POST or '<unavailable>'
except Exception:
rdata = '<unavailable>'
else:
if isinstance(rdata, MultiValueDict):
rdata = dict(
(k, v[0] if len(v) == 1 else v)
for k, v in iter(rdata.lists()))
data['request'] = {
'method': request.method,
'url': uri,
'query_string': request.META.get('QUERY_STRING'),
'data': rdata,
'cookies': dict(request.COOKIES),
'headers': dict(get_headers(request.META)),
'env': dict(get_environ(request.META)),
}
......@@ -31,19 +31,15 @@ import sys
from middlewared.client import ClientException
import middlewared.logger as logger
from django.core.exceptions import SuspiciousOperation
from django.http import HttpResponse, HttpResponseRedirect
from django.views import debug
from django.template import Context, RequestContext
from django.template.loader import get_template, render_to_string
from django.utils.datastructures import MultiValueDict
from freenasUI.common.system import get_sw_version
from freenasUI.freeadmin.utils import request2crashreporting
from freenasUI.system.models import Advanced
from raven.contrib.django.utils import get_host
from raven.utils.wsgi import get_headers, get_environ
log = logging.getLogger('freeadmin.views')
......@@ -211,49 +207,7 @@ def server_error(request, *args, **kwargs):
if issubclass(exc_info[0], (ClientException, socket.timeout)):
extra_log_files.insert(0, ('/var/log/middlewared.log', 'middlewared_log'))
data = {}
# Pieces grabbed from raven.contrib.django.client
try:
uri = request.build_absolute_uri()
except SuspiciousOperation:
# attempt to build a URL for reporting as Django won't allow us to
# use get_host()
if request.is_secure():
scheme = 'https'
else:
scheme = 'http'
host = get_host(request)
uri = '%s://%s%s' % (scheme, host, request.path)
if request.method not in ('GET', 'HEAD'):
try:
rdata = request.body
except Exception:
try:
rdata = request.raw_post_data
except Exception:
# assume we had a partial read.
try:
rdata = request.POST or '<unavailable>'
except Exception:
rdata = '<unavailable>'
else:
if isinstance(rdata, MultiValueDict):
rdata = dict(
(k, v[0] if len(v) == 1 else v)
for k, v in iter(rdata.lists()))
data['request'] = {
'method': request.method,
'url': uri,
'query_string': request.META.get('QUERY_STRING'),
'data': rdata,
'cookies': dict(request.COOKIES),
'headers': dict(get_headers(request.META)),
'env': dict(get_environ(request.META)),
}
crash_reporting.report(exc_info, data, extra_log_files)
crash_reporting.report(exc_info, request2crashreporting(request), extra_log_files)
try:
if tb:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment