From 2a3b85a32f85c2ca13b13373411a3e537a623367 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 21 Mar 2024 13:11:15 -0400 Subject: [PATCH] Move clean_html() & foreground_color() to utilities.html --- netbox/dcim/svg/cables.py | 2 +- netbox/dcim/svg/racks.py | 3 +- netbox/extras/models/models.py | 3 +- netbox/utilities/html.py | 34 +++++++++++++++++++ .../templatetags/builtins/filters.py | 2 +- netbox/utilities/utils.py | 31 ----------------- 6 files changed, 40 insertions(+), 35 deletions(-) diff --git a/netbox/dcim/svg/cables.py b/netbox/dcim/svg/cables.py index d7365161e..aaa9e24ed 100644 --- a/netbox/dcim/svg/cables.py +++ b/netbox/dcim/svg/cables.py @@ -6,7 +6,7 @@ from svgwrite.text import Text from django.conf import settings from dcim.constants import CABLE_TRACE_SVG_DEFAULT_WIDTH -from utilities.utils import foreground_color +from utilities.html import foreground_color __all__ = ( diff --git a/netbox/dcim/svg/racks.py b/netbox/dcim/svg/racks.py index 07ea55a33..4779954a4 100644 --- a/netbox/dcim/svg/racks.py +++ b/netbox/dcim/svg/racks.py @@ -14,7 +14,8 @@ from django.urls import reverse from django.utils.http import urlencode from netbox.config import get_config -from utilities.utils import foreground_color, array_to_ranges +from utilities.html import foreground_color +from utilities.utils import array_to_ranges from dcim.constants import RACK_ELEVATION_BORDER_WIDTH diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index b55aaa11d..435f88392 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -22,8 +22,9 @@ from netbox.models import ChangeLoggedModel from netbox.models.features import ( CloningMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, SyncedDataMixin, TagsMixin, ) +from utilities.html import clean_html from utilities.querysets import RestrictedQuerySet -from utilities.utils import clean_html, dict_to_querydict, render_jinja2 +from utilities.utils import dict_to_querydict, render_jinja2 __all__ = ( 'Bookmark', diff --git a/netbox/utilities/html.py b/netbox/utilities/html.py index a95b5b1a7..f99dabe5a 100644 --- a/netbox/utilities/html.py +++ b/netbox/utilities/html.py @@ -1,12 +1,46 @@ import re +import nh3 from django.utils.html import escape +from .constants import HTML_ALLOWED_ATTRIBUTES, HTML_ALLOWED_TAGS + __all__ = ( + 'clean_html', + 'foreground_color', 'highlight', ) +def clean_html(html, schemes): + """ + Sanitizes HTML based on a whitelist of allowed tags and attributes. + Also takes a list of allowed URI schemes. + """ + return nh3.clean( + html, + tags=HTML_ALLOWED_TAGS, + attributes=HTML_ALLOWED_ATTRIBUTES, + url_schemes=set(schemes) + ) + + +def foreground_color(bg_color, dark='000000', light='ffffff'): + """ + Return the ideal foreground color (dark or light) for a given background color in hexadecimal RGB format. + + :param dark: RBG color code for dark text + :param light: RBG color code for light text + """ + THRESHOLD = 150 + bg_color = bg_color.strip('#') + r, g, b = [int(bg_color[c:c + 2], 16) for c in (0, 2, 4)] + if r * 0.299 + g * 0.587 + b * 0.114 > THRESHOLD: + return dark + else: + return light + + def highlight(value, highlight, trim_pre=None, trim_post=None, trim_placeholder='...'): """ Highlight a string within a string and optionally trim the pre/post portions of the original string. diff --git a/netbox/utilities/templatetags/builtins/filters.py b/netbox/utilities/templatetags/builtins/filters.py index 852accc78..3d7cfec2f 100644 --- a/netbox/utilities/templatetags/builtins/filters.py +++ b/netbox/utilities/templatetags/builtins/filters.py @@ -11,9 +11,9 @@ from markdown import markdown from markdown.extensions.tables import TableExtension from netbox.config import get_config +from utilities.html import clean_html, foreground_color from utilities.markdown import StrikethroughExtension from utilities.string import title -from utilities.utils import clean_html, foreground_color __all__ = ( 'bettertitle', diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index 7abb30cbd..946fe33e4 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -3,7 +3,6 @@ import decimal from itertools import count, groupby from urllib.parse import urlencode -import nh3 from django.db.models import Count, ManyToOneRel, OuterRef, Subquery from django.db.models.functions import Coalesce from django.http import QueryDict @@ -13,7 +12,6 @@ from django.utils.timezone import localtime from jinja2.sandbox import SandboxedEnvironment from netbox.config import get_config -from .constants import HTML_ALLOWED_ATTRIBUTES, HTML_ALLOWED_TAGS from .string import title @@ -47,22 +45,6 @@ def csv_format(data): return ','.join(csv) -def foreground_color(bg_color, dark='000000', light='ffffff'): - """ - Return the ideal foreground color (dark or light) for a given background color in hexadecimal RGB format. - - :param dark: RBG color code for dark text - :param light: RBG color code for light text - """ - THRESHOLD = 150 - bg_color = bg_color.strip('#') - r, g, b = [int(bg_color[c:c + 2], 16) for c in (0, 2, 4)] - if r * 0.299 + g * 0.587 + b * 0.114 > THRESHOLD: - return dark - else: - return light - - def dynamic_import(name): """ Dynamically import a class from an absolute path string @@ -301,19 +283,6 @@ def content_type_identifier(ct): return f'{ct.app_label}.{ct.model}' -def clean_html(html, schemes): - """ - Sanitizes HTML based on a whitelist of allowed tags and attributes. - Also takes a list of allowed URI schemes. - """ - return nh3.clean( - html, - tags=HTML_ALLOWED_TAGS, - attributes=HTML_ALLOWED_ATTRIBUTES, - url_schemes=set(schemes) - ) - - def local_now(): """ Return the current date & time in the system timezone.