Merge pull request 'Custom exception reporter' (#369) from custom_exception_reporter into master
Reviewed-on: SGD-Nord/konova#369
This commit is contained in:
		
						commit
						0a6918942a
					
				@ -19,6 +19,7 @@ from konova.sub_settings.sso_settings import *
 | 
			
		||||
from konova.sub_settings.table_settings import *
 | 
			
		||||
from konova.sub_settings.lanis_settings import *
 | 
			
		||||
from konova.sub_settings.wfs_parcel_settings import *
 | 
			
		||||
from konova.sub_settings.logging_settings import *
 | 
			
		||||
 | 
			
		||||
# Max upload size for POST forms
 | 
			
		||||
DATA_UPLOAD_MAX_MEMORY_SIZE = 5242880
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								konova/sub_settings/logging_settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								konova/sub_settings/logging_settings.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
"""
 | 
			
		||||
Author: Michel Peltriaux
 | 
			
		||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
 | 
			
		||||
Contact: ksp-servicestelle@sgdnord.rlp.de
 | 
			
		||||
Created on: 11.12.23
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
DEFAULT_EXCEPTION_REPORTER = "konova.utils.exception_reporter.KonovaExceptionReporter"
 | 
			
		||||
							
								
								
									
										62
									
								
								konova/utils/exception_reporter.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								konova/utils/exception_reporter.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
"""
 | 
			
		||||
Author: Michel Peltriaux
 | 
			
		||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
 | 
			
		||||
Contact: ksp-servicestelle@sgdnord.rlp.de
 | 
			
		||||
Created on: 11.12.23
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
from django.views.debug import ExceptionReporter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class KonovaExceptionReporter(ExceptionReporter):
 | 
			
		||||
    """ Custom exception reporter class
 | 
			
		||||
 | 
			
		||||
    Adapts the base functionality of ExceptionReporter but adds whitelist filtering to prevent sensitive data
 | 
			
		||||
    to be exploitable via mail delivery.
 | 
			
		||||
 | 
			
		||||
    References:
 | 
			
		||||
    https://docs.djangoproject.com/en/4.2/ref/logging/#handlers
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def _filter_traceback_data(self, tb_data: dict):
 | 
			
		||||
        """ Filters given traceback data according to whitelist
 | 
			
		||||
 | 
			
		||||
        Args:
 | 
			
		||||
            tb_data (dict): Aggregates traceback data
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
            clean_data (dict): Whitelist based filtered traceback data
 | 
			
		||||
        """
 | 
			
		||||
        whitelist = [
 | 
			
		||||
            "is_email",
 | 
			
		||||
            "unicdoe_hint",
 | 
			
		||||
            "frames",
 | 
			
		||||
            "request",
 | 
			
		||||
            "user_str",
 | 
			
		||||
            "sys_executable",
 | 
			
		||||
            "sys_version_info",
 | 
			
		||||
            "raising_view_name",
 | 
			
		||||
            "exception_type",
 | 
			
		||||
            "exception_value",
 | 
			
		||||
        ]
 | 
			
		||||
        clean_data = dict()
 | 
			
		||||
        for entry in whitelist:
 | 
			
		||||
            try:
 | 
			
		||||
                clean_data[entry] = tb_data[entry]
 | 
			
		||||
            except KeyError:
 | 
			
		||||
                continue
 | 
			
		||||
        return clean_data
 | 
			
		||||
 | 
			
		||||
    def get_traceback_data(self):
 | 
			
		||||
        """ Custom traceback data aggregation
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
            tb_data (dict): The traceback data
 | 
			
		||||
        """
 | 
			
		||||
        tb_data = super().get_traceback_data()
 | 
			
		||||
 | 
			
		||||
        if self.is_email:
 | 
			
		||||
            tb_data = self._filter_traceback_data(tb_data)
 | 
			
		||||
 | 
			
		||||
        return tb_data
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user