自定義敏感配置項目

 

django.utils.log.AdminEmailHandlerdjango

django.views.debug.ExceptionReporter.get_traceback_textapp

HIDDEN_SETTINGS = re.compile('API|TOKEN|KEY|SECRET|PASS|SIGNATURE', flags=re.IGNORECASE)
import functoolsimport reimport sysimport typesfrom pathlib import Pathfrom django.conf import settingsfrom django.http import HttpResponse, HttpResponseNotFoundfrom django.template import Context, Engine, TemplateDoesNotExistfrom django.template.defaultfilters import pprintfrom django.urls import Resolver404, resolvefrom django.utils import timezonefrom django.utils.datastructures import MultiValueDictfrom django.utils.encoding import force_textfrom django.utils.module_loading import import_stringfrom django.utils.version import get_docs_version# Minimal Django templates engine to render the error templates# regardless of the project's TEMPLATES setting. Templates are# read directly from the filesystem so that the error handler# works even if the template loader is broken.DEBUG_ENGINE = Engine(    debug=True,    libraries={'i18n': 'django.templatetags.i18n'},)HIDDEN_SETTINGS = re.compile('API|TOKEN|KEY|SECRET|PASS|SIGNATURE', flags=re.IGNORECASE)CLEANSED_SUBSTITUTE = '********************'CURRENT_DIR = Path(__file__).parentclass CallableSettingWrapper:    """    Object to wrap callable appearing in settings.    * Not to call in the debug page (#21345).    * Not to break the debug page if the callable forbidding to set attributes      (#23070).    """    def __init__(self, callable_setting):        self._wrapped = callable_setting    def __repr__(self):        return repr(self._wrapped)def cleanse_setting(key, value):    """    Cleanse an individual setting key/value of sensitive content. If the value    is a dictionary, recursively cleanse the keys in that dictionary.    """    try:        if HIDDEN_SETTINGS.search(key):            cleansed = CLEANSED_SUBSTITUTE        else:            if isinstance(value, dict):                cleansed = {k: cleanse_setting(k, v) for k, v in value.items()}            else:                cleansed = value    except TypeError:        # If the key isn't regex-able, just return as-is.        cleansed = value    if callable(cleansed):        # For fixing #21345 and #23070        cleansed = CallableSettingWrapper(cleansed)    return cleanseddef get_safe_settings():    """    Return a dictionary of the settings module with values of sensitive    settings replaced with stars (*********).    """    settings_dict = {}    for k in dir(settings):        if k.isupper():            settings_dict[k] = cleanse_setting(k, getattr(settings, k))    return settings_dict
相關文章
相關標籤/搜索